cloudtasker 0.12.0 → 0.13.rc2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) 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} +12 -13
  4. data/.github/workflows/test_ruby_2.7.yml +44 -0
  5. data/.github/workflows/test_ruby_3.x.yml +43 -0
  6. data/.gitignore +1 -0
  7. data/.rubocop.yml +5 -0
  8. data/Appraisals +52 -8
  9. data/CHANGELOG.md +51 -1
  10. data/README.md +14 -3
  11. data/Rakefile +0 -6
  12. data/app/controllers/cloudtasker/worker_controller.rb +4 -1
  13. data/cloudtasker.gemspec +1 -6
  14. data/docs/CRON_JOBS.md +39 -0
  15. data/gemfiles/google_cloud_tasks_1.0.gemfile +2 -1
  16. data/gemfiles/google_cloud_tasks_1.1.gemfile +2 -1
  17. data/gemfiles/google_cloud_tasks_1.2.gemfile +2 -1
  18. data/gemfiles/google_cloud_tasks_1.3.gemfile +2 -1
  19. data/gemfiles/google_cloud_tasks_1.4.gemfile +8 -0
  20. data/gemfiles/google_cloud_tasks_1.5.gemfile +8 -0
  21. data/gemfiles/google_cloud_tasks_2.0.gemfile +8 -0
  22. data/gemfiles/google_cloud_tasks_2.1.gemfile +8 -0
  23. data/gemfiles/rails_5.2.gemfile +1 -0
  24. data/gemfiles/rails_6.0.gemfile +1 -0
  25. data/gemfiles/{semantic_logger_4.7.gemfile → rails_6.1.gemfile} +2 -1
  26. data/gemfiles/rails_7.0.gemfile +8 -0
  27. data/gemfiles/semantic_logger_3.4.gemfile +1 -0
  28. data/gemfiles/semantic_logger_4.6.gemfile +1 -0
  29. data/gemfiles/semantic_logger_4.7.0.gemfile +1 -0
  30. data/gemfiles/semantic_logger_4.7.2.gemfile +1 -0
  31. data/lib/cloudtasker/backend/{google_cloud_task.rb → google_cloud_task_v1.rb} +15 -11
  32. data/lib/cloudtasker/backend/google_cloud_task_v2.rb +210 -0
  33. data/lib/cloudtasker/backend/memory_task.rb +1 -1
  34. data/lib/cloudtasker/backend/redis_task.rb +7 -3
  35. data/lib/cloudtasker/cloud_task.rb +43 -5
  36. data/lib/cloudtasker/cron/schedule.rb +7 -7
  37. data/lib/cloudtasker/local_server.rb +1 -1
  38. data/lib/cloudtasker/redis_client.rb +39 -14
  39. data/lib/cloudtasker/unique_job/job.rb +3 -2
  40. data/lib/cloudtasker/unique_job/middleware/client.rb +2 -1
  41. data/lib/cloudtasker/version.rb +1 -1
  42. data/lib/cloudtasker/worker.rb +4 -4
  43. data/lib/cloudtasker/worker_wrapper.rb +1 -1
  44. data/lib/cloudtasker.rb +1 -0
  45. data/lib/tasks/setup_queue.rake +2 -2
  46. metadata +21 -80
  47. data/app/controllers/cloudtasker/application_controller.rb +0 -8
  48. data/gemfiles/google_cloud_tasks_1.0.gemfile.lock +0 -341
  49. data/gemfiles/google_cloud_tasks_1.1.gemfile.lock +0 -341
  50. data/gemfiles/google_cloud_tasks_1.2.gemfile.lock +0 -341
  51. data/gemfiles/google_cloud_tasks_1.3.gemfile.lock +0 -342
  52. data/gemfiles/rails_4.0.gemfile +0 -10
  53. data/gemfiles/rails_4.1.gemfile +0 -9
  54. data/gemfiles/rails_4.2.gemfile +0 -9
  55. data/gemfiles/rails_5.0.gemfile +0 -9
  56. data/gemfiles/rails_5.1.gemfile +0 -9
  57. data/gemfiles/rails_5.2.gemfile.lock +0 -326
  58. data/gemfiles/rails_6.0.gemfile.lock +0 -342
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c1ddbb417da7795762b05246c8f6c66331632e28fb1dc4aac95882eb1d592a91
4
- data.tar.gz: 4e392625eab9dd00201fe9b4f0590137afb1887472a0a0c1e3df88d836743f51
3
+ metadata.gz: 1ea79ae390a67c57e19fade2cd70235dab2cc2b2d115c40510489f93e8ecd509
4
+ data.tar.gz: 20760c5bffa058a32678bd07778f3fa375361cf6fc7bb1e57dfa54ed49b6cd72
5
5
  SHA512:
6
- metadata.gz: 7b75bac785eb416cc982d95dc4144c3accc4b1e9dde1256ba163a7cfc3adef7fde5f1f91af06e81b143b7a97d83a3a2e7269b3f6ae98b3e603496f3e10149581
7
- data.tar.gz: 1452b8478277be45e391856c05c333c597f8dc33bbbef5416c9b154f56db0f73f8400be1220ee4bb1b349709e46cc66909c72c853c768284c1946bdf34fa394a
6
+ metadata.gz: fce5e6ddf114647299a6ffded2a43c07417bbd5e58fc62d1eb1bd4d2d0d93ae4ff13a2beb952286a3a761fb6551c422aef3b10707f4121681540372e4da2a23b
7
+ data.tar.gz: a4f828a6780d506067fd0d8207e140a1f0473252a1444020cbae1c7cc278260700ea5fe3111ab07f415a14b0790a4833b43939ad80695bf1525e530794668b96
@@ -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,34 +8,37 @@ 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'
20
16
  - 'google-cloud-tasks-1.2'
21
17
  - 'google-cloud-tasks-1.3'
18
+ - 'google-cloud-tasks-1.4'
19
+ - 'google-cloud-tasks-1.5'
20
+ - 'google-cloud-tasks-2.0'
21
+ - 'google-cloud-tasks-2.1'
22
22
  - 'rails-5.2'
23
23
  - 'rails-6.0'
24
+ - 'rails-6.1'
24
25
  - 'semantic_logger-3.4'
25
26
  - 'semantic_logger-4.6'
26
27
  - 'semantic_logger-4.7.0'
27
28
  - 'semantic_logger-4.7.2'
28
29
  steps:
29
- - name: Setup System
30
- run: sudo apt-get install libsqlite3-dev
31
30
  - uses: actions/checkout@v2
32
31
  - uses: zhulik/redis-action@1.1.0
33
- - name: Set up Ruby 2.6
34
- uses: actions/setup-ruby@v1
32
+ - name: Set up Ruby
33
+ uses: ruby/setup-ruby@v1
35
34
  with:
36
35
  ruby-version: ${{ matrix.ruby }}
36
+ bundler-cache: true
37
37
  - name: Build and test with Rake
38
38
  env:
39
39
  APPRAISAL_CONTEXT: ${{ matrix.appraisal }}
40
40
  run: |
41
41
  gem install bundler
42
42
  bundle install --jobs 4 --retry 3
43
- bundle exec rubocop
44
43
  bundle exec appraisal ${APPRAISAL_CONTEXT} bundle
45
44
  bundle exec appraisal ${APPRAISAL_CONTEXT} rspec
@@ -0,0 +1,44 @@
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
+ - 'google-cloud-tasks-1.4'
18
+ - 'google-cloud-tasks-1.5'
19
+ - 'google-cloud-tasks-2.0'
20
+ - 'google-cloud-tasks-2.1'
21
+ - 'rails-5.2'
22
+ - 'rails-6.0'
23
+ - 'rails-6.1'
24
+ - 'rails-7.0'
25
+ - 'semantic_logger-3.4'
26
+ - 'semantic_logger-4.6'
27
+ - 'semantic_logger-4.7.0'
28
+ - 'semantic_logger-4.7.2'
29
+ steps:
30
+ - uses: actions/checkout@v2
31
+ - uses: zhulik/redis-action@1.1.0
32
+ - name: Set up Ruby
33
+ uses: ruby/setup-ruby@v1
34
+ with:
35
+ ruby-version: ${{ matrix.ruby }}
36
+ bundler-cache: true
37
+ - name: Build and test with Rake
38
+ env:
39
+ APPRAISAL_CONTEXT: ${{ matrix.appraisal }}
40
+ run: |
41
+ gem install bundler
42
+ bundle install --jobs 4 --retry 3
43
+ bundle exec appraisal ${APPRAISAL_CONTEXT} bundle
44
+ bundle exec appraisal ${APPRAISAL_CONTEXT} rspec
@@ -0,0 +1,43 @@
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
+ - 'google-cloud-tasks-1.4'
19
+ - 'google-cloud-tasks-1.5'
20
+ - 'google-cloud-tasks-2.0'
21
+ - 'google-cloud-tasks-2.1'
22
+ - 'rails-6.1'
23
+ - 'rails-7.0'
24
+ - 'semantic_logger-3.4'
25
+ - 'semantic_logger-4.6'
26
+ - 'semantic_logger-4.7.0'
27
+ - 'semantic_logger-4.7.2'
28
+ steps:
29
+ - uses: actions/checkout@v2
30
+ - uses: zhulik/redis-action@1.1.0
31
+ - name: Set up Ruby
32
+ uses: ruby/setup-ruby@v1
33
+ with:
34
+ ruby-version: ${{ matrix.ruby }}
35
+ bundler-cache: true
36
+ - name: Build and test with Rake
37
+ env:
38
+ APPRAISAL_CONTEXT: ${{ matrix.appraisal }}
39
+ run: |
40
+ gem install bundler
41
+ bundle install --jobs 4 --retry 3
42
+ bundle exec appraisal ${APPRAISAL_CONTEXT} bundle
43
+ bundle exec appraisal ${APPRAISAL_CONTEXT} rspec
data/.gitignore CHANGED
@@ -5,6 +5,7 @@
5
5
  /doc/
6
6
  /examples/rails/log/*.log
7
7
  /examples/rails/tmp/
8
+ /gemfiles/*.gemfile.lock
8
9
  /log/
9
10
  /pkg/
10
11
  /spec/reports/
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,85 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  appraise 'google-cloud-tasks-1.0' do
4
- gem 'google-cloud-tasks', '1.0'
4
+ gem 'activesupport', '6.1' # ruby 2.5 / 2.6 compatibility
5
+ gem 'google-cloud-tasks', '~> 1.0.0'
5
6
  end
6
7
 
7
8
  appraise 'google-cloud-tasks-1.1' do
8
- gem 'google-cloud-tasks', '1.1'
9
+ gem 'activesupport', '6.1' # ruby 2.5 / 2.6 compatibility
10
+ gem 'google-cloud-tasks', '~> 1.1.0'
9
11
  end
10
12
 
11
13
  appraise 'google-cloud-tasks-1.2' do
12
- gem 'google-cloud-tasks', '1.2'
14
+ gem 'activesupport', '6.1' # ruby 2.5 / 2.6 compatibility
15
+ gem 'google-cloud-tasks', '~> 1.2.0'
13
16
  end
14
17
 
15
18
  appraise 'google-cloud-tasks-1.3' do
16
- gem 'google-cloud-tasks', '1.3'
19
+ gem 'activesupport', '6.1' # ruby 2.5 / 2.6 compatibility
20
+ gem 'google-cloud-tasks', '~> 1.3.0'
17
21
  end
18
22
 
19
- appraise 'rails-5.2' do
20
- gem 'rails', '5.2'
23
+ appraise 'google-cloud-tasks-1.4' do
24
+ gem 'activesupport', '6.1' # ruby 2.5 / 2.6 compatibility
25
+ gem 'google-cloud-tasks', '~> 1.4.0'
21
26
  end
22
27
 
23
- appraise 'rails-6.0' do
24
- gem 'rails', '6.0'
28
+ appraise 'google-cloud-tasks-1.5' do
29
+ gem 'activesupport', '6.1' # ruby 2.5 / 2.6 compatibility
30
+ gem 'google-cloud-tasks', '~> 1.5.0'
31
+ end
32
+
33
+ appraise 'google-cloud-tasks-2.0' do
34
+ gem 'activesupport', '6.1' # ruby 2.5 / 2.6 compatibility
35
+ gem 'google-cloud-tasks', '~> 2.0.0'
36
+ end
37
+
38
+ appraise 'google-cloud-tasks-2.1' do
39
+ gem 'activesupport', '6.1' # ruby 2.5 / 2.6 compatibility
40
+ gem 'google-cloud-tasks', '~> 2.1.0'
41
+ end
42
+
43
+ if RUBY_VERSION < '3'
44
+ appraise 'rails-5.2' do
45
+ gem 'rails', '5.2'
46
+ gem 'rspec-rails'
47
+ end
48
+
49
+ appraise 'rails-6.0' do
50
+ gem 'rails', '6.0'
51
+ gem 'rspec-rails'
52
+ end
53
+ end
54
+
55
+ appraise 'rails-6.1' do
56
+ gem 'rails', '6.1'
57
+ gem 'rspec-rails'
58
+ end
59
+
60
+ if RUBY_VERSION >= '2.7'
61
+ appraise 'rails-7.0' do
62
+ gem 'rails', '7.0'
63
+ gem 'rspec-rails'
64
+ end
25
65
  end
26
66
 
27
67
  appraise 'semantic_logger-3.4' do
68
+ gem 'activesupport', '6.1' # ruby 2.5 / 2.6 compatibility
28
69
  gem 'semantic_logger', '3.4.1'
29
70
  end
30
71
 
31
72
  appraise 'semantic_logger-4.6' do
73
+ gem 'activesupport', '6.1' # ruby 2.5 / 2.6 compatibility
32
74
  gem 'semantic_logger', '4.6.1'
33
75
  end
34
76
 
35
77
  appraise 'semantic_logger-4.7.0' do
78
+ gem 'activesupport', '6.1' # ruby 2.5 / 2.6 compatibility
36
79
  gem 'semantic_logger', '4.7.0'
37
80
  end
38
81
 
39
82
  appraise 'semantic_logger-4.7.2' do
83
+ gem 'activesupport', '6.1' # ruby 2.5 / 2.6 compatibility
40
84
  gem 'semantic_logger', '4.7.2'
41
85
  end
data/CHANGELOG.md CHANGED
@@ -1,5 +1,55 @@
1
1
  # Changelog
2
2
 
3
+ ## [v0.13.rc2](https://github.com/keypup-io/cloudtasker/tree/v0.13.rc2) (2022-01-25)
4
+
5
+ [Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.12.2...v0.13.rc2)
6
+
7
+ **Improvements:**
8
+ - Dependencies: add support for google-cloud-tasks v2 and while keeping backward compatibility with v1. For existing projects, you may need to run `bundle update google-cloud-tasks` after upgrading cloudtasker to update google-cloud-tasks to the latest version.
9
+ - Ruby 3: Rework method arguments to be compatible with Ruby 3
10
+ - Tests: Separate test environment for Ruby 2 and Ruby 3
11
+ - Tests: Do not load Rails by default and skip Rails-specific tests in non-Rails appraisals
12
+
13
+ ## [v0.12.2](https://github.com/keypup-io/cloudtasker/tree/v0.12.2) (2021-12-31)
14
+
15
+ [Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.12.1...v0.12.2)
16
+
17
+ **Fixed bugs:**
18
+ - Local server: Fix race condition on thread processing. See [#46](https://github.com/keypup-io/cloudtasker/pull/46)
19
+ - Non-Rails: Fix `arguments_missing?` check for non-rails projects.
20
+
21
+ ## [v0.12.1](https://github.com/keypup-io/cloudtasker/tree/v0.12.1) (2021-08-25)
22
+
23
+ [Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.12.0...v0.12.1)
24
+
25
+ **Fixed bugs:**
26
+ - Dependencies: Require `try` from `activesupport`. This was preventing non-Rails projects from properly running Cloudtasker jobs.
27
+ - 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)
28
+
29
+ ## [v0.11.1](https://github.com/keypup-io/cloudtasker/tree/v0.11.1) (2021-08-25)
30
+
31
+ [Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.11.0...v0.11.1)
32
+
33
+ **Fixed bugs:**
34
+ - Dependencies: Require `try` from `activesupport`. This was preventing non-Rails projects from properly running Cloudtasker jobs.
35
+ - 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)
36
+
37
+ ## [v0.10.2](https://github.com/keypup-io/cloudtasker/tree/v0.10.2) (2021-08-25)
38
+
39
+ [Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.10.1...v0.10.2)
40
+
41
+ **Fixed bugs:**
42
+ - Dependencies: Require `try` from `activesupport`. This was preventing non-Rails projects from properly running Cloudtasker jobs.
43
+ - 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)
44
+
45
+ ## [v0.9.5](https://github.com/keypup-io/cloudtasker/tree/v0.9.5) (2021-08-25)
46
+
47
+ [Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.9.4...v0.9.5)
48
+
49
+ **Fixed bugs:**
50
+ - Dependencies: Require `try` from `activesupport`. This was preventing non-Rails projects from properly running Cloudtasker jobs.
51
+ - 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)
52
+
3
53
  ## [v0.12.0](https://github.com/keypup-io/cloudtasker/tree/v0.12.0) (2021-08-19)
4
54
 
5
55
  [Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.11.0...v0.12.0)
@@ -25,7 +75,7 @@
25
75
  **Fixed bugs:**
26
76
  - Retries: Enforce job retry limit on job processing. There was an edge case where jobs could be retried indefinitely on batch callback errors.
27
77
 
28
- ## [v0.11.0](https://github.com/keypup-io/cloudtasker/tree/v0.11.0) (2021-03-11)
78
+ ## [v0.11.0](https://github.com/keypup-io/cloudtasker/tree/v0.11.0) (2020-11-23)
29
79
 
30
80
  [Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.10.0...v0.11.0)
31
81
 
data/README.md CHANGED
@@ -12,7 +12,7 @@ Cloudtasker also provides optional modules for running [cron jobs](docs/CRON_JOB
12
12
 
13
13
  A local processing server is also available for development. This local server processes jobs in lieu of Cloud Tasks and allows you to work offline.
14
14
 
15
- **Maturity**: This gem is production-ready. We at Keypup have already processed millions of jobs using Cloudtasker and all related extensions (cron, batch and unique jobs). We are planning to release the official `v1.0.0` somewhere in 2021, in case we've missed any edge-case bug.
15
+ **Maturity**: This gem is production-ready. We at Keypup have already processed millions of jobs using Cloudtasker and all related extensions (cron, batch and unique jobs). We are planning to release the official `v1.0.0` somewhere in 2022, in case we've missed any edge-case bug.
16
16
 
17
17
  ## Summary
18
18
 
@@ -51,6 +51,9 @@ Add this line to your application's Gemfile:
51
51
 
52
52
  ```ruby
53
53
  gem 'cloudtasker'
54
+
55
+ # For Ruby 3 support, please use v0.13.rc1
56
+ gem 'cloudtasker, '~> 0.13.rc1'
54
57
  ```
55
58
 
56
59
  And then execute:
@@ -1087,9 +1090,17 @@ To size the concurrency of your queues you should therefore take the most limiti
1087
1090
 
1088
1091
  ## Development
1089
1092
 
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.
1093
+ After checking out the repo, run `bin/setup` to install dependencies.
1094
+
1095
+ 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.
1096
+ For tests including Rails-specific tests, run `bundle exec appraisal rails-7.0 rake`
1097
+ For all context-specific tests (incl. Rails), run the [appraisal tests](Appraisals) using `bundle exec appraisal rake`.
1098
+
1099
+ You can run `bin/console` for an interactive prompt that will allow you to experiment.
1100
+
1101
+ To install this gem onto your local machine, run `bundle exec rake install`.
1091
1102
 
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).
1103
+ 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
1104
 
1094
1105
  ## Contributing
1095
1106
 
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
@@ -31,14 +31,13 @@ Gem::Specification.new do |spec|
31
31
  spec.add_dependency 'activesupport'
32
32
  spec.add_dependency 'connection_pool'
33
33
  spec.add_dependency 'fugit'
34
- spec.add_dependency 'google-cloud-tasks', '~> 1.0'
34
+ spec.add_dependency 'google-cloud-tasks'
35
35
  spec.add_dependency 'jwt'
36
36
  spec.add_dependency 'redis'
37
37
  spec.add_dependency 'retriable'
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/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 "google-cloud-tasks", "1.0"
5
+ gem "activesupport", "6.1"
6
+ gem "google-cloud-tasks", "~> 1.0.0"
6
7
 
7
8
  gemspec path: "../"
@@ -2,6 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "google-cloud-tasks", "1.1"
5
+ gem "activesupport", "6.1"
6
+ gem "google-cloud-tasks", "~> 1.1.0"
6
7
 
7
8
  gemspec path: "../"
@@ -2,6 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "google-cloud-tasks", "1.2"
5
+ gem "activesupport", "6.1"
6
+ gem "google-cloud-tasks", "~> 1.2.0"
6
7
 
7
8
  gemspec path: "../"
@@ -2,6 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "google-cloud-tasks", "1.3"
5
+ gem "activesupport", "6.1"
6
+ gem "google-cloud-tasks", "~> 1.3.0"
6
7
 
7
8
  gemspec path: "../"
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "6.1"
6
+ gem "google-cloud-tasks", "~> 1.4.0"
7
+
8
+ gemspec path: "../"
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "6.1"
6
+ gem "google-cloud-tasks", "~> 1.5.0"
7
+
8
+ gemspec path: "../"
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "6.1"
6
+ gem "google-cloud-tasks", "~> 2.0.0"
7
+
8
+ gemspec path: "../"
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "6.1"
6
+ gem "google-cloud-tasks", "~> 2.1.0"
7
+
8
+ gemspec path: "../"
@@ -3,5 +3,6 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "rails", "5.2"
6
+ gem "rspec-rails"
6
7
 
7
8
  gemspec path: "../"
@@ -3,5 +3,6 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "rails", "6.0"
6
+ gem "rspec-rails"
6
7
 
7
8
  gemspec path: "../"
@@ -2,6 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "semantic_logger", "4.7.2"
5
+ gem "rails", "6.1"
6
+ gem "rspec-rails"
6
7
 
7
8
  gemspec path: "../"
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "7.0"
6
+ gem "rspec-rails"
7
+
8
+ gemspec path: "../"
@@ -2,6 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
+ gem "activesupport", "6.1"
5
6
  gem "semantic_logger", "3.4.1"
6
7
 
7
8
  gemspec path: "../"
@@ -2,6 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
+ gem "activesupport", "6.1"
5
6
  gem "semantic_logger", "4.6.1"
6
7
 
7
8
  gemspec path: "../"
@@ -2,6 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
+ gem "activesupport", "6.1"
5
6
  gem "semantic_logger", "4.7.0"
6
7
 
7
8
  gemspec path: "../"
@@ -2,6 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
+ gem "activesupport", "6.1"
5
6
  gem "semantic_logger", "4.7.2"
6
7
 
7
8
  gemspec path: "../"