devise-async 0.9.0 → 0.10.1.alpha

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,5 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 1.9.3
4
+ services:
5
+ - redis-server
@@ -1,5 +1,15 @@
1
1
  ## Unreleased
2
2
 
3
+ ## 0.10.0-alpha
4
+
5
+ * Backburner support (jandudulski)
6
+ * Sucker Punch support (kmayer)
7
+ * Que support (marshall-lee)
8
+ * Handle `deliver_now` in preparation for Rails 5 (barelyknown)
9
+ * Option to set a priority for DJ and Backburner (mkon)
10
+ * The locale is remembered before an asynchronous task is run (baschtl)
11
+ * Fixed a usage of `try` that appeared in connection with Rails 4 (baschtl)
12
+
3
13
  ## 0.9.0
4
14
 
5
15
  * Multiple mailers support (baschtl)
data/README.md CHANGED
@@ -1,4 +1,6 @@
1
- # Devise Async [![Build Status](https://secure.travis-ci.org/mhfs/devise-async.png)](http://travis-ci.org/mhfs/devise-async)
1
+ # Devise Async
2
+
3
+ [![Tag](https://img.shields.io/github/tag/mhfs/devise-async.svg?style=flat-square)](https://github.com/mhfs/devise-async/releases) [![Build Status](https://img.shields.io/travis/mhfs/devise-async.svg?style=flat-square)](https://travis-ci.org/mhfs/devise-async) [![Code Climate](https://img.shields.io/codeclimate/github/mhfs/devise-async.svg?style=flat-square)](https://codeclimate.com/github/mhfs/devise-async)
2
4
 
3
5
  Devise Async provides an easy way to configure Devise to send its emails asynchronously using your preferred queuing backend.
4
6
 
@@ -9,6 +11,9 @@ Supported backends:
9
11
  * Delayed::Job
10
12
  * QueueClassic
11
13
  * Torquebox
14
+ * Backburner
15
+ * Que
16
+ * SuckerPunch
12
17
 
13
18
  ## Installation
14
19
 
@@ -39,7 +44,7 @@ end
39
44
  Set your queuing backend by creating `config/initializers/devise_async.rb`:
40
45
 
41
46
  ```ruby
42
- # Supported options: :resque, :sidekiq, :delayed_job, :queue_classic, :torquebox
47
+ # Supported options: :resque, :sidekiq, :delayed_job, :queue_classic, :torquebox, :backburner, :que, :sucker_punch
43
48
  Devise::Async.backend = :resque
44
49
  ```
45
50
 
@@ -73,6 +78,16 @@ Defaults to :mailer.
73
78
  Devise::Async.queue = :my_custom_queue
74
79
  ```
75
80
 
81
+ ### Custom priority
82
+
83
+ You can specify a custom priority for created background jobs in Devise or Backburner.
84
+ If no value is specified, jobs will be enqueued with whatever default priority is configured in Devise or Backburner.
85
+
86
+ ```ruby
87
+ # config/initializers/devise_async.rb
88
+ Devise::Async.priority = 10
89
+ ```
90
+
76
91
  ### Setup via block
77
92
 
78
93
  To avoid repeating `Devise::Async` in the initializer file you can use the block syntax
@@ -4,8 +4,8 @@ require File.expand_path('../lib/devise/async/version', __FILE__)
4
4
  Gem::Specification.new do |gem|
5
5
  gem.authors = ["Marcelo Silveira"]
6
6
  gem.email = ["marcelo@mhfs.com.br"]
7
- gem.description = %q{Send Devise's emails in background. Supports Resque, Sidekiq, Delayed::Job and QueueClassic.}
8
- gem.summary = %q{Devise Async provides an easy way to configure Devise to send its emails asynchronously using your preferred queuing backend. It supports Resque, Sidekiq, Delayed::Job and QueueClassic.}
7
+ gem.description = %q{Send Devise's emails in background. Supports Backburner, Resque, Sidekiq, Delayed::Job, QueueClassic, Que, Sucker Punch and Torquebox.}
8
+ gem.summary = %q{Devise Async provides an easy way to configure Devise to send its emails asynchronously using your preferred queuing backend. It supports Backburner, Resque, Sidekiq, Delayed::Job, QueueClassic, Que, Sucker Punch and Torquebox.}
9
9
  gem.homepage = "https://github.com/mhfs/devise-async/"
10
10
 
11
11
  gem.files = `git ls-files`.split($\)
@@ -22,10 +22,13 @@ Gem::Specification.new do |gem|
22
22
  gem.add_development_dependency "actionmailer", ">= 3.2"
23
23
  gem.add_development_dependency "sqlite3", "~> 1.3"
24
24
  gem.add_development_dependency "resque", "~> 1.20"
25
- gem.add_development_dependency "sidekiq", "~> 1.2"
25
+ gem.add_development_dependency "sidekiq", "~> 2.17"
26
26
  gem.add_development_dependency "delayed_job_active_record", "~> 0.3"
27
27
  gem.add_development_dependency "queue_classic", "~> 2.0"
28
+ gem.add_development_dependency "backburner", "~> 0.4"
28
29
  gem.add_development_dependency "mocha", "~> 0.11"
29
30
  gem.add_development_dependency "minitest", "~> 3.0"
30
31
  gem.add_development_dependency "torquebox-no-op", "~> 2.3"
32
+ gem.add_development_dependency "sucker_punch", "~> 1.0.5"
33
+ gem.add_development_dependency "que", "~> 0.8"
31
34
  end
@@ -9,11 +9,14 @@ module Devise
9
9
 
10
10
  module Backend
11
11
  autoload :Base, "devise/async/backend/base"
12
+ autoload :Backburner, "devise/async/backend/backburner"
12
13
  autoload :Resque, "devise/async/backend/resque"
13
14
  autoload :Sidekiq, "devise/async/backend/sidekiq"
14
15
  autoload :DelayedJob, "devise/async/backend/delayed_job"
15
16
  autoload :QueueClassic, "devise/async/backend/queue_classic"
16
17
  autoload :Torquebox, "devise/async/backend/torquebox"
18
+ autoload :SuckerPunch, "devise/async/backend/sucker_punch"
19
+ autoload :Que, "devise/async/backend/que"
17
20
  end
18
21
 
19
22
  # Defines the queue backend to be used. Resque by default.
@@ -24,6 +27,10 @@ module Devise
24
27
  mattr_accessor :queue
25
28
  @@queue = :mailer
26
29
 
30
+ # Defines the priority in which the background job will be enqueued. Defaults to the default of the backend you are using.
31
+ mattr_accessor :priority
32
+ @@priority = nil
33
+
27
34
  # Defines the enabled configuration that if set to false the emails will be sent synchronously
28
35
  mattr_accessor :enabled
29
36
  @@enabled = true
@@ -0,0 +1,25 @@
1
+ module Devise
2
+ module Async
3
+ module Backend
4
+ class Backburner < Base
5
+
6
+ def self.enqueue(*args)
7
+ args.unshift(self)
8
+ ::Backburner.enqueue(*args)
9
+ end
10
+
11
+ def self.perform(*args)
12
+ new.perform(*args)
13
+ end
14
+
15
+ def self.queue
16
+ Devise::Async.queue
17
+ end
18
+
19
+ def self.queue_priority
20
+ Devise::Async.priority.nil? ? ::Backburner.configuration.default_priority : Devise::Async.priority
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -10,17 +10,39 @@ module Devise
10
10
  #
11
11
  # It uses `orm_adapter` API to fetch the record in order to enforce
12
12
  # compatibility among diferent ORMs.
13
+ #
14
+ # This method is executed within the scope of the locale of
15
+ # the calling thread.
13
16
  def perform(method, resource_class, resource_id, *args)
14
- resource = resource_class.constantize.to_adapter.get!(resource_id)
15
- args[-1] = args.last.symbolize_keys if args.last.is_a?(Hash)
16
- mailer_class(resource).send(method, resource, *args).deliver
17
+ I18n.with_locale locale_from_args(args) do
18
+ resource = resource_class.constantize.to_adapter.get!(resource_id)
19
+ args[-1] = args.last.symbolize_keys if args.last.is_a?(Hash)
20
+ mailer = mailer_class(resource).send(method, resource, *args)
21
+ mailer.send(deliver_method(mailer))
22
+ end
17
23
  end
18
24
 
19
25
  private
20
26
 
21
27
  def mailer_class(resource = nil)
22
- @mailer_class ||= resource.try(:devise_mailer) || Devise.mailer
28
+ @mailer_class ||= resource.send(:devise_mailer) || Devise.mailer
29
+ end
30
+
31
+ def locale_from_args(args)
32
+ args_last = args.last
33
+ args_last.delete('locale') if args_last.is_a?(Hash)
23
34
  end
35
+
36
+ # Use #deliver_now if supported, otherwise falls back to #deliver.
37
+ # Added in preparation for the planned removal of #deliver in Rails 5.
38
+ def deliver_method(mailer)
39
+ if mailer.respond_to?(:deliver_now)
40
+ :deliver_now
41
+ else
42
+ :deliver
43
+ end
44
+ end
45
+
24
46
  end
25
47
  end
26
48
  end
@@ -3,7 +3,11 @@ module Devise
3
3
  module Backend
4
4
  class DelayedJob < Base
5
5
  def self.enqueue(*args)
6
- new.delay(:queue => Devise::Async.queue).perform(*args)
6
+ new.delay(:queue => Devise::Async.queue, :priority => priority).perform(*args)
7
+ end
8
+
9
+ def self.priority
10
+ Devise::Async.priority.nil? ? Delayed::Worker.default_priority : Devise::Async.priority
7
11
  end
8
12
  end
9
13
  end
@@ -0,0 +1,19 @@
1
+ module Devise
2
+ module Async
3
+ module Backend
4
+ class Que < Base
5
+ class Job < ::Que::Job
6
+ @queue = Devise::Async.queue
7
+
8
+ def run(args)
9
+ Backend::Que.new.perform(*args)
10
+ end
11
+ end
12
+
13
+ def self.enqueue(*args)
14
+ Job.enqueue(args)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,23 @@
1
+ require "sucker_punch"
2
+
3
+ module Devise
4
+ module Async
5
+ module Backend
6
+ class SuckerPunch < Base
7
+ include ::SuckerPunch::Job
8
+
9
+ def self.enqueue(*args)
10
+ new.async.perform(*args)
11
+ end
12
+
13
+ # Return the connection to the pool after we're done with it
14
+ # see: https://github.com/brandonhilkert/sucker_punch#usage
15
+ def perform(method, resource_class, resource_id, *args)
16
+ ActiveRecord::Base.connection_pool.with_connection do
17
+ super
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -27,6 +27,12 @@ module Devise
27
27
  def send_devise_notification(notification, *args)
28
28
  return super unless Devise::Async.enabled
29
29
 
30
+ # The current locale has to be remembered until the actual sending
31
+ # of an email because it is scoped to the current thread. Hence,
32
+ # using asynchronous mechanisms that use another thread to send an
33
+ # email the currently used locale will be gone later.
34
+ args = args_with_current_locale(args)
35
+
30
36
  # If the record is dirty we keep pending notifications to be enqueued
31
37
  # by the callback and avoid before commit job processing.
32
38
  if changed?
@@ -51,6 +57,23 @@ module Devise
51
57
  def devise_pending_notifications
52
58
  @devise_pending_notifications ||= []
53
59
  end
60
+
61
+ private
62
+
63
+ def args_with_current_locale(args)
64
+ # The default_locale is taken in any case. Hence, the args do not have
65
+ # to be adapted if default_locale and current locale are equal.
66
+ args = add_current_locale_to_args(args) if I18n.locale != I18n.default_locale
67
+ args
68
+ end
69
+
70
+ def add_current_locale_to_args(args)
71
+ # Devise expects a hash as the last parameter for Mailer methods.
72
+ opts = args.last.is_a?(Hash) ? args.pop : {}
73
+ opts['locale'] = I18n.locale
74
+ args.push(opts)
75
+ end
76
+
54
77
  end
55
78
  end
56
79
  end
@@ -1,5 +1,5 @@
1
1
  module Devise
2
2
  module Async
3
- VERSION = "0.9.0"
3
+ VERSION = "0.10.1.alpha"
4
4
  end
5
5
  end
@@ -0,0 +1,33 @@
1
+ require "test_helper"
2
+
3
+ module Devise
4
+ module Async
5
+ module Backend
6
+ describe "Backburner" do
7
+ it "enqueues job" do
8
+ ::Backburner.expects(:enqueue).with(Backburner, :mailer_method, "User", 123, {})
9
+ Backburner.enqueue(:mailer_method, "User", 123, {})
10
+ end
11
+
12
+ it "delegates to devise mailer when delivering" do
13
+ user = create_user
14
+ ActionMailer::Base.deliveries = []
15
+ Backend::Backburner.perform(:confirmation_instructions, "User", user.id, {})
16
+ ActionMailer::Base.deliveries.size.must_equal 1
17
+ end
18
+
19
+ describe ".queue_priority" do
20
+ it "returns the right priority when set" do
21
+ Devise::Async.priority = 15
22
+ Backburner.queue_priority.must_equal 15
23
+ Devise::Async.priority = nil
24
+ end
25
+
26
+ it "returns default priority when no priority is set" do
27
+ Backburner.queue_priority.must_equal ::Backburner.configuration.default_priority
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -3,15 +3,33 @@ require "test_helper"
3
3
  module Devise
4
4
  module Async
5
5
  module Backend
6
+
6
7
  describe "Base" do
7
8
 
8
- it "delegates to configured mailer" do
9
+ before do
9
10
  Devise.mailer = "MyMailer"
10
- user = create_user
11
- mailer_instance = mock(:deliver => true)
11
+ @user = create_user
12
+ end
12
13
 
13
- MyMailer.expects(:confirmation_instructions).once.returns(mailer_instance)
14
- Base.new.perform(:confirmation_instructions, "User", user.id, {})
14
+ after do
15
+ Devise.mailer = "Devise::Mailer"
16
+ end
17
+
18
+ it "delegates to configured mailer" do
19
+ @mailer_instance = mock(:deliver => true)
20
+
21
+ MyMailer.expects(:confirmation_instructions).once.returns(@mailer_instance)
22
+ Base.new.perform(:confirmation_instructions, "User", @user.id, {})
23
+ end
24
+
25
+ it "executes within the locale scope if a locale is given via args" do
26
+ I18n.expects(:with_locale).once.with(:de)
27
+ Base.new.perform(:confirmation_instructions, "User", @user.id, { 'locale' => :de })
28
+ end
29
+
30
+ it "does not execute within the locale scope if no locale is given via args" do
31
+ I18n.expects(:"locale=").never
32
+ Base.new.perform(:confirmation_instructions, "User", @user.id, {})
15
33
  end
16
34
 
17
35
  it "delegates to model configured mailer" do
@@ -22,6 +40,27 @@ module Devise
22
40
  Base.new.perform(:confirmation_instructions, "UserWithMailer", user.id, {})
23
41
  end
24
42
 
43
+ describe "the delivery method" do
44
+ before do
45
+ Devise.mailer = "MyMailer"
46
+ @user = create_user
47
+ end
48
+
49
+ it "uses #deliver_now when possible" do
50
+ mailer_instance = mock(:deliver_now => true)
51
+
52
+ MyMailer.expects(:confirmation_instructions).once.returns(mailer_instance)
53
+ Base.new.perform(:confirmation_instructions, "User", @user.id, {})
54
+ end
55
+
56
+ it "uses #deliver otherwise" do
57
+ mailer_instance = mock(:deliver => true)
58
+
59
+ MyMailer.expects(:confirmation_instructions).once.returns(mailer_instance)
60
+ Base.new.perform(:confirmation_instructions, "User", @user.id, {})
61
+ end
62
+ end
63
+
25
64
  after do
26
65
  Devise.mailer = "Devise::Mailer"
27
66
  end
@@ -7,7 +7,7 @@ module Devise
7
7
  it "enqueues job" do
8
8
  delayed_instance = mock()
9
9
  delayed_instance.expects(:perform).once.with(:mailer_method, "User", 123, {})
10
- DelayedJob.any_instance.expects(:delay).once.returns(delayed_instance)
10
+ DelayedJob.any_instance.expects(:delay).with(:queue => Devise::Async.queue, :priority => DelayedJob.priority).once.returns(delayed_instance)
11
11
 
12
12
  DelayedJob.enqueue(:mailer_method, "User", 123, {})
13
13
  end
@@ -18,6 +18,18 @@ module Devise
18
18
  Backend::DelayedJob.new.perform(:confirmation_instructions, "User", user.id, {})
19
19
  ActionMailer::Base.deliveries.size.must_equal 1
20
20
  end
21
+
22
+ describe ".priority" do
23
+ it "returns it when the priority is set" do
24
+ Devise::Async.priority = 15
25
+ DelayedJob.priority.must_equal 15
26
+ Devise::Async.priority = nil
27
+ end
28
+
29
+ it "returns the default DJ priority when the priority is not set it" do
30
+ DelayedJob.priority.must_equal Delayed::Worker.default_priority
31
+ end
32
+ end
21
33
  end
22
34
  end
23
35
  end
@@ -0,0 +1,21 @@
1
+ require "test_helper"
2
+
3
+ module Devise
4
+ module Async
5
+ module Backend
6
+ describe "Que" do
7
+ it "enqueues job" do
8
+ Que::Job.expects(:enqueue).with([:mailer_method, "User", 123, {}])
9
+ Que.enqueue(:mailer_method, "User", 123, {})
10
+ end
11
+
12
+ it "delegates to devise mailer when delivering" do
13
+ user = create_user
14
+ ActionMailer::Base.deliveries = []
15
+ Backend::Que.enqueue(:confirmation_instructions, "User", user.id, {})
16
+ ActionMailer::Base.deliveries.size.must_equal 1
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ require "test_helper"
2
+
3
+ module Devise
4
+ module Async
5
+ module Backend
6
+ describe "SuckerPunch" do
7
+ it "enqueus the job" do
8
+ SuckerPunch.any_instance.expects(:perform).once.with(:mailer_method, "User", 123, {})
9
+ SuckerPunch.enqueue(:mailer_method, "User", 123, {})
10
+ end
11
+
12
+ it "delegates to devise mailer when delivering" do
13
+ user = create_user
14
+ ActionMailer::Base.deliveries = []
15
+ SuckerPunch.new.perform(:confirmation_instructions, "User", user.id, {})
16
+ ActionMailer::Base.deliveries.size.must_equal 1
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -11,6 +11,10 @@ module Devise
11
11
  Backend.for(:sidekiq).must_equal Backend::Sidekiq
12
12
  end
13
13
 
14
+ it "gives backburner as the backend" do
15
+ Backend.for(:backburner).must_equal Backend::Backburner
16
+ end
17
+
14
18
  it "gives delayed job as the backend" do
15
19
  Backend.for(:delayed_job).must_equal Backend::DelayedJob
16
20
  end
@@ -19,6 +23,10 @@ module Devise
19
23
  Backend.for(:queue_classic).must_equal Backend::QueueClassic
20
24
  end
21
25
 
26
+ it "gives sucker punch as the backend" do
27
+ Backend.for(:sucker_punch).must_equal Backend::SuckerPunch
28
+ end
29
+
22
30
  it "alerts about unsupported backend" do
23
31
  assert_raises ArgumentError do
24
32
  Backend.for(:unsupported_backend)
@@ -71,6 +71,30 @@ module Devise
71
71
  admin.send(:devise_pending_notifications).must_equal []
72
72
  Worker.expects(:enqueue).never
73
73
  end
74
+
75
+ describe "custom locale set" do
76
+
77
+ # Set a custom locale
78
+ before { I18n.locale = :de }
79
+
80
+ # locale == nil indicates the usage of the default_locale
81
+ after { I18n.locale = nil }
82
+
83
+ it "should set the current locale to the args" do
84
+ admin = create_admin
85
+ Worker.expects(:enqueue).with(:confirmation_instructions, "Admin", admin.id.to_s, instance_of(String), { 'locale' => :de })
86
+ admin.send_confirmation_instructions
87
+ end
88
+ end
89
+
90
+ describe "default locale set" do
91
+
92
+ it "should not set the current locale to the args" do
93
+ admin = create_admin
94
+ Worker.expects(:enqueue).with(:confirmation_instructions, "Admin", admin.id.to_s, instance_of(String), {})
95
+ admin.send_confirmation_instructions
96
+ end
97
+ end
74
98
  end
75
99
  end
76
100
  end
@@ -17,6 +17,13 @@ module Devise
17
17
  Worker.enqueue(:mailer_method, "User", 123, {})
18
18
  end
19
19
 
20
+ it "enqueues job using the backburner backend" do
21
+ Devise::Async.backend = :backburner
22
+
23
+ Backend::Backburner.expects(:enqueue).with(:mailer_method, "User", 123, {})
24
+ Worker.enqueue(:mailer_method, "User", 123, {})
25
+ end
26
+
20
27
  it "enqueues job using the delayed job backend" do
21
28
  Devise::Async.backend = :delayed_job
22
29
 
@@ -30,6 +37,20 @@ module Devise
30
37
  Backend::QueueClassic.expects(:enqueue).with(:mailer_method, "User", 123, {})
31
38
  Worker.enqueue(:mailer_method, "User", 123, {})
32
39
  end
40
+
41
+ it "enqueues job using the sucker punch backend" do
42
+ Devise::Async.backend = :sucker_punch
43
+
44
+ Backend::SuckerPunch.expects(:enqueue).with(:mailer_method, "User", 123, {})
45
+ Worker.enqueue(:mailer_method, "User", 123, {})
46
+ end
47
+
48
+ it "enqueues job using the que backend" do
49
+ Devise::Async.backend = :que
50
+
51
+ Backend::Que.expects(:enqueue).with(:mailer_method, "User", 123, {})
52
+ Worker.enqueue(:mailer_method, "User", 123, {})
53
+ end
33
54
  end
34
55
  end
35
56
  end
@@ -2,6 +2,11 @@ require "test_helper"
2
2
 
3
3
  module Devise
4
4
  describe "Async" do
5
+
6
+ after do
7
+ Async.backend = :resque
8
+ end
9
+
5
10
  it "yields self when setup is called" do
6
11
  Async.setup { |config| config.must_equal Async }
7
12
  end
@@ -16,8 +21,11 @@ module Devise
16
21
  Async.backend.must_equal false
17
22
  end
18
23
 
19
- after do
20
- Async.backend = :resque
24
+ it "stores priority config" do
25
+ Async.priority = 15
26
+ Async.priority.must_equal 15
27
+ Async.priority = nil
21
28
  end
29
+
22
30
  end
23
31
  end
@@ -5,14 +5,20 @@ require "minitest/spec"
5
5
  require "minitest/mock"
6
6
  require "mocha/setup"
7
7
 
8
+ require "action_controller"
9
+
8
10
  require "devise"
9
11
  require "devise/async"
10
12
  require "rails/all"
11
13
  require "resque"
12
14
  require "sidekiq"
15
+ require "backburner"
13
16
  require "delayed_job_active_record"
14
17
  require "sidekiq/testing"
15
18
  require "torquebox-no-op"
19
+ require "sucker_punch/testing/inline"
20
+ require "que"
21
+ require "queue_classic"
16
22
 
17
23
  require "support/rails_app"
18
24
  require "support/test_helpers"
@@ -21,3 +27,5 @@ require "support/my_mailer"
21
27
  include TestHelpers
22
28
 
23
29
  load File.dirname(__FILE__) + "/support/rails_app/db/schema.rb"
30
+
31
+ I18n.enforce_available_locales = false
metadata CHANGED
@@ -1,18 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise-async
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.10.1.alpha
5
+ prerelease: 7
5
6
  platform: ruby
6
7
  authors:
7
8
  - Marcelo Silveira
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-11-19 00:00:00.000000000 Z
12
+ date: 2015-05-04 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: devise
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
19
  - - ~>
18
20
  - !ruby/object:Gem::Version
@@ -20,6 +22,7 @@ dependencies:
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
27
  - - ~>
25
28
  - !ruby/object:Gem::Version
@@ -27,48 +30,55 @@ dependencies:
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: activerecord
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
- - - '>='
35
+ - - ! '>='
32
36
  - !ruby/object:Gem::Version
33
37
  version: '3.2'
34
38
  type: :development
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
- - - '>='
43
+ - - ! '>='
39
44
  - !ruby/object:Gem::Version
40
45
  version: '3.2'
41
46
  - !ruby/object:Gem::Dependency
42
47
  name: actionpack
43
48
  requirement: !ruby/object:Gem::Requirement
49
+ none: false
44
50
  requirements:
45
- - - '>='
51
+ - - ! '>='
46
52
  - !ruby/object:Gem::Version
47
53
  version: '3.2'
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
51
58
  requirements:
52
- - - '>='
59
+ - - ! '>='
53
60
  - !ruby/object:Gem::Version
54
61
  version: '3.2'
55
62
  - !ruby/object:Gem::Dependency
56
63
  name: actionmailer
57
64
  requirement: !ruby/object:Gem::Requirement
65
+ none: false
58
66
  requirements:
59
- - - '>='
67
+ - - ! '>='
60
68
  - !ruby/object:Gem::Version
61
69
  version: '3.2'
62
70
  type: :development
63
71
  prerelease: false
64
72
  version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
65
74
  requirements:
66
- - - '>='
75
+ - - ! '>='
67
76
  - !ruby/object:Gem::Version
68
77
  version: '3.2'
69
78
  - !ruby/object:Gem::Dependency
70
79
  name: sqlite3
71
80
  requirement: !ruby/object:Gem::Requirement
81
+ none: false
72
82
  requirements:
73
83
  - - ~>
74
84
  - !ruby/object:Gem::Version
@@ -76,6 +86,7 @@ dependencies:
76
86
  type: :development
77
87
  prerelease: false
78
88
  version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
79
90
  requirements:
80
91
  - - ~>
81
92
  - !ruby/object:Gem::Version
@@ -83,6 +94,7 @@ dependencies:
83
94
  - !ruby/object:Gem::Dependency
84
95
  name: resque
85
96
  requirement: !ruby/object:Gem::Requirement
97
+ none: false
86
98
  requirements:
87
99
  - - ~>
88
100
  - !ruby/object:Gem::Version
@@ -90,6 +102,7 @@ dependencies:
90
102
  type: :development
91
103
  prerelease: false
92
104
  version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
93
106
  requirements:
94
107
  - - ~>
95
108
  - !ruby/object:Gem::Version
@@ -97,20 +110,23 @@ dependencies:
97
110
  - !ruby/object:Gem::Dependency
98
111
  name: sidekiq
99
112
  requirement: !ruby/object:Gem::Requirement
113
+ none: false
100
114
  requirements:
101
115
  - - ~>
102
116
  - !ruby/object:Gem::Version
103
- version: '1.2'
117
+ version: '2.17'
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
107
122
  requirements:
108
123
  - - ~>
109
124
  - !ruby/object:Gem::Version
110
- version: '1.2'
125
+ version: '2.17'
111
126
  - !ruby/object:Gem::Dependency
112
127
  name: delayed_job_active_record
113
128
  requirement: !ruby/object:Gem::Requirement
129
+ none: false
114
130
  requirements:
115
131
  - - ~>
116
132
  - !ruby/object:Gem::Version
@@ -118,6 +134,7 @@ dependencies:
118
134
  type: :development
119
135
  prerelease: false
120
136
  version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
121
138
  requirements:
122
139
  - - ~>
123
140
  - !ruby/object:Gem::Version
@@ -125,6 +142,7 @@ dependencies:
125
142
  - !ruby/object:Gem::Dependency
126
143
  name: queue_classic
127
144
  requirement: !ruby/object:Gem::Requirement
145
+ none: false
128
146
  requirements:
129
147
  - - ~>
130
148
  - !ruby/object:Gem::Version
@@ -132,13 +150,31 @@ dependencies:
132
150
  type: :development
133
151
  prerelease: false
134
152
  version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
135
154
  requirements:
136
155
  - - ~>
137
156
  - !ruby/object:Gem::Version
138
157
  version: '2.0'
158
+ - !ruby/object:Gem::Dependency
159
+ name: backburner
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ~>
164
+ - !ruby/object:Gem::Version
165
+ version: '0.4'
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ~>
172
+ - !ruby/object:Gem::Version
173
+ version: '0.4'
139
174
  - !ruby/object:Gem::Dependency
140
175
  name: mocha
141
176
  requirement: !ruby/object:Gem::Requirement
177
+ none: false
142
178
  requirements:
143
179
  - - ~>
144
180
  - !ruby/object:Gem::Version
@@ -146,6 +182,7 @@ dependencies:
146
182
  type: :development
147
183
  prerelease: false
148
184
  version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
149
186
  requirements:
150
187
  - - ~>
151
188
  - !ruby/object:Gem::Version
@@ -153,6 +190,7 @@ dependencies:
153
190
  - !ruby/object:Gem::Dependency
154
191
  name: minitest
155
192
  requirement: !ruby/object:Gem::Requirement
193
+ none: false
156
194
  requirements:
157
195
  - - ~>
158
196
  - !ruby/object:Gem::Version
@@ -160,6 +198,7 @@ dependencies:
160
198
  type: :development
161
199
  prerelease: false
162
200
  version_requirements: !ruby/object:Gem::Requirement
201
+ none: false
163
202
  requirements:
164
203
  - - ~>
165
204
  - !ruby/object:Gem::Version
@@ -167,6 +206,7 @@ dependencies:
167
206
  - !ruby/object:Gem::Dependency
168
207
  name: torquebox-no-op
169
208
  requirement: !ruby/object:Gem::Requirement
209
+ none: false
170
210
  requirements:
171
211
  - - ~>
172
212
  - !ruby/object:Gem::Version
@@ -174,12 +214,45 @@ dependencies:
174
214
  type: :development
175
215
  prerelease: false
176
216
  version_requirements: !ruby/object:Gem::Requirement
217
+ none: false
177
218
  requirements:
178
219
  - - ~>
179
220
  - !ruby/object:Gem::Version
180
221
  version: '2.3'
181
- description: Send Devise's emails in background. Supports Resque, Sidekiq, Delayed::Job
182
- and QueueClassic.
222
+ - !ruby/object:Gem::Dependency
223
+ name: sucker_punch
224
+ requirement: !ruby/object:Gem::Requirement
225
+ none: false
226
+ requirements:
227
+ - - ~>
228
+ - !ruby/object:Gem::Version
229
+ version: 1.0.5
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ none: false
234
+ requirements:
235
+ - - ~>
236
+ - !ruby/object:Gem::Version
237
+ version: 1.0.5
238
+ - !ruby/object:Gem::Dependency
239
+ name: que
240
+ requirement: !ruby/object:Gem::Requirement
241
+ none: false
242
+ requirements:
243
+ - - ~>
244
+ - !ruby/object:Gem::Version
245
+ version: '0.8'
246
+ type: :development
247
+ prerelease: false
248
+ version_requirements: !ruby/object:Gem::Requirement
249
+ none: false
250
+ requirements:
251
+ - - ~>
252
+ - !ruby/object:Gem::Version
253
+ version: '0.8'
254
+ description: Send Devise's emails in background. Supports Backburner, Resque, Sidekiq,
255
+ Delayed::Job, QueueClassic, Que, Sucker Punch and Torquebox.
183
256
  email:
184
257
  - marcelo@mhfs.com.br
185
258
  executables: []
@@ -197,20 +270,26 @@ files:
197
270
  - lib/devise-async.rb
198
271
  - lib/devise/async.rb
199
272
  - lib/devise/async/backend.rb
273
+ - lib/devise/async/backend/backburner.rb
200
274
  - lib/devise/async/backend/base.rb
201
275
  - lib/devise/async/backend/delayed_job.rb
276
+ - lib/devise/async/backend/que.rb
202
277
  - lib/devise/async/backend/queue_classic.rb
203
278
  - lib/devise/async/backend/resque.rb
204
279
  - lib/devise/async/backend/sidekiq.rb
280
+ - lib/devise/async/backend/sucker_punch.rb
205
281
  - lib/devise/async/backend/torquebox.rb
206
282
  - lib/devise/async/model.rb
207
283
  - lib/devise/async/version.rb
208
284
  - lib/devise/async/worker.rb
285
+ - test/devise/async/backend/backburner_test.rb
209
286
  - test/devise/async/backend/base_test.rb
210
287
  - test/devise/async/backend/delayed_job_test.rb
288
+ - test/devise/async/backend/que_test.rb
211
289
  - test/devise/async/backend/queue_classic_test.rb
212
290
  - test/devise/async/backend/resque_test.rb
213
291
  - test/devise/async/backend/sidekiq_test.rb
292
+ - test/devise/async/backend/sucker_punch_test.rb
214
293
  - test/devise/async/backend/torquebox_test.rb
215
294
  - test/devise/async/backend_test.rb
216
295
  - test/devise/async/model_test.rb
@@ -231,35 +310,39 @@ files:
231
310
  - test/test_helper.rb
232
311
  homepage: https://github.com/mhfs/devise-async/
233
312
  licenses: []
234
- metadata: {}
235
313
  post_install_message:
236
314
  rdoc_options: []
237
315
  require_paths:
238
316
  - lib
239
317
  required_ruby_version: !ruby/object:Gem::Requirement
318
+ none: false
240
319
  requirements:
241
- - - '>='
320
+ - - ! '>='
242
321
  - !ruby/object:Gem::Version
243
322
  version: '0'
244
323
  required_rubygems_version: !ruby/object:Gem::Requirement
324
+ none: false
245
325
  requirements:
246
- - - '>='
326
+ - - ! '>'
247
327
  - !ruby/object:Gem::Version
248
- version: '0'
328
+ version: 1.3.1
249
329
  requirements: []
250
330
  rubyforge_project:
251
- rubygems_version: 2.0.3
331
+ rubygems_version: 1.8.23
252
332
  signing_key:
253
- specification_version: 4
333
+ specification_version: 3
254
334
  summary: Devise Async provides an easy way to configure Devise to send its emails
255
- asynchronously using your preferred queuing backend. It supports Resque, Sidekiq,
256
- Delayed::Job and QueueClassic.
335
+ asynchronously using your preferred queuing backend. It supports Backburner, Resque,
336
+ Sidekiq, Delayed::Job, QueueClassic, Que, Sucker Punch and Torquebox.
257
337
  test_files:
338
+ - test/devise/async/backend/backburner_test.rb
258
339
  - test/devise/async/backend/base_test.rb
259
340
  - test/devise/async/backend/delayed_job_test.rb
341
+ - test/devise/async/backend/que_test.rb
260
342
  - test/devise/async/backend/queue_classic_test.rb
261
343
  - test/devise/async/backend/resque_test.rb
262
344
  - test/devise/async/backend/sidekiq_test.rb
345
+ - test/devise/async/backend/sucker_punch_test.rb
263
346
  - test/devise/async/backend/torquebox_test.rb
264
347
  - test/devise/async/backend_test.rb
265
348
  - test/devise/async/model_test.rb
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 0bc72ccc5171244615739769bf6b9fca485d6701
4
- data.tar.gz: 5ddee310635e35eaa7c892db50eaa5db3ab612dc
5
- SHA512:
6
- metadata.gz: 1bc76ed72a9a0c688cc820eda1089ceb730f46db902047f31c50f6673d0500ad05f382500280d320330a4be85b8941f9d3220a2654c4ed67d539a013ea57be69
7
- data.tar.gz: 9091df36bf6efe21894c93828f8f5e64865d72b8c12e4753ffe869c40581b1ebd311c619ca7a7d1b6c6f02cf994c08be5a3d18163fb6ee80a124714052b7381c