mandrill_queue 0.1.5 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
- ---
2
- SHA1:
3
- metadata.gz: e13bed8bd66dd50af9088a81c4fbab6cec468239
4
- data.tar.gz: 088db89179678e95b535c74456526409ab46fef4
5
- SHA512:
6
- metadata.gz: c1f07e9434c97defd8ffdc669fd5e6179cf3fbf2748dde2a78fe04eb4176df85a256f0862cec3816d8b1a6b77518650bae83dafe38f71388eb87ee013c654a0c
7
- data.tar.gz: 064ed0e03d001b537e33af61f92e68b82b1a36e89e8f6cd831aaaac684480d14b43eb3dc279c18cee73bcfb856be3acb45674f68745d2645760a5e20f23ee6d0
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d993b06e898d362091d06fa0f88ee77fb673ed23
4
+ data.tar.gz: eb07b2ff7184d9a1bd2cbd4ed056dae0e3c7e48b
5
+ SHA512:
6
+ metadata.gz: 0fbfa2ab1329e10b0ea7de4153b7553cac82020cf60bca7a0d5c4317916eafb3418864f3ca4ce71a86d9001e2d25a70196299847e9ca8101ea31655b6358ddfe
7
+ data.tar.gz: b2399bd63cad7a6eb5bdafe57c8c9355f7e11904c2b5320dd1daeb35eb3de0cb553772e05de48c7bcb093c5fcb7dcae29c3124f517e6d5c52096b16a48233427
data/README.md CHANGED
@@ -5,8 +5,7 @@
5
5
  [![Coverage Status](https://coveralls.io/repos/fixate/mandrill_queue/badge.png)](https://coveralls.io/r/fixate/mandrill_queue)
6
6
 
7
7
  DSL for sending mailers through Mailchimps Mandrill API. This gem enqueues the
8
- message on a background worker (`Resque` only for now, but I want to refactor
9
- so that it doesnt matter).
8
+ message on a background worker (`Resque` or `Sidekiq` or write an adapter).
10
9
 
11
10
  The DSL is modelled on the JSON api [here](https://mandrillapp.com/api/docs/messages.ruby.html#method=send-template).
12
11
 
@@ -101,19 +100,25 @@ def html_message(html)
101
100
  html "<html><body>#{html}</html></body>"
102
101
  end
103
102
  end
103
+ ```
104
+
105
+ ### Delivering mail
106
+
107
+ Some code that undoubtably looks familiar to you:
104
108
 
105
- # Meanwhile in another file...
106
- # maybe your controller...
109
+ ```ruby
107
110
  # Just like ActionMailer (note the class method calls are handed to instance methods)
108
111
  MyMailer.welcome_many(users).deliver
109
112
  ```
110
113
 
114
+ This can be added anywhere like a Rails controller or Sinatra endpoint.
115
+
111
116
  ## Installation
112
117
 
113
118
  You probably already know this bit:
114
119
 
115
120
  gem 'resque' # Support for Sidekiq and writing custom adapters coming soon...
116
- gem 'mandrill-queue'
121
+ gem 'mandrill_queue'
117
122
 
118
123
  but didn't know this (but it's optional):
119
124
 
@@ -151,23 +156,31 @@ end
151
156
 
152
157
  ## Setting up the worker
153
158
 
154
- Run it with a rake task like so:
159
+ Run the worker in the normal way:
155
160
 
161
+ # Resque
156
162
  rake resque:work QUEUES=mailer
157
163
 
158
- TODO: I still need to check that everything is OK when running the worker in Rails
159
- since I run mine outside Rails as a lightweight worker using:
160
-
161
- rake resque:work -r ./worker.rb QUEUES=mailer
164
+ # Sidekiq
165
+ sidekiq -q mailer
162
166
 
163
167
 
164
168
  ## Devise mailer integration
165
169
 
166
170
  Since Mandrill_Queue quacks like ActionMailer where it counts, getting your Devise
167
- mailers on Mandrill infrastructure is pretty easy. Here is my implementation:
171
+ mailers on Mandrill infrastructure is pretty easy.
172
+
173
+ Add the following to your devise initializer:
174
+
175
+ ```ruby
176
+ config.mailer = 'DeviseMailer'
177
+ ```
178
+
179
+ Here is my DeviseMailer implementation:
168
180
 
169
181
  ```ruby
170
- class DeviseMailer < MandrillResque::Mailer
182
+ # app/mailers/devise_mailer.rb
183
+ class DeviseMailer < MandrillQueue::Mailer
171
184
  defaults do
172
185
  message do
173
186
  from_email Devise.mailer_sender
@@ -208,14 +221,15 @@ end
208
221
 
209
222
  ## TODO
210
223
 
211
- 1. Refactor so that it can work with `Sidekiq` or a custom adapter - coming soon...
224
+ 1. Render ActionView views to mailers.
212
225
  2. Allow synchonous sending.
213
- 2. Render ActionView views to mailers.
214
226
 
215
227
  ## Contributing
216
228
 
217
229
  1. Fork it
218
- 2. Create your feature branch (`git checkout -b my-new-feature`)
230
+ 2. Create your feature branch (`git checkout -b feature/my-new-feature`)
219
231
  3. Commit your changes (`git commit -am 'Add some feature'`)
220
- 4. Push to the branch (`git push origin my-new-feature`)
232
+ 4. Push to the branch (`git push origin feature/my-new-feature`)
221
233
  5. Create new Pull Request
234
+
235
+ or use [Git Flow](https://github.com/nvie/gitflow)
@@ -15,41 +15,48 @@ module MandrillQueue
15
15
 
16
16
  def self.defaults
17
17
  {
18
- message_defaults: {}
18
+ message_defaults: {},
19
+ adapter: :resque
19
20
  }
20
21
  end
21
22
 
22
- def self.resque
23
- configuration.resque || ::Resque
24
- end
23
+ def self.load_adapter(adapter)
24
+ if adapter.is_a?(Symbol)
25
+ require "mandrill_queue/adapters/#{adapter}_adapter"
26
+ "MandrillQueue::Adapters::#{adapter.to_s.camelize}Adapter".constantize.new
27
+ elsif adapter.is_a?(String)
28
+ adapter.constantize.new
29
+ else
30
+ adapter.try(:call) || adapter
31
+ end
32
+ end
25
33
 
26
- # TODO: Support worker adapters
27
- # def self.load_adapter(adapter)
28
- # require "mandrill_queue/adapters/#{adapter}"
29
- # "#{adapter.camelize}Adapter".constantize.new
30
- # end
31
-
32
- # def self.adapter
33
- # @_adapter ||= begin
34
- # unless adapter = configuration.adapter
35
- # adapter = :resque if defined(::Resque)
36
- # adapter = :sidekiq if defined(::Sidekiq)
37
- # if adapter.nil?
38
- # raise RuntimeError, <<-TXT.strip.tr("\t", '')
39
- # Worker adapter was not configured and cannot be determined.
40
- # Please include a worker gem in your Gemfile. Resque and Sidekiq are supported.
41
- # TXT
42
- # end
43
- # end
44
- # load_adapter(adapter)
45
- # end
46
- # end
34
+ def self.adapter
35
+ @_adapter ||= begin
36
+ unless adapter = configuration.adapter
37
+ adapter = :resque if defined(::Resque)
38
+ adapter = :sidekiq if defined(::Sidekiq)
39
+ if adapter.nil?
40
+ raise RuntimeError, <<-TXT.strip.tr("\t", '')
41
+ Worker adapter was not configured and cannot be determined.
42
+ Please include a worker gem in your Gemfile. Resque and Sidekiq are supported.
43
+ TXT
44
+ end
45
+ end
46
+ load_adapter(adapter)
47
+ end
48
+ end
49
+
50
+ def self.adapter=(adapter)
51
+ @_adapter = adapter.nil? ? nil : load_adapter(adapter)
52
+ end
47
53
 
48
54
  def self.eager_load!
49
55
  # No autoloads
50
56
  end
51
57
 
52
58
  def self.reset_config(&block)
59
+ self.adapter = nil
53
60
  @configuration = nil
54
61
  configure(&block) if block_given?
55
62
  end
@@ -0,0 +1,9 @@
1
+ module MandrillQueue
2
+ module Adapters
3
+ class ResqueAdapter
4
+ def enqueue_to(queue, klass, *args)
5
+ ::Resque.enqueue_to(queue, klass, *args)
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module MandrillQueue
2
+ module Adapters
3
+ class SidekiqAdapter
4
+ def enqueue_to(queue, klass, *args)
5
+ ::Sidekiq::Client.enqueue_to(queue, klass, *args)
6
+ end
7
+ end
8
+ end
9
+ end
@@ -1,7 +1,7 @@
1
1
  module MandrillQueue
2
2
  class Configuration
3
3
  ACCESSORS = [:message_defaults, :resque, :default_worker_class,
4
- :default_queue, :api_key, :logger]
4
+ :default_queue, :api_key, :logger, :adapter]
5
5
  attr_accessor(*ACCESSORS)
6
6
 
7
7
  def initialize(defaults = {}, &block)
@@ -3,10 +3,8 @@ require 'stringio'
3
3
 
4
4
  module MandrillQueue
5
5
  module Logging
6
- def logging
7
- @_logger ||= MandrillQueue.configuration.logger || begin
8
- MandrillQueue.resque.constants.include?(:Logging) ? MandrillQueue.resque::Logging : nil
9
- end
6
+ def logger
7
+ MandrillQueue.configuration.logger
10
8
  end
11
9
 
12
10
  def pretty(obj)
@@ -35,16 +33,16 @@ module MandrillQueue
35
33
  result_formatter(r)
36
34
  end
37
35
 
38
- logging.debug <<-TXT.tr("\t", '')
36
+ logger.debug <<-TXT.tr("\t", '')
39
37
  \n*******************************************
40
38
  #{formatted.join("\n")}
41
39
  *******************************************
42
40
  TXT
43
41
 
44
42
  if errors.empty?
45
- logging.info("#{result.count} message(s) successfully sent.")
43
+ logger.info("#{result.count} message(s) successfully sent.")
46
44
  else
47
- logging.error("The following messages were not sent:\n#{errors.join("\n")}")
45
+ logger.error("The following messages were not sent:\n#{errors.join("\n")}")
48
46
  end
49
47
  end
50
48
  end
@@ -50,7 +50,7 @@ module MandrillQueue
50
50
  end
51
51
 
52
52
  def message_defaults
53
- md = configuration.message_defaults
53
+ md = configuration.message_defaults || {}
54
54
  md.merge!(defaults[:message]) unless @_in_defaults || defaults[:message].nil?
55
55
  md
56
56
  end
@@ -133,7 +133,7 @@ module MandrillQueue
133
133
 
134
134
  def deliver
135
135
  validate!
136
- MandrillQueue.resque.enqueue_to(queue, worker_class, to_hash)
136
+ MandrillQueue.adapter.enqueue_to(queue, worker_class, to_hash)
137
137
  end
138
138
 
139
139
  def to_hash(options = {})
@@ -1,3 +1,3 @@
1
1
  module MandrillQueue
2
- VERSION = '0.1.5'
2
+ VERSION = '0.2.1'
3
3
  end
@@ -6,8 +6,9 @@ require 'mandrill_queue/logging'
6
6
  module MandrillQueue
7
7
  class Worker
8
8
  include MandrillApi
9
- extend Logging
9
+ include Logging
10
10
  extend Hooks
11
+ include Sidekiq::Worker if defined?(Sidekiq)
11
12
 
12
13
  def ip_pool
13
14
  "Default Pool"
@@ -15,31 +16,31 @@ module MandrillQueue
15
16
 
16
17
  def perform(data)
17
18
  @_mailer = Mailer.new(data)
18
- self.class.logging.debug("Got mailer data: #{self.class.pretty(@_mailer.to_hash)}")
19
+ logger.debug("Got mailer data: #{pretty(@_mailer.to_hash)}")
19
20
 
20
21
  message = @_mailer.message.load_attachments!.to_hash
21
22
  template = @_mailer.template
22
23
  send_at = @_mailer.send_at
23
24
 
24
- if template.nil?
25
+ result = if template.nil?
25
26
  mandrill.messages.send(message, false, ip_pool, send_at)
26
27
  else
27
28
  content = @_mailer.content.to_key_value_array
28
29
  mandrill.messages.send_template(template, content, message, ip_pool, send_at)
29
30
  end
31
+ rescue Mandrill::Error => e
32
+ logger.error("A mandrill error occurred: #{e.class} - #{e.message}")
33
+ raise
34
+ else
35
+ if result.nil?
36
+ logger.error("No messages sent!")
37
+ else
38
+ log_results(result)
39
+ end
30
40
  end
31
41
 
32
42
  def self.perform(*args)
33
- result = new.perform(*args)
34
- rescue Mandrill::Error => e
35
- logging.error("A mandrill error occurred: #{e.class} - #{e.message}")
36
- raise
37
- else
38
- if !result.empty?
39
- log_results(result)
40
- else
41
- logging.error("No messages sent!")
42
- end
43
+ new.perform(*args)
43
44
  end
44
45
 
45
46
  end
@@ -18,15 +18,23 @@ MandrillQueue.configure do |config|
18
18
  # }
19
19
  # config.message_defaults = {}
20
20
 
21
- # MandrillQueue will call enqueue on this instead of Resque
22
- # config.resque = MyOwnResque
21
+ # Change to your prefered queue (adapter)
22
+ # Adapters should respond to :enqueue_to
23
+ # Valid values are:
24
+ # * :resque (default)
25
+ # * :sidekiq
26
+ # * anything that responds to call, return value is used as the adapter
27
+ # * Class name in string format (e.g. adapter sitting in lib/)
28
+ # * Any object that responds to :enqueue_to with arity > 1
29
+ # config.adapter = MyOwnQueuer
23
30
 
24
31
  # Allows you to use your own worker for processing the mandrill
25
32
  # queue. This can be overriden at the class level.
26
33
  # config.default_worker_class = MyWorker
27
34
 
28
35
  # Allows you to override the queue name used to enqueue
29
- # to resque. This can be overriden at the class level
36
+ # to the background queue. This can be overriden at the
37
+ # class level.
30
38
  # Defaults to :mailer
31
39
  # config.default_queue = :another_queue
32
40
 
metadata CHANGED
@@ -1,144 +1,189 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: mandrill_queue
3
- version: !ruby/object:Gem::Version
4
- version: 0.1.5
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.1
5
5
  platform: ruby
6
- authors:
6
+ authors:
7
7
  - Stan Bondi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
-
12
- date: 2014-01-27 00:00:00 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
11
+ date: 2014-04-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
15
14
  name: activesupport
16
- prerelease: false
17
- requirement: &id001 !ruby/object:Gem::Requirement
18
- requirements:
19
- - - ~>
20
- - !ruby/object:Gem::Version
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
21
19
  version: 4.0.0
22
20
  type: :runtime
23
- version_requirements: *id001
24
- - !ruby/object:Gem::Dependency
25
- name: mandrill-api
26
21
  prerelease: false
27
- requirement: &id002 !ruby/object:Gem::Requirement
28
- requirements:
29
- - - "="
30
- - !ruby/object:Gem::Version
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 4.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: mandrill-api
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
31
33
  version: 1.0.49
32
34
  type: :runtime
33
- version_requirements: *id002
34
- - !ruby/object:Gem::Dependency
35
- name: bundler
36
35
  prerelease: false
37
- requirement: &id003 !ruby/object:Gem::Requirement
38
- requirements:
39
- - - ~>
40
- - !ruby/object:Gem::Version
41
- version: "1.3"
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 1.0.49
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.3'
42
48
  type: :development
43
- version_requirements: *id003
44
- - !ruby/object:Gem::Dependency
45
- name: rake
46
49
  prerelease: false
47
- requirement: &id004 !ruby/object:Gem::Requirement
48
- requirements:
49
- - &id005
50
- - ">="
51
- - !ruby/object:Gem::Version
52
- version: "0"
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
53
62
  type: :development
54
- version_requirements: *id004
55
- - !ruby/object:Gem::Dependency
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
56
70
  name: timecop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
57
77
  prerelease: false
58
- requirement: &id006 !ruby/object:Gem::Requirement
59
- requirements:
60
- - *id005
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec-mocks
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
61
90
  type: :development
62
- version_requirements: *id006
63
- - !ruby/object:Gem::Dependency
64
- name: factory_girl
65
91
  prerelease: false
66
- requirement: &id007 !ruby/object:Gem::Requirement
67
- requirements:
68
- - *id005
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: factory_girl
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
69
104
  type: :development
70
- version_requirements: *id007
71
- - !ruby/object:Gem::Dependency
72
- name: faker
73
105
  prerelease: false
74
- requirement: &id008 !ruby/object:Gem::Requirement
75
- requirements:
76
- - *id005
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: faker
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
77
118
  type: :development
78
- version_requirements: *id008
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
79
125
  description: An easy to use DSL to send mailers using Mailchimps Mandrill api.
80
- email:
126
+ email:
81
127
  - stan@fixate.it
82
128
  executables: []
83
-
84
129
  extensions: []
85
-
86
130
  extra_rdoc_files: []
87
-
88
- files:
131
+ files:
132
+ - Gemfile
133
+ - Guardfile
134
+ - LICENSE.txt
135
+ - README.md
136
+ - Rakefile
89
137
  - lib/mandrill_queue.rb
90
- - lib/mandrill_queue/errors.rb
91
- - lib/mandrill_queue/mandrill_api.rb
138
+ - lib/mandrill_queue/adapters/resque_adapter.rb
139
+ - lib/mandrill_queue/adapters/sidekiq_adapter.rb
92
140
  - lib/mandrill_queue/array_metadata.rb
93
- - lib/mandrill_queue/worker.rb
94
- - lib/mandrill_queue/variables.rb
95
- - lib/mandrill_queue/version.rb
96
- - lib/mandrill_queue/mailer.rb
97
141
  - lib/mandrill_queue/configuration.rb
98
- - lib/mandrill_queue/railtie.rb
142
+ - lib/mandrill_queue/core_ext.rb
143
+ - lib/mandrill_queue/errors.rb
99
144
  - lib/mandrill_queue/logging.rb
145
+ - lib/mandrill_queue/mailer.rb
146
+ - lib/mandrill_queue/mandrill_api.rb
100
147
  - lib/mandrill_queue/message.rb
101
- - lib/mandrill_queue/core_ext.rb
102
- - lib/rails/generators/mandrill_queue/initializer_generator.rb
103
- - lib/rails/generators/mandrill_queue/worker_generator.rb
104
- - lib/rails/generators/mandrill_queue/templates/initializer.rb
105
- - lib/rails/generators/mandrill_queue/templates/worker/worker.rb
106
- - lib/mandrill_queue/worker/hooks.rb
107
- - lib/mandrill_queue/message/merge_vars.rb
108
- - lib/mandrill_queue/message/recipients.rb
109
148
  - lib/mandrill_queue/message/attachments.rb
110
149
  - lib/mandrill_queue/message/images.rb
150
+ - lib/mandrill_queue/message/merge_vars.rb
111
151
  - lib/mandrill_queue/message/recipient/data.rb
112
- - lib/mandrill_queue/message/recipient/variable.rb
113
- - lib/mandrill_queue/message/recipient/metadata.rb
114
152
  - lib/mandrill_queue/message/recipient/helpers.rb
115
- - README.md
116
- - Gemfile
117
- - Guardfile
118
- - Rakefile
119
- - LICENSE.txt
153
+ - lib/mandrill_queue/message/recipient/metadata.rb
154
+ - lib/mandrill_queue/message/recipient/variable.rb
155
+ - lib/mandrill_queue/message/recipients.rb
156
+ - lib/mandrill_queue/railtie.rb
157
+ - lib/mandrill_queue/variables.rb
158
+ - lib/mandrill_queue/version.rb
159
+ - lib/mandrill_queue/worker.rb
160
+ - lib/mandrill_queue/worker/hooks.rb
161
+ - lib/rails/generators/mandrill_queue/initializer_generator.rb
162
+ - lib/rails/generators/mandrill_queue/templates/initializer.rb
163
+ - lib/rails/generators/mandrill_queue/templates/worker/worker.rb
164
+ - lib/rails/generators/mandrill_queue/worker_generator.rb
120
165
  homepage: https://github.com/fixate/mandrill_queue/
121
- licenses:
166
+ licenses:
122
167
  - MIT
123
168
  metadata: {}
124
-
125
169
  post_install_message:
126
170
  rdoc_options: []
127
-
128
- require_paths:
171
+ require_paths:
129
172
  - lib
130
- required_ruby_version: !ruby/object:Gem::Requirement
131
- requirements:
132
- - *id005
133
- required_rubygems_version: !ruby/object:Gem::Requirement
134
- requirements:
135
- - *id005
173
+ required_ruby_version: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - ">="
176
+ - !ruby/object:Gem::Version
177
+ version: '0'
178
+ required_rubygems_version: !ruby/object:Gem::Requirement
179
+ requirements:
180
+ - - ">="
181
+ - !ruby/object:Gem::Version
182
+ version: '0'
136
183
  requirements: []
137
-
138
184
  rubyforge_project:
139
- rubygems_version: 2.1.10
185
+ rubygems_version: 2.2.0
140
186
  signing_key:
141
187
  specification_version: 4
142
188
  summary: Use MailChimps Mandrill to send mailers through a background worker queue.
143
189
  test_files: []
144
-