[![NPM](https://nodei.co/npm/grunt-cloudfile-to-vocab.png?compact=true)](https://www.npmjs.com/package/grunt-cloudfile-to-vocab) [![Build Status](https://travis-ci.org/BBCVisualJournalism/grunt-cloudfile-to-vocab.svg)](https://travis-ci.org/BBCVisualJournalism/grunt-cloudfile-to-vocab)

cloudfile_to_vocab
==================

Processes any spreadsheet in the cloud into a set of vocab json files.

# Setup

* Add grunt-cloudfile-to-vocab as a dependency in your project's package.json
* In your Gruntfile.js, inside your grunt.initConfig(), add the following:

```json
    cloudfile_to_vocab: {
        default: {
            options: {
                output_directory:      'source/vocabs',
                google_spreadsheet_id: '--google spreadsheet id--',
                worksheets:            ['Sheet1'],
                whitelisted_services:  ['english', 'mundo'],
                serviceEmail:          '--google service email--',
                certLocation:          '--full path to your service email certificate--'
            }
        }
    }
```

Register a task, e.g.

```javascript
grunt.registerTask('make_vocabs',  ['cloudfile_to_vocab']);
```
# Creating a service account email and certificate

1. Go to https://console.developers.google.com
2. Create a project
3. In the project, go to 'APIs & Auth' -> 'Credentials' and 'Create New Client ID'
4. Select 'Service Account' as the type and p12 as your container
4. Convert the downloaded p12 to PEM with 'openssl pkcs12 -in [the pem file] -out google-oauth.pem -nocerts -nodes
5. Copy your service email address into the config and change certLocation to the location of your generated certificate (.pem)

# Usage

Create a Google spreadsheet and start populating it with content (see examples below).

Run your task to automatically generate vocab JSON files from a Google spreadsheet.

## Running tests

To run the tests add a google account user name and password into the grunt config file.

## Example input/output

### Input

NB: The 'ignore' in the left column ensures that that row is not included in the rendered output.

```
               | english               | persian
ignore         | Instructions go here. | ...
project_header | Hello, World!         | سلام جهان!
project_intro  | This is my intro...   | این مقدمه من است ...

```

### Output

english.json

```json
{
    "project_header": "Hello, World!",
    "project_intro": "This is my intro..."
}
```

persian.json

```json
{
    "project_header": "سلام جهان!",
    "project_intro": "این مقدمه من است ..."
}
```

You can now populate your project with these variables, thereby being able to deliver your project in a language-agnostic way, paving the way for delivering to multiple nationalities.

# Known issues

Make sure you are not on a proxy network or it cannot connect to Google.
