sidekiq-activerecord 0.0.4 → 0.0.5

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
1
  ---
2
2
  SHA1:
3
- metadata.gz: d5ab93d1d218ef784216eb2a2769fae0fb837eeb
4
- data.tar.gz: 9a346662abbacb3842fc32bfd8077e9e904cc9e7
3
+ metadata.gz: 9139afdf7efd7b2b766b0f0c79cbffe98cf0a3df
4
+ data.tar.gz: 579edad53f837e6254d84205f0a0c58985f95fb0
5
5
  SHA512:
6
- metadata.gz: 68268f2371d13e508b4b21a65c090edc75d9575ee0ed1caf91cf339dd5359f0ef75a67bad6430c0dab3e8709f53b8dd0b42524a9686d3c2af2be5813d40f6e63
7
- data.tar.gz: 0ff832cd5fa773e2de3cb682a4b6223c8557810015f358fb565e1cec06123eb664d2844c64ec3b7089d7bd3e1276f7a4600db0a6dd98d2925745c62551387da8
6
+ metadata.gz: 3dd406e37261203cb64935227bef8bc3448917a7aef5f1035f0a4baea91fe41fbb38b4483155a37eebc732c5504c44ba98b4a94add2b15b9fb068fce1917cbc9
7
+ data.tar.gz: f6ddc5772b85d0f80dbb9931fb1087dc8403480eb1bfd0b17df11002bed8ffd06006198cb54ef29fcabec8b93fe4a4bb8370669262df788751add0fa0c5442d3
data/README.md CHANGED
@@ -60,7 +60,7 @@ Checkout the project's [Wiki Page](https://github.com/sidekiq-orm/sidekiq-active
60
60
 
61
61
  Add this line to your application's Gemfile:
62
62
 
63
- gem 'sidekiq-activerecord'
63
+ gem 'sidekiq-activerecord', '~> 0.0.4'
64
64
 
65
65
  And then execute:
66
66
 
@@ -57,13 +57,13 @@ module Sidekiq
57
57
  # UserMailerTaskWorker.perform_async(user.id, :new_email)
58
58
  #
59
59
  def perform(identifier, *args)
60
- @task_model = fetch_model(identifier, *args)
61
- return not_found_model(identifier, *args) unless @task_model.present?
60
+ @task_model = call_alias_method(:fetch_model, identifier, *args)
61
+ return call_alias_method(:not_found_model, identifier, *args) unless @task_model.present?
62
62
 
63
- if should_perform_on_model?
64
- perform_on_model(*args)
63
+ if call_alias_method(:should_perform_on_model?)
64
+ call_alias_method(:perform_on_model, *args)
65
65
  else
66
- did_not_perform_on_model
66
+ call_alias_method(:did_not_perform_on_model)
67
67
  end
68
68
  end
69
69
 
@@ -91,6 +91,15 @@ module Sidekiq
91
91
  self.class.model_class.find_by(self.class.identifier_key => identifier)
92
92
  end
93
93
 
94
+ # Try calling the alias method, and fallback to default name if not defined
95
+ def call_alias_method(method_name, *args)
96
+ alias_name = self.class.method_aliases_mapping[method_name]
97
+ if respond_to?(alias_name.to_sym)
98
+ send(alias_name, *args)
99
+ else
100
+ send(method_name, *args)
101
+ end
102
+ end
94
103
 
95
104
  class << self
96
105
 
@@ -121,6 +130,9 @@ module Sidekiq
121
130
  @sidekiq_task_options_hash = get_sidekiq_task_options.merge((opts).symbolize_keys!)
122
131
  end
123
132
 
133
+ def method_aliases_mapping
134
+ @_method_aliases_mapping
135
+ end
124
136
 
125
137
  private
126
138
 
@@ -145,18 +157,19 @@ module Sidekiq
145
157
  if model_klass_name.is_a?(Class)
146
158
  model_klass_name = model_klass_name.name.underscore
147
159
  end
148
- {
160
+ setup_method_aliases_mapping(model_klass_name)
161
+ alias_method model_klass_name.to_sym, :task_model
162
+ end
163
+
164
+ def setup_method_aliases_mapping(model_klass_name)
165
+ @_method_aliases_mapping = {
149
166
  :task_model => model_klass_name,
150
167
  :fetch_model => "fetch_#{model_klass_name}",
151
168
  :not_found_model => "not_found_#{model_klass_name}",
152
169
  :should_perform_on_model? => "should_perform_on_#{model_klass_name}?",
153
170
  :did_not_perform_on_model => "did_not_perform_on_#{model_klass_name}",
154
171
  :perform_on_model => "perform_on_#{model_klass_name}"
155
- }.each do |old_name, new_name|
156
- self.class_exec do
157
- alias_method new_name.to_sym, old_name
158
- end
159
- end
172
+ }
160
173
  end
161
174
 
162
175
  def get_sidekiq_task_options
@@ -1,5 +1,5 @@
1
1
  module Sidekiq
2
2
  module ActiveRecord
3
- VERSION = "0.0.4"
3
+ VERSION = "0.0.5"
4
4
  end
5
5
  end
@@ -0,0 +1,27 @@
1
+ module Examples
2
+ class AliasUserTaskWorker < Sidekiq::ActiveRecord::TaskWorker
3
+
4
+ sidekiq_task_model :user # or User class
5
+ sidekiq_task_options :identifier_key => :email
6
+
7
+ def perform_on_user(new_email = nil)
8
+ UserMailer.update_email(user, new_email)
9
+ end
10
+
11
+ # optional
12
+ def not_found_user(email)
13
+ Log.error "User not found for email:#{email}"
14
+ end
15
+
16
+ # optional
17
+ def should_perform_on_user?
18
+ user.active?
19
+ end
20
+
21
+ # optional
22
+ def did_not_perform_on_user
23
+ Log.error "User #{user.id} is invalid"
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,11 @@
1
+ module Examples
2
+ class UserMailer
3
+ def self.update_email(user, new_email)
4
+ end
5
+ end
6
+
7
+ class Log
8
+ def self.error(msg)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,27 @@
1
+ module Examples
2
+ class NoAliasUserTaskWorker < Sidekiq::ActiveRecord::TaskWorker
3
+
4
+ sidekiq_task_model :user # or User class
5
+ sidekiq_task_options :identifier_key => :email
6
+
7
+ def perform_on_model(new_email = nil)
8
+ UserMailer.update_email(task_model, new_email)
9
+ end
10
+
11
+ # optional
12
+ def not_found_model(email)
13
+ Log.error "User not found for email:#{email}"
14
+ end
15
+
16
+ # optional
17
+ def should_perform_on_model?
18
+ user.active?
19
+ end
20
+
21
+ # optional
22
+ def did_not_perform_on_model
23
+ Log.error "User #{task_model.id} is invalid"
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,86 @@
1
+ module Examples
2
+ describe AliasUserTaskWorker do
3
+
4
+ let(:logger) { Log }
5
+ let(:service_class) { UserMailer }
6
+ let(:other_param) { 'new@email.com' }
7
+
8
+ let(:task_worker_class) { AliasUserTaskWorker }
9
+ subject(:task_worker) { AliasUserTaskWorker.new }
10
+
11
+ def run_worker
12
+ task_worker.perform(user.email, other_param)
13
+ end
14
+
15
+ before do
16
+ allow(service_class).to receive(:update_email)
17
+ allow(logger).to receive(:error)
18
+ end
19
+
20
+ context 'when the user is not found' do
21
+
22
+ let(:unfound_email) { 'unfound@email.com' }
23
+
24
+ it 'calls not_found_user' do
25
+ expect(task_worker).to receive(:not_found_user).with(unfound_email).and_call_original
26
+ task_worker.perform(unfound_email)
27
+ end
28
+
29
+ it 'calls the logger with the not found email' do
30
+ task_worker.perform(unfound_email)
31
+ expect(logger).to have_received(:error).with("User not found for email:#{unfound_email}")
32
+ end
33
+ end
34
+
35
+ context 'when the user is found' do
36
+
37
+ let(:user) { create(:user) }
38
+
39
+ it 'calls should_perform_on_user?' do
40
+ expect(task_worker).to receive(:should_perform_on_user?).and_call_original
41
+ run_worker
42
+ end
43
+
44
+ it 'check if the user is active' do
45
+ allow(task_worker).to receive(:user).and_return(user)
46
+ expect(user).to receive(:active?).and_call_original
47
+ run_worker
48
+ end
49
+
50
+ context 'when the user is active' do
51
+
52
+ let(:user) { create(:user, :active) }
53
+
54
+ it 'calls perform_on_user' do
55
+ expect(task_worker).to receive(:perform_on_user).and_call_original
56
+ run_worker
57
+ end
58
+
59
+ it 'calls the service class with the user' do
60
+ run_worker
61
+ expect(service_class).to have_received(:update_email).with(user, other_param)
62
+ end
63
+ end
64
+
65
+ context 'when the user is inactive' do
66
+
67
+ let(:user) { create(:user, :banned) }
68
+
69
+ it 'ignores the user' do
70
+ run_worker
71
+ expect(service_class).to_not have_received(:update_email)
72
+ end
73
+
74
+ it 'calls did_not_perform_on_user' do
75
+ expect(task_worker).to receive(:did_not_perform_on_user).and_call_original
76
+ run_worker
77
+ end
78
+
79
+ it 'calls the logger with the inactive user' do
80
+ run_worker
81
+ expect(logger).to have_received(:error).with("User #{user.id} is invalid")
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,86 @@
1
+ module Examples
2
+ describe NoAliasUserTaskWorker do
3
+
4
+ let(:logger) { Log }
5
+ let(:service_class) { UserMailer }
6
+ let(:other_param) { 'new@email.com' }
7
+
8
+ let(:task_worker_class) { NoAliasUserTaskWorker }
9
+ subject(:task_worker) { NoAliasUserTaskWorker.new }
10
+
11
+ def run_worker
12
+ task_worker.perform(user.email, other_param)
13
+ end
14
+
15
+ before do
16
+ allow(service_class).to receive(:update_email)
17
+ allow(logger).to receive(:error)
18
+ end
19
+
20
+ context 'when the user is not found' do
21
+
22
+ let(:unfound_email) { 'unfound@email.com' }
23
+
24
+ it 'calls not_found_model' do
25
+ expect(task_worker).to receive(:not_found_model).with(unfound_email).and_call_original
26
+ task_worker.perform(unfound_email)
27
+ end
28
+
29
+ it 'calls the logger with the not found email' do
30
+ task_worker.perform(unfound_email)
31
+ expect(logger).to have_received(:error).with("User not found for email:#{unfound_email}")
32
+ end
33
+ end
34
+
35
+ context 'when the user is found' do
36
+
37
+ let(:user) { create(:user) }
38
+
39
+ it 'calls should_perform_on_model?' do
40
+ expect(task_worker).to receive(:should_perform_on_model?).and_call_original
41
+ run_worker
42
+ end
43
+
44
+ it 'check if the user is active' do
45
+ allow(task_worker).to receive(:user).and_return(user)
46
+ expect(user).to receive(:active?).and_call_original
47
+ run_worker
48
+ end
49
+
50
+ context 'when the user is active' do
51
+
52
+ let(:user) { create(:user, :active) }
53
+
54
+ it 'calls perform_on_model' do
55
+ expect(task_worker).to receive(:perform_on_model).and_call_original
56
+ run_worker
57
+ end
58
+
59
+ it 'calls the service class with the user' do
60
+ run_worker
61
+ expect(service_class).to have_received(:update_email).with(user, other_param)
62
+ end
63
+ end
64
+
65
+ context 'when the user is inactive' do
66
+
67
+ let(:user) { create(:user, :banned) }
68
+
69
+ it 'ignores the user' do
70
+ run_worker
71
+ expect(service_class).to_not have_received(:update_email)
72
+ end
73
+
74
+ it 'calls did_not_perform_on_model' do
75
+ expect(task_worker).to receive(:did_not_perform_on_model).and_call_original
76
+ run_worker
77
+ end
78
+
79
+ it 'calls the logger with the inactive user' do
80
+ run_worker
81
+ expect(logger).to have_received(:error).with("User #{user.id} is invalid")
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
@@ -92,11 +92,6 @@ describe Sidekiq::ActiveRecord::TaskWorker do
92
92
  run_worker
93
93
  expect(task_worker.task_model).to eq user
94
94
  end
95
-
96
- it 'has an alias of `task_model` withe for the specified model name' do
97
- run_worker
98
- expect(task_worker.user).to eq user
99
- end
100
95
  end
101
96
 
102
97
  end
@@ -118,11 +113,6 @@ describe Sidekiq::ActiveRecord::TaskWorker do
118
113
  run_worker
119
114
  expect(task_worker.task_model).to eq user
120
115
  end
121
-
122
- it 'has an alias of `task_model` withe for the specified model name' do
123
- run_worker
124
- expect(task_worker.user).to eq user
125
- end
126
116
  end
127
117
 
128
118
  describe 'when fetching the model' do
@@ -155,13 +145,6 @@ describe Sidekiq::ActiveRecord::TaskWorker do
155
145
  expect(task_worker).to_not receive(:perform_on_model)
156
146
  run_worker
157
147
  end
158
-
159
- describe 'method alias' do
160
- it 'has an alias of not_found_model hook with for the specified task model name' do
161
- expect(task_worker.not_found_user(trash_id)).to eq trash_id
162
- end
163
- end
164
-
165
148
  end
166
149
 
167
150
  context 'when the mode is found' do
@@ -171,24 +154,6 @@ describe Sidekiq::ActiveRecord::TaskWorker do
171
154
  expect(task_worker).to receive(:should_perform_on_model?)
172
155
  run_worker
173
156
  end
174
-
175
- describe 'method alias' do
176
-
177
- let(:mock_result) { 1234 }
178
-
179
- before do
180
- class UserTaskWorker
181
- def should_perform_on_user?
182
- 1234
183
- end
184
- end
185
- end
186
-
187
- it 'has an alias of should_perform_on_model? hook with for the specified task model name' do
188
- run_worker
189
- expect(task_worker.should_perform_on_user?).to eq mock_result
190
- end
191
- end
192
157
  end
193
158
 
194
159
  context 'when the model should be performed' do
@@ -216,14 +181,6 @@ describe Sidekiq::ActiveRecord::TaskWorker do
216
181
  task_worker.perform(user.id, user.email)
217
182
  end
218
183
  end
219
-
220
- describe 'method alias' do
221
- it 'has an alias of perform_on_model hook with for the specified task model name' do
222
- task_worker.perform(user.id)
223
- expect(task_worker.perform_on_user).to eq user
224
- end
225
- end
226
-
227
184
  end
228
185
  end
229
186
 
@@ -242,21 +199,13 @@ describe Sidekiq::ActiveRecord::TaskWorker do
242
199
  expect(task_worker).to_not receive(:perform_on_model)
243
200
  run_worker
244
201
  end
245
-
246
- describe 'method alias' do
247
- it 'has an alias of did_not_perform_on_model hook with for the specified task model name' do
248
- run_worker
249
- expect(task_worker.did_not_perform_on_user).to eq user
250
- end
251
- end
252
-
253
202
  end
254
203
 
255
204
  end
256
205
  end
257
206
  end
258
207
 
259
- describe 'perform_async_on', :focus do
208
+ describe 'perform_async_on' do
260
209
 
261
210
  before do
262
211
  class UserTaskWorker
data/spec/spec_helper.rb CHANGED
@@ -9,7 +9,9 @@ require 'database_cleaner'
9
9
 
10
10
  RSpec.configure do |config|
11
11
  config.alias_example_to :expect_it
12
+ config.filter_run_including :focus => true
13
+ config.run_all_when_everything_filtered = true
12
14
  end
13
15
 
14
16
  Dir['./spec/support/**/*.rb'].sort.each { |f| require f }
15
-
17
+ Dir['./spec/examples/**/*.rb'].sort.each { |f| require f }
@@ -1,4 +1,8 @@
1
1
  class User < ActiveRecord::Base
2
2
  scope :active, -> { where(:status => :active) }
3
3
  scope :banned, -> { where(:status => :banned) }
4
+
5
+ def active?
6
+ status.try(:to_sym) == :active
7
+ end
4
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-activerecord
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Farhi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-18 00:00:00.000000000 Z
11
+ date: 2014-06-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sidekiq
@@ -113,6 +113,11 @@ files:
113
113
  - lib/sidekiq/active_record/version.rb
114
114
  - lib/sidekiq/activerecord.rb
115
115
  - sidekiq-activerecord.gemspec
116
+ - spec/examples/alias_user_task_worker.rb
117
+ - spec/examples/helper_classes.rb
118
+ - spec/examples/no_alias_user_task_worker.rb
119
+ - spec/sidekiq/active_record/example/alias_user_task_worker_spec.rb
120
+ - spec/sidekiq/active_record/example/no_alias_user_task_worker_spec.rb
116
121
  - spec/sidekiq/active_record/manager_worker_spec.rb
117
122
  - spec/sidekiq/active_record/task_worker_spec.rb
118
123
  - spec/spec_helper.rb
@@ -145,6 +150,11 @@ signing_key:
145
150
  specification_version: 4
146
151
  summary: Encapsulates various interactions between Sidekiq and ActiveRecord
147
152
  test_files:
153
+ - spec/examples/alias_user_task_worker.rb
154
+ - spec/examples/helper_classes.rb
155
+ - spec/examples/no_alias_user_task_worker.rb
156
+ - spec/sidekiq/active_record/example/alias_user_task_worker_spec.rb
157
+ - spec/sidekiq/active_record/example/no_alias_user_task_worker_spec.rb
148
158
  - spec/sidekiq/active_record/manager_worker_spec.rb
149
159
  - spec/sidekiq/active_record/task_worker_spec.rb
150
160
  - spec/spec_helper.rb