Tolliver
A long serving Junior Postman Tolliver Groat. With this gem you can create notifications based on templates defined by the system administrator and send it in a batch with different delivery methods:
- E-mail with SMTP aor Mailgun provider
 - SMS with Plivo provider
 - Slack
 - Whatever custom delivery method
 
1. Installation
Add gem to your Gemfile:
gem 'tolliver'Add database migrations to you application (you can modify DB structure accordingly before migrating):
$ rake tolliver:install:migrations
$ rake db:migrate
1.1. Plivo support
Add gem to your Gemfile:
gem 'plivo'1.2. Mailgun support
Add gem to your Gemfile:
gem 'mailgun-ruby'1.3. Slack support
Add gem to your Gemfile:
gem 'slack-ruby-client'2. Configuration
You can configure module through config/initializers/tolliver.rb file:
Tolliver.setup do |config|
  config.email_sender = 'no-reply@domain.com'
  config.delivery_methods = [
      :email
  ]
endAvailable options:
- notification_model
 - notification_attachment_model
 - notification_delivery_model
 - notification_receiver_model
 - notification_template_model
 - email_sender
 - email_sender_name
 - email_provider
 - email_provider_params
 - sms_sender
 - sms_provider
 - sms_provider_params
 - slack_params
 - delivery_methods
 
2.1. Plivo support
Set Plivo as SMS provider and add Plivo auth ID and token into Tolliver configuration file:
Tolliver.setup do |config|
  ...
  config.sms_provider = :plivo
  config.sms_provider_params = {
    auth_id: 'secret',
    auth_token: 'secret'
  }
end2.2. Mailgun support
Set Mailgun as e-mail provider and add Mailgun API key and domain into Tolliver configuration file:
Tolliver.setup do |config|
  ...
  config.email_provider = :mailgun
  config.email_provider_params = {
      api_key: 'key-secret',
      domain: 'domain.tld'
  }
end3. Usage
To enter new notification into the system, just call notify method:
Tolliver.notify(
  template: :template_ref, 
  params: [
    {key: :key_1, value: :value_1},
    {key: :key_2, value: :value_2}
  ], 
  receivers: [
    {ref: :receiver_1, email: "receiver_1@domain.tld"},
    {ref: :receiver_2, email: "receiver_2@domain.tld"}, 
  ]
)