sidekiq-activerecord 0.0.4 → 0.0.5

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: 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