mandrill_queue 0.2.5 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 999107f1638f9646e86aa8e1524fa3a127d0dbdd
4
- data.tar.gz: 4fe4219adb5e5eed2686bc78b502761d6b4a8083
3
+ metadata.gz: d51589640920eb3e6f0adc4a4216b56bf018a6a3
4
+ data.tar.gz: 734ac1825282bd142a07b3206341cf5092ff6ddc
5
5
  SHA512:
6
- metadata.gz: f16991503ca10ef819f196cce0d0e38b9f364813303f6d822acbe50294b280d1570d8a72f15f7f083cde388deb431b466c964f7be94af54d3236648ff820e808
7
- data.tar.gz: d9e669df1f6d28521d4a715fbd5aa80348fcce6ab1c5c378e204febd4238a2f1b8c0cfb0e7c134edbaa408b77f02d82835026e9a14f3bfbff890e85c5146c34d
6
+ metadata.gz: 18e64f5f2569a7a647f82b28496aa1a3a29536a5f39ffbe94903db5c0732434094b55d228f01a268db91ad76f17a8f5ffcc3b347c74874efc110200c5d7cca30
7
+ data.tar.gz: f8c468c62f2761a70ccfa63d80fb692770619d8a1f8626383216a32bf32d506938b1baa2a1956408d4d93d4797b0de39202981837f5f8829330481e17ddf28c1
data/Gemfile CHANGED
@@ -23,5 +23,5 @@ platforms :rbx do
23
23
  end
24
24
 
25
25
  # group :development, :test do
26
- # gem 'debugger', platform: :ruby
26
+ # gem 'pry-byebug', platform: :ruby
27
27
  # end
data/README.md CHANGED
@@ -117,7 +117,9 @@ This can be added anywhere like a Rails controller or Sinatra endpoint.
117
117
 
118
118
  You probably already know this bit:
119
119
 
120
- gem 'resque' # Support for Sidekiq and writing custom adapters coming soon...
120
+ gem 'sidekiq'
121
+ # or
122
+ # gem 'resque'
121
123
  gem 'mandrill_queue'
122
124
 
123
125
  but didn't know this (but it's optional):
@@ -149,6 +151,7 @@ but here's a taster:
149
151
  # NEEDED FOR WORKER ONLY
150
152
  # Mandrill api key needed for worker only
151
153
  config.api_key = 'xxxxxx'
154
+ config.adapter = MyQueueAdapter # or just :sidekiq / :resque
152
155
  config.default_worker_class = MyWorker
153
156
  config.default_queue = :hipster_queue
154
157
  end
@@ -221,8 +224,9 @@ end
221
224
 
222
225
  ## TODO
223
226
 
224
- 1. Render ActionView views to mailers.
225
- 2. Allow synchonous sending.
227
+ 1. NB! Change DSL to pass in arguments to blocks so that the class context is still accessible within them.
228
+ 2. Render ActionView views to mailers.
229
+ 3. Allow synchonous sending.
226
230
 
227
231
  ## Contributing
228
232
 
@@ -1,8 +1,21 @@
1
1
  module MandrillQueue
2
2
  module Adapters
3
3
  class ResqueAdapter
4
- def enqueue_to(queue, klass, *args)
5
- ::Resque.enqueue_to(queue, klass, *args)
4
+ def enqueue_to(queue, klass, options, *args)
5
+ if options.key?(:send_at)
6
+ check_for_scheduler!
7
+ Resque.enqueue_at_with_queue(queue, options[:send_at], klass, *args)
8
+ elsif options.key?(:send_in)
9
+ check_for_scheduler!
10
+ Resque.enqueue_in_with_queue(queue, options[:send_in], klass, *args)
11
+ else
12
+ ::Resque.enqueue_to(queue, klass, *args)
13
+ end
14
+ end
15
+
16
+ def check_for_scheduler!
17
+ raise RuntimeError, "Please install resque-scheduler to allow scheduled jobs!" \
18
+ unless ::Resque.respond_to?(:enqueue_in)
6
19
  end
7
20
  end
8
21
  end
@@ -1,8 +1,16 @@
1
1
  module MandrillQueue
2
2
  module Adapters
3
3
  class SidekiqAdapter
4
- def enqueue_to(queue, klass, *args)
5
- ::Sidekiq::Client.enqueue_to(queue, klass, *args)
4
+ def enqueue_to(queue, klass, options, *args)
5
+ client = ::Sidekiq::Client
6
+
7
+ if options.key?(:send_at)
8
+ client.enqueue_to_in(queue, options[:send_at], klass, *args)
9
+ elsif options.key?(:send_in)
10
+ client.enqueue_to_in(queue, options[:send_in], klass, *args)
11
+ else
12
+ client.enqueue_to(queue, klass, *args)
13
+ end
6
14
  end
7
15
  end
8
16
  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, :adapter]
4
+ :default_queue, :api_key, :logger, :adapter, :adapter_options]
5
5
  attr_accessor(*ACCESSORS)
6
6
 
7
7
  def initialize(defaults = {}, &block)
@@ -81,6 +81,7 @@ module MandrillQueue
81
81
 
82
82
  def initialize(values = nil)
83
83
  set!(values) unless values.nil?
84
+ @_adapter_options = self.class.configuration.adapter_options || {}
84
85
  end
85
86
 
86
87
  def reset!
@@ -133,9 +134,14 @@ module MandrillQueue
133
134
 
134
135
  def deliver
135
136
  validate!
136
- MandrillQueue.adapter.enqueue_to(queue, worker_class, to_hash)
137
+ MandrillQueue.adapter.enqueue_to(queue, worker_class, adapter_options, to_hash)
137
138
  end
138
139
 
140
+ def adapter_options(options = nil)
141
+ @_adapter_options.merge!(options) unless options.nil?
142
+ @_adapter_options ||= {}
143
+ end
144
+
139
145
  def to_hash(options = {})
140
146
  hash = {}
141
147
  ACCESSORS.each do |key|
@@ -145,7 +151,7 @@ module MandrillQueue
145
151
 
146
152
  hash[:message] = message.to_hash(options) rescue nil if !@_message.nil? || options[:include_nils]
147
153
  hash[:content] = content.to_key_value_array(options) rescue nil if !@_content.nil? || options[:include_nils]
148
- hash
154
+ hash
149
155
  end
150
156
 
151
157
  def set!(hash)
@@ -1,3 +1,3 @@
1
1
  module MandrillQueue
2
- VERSION = '0.2.5'
2
+ VERSION = '0.2.6'
3
3
  end
@@ -5,6 +5,8 @@ require 'mandrill_queue/configuration'
5
5
  require 'mandrill_queue/mailer'
6
6
 
7
7
  module MandrillQueue
8
+ @@lock = Mutex.new
9
+
8
10
  def self.configuration
9
11
  @configuration ||= Configuration.new(defaults)
10
12
  end
@@ -33,18 +35,20 @@ module MandrillQueue
33
35
  end
34
36
 
35
37
  def self.adapter
36
- @_adapter ||= begin
37
- unless adapter = configuration.adapter
38
- adapter = :resque if defined(::Resque)
39
- adapter = :sidekiq if defined(::Sidekiq)
40
- if adapter.nil?
41
- raise RuntimeError, <<-TXT.strip.tr("\t", '')
42
- Worker adapter was not configured and cannot be determined.
43
- Please include a worker gem in your Gemfile. Resque and Sidekiq are supported.
44
- TXT
38
+ @@lock.synchronize do
39
+ @_adapter ||= begin
40
+ unless adapter = configuration.adapter
41
+ adapter = :resque if defined(::Resque)
42
+ adapter = :sidekiq if defined(::Sidekiq)
43
+ if adapter.nil?
44
+ raise RuntimeError, <<-TXT.strip.tr("\t", '')
45
+ Worker adapter was not configured and cannot be determined.
46
+ Please include a worker gem in your Gemfile. Resque and Sidekiq are supported.
47
+ TXT
48
+ end
45
49
  end
50
+ load_adapter(adapter)
46
51
  end
47
- load_adapter(adapter)
48
52
  end
49
53
  end
50
54
 
@@ -41,4 +41,9 @@ MandrillQueue.configure do |config|
41
41
  # Used to set the current logger. This can be any object
42
42
  # that responds to debug, info, warn, error and fatal
43
43
  # config.logger = MyLoggingClass
44
+ #
45
+ # Default options passed through to the queue adapter
46
+ # These options can mean different things depending on
47
+ # which adapter you choose.
48
+ # config.adapter_options = {}
44
49
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mandrill_queue
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stan Bondi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-17 00:00:00.000000000 Z
11
+ date: 2015-02-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport