Mandrill Template Manager (CLI)
Manage Mandrill Templates by CLI.
Install
Add Gemfile and bundle.
gem 'mandrill-template-manager'
## Recommend for using multibyte language.
gem 'formatador', github: 'geemus/formatador'
gem 'unicode'
$ bundle install
$ bundle exec mandrilltemplate
Commands:
mandrilltemplate delete SLUG # delete template from remote.
mandrilltemplate export SLUG # export template from remote to local files.
mandrilltemplate export_all # export all templates from remote to local files.
mandrilltemplate generate SLUG # generate new template files.
mandrilltemplate help [COMMAND] # Describe available commands or one specific command
mandrilltemplate list # show template list both of remote and local.
mandrilltemplate publish SLUG # publish template from draft.
mandrilltemplate render SLUG [PARAMS_FILE] # render mailbody from local template data. File should be Array. see https://mandrillapp.com/api/docs/templates.JSON.html#method=render.
mandrilltemplate upload ALL # upload all template to remote as draft.
mandrilltemplate upload SLUG # upload template to remote as draft.
Workflow
- generate new or export exist template as local files.
- modify and manage under version control system.
- upload template.
- publish it.
Setup
Usage of the mandrilltemplate
command requires a Mandrill API key. You can set it in a .env
file:
MANDRILL_APIKEY='your api key'
or set it as an environment variable:
export MANDRILL_APIKEY='your api key'
List templates
$ mandrilltemplate list
Remote Templates
----------------------
+----------+----------+----------+--------------+---------------------+---------------------+--------+---------------+-----------------+------------------+--------------------+-----------+-------------------+
| has_diff | name | slug | publish_name | draft_updated_at | published_at | labels | subject | publish_subject | from_email | publish_from_email | from_name | publish_from_name |
+----------+----------+----------+--------------+---------------------+---------------------+--------+---------------+-----------------+------------------+--------------------+-----------+-------------------+
... remote templates ...
Local Templates
----------------------
+----------+----------+------------------+-----------+--------------------+------------------------+
| name | slug | from_email | from_name | subject | labels |
+----------+----------+------------------+-----------+--------------------+------------------------+
... local templates ...
you can also specify a label to filter this list:
$ mandrilltemplate list LABEL
Downloading templates from Mandrill
$ mandrilltemplate export SLUG
or
$ mandrilltemplate export_all
Uploading and publishing templates
$ mandrilltemplate upload SLUG
$ mandrilltemplate publish SLUG
or, both at once:
$ mandrilltemplate upload SLUG --publish
Deleting templates
$ mandrilltemplate delete SLUG
will delete from server only.
$ mandrilltemplate upload SLUG --delete_local
will also delete local files.
Template local files
Templates are stored by defualt into templates/
directory.
You can control this by setting the MANDRILL_TEMPLATES_DIR environment variable.
export MANDRILL_TEMPLATES_DIR=mandrill_templates
templates/
├── ${template_slug1}
│ ├── code.html # code contents
│ ├── metadata.yml # metadata of template
│ └── text.txt # text contents
├── ${template_slug2}
│ ├── code.html
│ ├── metadata.yml
│ └── text.txt
└── ${template_slug3}
├── code.html
├── metadata.yml
└── text.txt
example of metadata.yml
---
slug: mission
labels: []
subject: "Today's your mission"
from_email: test@example.com
from_name: Boss
Optional: render supports Handlebars preview.
If you would like to use handlebars template. You should add handlebars rubygem to Gemfile.
gem 'mandrill-template-manager'
gem 'handlebars'
# if fails on OSX to install Handlebars, try below.
# bundle config build.libv8 --with-system-v8
And, pass --handlebars
option to render subcommand.
It will be compiled as Handlebars Template.
Usage:
mandrilltemplate render SLUG [PARAMS_FILE]
Options:
[--handlebars], [--no-handlebars]
Note: This feature provides without api call. I can't guarantee that this will work same as send api.
Json example. This is same format when using send api.
[
{
"name": "UserName",
"content": "ExampleUser"
},
{
"name": "ImpossibleMissions",
"content": [
"Mission A",
"Mission B",
"Mission C"
]
}
]
License
The gem is available as open source under the terms of the MIT License.