cloudtasker 0.12.2 → 0.13.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/lint_rubocop.yml +20 -0
  3. data/.github/workflows/{test.yml → test_ruby_2.5_2.6.yml} +7 -8
  4. data/.github/workflows/test_ruby_2.7.yml +40 -0
  5. data/.github/workflows/test_ruby_3.x.yml +39 -0
  6. data/.rubocop.yml +5 -0
  7. data/Appraisals +20 -0
  8. data/CHANGELOG.md +9 -0
  9. data/README.md +10 -2
  10. data/Rakefile +0 -6
  11. data/cloudtasker.gemspec +0 -5
  12. data/gemfiles/google_cloud_tasks_1.0.gemfile +1 -0
  13. data/gemfiles/google_cloud_tasks_1.0.gemfile.lock +4 -173
  14. data/gemfiles/google_cloud_tasks_1.1.gemfile +1 -0
  15. data/gemfiles/google_cloud_tasks_1.1.gemfile.lock +4 -173
  16. data/gemfiles/google_cloud_tasks_1.2.gemfile +1 -0
  17. data/gemfiles/google_cloud_tasks_1.2.gemfile.lock +4 -173
  18. data/gemfiles/google_cloud_tasks_1.3.gemfile +1 -0
  19. data/gemfiles/google_cloud_tasks_1.3.gemfile.lock +4 -173
  20. data/gemfiles/rails_5.2.gemfile +1 -0
  21. data/gemfiles/rails_5.2.gemfile.lock +4 -53
  22. data/gemfiles/rails_6.0.gemfile +1 -0
  23. data/gemfiles/rails_6.0.gemfile.lock +4 -53
  24. data/gemfiles/rails_6.1.gemfile +8 -0
  25. data/gemfiles/rails_7.0.gemfile +8 -0
  26. data/gemfiles/semantic_logger_3.4.gemfile +1 -0
  27. data/gemfiles/semantic_logger_4.6.gemfile +1 -0
  28. data/gemfiles/semantic_logger_4.7.0.gemfile +1 -0
  29. data/gemfiles/semantic_logger_4.7.2.gemfile +1 -0
  30. data/lib/cloudtasker/backend/google_cloud_task.rb +12 -8
  31. data/lib/cloudtasker/backend/memory_task.rb +1 -1
  32. data/lib/cloudtasker/backend/redis_task.rb +7 -3
  33. data/lib/cloudtasker/cloud_task.rb +2 -2
  34. data/lib/cloudtasker/cron/schedule.rb +7 -7
  35. data/lib/cloudtasker/redis_client.rb +39 -14
  36. data/lib/cloudtasker/unique_job/job.rb +3 -2
  37. data/lib/cloudtasker/unique_job/middleware/client.rb +2 -1
  38. data/lib/cloudtasker/version.rb +1 -1
  39. data/lib/cloudtasker/worker.rb +3 -3
  40. data/lib/cloudtasker/worker_wrapper.rb +1 -1
  41. metadata +11 -62
@@ -89,7 +89,7 @@ module Cloudtasker
89
89
  # Save job
90
90
  redis.write(key(id), payload)
91
91
  redis.sadd(key, id)
92
- new(payload.merge(id: id))
92
+ new(**payload.merge(id: id))
93
93
  end
94
94
 
95
95
  #
@@ -103,7 +103,7 @@ module Cloudtasker
103
103
  gid = key(id)
104
104
  return nil unless (payload = redis.fetch(gid))
105
105
 
106
- new(payload.merge(id: id))
106
+ new(**payload.merge(id: id))
107
107
  end
108
108
 
109
109
  #
@@ -172,8 +172,12 @@ module Cloudtasker
172
172
  # Retry the task later.
173
173
  #
174
174
  # @param [Integer] interval The delay in seconds before retrying the task
175
+ # @param [Hash] opts Additional options
176
+ # @option opts [Boolean] :is_error Increase number of retries. Default to true.
175
177
  #
176
- def retry_later(interval, is_error: true)
178
+ def retry_later(interval, opts = {})
179
+ is_error = opts.to_h.fetch(:is_error, true)
180
+
177
181
  redis.write(
178
182
  gid,
179
183
  retries: is_error ? retries + 1 : retries,
@@ -37,7 +37,7 @@ module Cloudtasker
37
37
  #
38
38
  def self.find(id)
39
39
  payload = backend.find(id)&.to_h
40
- payload ? new(payload) : nil
40
+ payload ? new(**payload) : nil
41
41
  end
42
42
 
43
43
  #
@@ -51,7 +51,7 @@ module Cloudtasker
51
51
  raise MaxTaskSizeExceededError if payload.to_json.bytesize > Config::MAX_TASK_SIZE
52
52
 
53
53
  resp = backend.create(payload)&.to_h
54
- resp ? new(resp) : nil
54
+ resp ? new(**resp) : nil
55
55
  end
56
56
 
57
57
  #
@@ -62,7 +62,7 @@ module Cloudtasker
62
62
  def self.load_from_hash!(hash)
63
63
  schedules = hash.map do |id, config|
64
64
  schedule_config = JSON.parse(config.to_json, symbolize_names: true).merge(id: id.to_s)
65
- create(schedule_config)
65
+ create(**schedule_config)
66
66
  end
67
67
 
68
68
  # Remove existing schedules which are not part of the list
@@ -79,7 +79,7 @@ module Cloudtasker
79
79
  def self.create(**opts)
80
80
  redis.with_lock(key(opts[:id])) do
81
81
  config = find(opts[:id]).to_h.merge(opts)
82
- new(config).tap(&:save)
82
+ new(**config).tap(&:save)
83
83
  end
84
84
  end
85
85
 
@@ -93,7 +93,7 @@ module Cloudtasker
93
93
  def self.find(id)
94
94
  return nil unless (schedule_config = redis.fetch(key(id)))
95
95
 
96
- new(schedule_config)
96
+ new(**schedule_config)
97
97
  end
98
98
 
99
99
  #
@@ -251,9 +251,9 @@ module Cloudtasker
251
251
  #
252
252
  # Buld edit the object attributes.
253
253
  #
254
- # @param [Hash] **opts The attributes to edit.
254
+ # @param [Hash] opts The attributes to edit.
255
255
  #
256
- def assign_attributes(**opts)
256
+ def assign_attributes(opts)
257
257
  opts
258
258
  .select { |k, _| instance_variables.include?("@#{k}".to_sym) }
259
259
  .each { |k, v| instance_variable_set("@#{k}", v) }
@@ -262,9 +262,9 @@ module Cloudtasker
262
262
  #
263
263
  # Edit the object attributes and save the object in Redis.
264
264
  #
265
- # @param [Hash] **opts The attributes to edit.
265
+ # @param [Hash] opts The attributes to edit.
266
266
  #
267
- def update(**opts)
267
+ def update(opts)
268
268
  assign_attributes(opts)
269
269
  save
270
270
  end
@@ -132,22 +132,47 @@ module Cloudtasker
132
132
  list
133
133
  end
134
134
 
135
- #
136
- # Delegate all methods to the redis client.
137
- #
138
- # @param [String, Symbol] name The method to delegate.
139
- # @param [Array<any>] *args The list of method arguments.
140
- # @param [Proc] &block Block passed to the method.
141
- #
142
- # @return [Any] The method return value
143
- #
144
- def method_missing(name, *args, &block)
145
- if Redis.method_defined?(name)
146
- client.with { |c| c.send(name, *args, &block) }
147
- else
148
- super
135
+ # rubocop:disable Style/MissingRespondToMissing
136
+ if RUBY_VERSION < '3'
137
+ #
138
+ # Delegate all methods to the redis client.
139
+ # Old delegation method.
140
+ #
141
+ # @param [String, Symbol] name The method to delegate.
142
+ # @param [Array<any>] *args The list of method positional arguments.
143
+ # @param [Hash<any>] *kwargs The list of method keyword arguments.
144
+ # @param [Proc] &block Block passed to the method.
145
+ #
146
+ # @return [Any] The method return value
147
+ #
148
+ def method_missing(name, *args, &block)
149
+ if Redis.method_defined?(name)
150
+ client.with { |c| c.send(name, *args, &block) }
151
+ else
152
+ super
153
+ end
154
+ end
155
+ else
156
+ #
157
+ # Delegate all methods to the redis client.
158
+ # Ruby 3 delegation method style.
159
+ #
160
+ # @param [String, Symbol] name The method to delegate.
161
+ # @param [Array<any>] *args The list of method positional arguments.
162
+ # @param [Hash<any>] *kwargs The list of method keyword arguments.
163
+ # @param [Proc] &block Block passed to the method.
164
+ #
165
+ # @return [Any] The method return value
166
+ #
167
+ def method_missing(name, *args, **kwargs, &block)
168
+ if Redis.method_defined?(name)
169
+ client.with { |c| c.send(name, *args, **kwargs, &block) }
170
+ else
171
+ super
172
+ end
149
173
  end
150
174
  end
175
+ # rubocop:enable Style/MissingRespondToMissing
151
176
 
152
177
  #
153
178
  # Check if the class respond to a certain method.
@@ -14,10 +14,11 @@ module Cloudtasker
14
14
  # Build a new instance of the class.
15
15
  #
16
16
  # @param [Cloudtasker::Worker] worker The worker at hand
17
+ # @param [Hash] worker The worker options
17
18
  #
18
- def initialize(worker, **kwargs)
19
+ def initialize(worker, opts = {})
19
20
  @worker = worker
20
- @call_opts = kwargs
21
+ @call_opts = opts
21
22
  end
22
23
 
23
24
  #
@@ -3,9 +3,10 @@
3
3
  module Cloudtasker
4
4
  module UniqueJob
5
5
  module Middleware
6
+ # TODO: kwargs to job otherwise it won't get the time_at
6
7
  # Client middleware, invoked when jobs are scheduled
7
8
  class Client
8
- def call(worker, **_kwargs)
9
+ def call(worker, _opts = {})
9
10
  Job.new(worker).lock_instance.schedule { yield }
10
11
  end
11
12
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Cloudtasker
4
- VERSION = '0.12.2'
4
+ VERSION = '0.13.rc1'
5
5
  end
@@ -47,7 +47,7 @@ module Cloudtasker
47
47
  return nil unless worker_klass.include?(self)
48
48
 
49
49
  # Return instantiated worker
50
- worker_klass.new(payload.slice(:job_queue, :job_args, :job_id, :job_meta, :job_retries, :task_id))
50
+ worker_klass.new(**payload.slice(:job_queue, :job_args, :job_id, :job_meta, :job_retries, :task_id))
51
51
  rescue NameError
52
52
  nil
53
53
  end
@@ -121,7 +121,7 @@ module Cloudtasker
121
121
  # @return [Cloudtasker::CloudTask] The Google Task response
122
122
  #
123
123
  def schedule(args: nil, time_in: nil, time_at: nil, queue: nil)
124
- new(job_args: args, job_queue: queue).schedule({ interval: time_in, time_at: time_at }.compact)
124
+ new(job_args: args, job_queue: queue).schedule(**{ interval: time_in, time_at: time_at }.compact)
125
125
  end
126
126
 
127
127
  #
@@ -239,7 +239,7 @@ module Cloudtasker
239
239
  #
240
240
  def schedule(**args)
241
241
  # Evaluate when to schedule the job
242
- time_at = schedule_time(args)
242
+ time_at = schedule_time(**args)
243
243
 
244
244
  # Schedule job through client middlewares
245
245
  Cloudtasker.config.client_middleware.invoke(self, time_at: time_at) do
@@ -27,7 +27,7 @@ module Cloudtasker
27
27
  #
28
28
  def initialize(worker_name:, **opts)
29
29
  @worker_name = worker_name
30
- super(opts)
30
+ super(**opts)
31
31
  end
32
32
 
33
33
  #
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloudtasker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.2
4
+ version: 0.13.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arnaud Lachaume
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-12-31 00:00:00.000000000 Z
11
+ date: 2022-01-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -136,20 +136,6 @@ dependencies:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
138
  version: '2.0'
139
- - !ruby/object:Gem::Dependency
140
- name: github_changelog_generator
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - ">="
144
- - !ruby/object:Gem::Version
145
- version: '0'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - ">="
151
- - !ruby/object:Gem::Version
152
- version: '0'
153
139
  - !ruby/object:Gem::Dependency
154
140
  name: rake
155
141
  requirement: !ruby/object:Gem::Requirement
@@ -262,48 +248,6 @@ dependencies:
262
248
  - - ">="
263
249
  - !ruby/object:Gem::Version
264
250
  version: '0'
265
- - !ruby/object:Gem::Dependency
266
- name: rails
267
- requirement: !ruby/object:Gem::Requirement
268
- requirements:
269
- - - ">="
270
- - !ruby/object:Gem::Version
271
- version: '0'
272
- type: :development
273
- prerelease: false
274
- version_requirements: !ruby/object:Gem::Requirement
275
- requirements:
276
- - - ">="
277
- - !ruby/object:Gem::Version
278
- version: '0'
279
- - !ruby/object:Gem::Dependency
280
- name: rspec-rails
281
- requirement: !ruby/object:Gem::Requirement
282
- requirements:
283
- - - ">="
284
- - !ruby/object:Gem::Version
285
- version: '0'
286
- type: :development
287
- prerelease: false
288
- version_requirements: !ruby/object:Gem::Requirement
289
- requirements:
290
- - - ">="
291
- - !ruby/object:Gem::Version
292
- version: '0'
293
- - !ruby/object:Gem::Dependency
294
- name: sqlite3
295
- requirement: !ruby/object:Gem::Requirement
296
- requirements:
297
- - - ">="
298
- - !ruby/object:Gem::Version
299
- version: '0'
300
- type: :development
301
- prerelease: false
302
- version_requirements: !ruby/object:Gem::Requirement
303
- requirements:
304
- - - ">="
305
- - !ruby/object:Gem::Version
306
- version: '0'
307
251
  description: Background jobs for Ruby using Google Cloud Tasks (beta)
308
252
  email:
309
253
  - arnaud.lachaume@keypup.io
@@ -312,7 +256,10 @@ executables:
312
256
  extensions: []
313
257
  extra_rdoc_files: []
314
258
  files:
315
- - ".github/workflows/test.yml"
259
+ - ".github/workflows/lint_rubocop.yml"
260
+ - ".github/workflows/test_ruby_2.5_2.6.yml"
261
+ - ".github/workflows/test_ruby_2.7.yml"
262
+ - ".github/workflows/test_ruby_3.x.yml"
316
263
  - ".gitignore"
317
264
  - ".rspec"
318
265
  - ".rubocop.yml"
@@ -351,6 +298,8 @@ files:
351
298
  - gemfiles/rails_5.2.gemfile.lock
352
299
  - gemfiles/rails_6.0.gemfile
353
300
  - gemfiles/rails_6.0.gemfile.lock
301
+ - gemfiles/rails_6.1.gemfile
302
+ - gemfiles/rails_7.0.gemfile
354
303
  - gemfiles/semantic_logger_3.4.gemfile
355
304
  - gemfiles/semantic_logger_4.6.gemfile
356
305
  - gemfiles/semantic_logger_4.7.0.gemfile
@@ -426,11 +375,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
426
375
  version: '0'
427
376
  required_rubygems_version: !ruby/object:Gem::Requirement
428
377
  requirements:
429
- - - ">="
378
+ - - ">"
430
379
  - !ruby/object:Gem::Version
431
- version: '0'
380
+ version: 1.3.1
432
381
  requirements: []
433
- rubygems_version: 3.0.0
382
+ rubygems_version: 3.2.3
434
383
  signing_key:
435
384
  specification_version: 4
436
385
  summary: Background jobs for Ruby using Google Cloud Tasks (beta)