devise-async 0.10.2 → 1.0.0beta

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.
Files changed (53) hide show
  1. checksums.yaml +5 -13
  2. data/.gitignore +3 -4
  3. data/.rspec +2 -0
  4. data/.travis.yml +4 -5
  5. data/CHANGELOG.md +4 -1
  6. data/README.md +4 -0
  7. data/devise-async.gemspec +17 -24
  8. data/lib/devise/async.rb +5 -34
  9. data/lib/devise/async/model.rb +8 -30
  10. data/lib/devise/async/version.rb +1 -1
  11. data/spec/devise/async/model_spec.rb +95 -0
  12. data/spec/devise/async_spec.rb +13 -0
  13. data/spec/rails_helper.rb +23 -0
  14. data/spec/spec_helper.rb +22 -0
  15. data/{test → spec}/support/rails_app.rb +3 -2
  16. data/{test → spec}/support/rails_app/app/models/admin.rb +0 -0
  17. data/{test → spec}/support/rails_app/config/database.yml +0 -0
  18. data/{test → spec}/support/rails_app/config/initializers/devise.rb +0 -1
  19. data/{test → spec}/support/rails_app/config/routes.rb +1 -1
  20. data/spec/support/rails_app/db/schema.rb +30 -0
  21. data/spec/support/test_helpers.rb +19 -0
  22. metadata +76 -206
  23. data/lib/devise/async/backend.rb +0 -13
  24. data/lib/devise/async/backend/backburner.rb +0 -25
  25. data/lib/devise/async/backend/base.rb +0 -49
  26. data/lib/devise/async/backend/delayed_job.rb +0 -15
  27. data/lib/devise/async/backend/que.rb +0 -19
  28. data/lib/devise/async/backend/queue_classic.rb +0 -20
  29. data/lib/devise/async/backend/resque.rb +0 -18
  30. data/lib/devise/async/backend/sidekiq.rb +0 -15
  31. data/lib/devise/async/backend/sucker_punch.rb +0 -23
  32. data/lib/devise/async/backend/torquebox.rb +0 -14
  33. data/lib/devise/async/worker.rb +0 -35
  34. data/test/devise/async/backend/backburner_test.rb +0 -33
  35. data/test/devise/async/backend/base_test.rb +0 -70
  36. data/test/devise/async/backend/delayed_job_test.rb +0 -36
  37. data/test/devise/async/backend/que_test.rb +0 -21
  38. data/test/devise/async/backend/queue_classic_test.rb +0 -29
  39. data/test/devise/async/backend/resque_test.rb +0 -27
  40. data/test/devise/async/backend/sidekiq_test.rb +0 -27
  41. data/test/devise/async/backend/sucker_punch_test.rb +0 -21
  42. data/test/devise/async/backend/torquebox_test.rb +0 -21
  43. data/test/devise/async/backend_test.rb +0 -37
  44. data/test/devise/async/model_test.rb +0 -100
  45. data/test/devise/async/worker_test.rb +0 -56
  46. data/test/devise/async_test.rb +0 -31
  47. data/test/support/my_mailer.rb +0 -2
  48. data/test/support/rails_app/app/models/user.rb +0 -5
  49. data/test/support/rails_app/app/models/user_with_mailer.rb +0 -6
  50. data/test/support/rails_app/config/initializers/devise_async.rb +0 -3
  51. data/test/support/rails_app/db/schema.rb +0 -68
  52. data/test/support/test_helpers.rb +0 -38
  53. data/test/test_helper.rb +0 -31
@@ -1,13 +0,0 @@
1
- module Devise
2
- module Async
3
- module Backend
4
- # Gives the desired backend driver class to be used to enqueue
5
- # jobs.
6
- def self.for(backend)
7
- const_get(backend.to_s.camelize)
8
- rescue NameError
9
- raise ArgumentError, "unsupported backend for devise-async."
10
- end
11
- end
12
- end
13
- end
@@ -1,25 +0,0 @@
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
@@ -1,49 +0,0 @@
1
- module Devise
2
- module Async
3
- module Backend
4
- class Base
5
- def self.enqueue(*args)
6
- raise NotImplementedError, "Any DeviseAssync::Backend subclass should implement `self.enqueue`."
7
- end
8
-
9
- # Loads the resource record and sends the email.
10
- #
11
- # It uses `orm_adapter` API to fetch the record in order to enforce
12
- # compatibility among diferent ORMs.
13
- #
14
- # This method is executed within the scope of the locale of
15
- # the calling thread.
16
- def perform(method, resource_class, resource_id, *args)
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
23
- end
24
-
25
- private
26
-
27
- def mailer_class(resource = nil)
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)
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
-
46
- end
47
- end
48
- end
49
- end
@@ -1,15 +0,0 @@
1
- module Devise
2
- module Async
3
- module Backend
4
- class DelayedJob < Base
5
- def self.enqueue(*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
11
- end
12
- end
13
- end
14
- end
15
- end
@@ -1,19 +0,0 @@
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
@@ -1,20 +0,0 @@
1
- require "queue_classic"
2
-
3
- module Devise
4
- module Async
5
- module Backend
6
- class QueueClassic < Base
7
- def self.enqueue(method, *args)
8
- queue = ::QC::Queue.new(Devise::Async.queue)
9
- method = String(method) # QC won't serialize Symbol such as #{method}
10
- args.unshift("#{self}.perform", method)
11
- queue.enqueue(*args)
12
- end
13
-
14
- def self.perform(*args)
15
- new.perform(*args)
16
- end
17
- end
18
- end
19
- end
20
- end
@@ -1,18 +0,0 @@
1
- module Devise
2
- module Async
3
- module Backend
4
- class Resque < Base
5
- @queue = Devise::Async.queue
6
-
7
- def self.enqueue(*args)
8
- args.unshift(self)
9
- ::Resque.enqueue(*args)
10
- end
11
-
12
- def self.perform(*args)
13
- new.perform(*args)
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,15 +0,0 @@
1
- module Devise
2
- module Async
3
- module Backend
4
- class Sidekiq < Base
5
- include ::Sidekiq::Worker
6
-
7
- sidekiq_options :queue => Devise::Async.queue
8
-
9
- def self.enqueue(*args)
10
- perform_async(*args)
11
- end
12
- end
13
- end
14
- end
15
- end
@@ -1,23 +0,0 @@
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
@@ -1,14 +0,0 @@
1
- module Devise
2
- module Async
3
- module Backend
4
- class Torquebox < Base
5
- include ::TorqueBox::Messaging::Backgroundable
6
- always_background :perform
7
-
8
- def self.enqueue(*args)
9
- new.perform(*args) # using always_background
10
- end
11
- end
12
- end
13
- end
14
- end
@@ -1,35 +0,0 @@
1
- module Devise
2
- module Async
3
- class Worker
4
- class << self
5
-
6
- # Used is the internal interface for devise-async to enqueue notifications
7
- # to the desired backend.
8
- def enqueue(method, resource_class, resource_id, *args)
9
- # convert args to strings and hashes with string keys before passing to backend
10
- args = stringify_args args
11
- backend_class.enqueue(method, resource_class, resource_id, *args)
12
- end
13
-
14
- private
15
-
16
- def stringify_args(args)
17
- args.map do |a|
18
- case a
19
- when Hash
20
- a.stringify_keys
21
- when Symbol
22
- a.to_s
23
- else
24
- a
25
- end
26
- end
27
- end
28
-
29
- def backend_class
30
- Backend.for(Devise::Async.backend)
31
- end
32
- end
33
- end
34
- end
35
- end
@@ -1,33 +0,0 @@
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
@@ -1,70 +0,0 @@
1
- require "test_helper"
2
-
3
- module Devise
4
- module Async
5
- module Backend
6
-
7
- describe "Base" do
8
-
9
- before do
10
- Devise.mailer = "MyMailer"
11
- @user = create_user
12
- end
13
-
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, {})
33
- end
34
-
35
- it "delegates to model configured mailer" do
36
- user = create_user_with_mailer
37
- mailer_instance = mock(:deliver => true)
38
-
39
- MyMailer.expects(:confirmation_instructions).once.returns(mailer_instance)
40
- Base.new.perform(:confirmation_instructions, "UserWithMailer", user.id, {})
41
- end
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
-
64
- after do
65
- Devise.mailer = "Devise::Mailer"
66
- end
67
- end
68
- end
69
- end
70
- end
@@ -1,36 +0,0 @@
1
- require "test_helper"
2
-
3
- module Devise
4
- module Async
5
- module Backend
6
- describe "DelayedJob" do
7
- it "enqueues job" do
8
- delayed_instance = mock()
9
- delayed_instance.expects(:perform).once.with(:mailer_method, "User", 123, {})
10
- DelayedJob.any_instance.expects(:delay).with(:queue => Devise::Async.queue, :priority => DelayedJob.priority).once.returns(delayed_instance)
11
-
12
- DelayedJob.enqueue(:mailer_method, "User", 123, {})
13
- end
14
-
15
- it "delegates to devise mailer when delivering" do
16
- user = create_user
17
- ActionMailer::Base.deliveries = []
18
- Backend::DelayedJob.new.perform(:confirmation_instructions, "User", user.id, {})
19
- ActionMailer::Base.deliveries.size.must_equal 1
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
33
- end
34
- end
35
- end
36
- end
@@ -1,21 +0,0 @@
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
@@ -1,29 +0,0 @@
1
- require "test_helper"
2
-
3
- module Devise
4
- module Async
5
- module Backend
6
- describe "QueueClassic" do
7
- it "enqueues job" do
8
- ::QC::Queue.any_instance.expects(:enqueue).with(
9
- "Devise::Async::Backend::QueueClassic.perform",
10
- "mailer_method", "User", 123, {})
11
- QueueClassic.enqueue(:mailer_method, "User", 123, {})
12
- end
13
-
14
- it "delegates to devise mailer when delivering" do
15
- user = create_user
16
- ActionMailer::Base.deliveries = []
17
- Backend::QueueClassic.perform(:confirmation_instructions, "User", user.id, {})
18
- ActionMailer::Base.deliveries.size.must_equal 1
19
- end
20
-
21
- it "enqueues to configured queue" do
22
- queue = mock(:enqueue => nil)
23
- ::QC::Queue.expects(:new).with(:custom_queue).once.returns(queue)
24
- QueueClassic.enqueue(:mailer_method, "User", 123, {})
25
- end
26
- end
27
- end
28
- end
29
- end