cloudtasker 0.12.rc11 → 0.13.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) 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} +8 -13
  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 +52 -3
  9. data/README.md +15 -7
  10. data/Rakefile +0 -6
  11. data/app/controllers/cloudtasker/worker_controller.rb +4 -1
  12. data/cloudtasker.gemspec +0 -5
  13. data/docs/BATCH_JOBS.md +2 -2
  14. data/docs/CRON_JOBS.md +39 -0
  15. data/gemfiles/google_cloud_tasks_1.0.gemfile +1 -0
  16. data/gemfiles/google_cloud_tasks_1.0.gemfile.lock +43 -205
  17. data/gemfiles/google_cloud_tasks_1.1.gemfile +1 -0
  18. data/gemfiles/google_cloud_tasks_1.1.gemfile.lock +43 -205
  19. data/gemfiles/google_cloud_tasks_1.2.gemfile +1 -0
  20. data/gemfiles/google_cloud_tasks_1.2.gemfile.lock +43 -205
  21. data/gemfiles/google_cloud_tasks_1.3.gemfile +1 -0
  22. data/gemfiles/google_cloud_tasks_1.3.gemfile.lock +43 -205
  23. data/gemfiles/rails_5.2.gemfile +1 -0
  24. data/gemfiles/rails_5.2.gemfile.lock +54 -96
  25. data/gemfiles/rails_6.0.gemfile +1 -0
  26. data/gemfiles/rails_6.0.gemfile.lock +55 -97
  27. data/gemfiles/rails_6.1.gemfile +8 -0
  28. data/gemfiles/rails_7.0.gemfile +8 -0
  29. data/gemfiles/semantic_logger_3.4.gemfile +1 -0
  30. data/gemfiles/semantic_logger_4.6.gemfile +1 -0
  31. data/gemfiles/semantic_logger_4.7.0.gemfile +1 -0
  32. data/gemfiles/semantic_logger_4.7.2.gemfile +1 -0
  33. data/lib/cloudtasker/backend/google_cloud_task.rb +12 -8
  34. data/lib/cloudtasker/backend/memory_task.rb +1 -1
  35. data/lib/cloudtasker/backend/redis_task.rb +7 -3
  36. data/lib/cloudtasker/cloud_task.rb +2 -2
  37. data/lib/cloudtasker/cron/schedule.rb +7 -7
  38. data/lib/cloudtasker/local_server.rb +1 -1
  39. data/lib/cloudtasker/redis_client.rb +39 -14
  40. data/lib/cloudtasker/unique_job/job.rb +3 -2
  41. data/lib/cloudtasker/unique_job/middleware/client.rb +2 -1
  42. data/lib/cloudtasker/version.rb +1 -1
  43. data/lib/cloudtasker/worker.rb +4 -4
  44. data/lib/cloudtasker/worker_wrapper.rb +1 -1
  45. data/lib/cloudtasker.rb +1 -0
  46. metadata +9 -61
  47. data/app/controllers/cloudtasker/application_controller.rb +0 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1c7677889e31eccaadb3cf019f168e2d7133f10682379d0c2ccf1987da450105
4
- data.tar.gz: 66ea1098cfbfdc9e5261dba0d6d033e44c8d84ee7623c464fc3bccd3999e708e
3
+ metadata.gz: bad50ce6f1fb0a4293c26d53530b47dae74a577f7bcddaa9a3d3092e5baeec56
4
+ data.tar.gz: 484a11cbfb894334d2b3dc17bbf06877a0b4002852066d197fd0e038dbe8918e
5
5
  SHA512:
6
- metadata.gz: b7ccd9a1e2950d57f51dad86c847373c29caf753b092711cc9be167a8574cdaaec7eeff99dfe08fc3c0e29c4af1a7a21b04e92f36fcc6769b9e3b8f1561c6231
7
- data.tar.gz: 7fc85d30cab6c80e8e64afa3285a50dfafb47f66dc214d228c758b7e19481239cf5900fad3bbbd29c3220658529eeeb106f12daf9e10f52a10f4d1bb10864354
6
+ metadata.gz: c865c34712cdc8fc97d33563a1450daa9705d75458687c04e74e15f26e7180f8534e107c6994e6402de703a3b7060fbc29f1a0e1f00c2361084f3613dfbb9ae5
7
+ data.tar.gz: 31fd6ebc1b253db4f6accd747ae871c97d521c089b7682ac0755be8c0a4a17ea504c4b38db9fd84a35a8cdd78f407714e266a58d3a8f19919abbed8ea5378ebb
@@ -0,0 +1,20 @@
1
+ name: Rubocop
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ build:
7
+ runs-on: ubuntu-latest
8
+ steps:
9
+ - uses: actions/checkout@v2
10
+ - uses: zhulik/redis-action@1.1.0
11
+ - name: Set up Ruby
12
+ uses: ruby/setup-ruby@v1
13
+ with:
14
+ ruby-version: '3.0.1'
15
+ bundler-cache: true
16
+ - name: Lint codebase
17
+ run: |
18
+ gem install bundler
19
+ bundle install --jobs 4 --retry 3
20
+ bundle exec rubocop
@@ -1,10 +1,6 @@
1
- name: Test
1
+ name: Ruby 2.5/2.6
2
2
 
3
- on:
4
- push:
5
- branches: [ master, 0.9-stable ]
6
- pull_request:
7
- branches: [ master, 0.9-stable ]
3
+ on: [push, pull_request]
8
4
 
9
5
  jobs:
10
6
  build:
@@ -12,8 +8,8 @@ jobs:
12
8
  strategy:
13
9
  matrix:
14
10
  ruby:
15
- - '2.5.x'
16
- - '2.6.x'
11
+ - '2.5.9'
12
+ - '2.6.7'
17
13
  appraisal:
18
14
  - 'google-cloud-tasks-1.0'
19
15
  - 'google-cloud-tasks-1.1'
@@ -21,25 +17,24 @@ jobs:
21
17
  - 'google-cloud-tasks-1.3'
22
18
  - 'rails-5.2'
23
19
  - 'rails-6.0'
20
+ - 'rails-6.1'
24
21
  - 'semantic_logger-3.4'
25
22
  - 'semantic_logger-4.6'
26
23
  - 'semantic_logger-4.7.0'
27
24
  - 'semantic_logger-4.7.2'
28
25
  steps:
29
- - name: Setup System
30
- run: sudo apt-get install libsqlite3-dev
31
26
  - uses: actions/checkout@v2
32
27
  - uses: zhulik/redis-action@1.1.0
33
- - name: Set up Ruby 2.6
34
- uses: actions/setup-ruby@v1
28
+ - name: Set up Ruby
29
+ uses: ruby/setup-ruby@v1
35
30
  with:
36
31
  ruby-version: ${{ matrix.ruby }}
32
+ bundler-cache: true
37
33
  - name: Build and test with Rake
38
34
  env:
39
35
  APPRAISAL_CONTEXT: ${{ matrix.appraisal }}
40
36
  run: |
41
37
  gem install bundler
42
38
  bundle install --jobs 4 --retry 3
43
- bundle exec rubocop
44
39
  bundle exec appraisal ${APPRAISAL_CONTEXT} bundle
45
40
  bundle exec appraisal ${APPRAISAL_CONTEXT} rspec
@@ -0,0 +1,40 @@
1
+ name: Ruby 2.7
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ build:
7
+ runs-on: ubuntu-latest
8
+ strategy:
9
+ matrix:
10
+ ruby:
11
+ - '2.7.5'
12
+ appraisal:
13
+ - 'google-cloud-tasks-1.0'
14
+ - 'google-cloud-tasks-1.1'
15
+ - 'google-cloud-tasks-1.2'
16
+ - 'google-cloud-tasks-1.3'
17
+ - 'rails-5.2'
18
+ - 'rails-6.0'
19
+ - 'rails-6.1'
20
+ - 'rails-7.0'
21
+ - 'semantic_logger-3.4'
22
+ - 'semantic_logger-4.6'
23
+ - 'semantic_logger-4.7.0'
24
+ - 'semantic_logger-4.7.2'
25
+ steps:
26
+ - uses: actions/checkout@v2
27
+ - uses: zhulik/redis-action@1.1.0
28
+ - name: Set up Ruby
29
+ uses: ruby/setup-ruby@v1
30
+ with:
31
+ ruby-version: ${{ matrix.ruby }}
32
+ bundler-cache: true
33
+ - name: Build and test with Rake
34
+ env:
35
+ APPRAISAL_CONTEXT: ${{ matrix.appraisal }}
36
+ run: |
37
+ gem install bundler
38
+ bundle install --jobs 4 --retry 3
39
+ bundle exec appraisal ${APPRAISAL_CONTEXT} bundle
40
+ bundle exec appraisal ${APPRAISAL_CONTEXT} rspec
@@ -0,0 +1,39 @@
1
+ name: Ruby 3.x
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ build:
7
+ runs-on: ubuntu-latest
8
+ strategy:
9
+ matrix:
10
+ ruby:
11
+ - '3.0.1'
12
+ - '3.1.0'
13
+ appraisal:
14
+ - 'google-cloud-tasks-1.0'
15
+ - 'google-cloud-tasks-1.1'
16
+ - 'google-cloud-tasks-1.2'
17
+ - 'google-cloud-tasks-1.3'
18
+ - 'rails-6.1'
19
+ - 'rails-7.0'
20
+ - 'semantic_logger-3.4'
21
+ - 'semantic_logger-4.6'
22
+ - 'semantic_logger-4.7.0'
23
+ - 'semantic_logger-4.7.2'
24
+ steps:
25
+ - uses: actions/checkout@v2
26
+ - uses: zhulik/redis-action@1.1.0
27
+ - name: Set up Ruby
28
+ uses: ruby/setup-ruby@v1
29
+ with:
30
+ ruby-version: ${{ matrix.ruby }}
31
+ bundler-cache: true
32
+ - name: Build and test with Rake
33
+ env:
34
+ APPRAISAL_CONTEXT: ${{ matrix.appraisal }}
35
+ run: |
36
+ gem install bundler
37
+ bundle install --jobs 4 --retry 3
38
+ bundle exec appraisal ${APPRAISAL_CONTEXT} bundle
39
+ bundle exec appraisal ${APPRAISAL_CONTEXT} rspec
data/.rubocop.yml CHANGED
@@ -5,6 +5,11 @@ AllCops:
5
5
  - 'gemfiles/**/*'
6
6
  - 'vendor/**/*'
7
7
 
8
+ # Ruby 3.0: curly braces around last argument has meaning
9
+ # See: https://github.com/rubocop/rubocop/issues/7641
10
+ Style/BracesAroundHashParameters:
11
+ Enabled: false
12
+
8
13
  Metrics/ClassLength:
9
14
  Max: 200
10
15
 
data/Appraisals CHANGED
@@ -1,41 +1,61 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  appraise 'google-cloud-tasks-1.0' do
4
+ gem 'activesupport', '6.1' # ruby 2.5 / 2.6 compatibility
4
5
  gem 'google-cloud-tasks', '1.0'
5
6
  end
6
7
 
7
8
  appraise 'google-cloud-tasks-1.1' do
9
+ gem 'activesupport', '6.1' # ruby 2.5 / 2.6 compatibility
8
10
  gem 'google-cloud-tasks', '1.1'
9
11
  end
10
12
 
11
13
  appraise 'google-cloud-tasks-1.2' do
14
+ gem 'activesupport', '6.1' # ruby 2.5 / 2.6 compatibility
12
15
  gem 'google-cloud-tasks', '1.2'
13
16
  end
14
17
 
15
18
  appraise 'google-cloud-tasks-1.3' do
19
+ gem 'activesupport', '6.1' # ruby 2.5 / 2.6 compatibility
16
20
  gem 'google-cloud-tasks', '1.3'
17
21
  end
18
22
 
19
23
  appraise 'rails-5.2' do
20
24
  gem 'rails', '5.2'
25
+ gem 'rspec-rails'
21
26
  end
22
27
 
23
28
  appraise 'rails-6.0' do
24
29
  gem 'rails', '6.0'
30
+ gem 'rspec-rails'
31
+ end
32
+
33
+ appraise 'rails-6.1' do
34
+ gem 'rails', '6.1'
35
+ gem 'rspec-rails'
36
+ end
37
+
38
+ appraise 'rails-7.0' do
39
+ gem 'rails', '7.0'
40
+ gem 'rspec-rails'
25
41
  end
26
42
 
27
43
  appraise 'semantic_logger-3.4' do
44
+ gem 'activesupport', '6.1' # ruby 2.5 / 2.6 compatibility
28
45
  gem 'semantic_logger', '3.4.1'
29
46
  end
30
47
 
31
48
  appraise 'semantic_logger-4.6' do
49
+ gem 'activesupport', '6.1' # ruby 2.5 / 2.6 compatibility
32
50
  gem 'semantic_logger', '4.6.1'
33
51
  end
34
52
 
35
53
  appraise 'semantic_logger-4.7.0' do
54
+ gem 'activesupport', '6.1' # ruby 2.5 / 2.6 compatibility
36
55
  gem 'semantic_logger', '4.7.0'
37
56
  end
38
57
 
39
58
  appraise 'semantic_logger-4.7.2' do
59
+ gem 'activesupport', '6.1' # ruby 2.5 / 2.6 compatibility
40
60
  gem 'semantic_logger', '4.7.2'
41
61
  end
data/CHANGELOG.md CHANGED
@@ -1,8 +1,57 @@
1
1
  # Changelog
2
2
 
3
- ## Latest RC [v0.12.rc11](https://github.com/keypup-io/cloudtasker/tree/v0.12.rc11) (2021-06-26)
3
+ ## [v0.13.rc1](https://github.com/keypup-io/cloudtasker/tree/v0.13.rc1) (2022-01-03)
4
4
 
5
- [Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.11.0...v0.12.rc11)
5
+ [Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.12.2...v0.13.rc1)
6
+
7
+ **Improvements:**
8
+ - Ruby 3: Rework method arguments to be compatible with Ruby 3
9
+ - Tests: Separate test environment for Ruby 2 and Ruby 3
10
+ - Tests: Do not load Rails by default and skip Rails-specific tests in non-Rails appraisals
11
+
12
+ ## [v0.12.2](https://github.com/keypup-io/cloudtasker/tree/v0.12.2) (2021-12-31)
13
+
14
+ [Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.12.1...v0.12.2)
15
+
16
+ **Fixed bugs:**
17
+ - Local server: Fix race condition on thread processing. See [#46](https://github.com/keypup-io/cloudtasker/pull/46)
18
+ - Non-Rails: Fix `arguments_missing?` check for non-rails projects.
19
+
20
+ ## [v0.12.1](https://github.com/keypup-io/cloudtasker/tree/v0.12.1) (2021-08-25)
21
+
22
+ [Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.12.0...v0.12.1)
23
+
24
+ **Fixed bugs:**
25
+ - Dependencies: Require `try` from `activesupport`. This was preventing non-Rails projects from properly running Cloudtasker jobs.
26
+ - WorkerController: remove useless inheritance from local ApplicationController. The parent controller was not always loaded on Rails 5 which in turn created issues with authenticity token. Fixes [#40](https://github.com/keypup-io/cloudtasker/issues/40)
27
+
28
+ ## [v0.11.1](https://github.com/keypup-io/cloudtasker/tree/v0.11.1) (2021-08-25)
29
+
30
+ [Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.11.0...v0.11.1)
31
+
32
+ **Fixed bugs:**
33
+ - Dependencies: Require `try` from `activesupport`. This was preventing non-Rails projects from properly running Cloudtasker jobs.
34
+ - WorkerController: remove useless inheritance from local ApplicationController. The parent controller was not always loaded on Rails 5 which in turn created issues with authenticity token. Fixes [#40](https://github.com/keypup-io/cloudtasker/issues/40)
35
+
36
+ ## [v0.10.2](https://github.com/keypup-io/cloudtasker/tree/v0.10.2) (2021-08-25)
37
+
38
+ [Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.10.1...v0.10.2)
39
+
40
+ **Fixed bugs:**
41
+ - Dependencies: Require `try` from `activesupport`. This was preventing non-Rails projects from properly running Cloudtasker jobs.
42
+ - WorkerController: remove useless inheritance from local ApplicationController. The parent controller was not always loaded on Rails 5 which in turn created issues with authenticity token. Fixes [#40](https://github.com/keypup-io/cloudtasker/issues/40)
43
+
44
+ ## [v0.9.5](https://github.com/keypup-io/cloudtasker/tree/v0.9.5) (2021-08-25)
45
+
46
+ [Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.9.4...v0.9.5)
47
+
48
+ **Fixed bugs:**
49
+ - Dependencies: Require `try` from `activesupport`. This was preventing non-Rails projects from properly running Cloudtasker jobs.
50
+ - WorkerController: remove useless inheritance from local ApplicationController. The parent controller was not always loaded on Rails 5 which in turn created issues with authenticity token. Fixes [#40](https://github.com/keypup-io/cloudtasker/issues/40)
51
+
52
+ ## [v0.12.0](https://github.com/keypup-io/cloudtasker/tree/v0.12.0) (2021-08-19)
53
+
54
+ [Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.11.0...v0.12.0)
6
55
 
7
56
  **Improvements:**
8
57
  - ActiveJob: do not double log errors (ActiveJob has its own error logging)
@@ -25,7 +74,7 @@
25
74
  **Fixed bugs:**
26
75
  - Retries: Enforce job retry limit on job processing. There was an edge case where jobs could be retried indefinitely on batch callback errors.
27
76
 
28
- ## [v0.11.0](https://github.com/keypup-io/cloudtasker/tree/v0.11.0) (2021-03-11)
77
+ ## [v0.11.0](https://github.com/keypup-io/cloudtasker/tree/v0.11.0) (2020-11-23)
29
78
 
30
79
  [Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.10.0...v0.11.0)
31
80
 
data/README.md CHANGED
@@ -365,7 +365,7 @@ Cloudtasker.configure do |config|
365
365
  # This option can also be configured on a per worker basis via
366
366
  # the cloudtasker_options directive.
367
367
  #
368
- # Supported since: v0.12.rc8
368
+ # Supported since: v0.12.0
369
369
  #
370
370
  # Default: 600 seconds (10 minutes)
371
371
  #
@@ -382,7 +382,7 @@ Cloudtasker.configure do |config|
382
382
  #
383
383
  # Note: the worker argument might be nil, such as when InvalidWorkerError is raised.
384
384
  #
385
- # Supported since: v0.12.rc11
385
+ # Supported since: v0.12.0
386
386
  #
387
387
  # Default: no operation
388
388
  #
@@ -395,7 +395,7 @@ Cloudtasker.configure do |config|
395
395
  # This is useful when you need to apply general exception handling, such
396
396
  # logging specific messages/context when a job dies.
397
397
  #
398
- # Supported since: v0.12.rc11
398
+ # Supported since: v0.12.0
399
399
  #
400
400
  # Default: no operation
401
401
  #
@@ -709,7 +709,7 @@ end
709
709
  ```
710
710
 
711
711
  ### Global callbacks
712
- **Supported since**: `0.12.rc11`
712
+ **Supported since**: `0.12.0`
713
713
 
714
714
  If you need to apply general exception handling logic to your workers you can specify `on_error` and `on_dead` hooks in the Cloudtasker configuration.
715
715
 
@@ -790,7 +790,7 @@ end
790
790
  ```
791
791
 
792
792
  ### Dispatch deadline
793
- **Supported since**: `0.12.rc8`
793
+ **Supported since**: `0.12.0`
794
794
 
795
795
  By default Cloud Tasks will automatically timeout your jobs after 10 minutes, independently of your server HTTP timeout configuration.
796
796
 
@@ -1087,9 +1087,17 @@ To size the concurrency of your queues you should therefore take the most limiti
1087
1087
 
1088
1088
  ## Development
1089
1089
 
1090
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
1090
+ After checking out the repo, run `bin/setup` to install dependencies.
1091
1091
 
1092
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
1092
+ For tests, run `rake` to run the tests. Note that Rails is not in context by default, which means Rails-specific test will not run.
1093
+ For tests including Rails-specific tests, run `bundle exec appraisal rails-7.0 rake`
1094
+ For all context-specific tests (incl. Rails), run the [appraisal tests](Appraisals) using `bundle exec appraisal rake`.
1095
+
1096
+ You can run `bin/console` for an interactive prompt that will allow you to experiment.
1097
+
1098
+ To install this gem onto your local machine, run `bundle exec rake install`.
1099
+
1100
+ To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
1093
1101
 
1094
1102
  ## Contributing
1095
1103
 
data/Rakefile CHANGED
@@ -2,13 +2,7 @@
2
2
 
3
3
  require 'bundler/gem_tasks'
4
4
  require 'rspec/core/rake_task'
5
- require 'github_changelog_generator/task'
6
5
 
7
6
  RSpec::Core::RakeTask.new(:spec)
8
7
 
9
8
  task default: :spec
10
-
11
- GitHubChangelogGenerator::RakeTask.new :changelog do |config|
12
- config.user = 'keypup-io'
13
- config.project = 'cloudtasker'
14
- end
@@ -2,7 +2,10 @@
2
2
 
3
3
  module Cloudtasker
4
4
  # Handle execution of workers
5
- class WorkerController < ApplicationController
5
+ class WorkerController < ActionController::Base
6
+ # No need for CSRF verification on API endpoints
7
+ skip_before_action :verify_authenticity_token
8
+
6
9
  # Authenticate all requests.
7
10
  before_action :authenticate!
8
11
 
data/cloudtasker.gemspec CHANGED
@@ -38,7 +38,6 @@ Gem::Specification.new do |spec|
38
38
 
39
39
  spec.add_development_dependency 'appraisal'
40
40
  spec.add_development_dependency 'bundler', '~> 2.0'
41
- spec.add_development_dependency 'github_changelog_generator'
42
41
  spec.add_development_dependency 'rake', '>= 12.3.3'
43
42
  spec.add_development_dependency 'rspec', '~> 3.0'
44
43
  spec.add_development_dependency 'rspec-json_expectations', '~> 2.2'
@@ -47,8 +46,4 @@ Gem::Specification.new do |spec|
47
46
  spec.add_development_dependency 'semantic_logger'
48
47
  spec.add_development_dependency 'timecop'
49
48
  spec.add_development_dependency 'webmock'
50
-
51
- spec.add_development_dependency 'rails'
52
- spec.add_development_dependency 'rspec-rails'
53
- spec.add_development_dependency 'sqlite3'
54
49
  end
data/docs/BATCH_JOBS.md CHANGED
@@ -48,7 +48,7 @@ end
48
48
  ```
49
49
 
50
50
  ## Example: Expanding the parent batch
51
- **Note**: `parent_batch` is available since `0.12.rc10`
51
+ **Note**: `parent_batch` is available since `0.12.0`
52
52
 
53
53
  ```ruby
54
54
  # All the jobs will be attached to the top parent batch.
@@ -123,7 +123,7 @@ def on_batch_node_complete(_child_job)
123
123
  end
124
124
  ```
125
125
 
126
- **Since:** `v0.12.rc5`
126
+ **Since:** `v0.12.0`
127
127
  By default the `progress` method only considers the direct child jobs to evaluate the batch progress. You can pass `depth: somenumber` to the `progress` method to calculate the actual batch progress in a more granular way. Be careful however that this method recursively calculates progress on the sub-batches and is therefore expensive.
128
128
 
129
129
  E.g.
data/docs/CRON_JOBS.md CHANGED
@@ -65,3 +65,42 @@ if File.exist?(schedule_file) && !Rails.env.test?
65
65
  end
66
66
  ```
67
67
 
68
+ ## Limitations
69
+ GCP Cloud Tasks does not allow tasks to be scheduled more than 30 days (720h) in the future. Cron schedules should therefore be limited to 30 days intervals at most.
70
+
71
+ If you need to schedule a job to run on a monthly basis (e.g. on the first of the month), schedule this job to run every day then add the following logic in your job:
72
+ ```ruby
73
+ #
74
+ # Cron schedule (8am UTC every day): 0 8 * * *
75
+ #
76
+ class MyMonthlyWorker
77
+ include Cloudtasker::Worker
78
+
79
+ def perform(*args)
80
+ # Abort unless we're the first of the month
81
+ return unless Time.current.day == 1
82
+
83
+ # ... job logic
84
+ end
85
+ end
86
+ ```
87
+
88
+ The same approach can be used to schedule a job every quarter.
89
+ ```ruby
90
+ #
91
+ # Cron schedule (8am UTC every day): 0 8 * * *
92
+ #
93
+ class MyQuarterlyWorker
94
+ include Cloudtasker::Worker
95
+
96
+ def perform(*args)
97
+ # Abort unless we're the first month of a quarter (Jan, Apr, Jul, Oct)
98
+ return unless Time.current.month == 1
99
+
100
+ # Abort unless we're the first of the month
101
+ return unless Time.current.day == 1
102
+
103
+ # ... job logic
104
+ end
105
+ end
106
+ ```
@@ -2,6 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
+ gem "activesupport", "6.1"
5
6
  gem "google-cloud-tasks", "1.0"
6
7
 
7
8
  gemspec path: "../"