devise-async 0.10.2 → 1.0.0beta
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/.gitignore +3 -4
- data/.rspec +2 -0
- data/.travis.yml +4 -5
- data/CHANGELOG.md +4 -1
- data/README.md +4 -0
- data/devise-async.gemspec +17 -24
- data/lib/devise/async.rb +5 -34
- data/lib/devise/async/model.rb +8 -30
- data/lib/devise/async/version.rb +1 -1
- data/spec/devise/async/model_spec.rb +95 -0
- data/spec/devise/async_spec.rb +13 -0
- data/spec/rails_helper.rb +23 -0
- data/spec/spec_helper.rb +22 -0
- data/{test → spec}/support/rails_app.rb +3 -2
- data/{test → spec}/support/rails_app/app/models/admin.rb +0 -0
- data/{test → spec}/support/rails_app/config/database.yml +0 -0
- data/{test → spec}/support/rails_app/config/initializers/devise.rb +0 -1
- data/{test → spec}/support/rails_app/config/routes.rb +1 -1
- data/spec/support/rails_app/db/schema.rb +30 -0
- data/spec/support/test_helpers.rb +19 -0
- metadata +76 -206
- data/lib/devise/async/backend.rb +0 -13
- data/lib/devise/async/backend/backburner.rb +0 -25
- data/lib/devise/async/backend/base.rb +0 -49
- data/lib/devise/async/backend/delayed_job.rb +0 -15
- data/lib/devise/async/backend/que.rb +0 -19
- data/lib/devise/async/backend/queue_classic.rb +0 -20
- data/lib/devise/async/backend/resque.rb +0 -18
- data/lib/devise/async/backend/sidekiq.rb +0 -15
- data/lib/devise/async/backend/sucker_punch.rb +0 -23
- data/lib/devise/async/backend/torquebox.rb +0 -14
- data/lib/devise/async/worker.rb +0 -35
- data/test/devise/async/backend/backburner_test.rb +0 -33
- data/test/devise/async/backend/base_test.rb +0 -70
- data/test/devise/async/backend/delayed_job_test.rb +0 -36
- data/test/devise/async/backend/que_test.rb +0 -21
- data/test/devise/async/backend/queue_classic_test.rb +0 -29
- data/test/devise/async/backend/resque_test.rb +0 -27
- data/test/devise/async/backend/sidekiq_test.rb +0 -27
- data/test/devise/async/backend/sucker_punch_test.rb +0 -21
- data/test/devise/async/backend/torquebox_test.rb +0 -21
- data/test/devise/async/backend_test.rb +0 -37
- data/test/devise/async/model_test.rb +0 -100
- data/test/devise/async/worker_test.rb +0 -56
- data/test/devise/async_test.rb +0 -31
- data/test/support/my_mailer.rb +0 -2
- data/test/support/rails_app/app/models/user.rb +0 -5
- data/test/support/rails_app/app/models/user_with_mailer.rb +0 -6
- data/test/support/rails_app/config/initializers/devise_async.rb +0 -3
- data/test/support/rails_app/db/schema.rb +0 -68
- data/test/support/test_helpers.rb +0 -38
- data/test/test_helper.rb +0 -31
@@ -1,27 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
|
3
|
-
module Devise
|
4
|
-
module Async
|
5
|
-
module Backend
|
6
|
-
describe "Resque" do
|
7
|
-
it "enqueues job" do
|
8
|
-
::Resque.expects(:enqueue).with(Resque, :mailer_method, "User", 123, {})
|
9
|
-
Resque.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::Resque.perform(:confirmation_instructions, "User", user.id, {})
|
16
|
-
ActionMailer::Base.deliveries.size.must_equal 1
|
17
|
-
end
|
18
|
-
|
19
|
-
it "enqueues to configured queue" do
|
20
|
-
expected_size = 1 + ::Resque.size(:custom_queue)
|
21
|
-
Resque.enqueue(:mailer_method, "User", 123, {})
|
22
|
-
::Resque.size(:custom_queue).must_equal expected_size
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
|
3
|
-
module Devise
|
4
|
-
module Async
|
5
|
-
module Backend
|
6
|
-
describe "Sidekiq" do
|
7
|
-
it "enqueues job" do
|
8
|
-
Sidekiq.expects(:perform_async).with(:mailer_method, "User", 123, {})
|
9
|
-
Sidekiq.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::Sidekiq.new.perform(:confirmation_instructions, "User", user.id, {})
|
16
|
-
ActionMailer::Base.deliveries.size.must_equal 1
|
17
|
-
end
|
18
|
-
|
19
|
-
it "enqueues to configured queue" do
|
20
|
-
expected_size = 1 + Sidekiq.jobs.size
|
21
|
-
Sidekiq.enqueue(:mailer_method, "User", 123, {})
|
22
|
-
Sidekiq.jobs.size.must_equal expected_size
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,21 +0,0 @@
|
|
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
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
|
3
|
-
module Devise
|
4
|
-
module Async
|
5
|
-
module Backend
|
6
|
-
describe "Torquebox" do
|
7
|
-
it "enqueues job" do
|
8
|
-
Torquebox.any_instance.expects(:perform).with(:mailer_method, "User", 123, {})
|
9
|
-
Torquebox.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::Torquebox.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
|
@@ -1,37 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
|
3
|
-
module Devise
|
4
|
-
module Async
|
5
|
-
describe "Backend" do
|
6
|
-
it "gives resque as the backend" do
|
7
|
-
Backend.for(:resque).must_equal Backend::Resque
|
8
|
-
end
|
9
|
-
|
10
|
-
it "gives sidekiq as the backend" do
|
11
|
-
Backend.for(:sidekiq).must_equal Backend::Sidekiq
|
12
|
-
end
|
13
|
-
|
14
|
-
it "gives backburner as the backend" do
|
15
|
-
Backend.for(:backburner).must_equal Backend::Backburner
|
16
|
-
end
|
17
|
-
|
18
|
-
it "gives delayed job as the backend" do
|
19
|
-
Backend.for(:delayed_job).must_equal Backend::DelayedJob
|
20
|
-
end
|
21
|
-
|
22
|
-
it "gives queue classic as the backend" do
|
23
|
-
Backend.for(:queue_classic).must_equal Backend::QueueClassic
|
24
|
-
end
|
25
|
-
|
26
|
-
it "gives sucker punch as the backend" do
|
27
|
-
Backend.for(:sucker_punch).must_equal Backend::SuckerPunch
|
28
|
-
end
|
29
|
-
|
30
|
-
it "alerts about unsupported backend" do
|
31
|
-
assert_raises ArgumentError do
|
32
|
-
Backend.for(:unsupported_backend)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,100 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
|
3
|
-
module Devise
|
4
|
-
module Async
|
5
|
-
describe "Model" do
|
6
|
-
it "accumulates notifications to be sent after commit on Model creation" do
|
7
|
-
Admin.transaction do
|
8
|
-
admin = create_admin
|
9
|
-
mailers = admin.send(:devise_pending_notifications) # [:confirmation_instructions, ["RUQUib67wLcCiEyZMwfx", {}]]
|
10
|
-
mailers.size.must_equal 1
|
11
|
-
|
12
|
-
mailer = mailers.first
|
13
|
-
mailer.size.must_equal 2
|
14
|
-
mailer.first.must_equal :confirmation_instructions
|
15
|
-
mailer.last.must_be_instance_of Array
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
it "immediately sends notifications when the model has not changed" do
|
20
|
-
admin = create_admin
|
21
|
-
Worker.expects(:enqueue).with(:confirmation_instructions, "Admin", admin.id.to_s, instance_of(String), {})
|
22
|
-
admin.send_confirmation_instructions
|
23
|
-
end
|
24
|
-
|
25
|
-
it "accumulates notifications to be sent after commit when Model has been changed" do
|
26
|
-
admin = create_admin
|
27
|
-
Admin.transaction do
|
28
|
-
admin[:username] = "changed_username"
|
29
|
-
admin.send_confirmation_instructions
|
30
|
-
|
31
|
-
mailers = admin.send(:devise_pending_notifications) # [:confirmation_instructions, ["RUQUib67wLcCiEyZMwfx", {}]]
|
32
|
-
mailers.size.must_equal 1
|
33
|
-
|
34
|
-
mailer = mailers.first
|
35
|
-
mailer.size.must_equal 2
|
36
|
-
mailer.first.must_equal :confirmation_instructions
|
37
|
-
mailer.last.must_be_instance_of Array
|
38
|
-
|
39
|
-
Worker.expects(:enqueue).never # after_commit will not fire without save
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
it "triggers the enqueued notifications on save" do
|
44
|
-
admin = create_admin
|
45
|
-
Admin.transaction do
|
46
|
-
admin[:username] = "changed_username"
|
47
|
-
admin.send_confirmation_instructions
|
48
|
-
|
49
|
-
mailers = admin.send(:devise_pending_notifications) # [:confirmation_instructions, ["RUQUib67wLcCiEyZMwfx", {}]]
|
50
|
-
mailers.size.must_equal 1
|
51
|
-
|
52
|
-
mailer = mailers.first
|
53
|
-
mailer.size.must_equal 2
|
54
|
-
mailer.first.must_equal :confirmation_instructions
|
55
|
-
mailer.last.must_be_instance_of Array
|
56
|
-
|
57
|
-
admin.save
|
58
|
-
Worker.expects(:enqueue).with(:confirmation_instructions, "Admin", admin.id.to_s, instance_of(String), {})
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
it "should not enqueue a job if the enabled config option is set to false" do
|
63
|
-
Devise::Async.stubs(:enabled).returns(false)
|
64
|
-
|
65
|
-
# Stubbing the devise's confirmation_instructions
|
66
|
-
confirmation_email = Object.new
|
67
|
-
Devise::Mailer.stubs(:confirmation_instructions).returns(confirmation_email)
|
68
|
-
confirmation_email.stubs(:deliver).returns(true) # Stubbing the email sending process
|
69
|
-
|
70
|
-
admin = create_admin
|
71
|
-
admin.send(:devise_pending_notifications).must_equal []
|
72
|
-
Worker.expects(:enqueue).never
|
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
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
|
3
|
-
module Devise
|
4
|
-
module Async
|
5
|
-
describe "Worker" do
|
6
|
-
it "enqueues job using the resque backend" do
|
7
|
-
Devise::Async.backend = :resque
|
8
|
-
|
9
|
-
Backend::Resque.expects(:enqueue).with(:mailer_method, "User", 123, {})
|
10
|
-
Worker.enqueue(:mailer_method, "User", 123, {})
|
11
|
-
end
|
12
|
-
|
13
|
-
it "enqueues job using the sidekiq backend" do
|
14
|
-
Devise::Async.backend = :sidekiq
|
15
|
-
|
16
|
-
Backend::Sidekiq.expects(:enqueue).with(:mailer_method, "User", 123, {})
|
17
|
-
Worker.enqueue(:mailer_method, "User", 123, {})
|
18
|
-
end
|
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
|
-
|
27
|
-
it "enqueues job using the delayed job backend" do
|
28
|
-
Devise::Async.backend = :delayed_job
|
29
|
-
|
30
|
-
Backend::DelayedJob.expects(:enqueue).with(:mailer_method, "User", 123, {})
|
31
|
-
Worker.enqueue(:mailer_method, "User", 123, {})
|
32
|
-
end
|
33
|
-
|
34
|
-
it "enqueues job using the queue classic backend" do
|
35
|
-
Devise::Async.backend = :queue_classic
|
36
|
-
|
37
|
-
Backend::QueueClassic.expects(:enqueue).with(:mailer_method, "User", 123, {})
|
38
|
-
Worker.enqueue(:mailer_method, "User", 123, {})
|
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
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
data/test/devise/async_test.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
|
3
|
-
module Devise
|
4
|
-
describe "Async" do
|
5
|
-
|
6
|
-
after do
|
7
|
-
Async.backend = :resque
|
8
|
-
end
|
9
|
-
|
10
|
-
it "yields self when setup is called" do
|
11
|
-
Async.setup { |config| config.must_equal Async }
|
12
|
-
end
|
13
|
-
|
14
|
-
it "stores backend config" do
|
15
|
-
Async.backend = :something
|
16
|
-
Async.backend.must_equal :something
|
17
|
-
end
|
18
|
-
|
19
|
-
it "stores enabled config" do
|
20
|
-
Async.backend = false
|
21
|
-
Async.backend.must_equal false
|
22
|
-
end
|
23
|
-
|
24
|
-
it "stores priority config" do
|
25
|
-
Async.priority = 15
|
26
|
-
Async.priority.must_equal 15
|
27
|
-
Async.priority = nil
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|
31
|
-
end
|
data/test/support/my_mailer.rb
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
ActiveRecord::Schema.define(:version => 1) do
|
2
|
-
begin
|
3
|
-
drop_table :users
|
4
|
-
drop_rable :delayed_jobs
|
5
|
-
rescue Exception => e
|
6
|
-
end
|
7
|
-
|
8
|
-
create_table "users", :force => true do |t|
|
9
|
-
t.string "username"
|
10
|
-
t.string "facebook_token"
|
11
|
-
t.string "email", :default => "", :null => false
|
12
|
-
t.string "unconfirmed_email", :default => ""
|
13
|
-
t.string "encrypted_password", :limit => 128, :default => "", :null => false
|
14
|
-
t.string "confirmation_token"
|
15
|
-
t.datetime "confirmed_at"
|
16
|
-
t.datetime "confirmation_sent_at"
|
17
|
-
t.string "reset_password_token"
|
18
|
-
t.datetime "remember_created_at"
|
19
|
-
t.integer "sign_in_count", :default => 0
|
20
|
-
t.datetime "current_sign_in_at"
|
21
|
-
t.datetime "last_sign_in_at"
|
22
|
-
t.string "current_sign_in_ip"
|
23
|
-
t.string "last_sign_in_ip"
|
24
|
-
t.integer "failed_attempts", :default => 0
|
25
|
-
t.string "unlock_token"
|
26
|
-
t.datetime "locked_at"
|
27
|
-
t.string "authentication_token"
|
28
|
-
t.datetime "created_at"
|
29
|
-
t.datetime "updated_at"
|
30
|
-
end
|
31
|
-
|
32
|
-
create_table "admins", :force => true do |t|
|
33
|
-
t.string "username"
|
34
|
-
t.string "facebook_token"
|
35
|
-
t.string "email", :default => "", :null => false
|
36
|
-
t.string "unconfirmed_email", :default => ""
|
37
|
-
t.string "encrypted_password", :limit => 128, :default => "", :null => false
|
38
|
-
t.string "confirmation_token"
|
39
|
-
t.datetime "confirmed_at"
|
40
|
-
t.datetime "confirmation_sent_at"
|
41
|
-
t.string "reset_password_token"
|
42
|
-
t.datetime "remember_created_at"
|
43
|
-
t.integer "sign_in_count", :default => 0
|
44
|
-
t.datetime "current_sign_in_at"
|
45
|
-
t.datetime "last_sign_in_at"
|
46
|
-
t.string "current_sign_in_ip"
|
47
|
-
t.string "last_sign_in_ip"
|
48
|
-
t.integer "failed_attempts", :default => 0
|
49
|
-
t.string "unlock_token"
|
50
|
-
t.datetime "locked_at"
|
51
|
-
t.string "authentication_token"
|
52
|
-
t.datetime "created_at"
|
53
|
-
t.datetime "updated_at"
|
54
|
-
end
|
55
|
-
|
56
|
-
create_table :delayed_jobs, :force => true do |table|
|
57
|
-
table.integer :priority, :default => 0 # Allows some jobs to jump to the front of the queue
|
58
|
-
table.integer :attempts, :default => 0 # Provides for retries, but still fail eventually.
|
59
|
-
table.text :handler # YAML-encoded string of the object that will do work
|
60
|
-
table.text :last_error # reason for last failure (See Note below)
|
61
|
-
table.datetime :run_at # When to run. Could be Time.zone.now for immediately, or sometime in the future.
|
62
|
-
table.datetime :locked_at # Set when a client is working on this object
|
63
|
-
table.datetime :failed_at # Set when all retries have failed (actually, by default, the record is deleted instead)
|
64
|
-
table.string :locked_by # Who is working on this object (if locked)
|
65
|
-
table.string :queue # The name of the queue this job is in
|
66
|
-
table.timestamps
|
67
|
-
end
|
68
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
module TestHelpers
|
2
|
-
def valid_attributes(attributes={})
|
3
|
-
{ :username => "usertest",
|
4
|
-
:email => generate_unique_email,
|
5
|
-
:password => '12345678',
|
6
|
-
:password_confirmation => '12345678' }.update(attributes)
|
7
|
-
end
|
8
|
-
|
9
|
-
email_count = 0
|
10
|
-
define_method :generate_unique_email do
|
11
|
-
email_count += 1
|
12
|
-
"test#{email_count}@example.com"
|
13
|
-
end
|
14
|
-
|
15
|
-
def new_user(attributes={})
|
16
|
-
User.new(valid_attributes(attributes))
|
17
|
-
end
|
18
|
-
|
19
|
-
def create_user(attributes={})
|
20
|
-
User.create!(valid_attributes(attributes))
|
21
|
-
end
|
22
|
-
|
23
|
-
def new_user_with_mailer(attributes={})
|
24
|
-
UserWithMailer.new(valid_attributes(attributes))
|
25
|
-
end
|
26
|
-
|
27
|
-
def create_user_with_mailer(attributes={})
|
28
|
-
UserWithMailer.create!(valid_attributes(attributes))
|
29
|
-
end
|
30
|
-
|
31
|
-
def new_admin(attributes={})
|
32
|
-
Admin.new(valid_attributes(attributes))
|
33
|
-
end
|
34
|
-
|
35
|
-
def create_admin(attributes={})
|
36
|
-
Admin.create!(valid_attributes(attributes))
|
37
|
-
end
|
38
|
-
end
|