cloudtasker 0.12.2 → 0.13.rc1

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 (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)