cloudtasker 0.8.0 → 0.8.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/.rubocop.yml +5 -0
- data/.travis.yml +3 -3
- data/CHANGELOG.md +4 -0
- data/README.md +19 -17
- data/_config.yml +1 -0
- data/app/controllers/cloudtasker/worker_controller.rb +1 -3
- data/docs/BATCH_JOBS.md +3 -3
- data/docs/CRON_JOBS.md +1 -3
- data/gemfiles/google_cloud_tasks_1.0.gemfile.lock +22 -5
- data/gemfiles/google_cloud_tasks_1.1.gemfile.lock +22 -5
- data/gemfiles/google_cloud_tasks_1.2.gemfile.lock +23 -6
- data/gemfiles/google_cloud_tasks_1.3.gemfile.lock +22 -5
- data/gemfiles/rails_5.2.gemfile.lock +22 -5
- data/gemfiles/rails_6.0.gemfile.lock +23 -6
- data/lib/cloudtasker/backend/redis_task.rb +8 -5
- data/lib/cloudtasker/config.rb +4 -1
- data/lib/cloudtasker/version.rb +1 -1
- data/lib/cloudtasker/worker.rb +1 -1
- metadata +3 -3
- data/Gemfile.lock +0 -280
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3459c464d92cbd6e9c920a0f67a96ba143bf5746af3e8dde4fe13cade0a75ffb
|
4
|
+
data.tar.gz: 42313e898816af4d2eb670622569e1545e13eb54f2de1acaee2f4cddb923e101
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7ce1fcf26ec35f3e21a8f932f5f530c54a136193458944535097e84186c23fdf61306059fbe7449af38c3747ba48b0aad380cf706c3d4d27ffa70eae36c2f042
|
7
|
+
data.tar.gz: ad8c3a5529ef16e699a5db45594b19ee72eaaa3ff22315e463fc68e7548b961ce399ce7a44af784270cf7cac02b057cc5f31bb41188eabbb6e29224fbc0e87ef
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/.travis.yml
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
language: ruby
|
3
3
|
cache: bundler
|
4
4
|
rvm:
|
5
|
-
- 2.3
|
6
|
-
- 2.4
|
7
5
|
- 2.5.5
|
6
|
+
services:
|
7
|
+
- redis-server
|
8
8
|
before_install: gem install bundler -v 2.0.2
|
9
|
-
before_script: rubocop
|
9
|
+
before_script: bundle exec rubocop
|
10
10
|
gemfile:
|
11
11
|
- gemfiles/google_cloud_tasks_1.0.gemfile
|
12
12
|
- gemfiles/google_cloud_tasks_1.1.gemfile
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [v0.8.0](https://github.com/keypup-io/cloudtasker/tree/v0.8.0) (2019-11-27)
|
4
|
+
|
5
|
+
[Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.7.0...v0.8.0)
|
6
|
+
|
3
7
|
## [v0.7.0](https://github.com/keypup-io/cloudtasker/tree/v0.7.0) (2019-11-25)
|
4
8
|
|
5
9
|
[Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.6.0...v0.7.0)
|
data/README.md
CHANGED
@@ -1,14 +1,16 @@
|
|
1
|
+
[![Build Status](https://travis-ci.org/keypup-io/cloudtasker.svg?branch=master)](https://travis-ci.org/keypup-io/cloudtasker) [![Gem Version](https://badge.fury.io/rb/cloudtasker.svg)](https://badge.fury.io/rb/cloudtasker)
|
2
|
+
|
1
3
|
# Cloudtasker
|
2
4
|
|
3
5
|
Background jobs for Ruby using Google Cloud Tasks.
|
4
6
|
|
5
7
|
Cloudtasker provides an easy to manage interface to Google Cloud Tasks for background job processing. Workers can be defined programmatically using the Cloudtasker DSL and enqueued for processing using a simple to use API.
|
6
8
|
|
7
|
-
Cloudtasker is particularly suited for serverless applications only responding to HTTP requests and where running a dedicated job processing is not an option (e.g. deploy via [Cloud Run](https://cloud.google.com/run)). All jobs enqueued in Cloud Tasks via Cloudtasker eventually
|
9
|
+
Cloudtasker is particularly suited for serverless applications only responding to HTTP requests and where running a dedicated job processing is not an option (e.g. deploy via [Cloud Run](https://cloud.google.com/run)). All jobs enqueued in Cloud Tasks via Cloudtasker eventually get processed by your application via HTTP requests.
|
8
10
|
|
9
11
|
Cloudtasker also provides optional modules for running [cron jobs](docs/CRON_JOBS.md), [batch jobs](docs/BATCH_JOBS.md) and [unique jobs](docs/UNIQUE_JOBS.md).
|
10
12
|
|
11
|
-
A local processing server is also available in development. This local server processes jobs in lieu of Cloud Tasks and
|
13
|
+
A local processing server is also available in development. This local server processes jobs in lieu of Cloud Tasks and allows you to work offline.
|
12
14
|
|
13
15
|
## Summary
|
14
16
|
|
@@ -107,7 +109,7 @@ Open a Rails console and enqueue some jobs
|
|
107
109
|
DummyWorker.perform_async('foo')
|
108
110
|
|
109
111
|
# Process job in 60 seconds
|
110
|
-
DummyWorker.perform_in(
|
112
|
+
DummyWorker.perform_in(60, 'foo')
|
111
113
|
```
|
112
114
|
|
113
115
|
Your Rails logs should display the following:
|
@@ -349,7 +351,7 @@ When working locally on your application it is usually not possible to have a pu
|
|
349
351
|
### Option 1: Cloudtasker local server
|
350
352
|
The Cloudtasker local server is a ruby daemon that looks for jobs pushed to Redis and sends them to your application via HTTP POST requests. The server mimics the way Google Cloud Tasks works, but locally!
|
351
353
|
|
352
|
-
You can configure your
|
354
|
+
You can configure your application to use the Cloudtasker local server using the following initializer:
|
353
355
|
```ruby
|
354
356
|
# config/initializers/cloudtasker.rb
|
355
357
|
|
@@ -371,20 +373,20 @@ bundle exec cloudtasker
|
|
371
373
|
You can as well define a Procfile to manage the cloudtasker process via foreman. Then use `foreman start` to launch both your Rails server and the Cloudtasker local server.
|
372
374
|
```yaml
|
373
375
|
# Procfile
|
374
|
-
web: rails s
|
375
|
-
worker: cloudtasker
|
376
|
+
web: bundle exec rails s
|
377
|
+
worker: bundle exec cloudtasker
|
376
378
|
```
|
377
379
|
|
378
380
|
Note that the local development server runs with `5` concurrent threads by default. You can tune the number of threads per queue by running `cloudtasker` the following options:
|
379
381
|
```bash
|
380
|
-
cloudtasker -q critical,5 -q important,4 -q default,3
|
382
|
+
bundle exec cloudtasker -q critical,5 -q important,4 -q default,3
|
381
383
|
```
|
382
384
|
|
383
385
|
### Option 2: Using ngrok
|
384
386
|
|
385
387
|
Want to test your application end to end with Google Cloud Task? Then [ngrok](https://ngrok.io) is the way to go.
|
386
388
|
|
387
|
-
First start your ngrok tunnel
|
389
|
+
First start your ngrok tunnel:
|
388
390
|
```bash
|
389
391
|
ngrok http 3000
|
390
392
|
```
|
@@ -409,7 +411,7 @@ end
|
|
409
411
|
|
410
412
|
Finally start Rails to accept jobs from Google Cloud Tasks
|
411
413
|
```bash
|
412
|
-
rails s
|
414
|
+
bundle exec rails s
|
413
415
|
```
|
414
416
|
|
415
417
|
## Logging
|
@@ -418,7 +420,7 @@ There are several options available to configure logging and logging context.
|
|
418
420
|
### Configuring a logger
|
419
421
|
Cloudtasker uses `Rails.logger` if Rails is available and falls back on a plain ruby logger `Logger.new(STDOUT)` if not.
|
420
422
|
|
421
|
-
It is also possible to configure your own logger. For example you can setup Cloudtasker with [semantic_logger](http://rocketjob.github.io/semantic_logger) by doing the following your initializer:
|
423
|
+
It is also possible to configure your own logger. For example you can setup Cloudtasker with [semantic_logger](http://rocketjob.github.io/semantic_logger) by doing the following in your initializer:
|
422
424
|
```ruby
|
423
425
|
# config/initializers/cloudtasker.rb
|
424
426
|
|
@@ -464,7 +466,7 @@ Cloudtasker::WorkerLogger.log_context_processor = lambda { |worker|
|
|
464
466
|
}
|
465
467
|
```
|
466
468
|
|
467
|
-
You could also decide to log all available context
|
469
|
+
You could also decide to log all available context - including arguments passed to `perform` - for specific workers only:
|
468
470
|
```ruby
|
469
471
|
# app/workers/full_context_worker.rb
|
470
472
|
|
@@ -479,7 +481,7 @@ class FullContextWorker
|
|
479
481
|
end
|
480
482
|
```
|
481
483
|
|
482
|
-
See the [Cloudtasker::Worker class](
|
484
|
+
See the [Cloudtasker::Worker class](lib/cloudtasker/worker.rb) for more information on attributes available to be logged in your `log_context_processor` proc.
|
483
485
|
|
484
486
|
## Error Handling
|
485
487
|
|
@@ -611,7 +613,7 @@ MyWorker.new.perform({ 'foo' => 'bar', 'baz' => { 'key' => 'value' } })
|
|
611
613
|
```
|
612
614
|
|
613
615
|
### Be careful with default arguments
|
614
|
-
Default arguments passed to the `perform` method are not actually considered as job arguments. Default arguments will therefore be ignored in contextual logging and by extensions relying on arguments such as the
|
616
|
+
Default arguments passed to the `perform` method are not actually considered as job arguments. Default arguments will therefore be ignored in contextual logging and by extensions relying on arguments such as the [unique job](docs/UNIQUE_JOBS.md) extension.
|
615
617
|
|
616
618
|
Consider the following worker:
|
617
619
|
```ruby
|
@@ -664,13 +666,13 @@ BigPayloadWorker.perform_async(payload_id)
|
|
664
666
|
|
665
667
|
### Sizing the concurrency of your queues
|
666
668
|
|
667
|
-
When defining the max concurrency
|
669
|
+
When defining the max concurrency of your queues (`max_concurrent_dispatches` in Cloud Tasks) you must keep in mind the maximum number of threads that your application provides. Otherwise your application threads may eventually get exhausted and your users will experience outages if all your web threads are busy running jobs.
|
668
670
|
|
669
671
|
#### With server based applications
|
670
672
|
|
671
673
|
Let's consider an application deployed in production with 3 instances, each having `RAILS_MAX_THREADS` set to `20`. This gives us a total of `60` threads available.
|
672
674
|
|
673
|
-
Now let's say that we distribute jobs across two queues: `default` and `critical`. We can set the concurrency of each
|
675
|
+
Now let's say that we distribute jobs across two queues: `default` and `critical`. We can set the concurrency of each queue depending on the profile of the application:
|
674
676
|
|
675
677
|
E.g. 1: The application serves requests from web users and runs backgrounds jobs in a balanced way
|
676
678
|
```
|
@@ -687,7 +689,7 @@ concurrency for default queue: 35
|
|
687
689
|
concurrency for critical queue: 15
|
688
690
|
|
689
691
|
Total threads consumed by jobs at most: 50
|
690
|
-
Total threads always available to
|
692
|
+
Total threads always available to API clients at worst: 10
|
691
693
|
```
|
692
694
|
|
693
695
|
Also always ensure that your total number of threads does not exceed the available number of database connections (if you use any).
|
@@ -698,7 +700,7 @@ In a serverless context your application will be scaled up/down based on traffic
|
|
698
700
|
|
699
701
|
Because your application is auto-scaled - and assuming you haven't set a maximum - your job processing capacity if theoretically unlimited. The main limiting factor in a serverless context becomes external constraints such as the number of database connections available.
|
700
702
|
|
701
|
-
To size the concurrency of your queues you should therefore take the most limiting factor - which is often the database connection pool size
|
703
|
+
To size the concurrency of your queues you should therefore take the most limiting factor - which is often the database connection pool size of relational databases - and use the calculations of the previous section with this limiting factor as the capping parameter instead of threads.
|
702
704
|
|
703
705
|
|
704
706
|
## Development
|
data/_config.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
theme: jekyll-theme-slate
|
@@ -17,9 +17,7 @@ module Cloudtasker
|
|
17
17
|
#
|
18
18
|
def run
|
19
19
|
# Build payload
|
20
|
-
payload = request.
|
21
|
-
.slice(:worker, :job_id, :job_args, :job_meta, :job_queue)
|
22
|
-
.merge(job_retries: job_retries)
|
20
|
+
payload = JSON.parse(request.body.read).merge(job_retries: job_retries)
|
23
21
|
|
24
22
|
# Process payload
|
25
23
|
WorkerHandler.execute_from_payload!(payload)
|
data/docs/BATCH_JOBS.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
**Note**: this extension requires redis
|
4
4
|
|
5
|
-
The Cloudtasker batch job extension allows to add sub-jobs to regular jobs. This adds the ability to enqueue a list of jobs and track their overall progression as a
|
5
|
+
The Cloudtasker batch job extension allows to add sub-jobs to regular jobs. This adds the ability to enqueue a list of jobs and track their overall progression as a group of jobs (a "batch"). This extension allows jobs to define callbacks in their worker to track completion of the batch and take actions based on that.
|
6
6
|
|
7
7
|
## Configuration
|
8
8
|
|
@@ -53,7 +53,7 @@ The following callbacks are available on your workers to track the progress of t
|
|
53
53
|
|
54
54
|
| Callback | Argument | Description |
|
55
55
|
|------|-------------|-----------|
|
56
|
-
| `on_batch_node_complete` | `The child job` | Invoked when any descendant (e.g. sub-sub job) successfully
|
56
|
+
| `on_batch_node_complete` | `The child job` | Invoked when any descendant (e.g. sub-sub job) successfully completes |
|
57
57
|
| `on_child_complete` | `The child job` | Invoked when a direct descendant successfully completes |
|
58
58
|
| `on_child_error` | `The child job` | Invoked when a child fails |
|
59
59
|
| `on_child_dead` | `The child job` | Invoked when a child has exhausted all of its retries |s
|
@@ -88,4 +88,4 @@ def on_batch_node_complete(_child_job)
|
|
88
88
|
logger.info("Completed: #{batch.progress.completed}")
|
89
89
|
logger.info("Progress: #{batch.progress.percent.to_i}%")
|
90
90
|
end
|
91
|
-
```
|
91
|
+
```
|
data/docs/CRON_JOBS.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ..
|
3
3
|
specs:
|
4
|
-
cloudtasker (0.
|
4
|
+
cloudtasker (0.8.0)
|
5
5
|
activesupport
|
6
6
|
fugit
|
7
7
|
google-cloud-tasks
|
@@ -84,9 +84,19 @@ GEM
|
|
84
84
|
tzinfo
|
85
85
|
faraday (0.17.0)
|
86
86
|
multipart-post (>= 1.2, < 3)
|
87
|
+
faraday-http-cache (2.0.0)
|
88
|
+
faraday (~> 0.8)
|
87
89
|
fugit (1.3.3)
|
88
90
|
et-orbi (~> 1.1, >= 1.1.8)
|
89
91
|
raabro (~> 1.1)
|
92
|
+
github_changelog_generator (1.15.0)
|
93
|
+
activesupport
|
94
|
+
faraday-http-cache
|
95
|
+
multi_json
|
96
|
+
octokit (~> 4.6)
|
97
|
+
rainbow (>= 2.2.1)
|
98
|
+
rake (>= 10.0)
|
99
|
+
retriable (~> 3.0)
|
90
100
|
globalid (0.4.2)
|
91
101
|
activesupport (>= 4.2.0)
|
92
102
|
google-cloud-tasks (1.0.0)
|
@@ -99,7 +109,7 @@ GEM
|
|
99
109
|
googleauth (~> 0.9)
|
100
110
|
grpc (~> 1.24)
|
101
111
|
rly (~> 0.2.3)
|
102
|
-
google-protobuf (3.
|
112
|
+
google-protobuf (3.11.0)
|
103
113
|
googleapis-common-protos (1.3.9)
|
104
114
|
google-protobuf (~> 3.0)
|
105
115
|
googleapis-common-protos-types (~> 1.0)
|
@@ -124,7 +134,7 @@ GEM
|
|
124
134
|
concurrent-ruby (~> 1.0)
|
125
135
|
jaro_winkler (1.5.4)
|
126
136
|
jwt (2.2.1)
|
127
|
-
loofah (2.
|
137
|
+
loofah (2.4.0)
|
128
138
|
crass (~> 1.0.2)
|
129
139
|
nokogiri (>= 1.5.9)
|
130
140
|
mail (2.7.1)
|
@@ -142,8 +152,10 @@ GEM
|
|
142
152
|
nio4r (2.5.2)
|
143
153
|
nokogiri (1.10.5)
|
144
154
|
mini_portile2 (~> 2.4.0)
|
155
|
+
octokit (4.14.0)
|
156
|
+
sawyer (~> 0.8.0, >= 0.5.3)
|
145
157
|
os (1.0.1)
|
146
|
-
parallel (1.19.
|
158
|
+
parallel (1.19.1)
|
147
159
|
parser (2.6.5.0)
|
148
160
|
ast (~> 2.4.0)
|
149
161
|
public_suffix (4.0.1)
|
@@ -180,6 +192,7 @@ GEM
|
|
180
192
|
rainbow (3.0.0)
|
181
193
|
rake (10.5.0)
|
182
194
|
redis (4.1.3)
|
195
|
+
retriable (3.1.2)
|
183
196
|
rly (0.2.3)
|
184
197
|
rspec (3.9.0)
|
185
198
|
rspec-core (~> 3.9.0)
|
@@ -209,10 +222,13 @@ GEM
|
|
209
222
|
rainbow (>= 2.2.2, < 4.0)
|
210
223
|
ruby-progressbar (~> 1.7)
|
211
224
|
unicode-display_width (>= 1.4.0, < 1.7)
|
212
|
-
rubocop-rspec (1.
|
225
|
+
rubocop-rspec (1.37.0)
|
213
226
|
rubocop (>= 0.68.1)
|
214
227
|
ruby-progressbar (1.10.1)
|
215
228
|
safe_yaml (1.0.5)
|
229
|
+
sawyer (0.8.2)
|
230
|
+
addressable (>= 2.3.5)
|
231
|
+
faraday (> 0.8, < 2.0)
|
216
232
|
signet (0.12.0)
|
217
233
|
addressable (~> 2.3)
|
218
234
|
faraday (~> 0.9)
|
@@ -248,6 +264,7 @@ DEPENDENCIES
|
|
248
264
|
appraisal
|
249
265
|
bundler (~> 2.0)
|
250
266
|
cloudtasker!
|
267
|
+
github_changelog_generator
|
251
268
|
google-cloud-tasks (= 1.0)
|
252
269
|
rails
|
253
270
|
rake (~> 10.0)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ..
|
3
3
|
specs:
|
4
|
-
cloudtasker (0.
|
4
|
+
cloudtasker (0.8.0)
|
5
5
|
activesupport
|
6
6
|
fugit
|
7
7
|
google-cloud-tasks
|
@@ -84,9 +84,19 @@ GEM
|
|
84
84
|
tzinfo
|
85
85
|
faraday (0.17.0)
|
86
86
|
multipart-post (>= 1.2, < 3)
|
87
|
+
faraday-http-cache (2.0.0)
|
88
|
+
faraday (~> 0.8)
|
87
89
|
fugit (1.3.3)
|
88
90
|
et-orbi (~> 1.1, >= 1.1.8)
|
89
91
|
raabro (~> 1.1)
|
92
|
+
github_changelog_generator (1.15.0)
|
93
|
+
activesupport
|
94
|
+
faraday-http-cache
|
95
|
+
multi_json
|
96
|
+
octokit (~> 4.6)
|
97
|
+
rainbow (>= 2.2.1)
|
98
|
+
rake (>= 10.0)
|
99
|
+
retriable (~> 3.0)
|
90
100
|
globalid (0.4.2)
|
91
101
|
activesupport (>= 4.2.0)
|
92
102
|
google-cloud-tasks (1.1.0)
|
@@ -99,7 +109,7 @@ GEM
|
|
99
109
|
googleauth (~> 0.9)
|
100
110
|
grpc (~> 1.24)
|
101
111
|
rly (~> 0.2.3)
|
102
|
-
google-protobuf (3.
|
112
|
+
google-protobuf (3.11.0)
|
103
113
|
googleapis-common-protos (1.3.9)
|
104
114
|
google-protobuf (~> 3.0)
|
105
115
|
googleapis-common-protos-types (~> 1.0)
|
@@ -124,7 +134,7 @@ GEM
|
|
124
134
|
concurrent-ruby (~> 1.0)
|
125
135
|
jaro_winkler (1.5.4)
|
126
136
|
jwt (2.2.1)
|
127
|
-
loofah (2.
|
137
|
+
loofah (2.4.0)
|
128
138
|
crass (~> 1.0.2)
|
129
139
|
nokogiri (>= 1.5.9)
|
130
140
|
mail (2.7.1)
|
@@ -142,8 +152,10 @@ GEM
|
|
142
152
|
nio4r (2.5.2)
|
143
153
|
nokogiri (1.10.5)
|
144
154
|
mini_portile2 (~> 2.4.0)
|
155
|
+
octokit (4.14.0)
|
156
|
+
sawyer (~> 0.8.0, >= 0.5.3)
|
145
157
|
os (1.0.1)
|
146
|
-
parallel (1.19.
|
158
|
+
parallel (1.19.1)
|
147
159
|
parser (2.6.5.0)
|
148
160
|
ast (~> 2.4.0)
|
149
161
|
public_suffix (4.0.1)
|
@@ -180,6 +192,7 @@ GEM
|
|
180
192
|
rainbow (3.0.0)
|
181
193
|
rake (10.5.0)
|
182
194
|
redis (4.1.3)
|
195
|
+
retriable (3.1.2)
|
183
196
|
rly (0.2.3)
|
184
197
|
rspec (3.9.0)
|
185
198
|
rspec-core (~> 3.9.0)
|
@@ -209,10 +222,13 @@ GEM
|
|
209
222
|
rainbow (>= 2.2.2, < 4.0)
|
210
223
|
ruby-progressbar (~> 1.7)
|
211
224
|
unicode-display_width (>= 1.4.0, < 1.7)
|
212
|
-
rubocop-rspec (1.
|
225
|
+
rubocop-rspec (1.37.0)
|
213
226
|
rubocop (>= 0.68.1)
|
214
227
|
ruby-progressbar (1.10.1)
|
215
228
|
safe_yaml (1.0.5)
|
229
|
+
sawyer (0.8.2)
|
230
|
+
addressable (>= 2.3.5)
|
231
|
+
faraday (> 0.8, < 2.0)
|
216
232
|
signet (0.12.0)
|
217
233
|
addressable (~> 2.3)
|
218
234
|
faraday (~> 0.9)
|
@@ -248,6 +264,7 @@ DEPENDENCIES
|
|
248
264
|
appraisal
|
249
265
|
bundler (~> 2.0)
|
250
266
|
cloudtasker!
|
267
|
+
github_changelog_generator
|
251
268
|
google-cloud-tasks (= 1.1)
|
252
269
|
rails
|
253
270
|
rake (~> 10.0)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ..
|
3
3
|
specs:
|
4
|
-
cloudtasker (0.
|
4
|
+
cloudtasker (0.8.0)
|
5
5
|
activesupport
|
6
6
|
fugit
|
7
7
|
google-cloud-tasks
|
@@ -84,9 +84,19 @@ GEM
|
|
84
84
|
tzinfo
|
85
85
|
faraday (0.17.0)
|
86
86
|
multipart-post (>= 1.2, < 3)
|
87
|
+
faraday-http-cache (2.0.0)
|
88
|
+
faraday (~> 0.8)
|
87
89
|
fugit (1.3.3)
|
88
90
|
et-orbi (~> 1.1, >= 1.1.8)
|
89
91
|
raabro (~> 1.1)
|
92
|
+
github_changelog_generator (1.15.0)
|
93
|
+
activesupport
|
94
|
+
faraday-http-cache
|
95
|
+
multi_json
|
96
|
+
octokit (~> 4.6)
|
97
|
+
rainbow (>= 2.2.1)
|
98
|
+
rake (>= 10.0)
|
99
|
+
retriable (~> 3.0)
|
90
100
|
globalid (0.4.2)
|
91
101
|
activesupport (>= 4.2.0)
|
92
102
|
google-cloud-tasks (1.2.0)
|
@@ -99,7 +109,7 @@ GEM
|
|
99
109
|
googleauth (~> 0.9)
|
100
110
|
grpc (~> 1.24)
|
101
111
|
rly (~> 0.2.3)
|
102
|
-
google-protobuf (3.
|
112
|
+
google-protobuf (3.11.0)
|
103
113
|
googleapis-common-protos (1.3.9)
|
104
114
|
google-protobuf (~> 3.0)
|
105
115
|
googleapis-common-protos-types (~> 1.0)
|
@@ -113,7 +123,7 @@ GEM
|
|
113
123
|
multi_json (~> 1.11)
|
114
124
|
os (>= 0.9, < 2.0)
|
115
125
|
signet (~> 0.12)
|
116
|
-
grpc (1.25.0
|
126
|
+
grpc (1.25.0)
|
117
127
|
google-protobuf (~> 3.8)
|
118
128
|
googleapis-common-protos-types (~> 1.0)
|
119
129
|
grpc-google-iam-v1 (0.6.9)
|
@@ -124,7 +134,7 @@ GEM
|
|
124
134
|
concurrent-ruby (~> 1.0)
|
125
135
|
jaro_winkler (1.5.4)
|
126
136
|
jwt (2.2.1)
|
127
|
-
loofah (2.
|
137
|
+
loofah (2.4.0)
|
128
138
|
crass (~> 1.0.2)
|
129
139
|
nokogiri (>= 1.5.9)
|
130
140
|
mail (2.7.1)
|
@@ -142,8 +152,10 @@ GEM
|
|
142
152
|
nio4r (2.5.2)
|
143
153
|
nokogiri (1.10.5)
|
144
154
|
mini_portile2 (~> 2.4.0)
|
155
|
+
octokit (4.14.0)
|
156
|
+
sawyer (~> 0.8.0, >= 0.5.3)
|
145
157
|
os (1.0.1)
|
146
|
-
parallel (1.19.
|
158
|
+
parallel (1.19.1)
|
147
159
|
parser (2.6.5.0)
|
148
160
|
ast (~> 2.4.0)
|
149
161
|
public_suffix (4.0.1)
|
@@ -180,6 +192,7 @@ GEM
|
|
180
192
|
rainbow (3.0.0)
|
181
193
|
rake (10.5.0)
|
182
194
|
redis (4.1.3)
|
195
|
+
retriable (3.1.2)
|
183
196
|
rly (0.2.3)
|
184
197
|
rspec (3.9.0)
|
185
198
|
rspec-core (~> 3.9.0)
|
@@ -209,10 +222,13 @@ GEM
|
|
209
222
|
rainbow (>= 2.2.2, < 4.0)
|
210
223
|
ruby-progressbar (~> 1.7)
|
211
224
|
unicode-display_width (>= 1.4.0, < 1.7)
|
212
|
-
rubocop-rspec (1.
|
225
|
+
rubocop-rspec (1.37.0)
|
213
226
|
rubocop (>= 0.68.1)
|
214
227
|
ruby-progressbar (1.10.1)
|
215
228
|
safe_yaml (1.0.5)
|
229
|
+
sawyer (0.8.2)
|
230
|
+
addressable (>= 2.3.5)
|
231
|
+
faraday (> 0.8, < 2.0)
|
216
232
|
signet (0.12.0)
|
217
233
|
addressable (~> 2.3)
|
218
234
|
faraday (~> 0.9)
|
@@ -248,6 +264,7 @@ DEPENDENCIES
|
|
248
264
|
appraisal
|
249
265
|
bundler (~> 2.0)
|
250
266
|
cloudtasker!
|
267
|
+
github_changelog_generator
|
251
268
|
google-cloud-tasks (= 1.2)
|
252
269
|
rails
|
253
270
|
rake (~> 10.0)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ..
|
3
3
|
specs:
|
4
|
-
cloudtasker (0.
|
4
|
+
cloudtasker (0.8.0)
|
5
5
|
activesupport
|
6
6
|
fugit
|
7
7
|
google-cloud-tasks
|
@@ -84,9 +84,19 @@ GEM
|
|
84
84
|
tzinfo
|
85
85
|
faraday (0.17.0)
|
86
86
|
multipart-post (>= 1.2, < 3)
|
87
|
+
faraday-http-cache (2.0.0)
|
88
|
+
faraday (~> 0.8)
|
87
89
|
fugit (1.3.3)
|
88
90
|
et-orbi (~> 1.1, >= 1.1.8)
|
89
91
|
raabro (~> 1.1)
|
92
|
+
github_changelog_generator (1.15.0)
|
93
|
+
activesupport
|
94
|
+
faraday-http-cache
|
95
|
+
multi_json
|
96
|
+
octokit (~> 4.6)
|
97
|
+
rainbow (>= 2.2.1)
|
98
|
+
rake (>= 10.0)
|
99
|
+
retriable (~> 3.0)
|
90
100
|
globalid (0.4.2)
|
91
101
|
activesupport (>= 4.2.0)
|
92
102
|
google-cloud-tasks (1.3.0)
|
@@ -100,7 +110,7 @@ GEM
|
|
100
110
|
googleauth (~> 0.9)
|
101
111
|
grpc (~> 1.24)
|
102
112
|
rly (~> 0.2.3)
|
103
|
-
google-protobuf (3.
|
113
|
+
google-protobuf (3.11.0)
|
104
114
|
googleapis-common-protos (1.3.9)
|
105
115
|
google-protobuf (~> 3.0)
|
106
116
|
googleapis-common-protos-types (~> 1.0)
|
@@ -125,7 +135,7 @@ GEM
|
|
125
135
|
concurrent-ruby (~> 1.0)
|
126
136
|
jaro_winkler (1.5.4)
|
127
137
|
jwt (2.2.1)
|
128
|
-
loofah (2.
|
138
|
+
loofah (2.4.0)
|
129
139
|
crass (~> 1.0.2)
|
130
140
|
nokogiri (>= 1.5.9)
|
131
141
|
mail (2.7.1)
|
@@ -143,8 +153,10 @@ GEM
|
|
143
153
|
nio4r (2.5.2)
|
144
154
|
nokogiri (1.10.5)
|
145
155
|
mini_portile2 (~> 2.4.0)
|
156
|
+
octokit (4.14.0)
|
157
|
+
sawyer (~> 0.8.0, >= 0.5.3)
|
146
158
|
os (1.0.1)
|
147
|
-
parallel (1.19.
|
159
|
+
parallel (1.19.1)
|
148
160
|
parser (2.6.5.0)
|
149
161
|
ast (~> 2.4.0)
|
150
162
|
public_suffix (4.0.1)
|
@@ -181,6 +193,7 @@ GEM
|
|
181
193
|
rainbow (3.0.0)
|
182
194
|
rake (10.5.0)
|
183
195
|
redis (4.1.3)
|
196
|
+
retriable (3.1.2)
|
184
197
|
rly (0.2.3)
|
185
198
|
rspec (3.9.0)
|
186
199
|
rspec-core (~> 3.9.0)
|
@@ -210,10 +223,13 @@ GEM
|
|
210
223
|
rainbow (>= 2.2.2, < 4.0)
|
211
224
|
ruby-progressbar (~> 1.7)
|
212
225
|
unicode-display_width (>= 1.4.0, < 1.7)
|
213
|
-
rubocop-rspec (1.
|
226
|
+
rubocop-rspec (1.37.0)
|
214
227
|
rubocop (>= 0.68.1)
|
215
228
|
ruby-progressbar (1.10.1)
|
216
229
|
safe_yaml (1.0.5)
|
230
|
+
sawyer (0.8.2)
|
231
|
+
addressable (>= 2.3.5)
|
232
|
+
faraday (> 0.8, < 2.0)
|
217
233
|
signet (0.12.0)
|
218
234
|
addressable (~> 2.3)
|
219
235
|
faraday (~> 0.9)
|
@@ -249,6 +265,7 @@ DEPENDENCIES
|
|
249
265
|
appraisal
|
250
266
|
bundler (~> 2.0)
|
251
267
|
cloudtasker!
|
268
|
+
github_changelog_generator
|
252
269
|
google-cloud-tasks (= 1.3)
|
253
270
|
rails
|
254
271
|
rake (~> 10.0)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ..
|
3
3
|
specs:
|
4
|
-
cloudtasker (0.
|
4
|
+
cloudtasker (0.8.0)
|
5
5
|
activesupport
|
6
6
|
fugit
|
7
7
|
google-cloud-tasks
|
@@ -71,9 +71,19 @@ GEM
|
|
71
71
|
tzinfo
|
72
72
|
faraday (0.17.0)
|
73
73
|
multipart-post (>= 1.2, < 3)
|
74
|
+
faraday-http-cache (2.0.0)
|
75
|
+
faraday (~> 0.8)
|
74
76
|
fugit (1.3.3)
|
75
77
|
et-orbi (~> 1.1, >= 1.1.8)
|
76
78
|
raabro (~> 1.1)
|
79
|
+
github_changelog_generator (1.15.0)
|
80
|
+
activesupport
|
81
|
+
faraday-http-cache
|
82
|
+
multi_json
|
83
|
+
octokit (~> 4.6)
|
84
|
+
rainbow (>= 2.2.1)
|
85
|
+
rake (>= 10.0)
|
86
|
+
retriable (~> 3.0)
|
77
87
|
globalid (0.4.2)
|
78
88
|
activesupport (>= 4.2.0)
|
79
89
|
google-cloud-tasks (1.3.1)
|
@@ -87,7 +97,7 @@ GEM
|
|
87
97
|
googleauth (~> 0.9)
|
88
98
|
grpc (~> 1.24)
|
89
99
|
rly (~> 0.2.3)
|
90
|
-
google-protobuf (3.
|
100
|
+
google-protobuf (3.11.0)
|
91
101
|
googleapis-common-protos (1.3.9)
|
92
102
|
google-protobuf (~> 3.0)
|
93
103
|
googleapis-common-protos-types (~> 1.0)
|
@@ -112,7 +122,7 @@ GEM
|
|
112
122
|
concurrent-ruby (~> 1.0)
|
113
123
|
jaro_winkler (1.5.4)
|
114
124
|
jwt (2.2.1)
|
115
|
-
loofah (2.
|
125
|
+
loofah (2.4.0)
|
116
126
|
crass (~> 1.0.2)
|
117
127
|
nokogiri (>= 1.5.9)
|
118
128
|
mail (2.7.1)
|
@@ -130,8 +140,10 @@ GEM
|
|
130
140
|
nio4r (2.5.2)
|
131
141
|
nokogiri (1.10.5)
|
132
142
|
mini_portile2 (~> 2.4.0)
|
143
|
+
octokit (4.14.0)
|
144
|
+
sawyer (~> 0.8.0, >= 0.5.3)
|
133
145
|
os (1.0.1)
|
134
|
-
parallel (1.19.
|
146
|
+
parallel (1.19.1)
|
135
147
|
parser (2.6.5.0)
|
136
148
|
ast (~> 2.4.0)
|
137
149
|
public_suffix (4.0.1)
|
@@ -166,6 +178,7 @@ GEM
|
|
166
178
|
rainbow (3.0.0)
|
167
179
|
rake (10.5.0)
|
168
180
|
redis (4.1.3)
|
181
|
+
retriable (3.1.2)
|
169
182
|
rly (0.2.3)
|
170
183
|
rspec (3.9.0)
|
171
184
|
rspec-core (~> 3.9.0)
|
@@ -195,10 +208,13 @@ GEM
|
|
195
208
|
rainbow (>= 2.2.2, < 4.0)
|
196
209
|
ruby-progressbar (~> 1.7)
|
197
210
|
unicode-display_width (>= 1.4.0, < 1.7)
|
198
|
-
rubocop-rspec (1.
|
211
|
+
rubocop-rspec (1.37.0)
|
199
212
|
rubocop (>= 0.68.1)
|
200
213
|
ruby-progressbar (1.10.1)
|
201
214
|
safe_yaml (1.0.5)
|
215
|
+
sawyer (0.8.2)
|
216
|
+
addressable (>= 2.3.5)
|
217
|
+
faraday (> 0.8, < 2.0)
|
202
218
|
signet (0.12.0)
|
203
219
|
addressable (~> 2.3)
|
204
220
|
faraday (~> 0.9)
|
@@ -233,6 +249,7 @@ DEPENDENCIES
|
|
233
249
|
appraisal
|
234
250
|
bundler (~> 2.0)
|
235
251
|
cloudtasker!
|
252
|
+
github_changelog_generator
|
236
253
|
rails (= 5.2)
|
237
254
|
rake (~> 10.0)
|
238
255
|
rspec (~> 3.0)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ..
|
3
3
|
specs:
|
4
|
-
cloudtasker (0.
|
4
|
+
cloudtasker (0.8.0)
|
5
5
|
activesupport
|
6
6
|
fugit
|
7
7
|
google-cloud-tasks
|
@@ -84,9 +84,19 @@ GEM
|
|
84
84
|
tzinfo
|
85
85
|
faraday (0.17.0)
|
86
86
|
multipart-post (>= 1.2, < 3)
|
87
|
+
faraday-http-cache (2.0.0)
|
88
|
+
faraday (~> 0.8)
|
87
89
|
fugit (1.3.3)
|
88
90
|
et-orbi (~> 1.1, >= 1.1.8)
|
89
91
|
raabro (~> 1.1)
|
92
|
+
github_changelog_generator (1.15.0)
|
93
|
+
activesupport
|
94
|
+
faraday-http-cache
|
95
|
+
multi_json
|
96
|
+
octokit (~> 4.6)
|
97
|
+
rainbow (>= 2.2.1)
|
98
|
+
rake (>= 10.0)
|
99
|
+
retriable (~> 3.0)
|
90
100
|
globalid (0.4.2)
|
91
101
|
activesupport (>= 4.2.0)
|
92
102
|
google-cloud-tasks (1.3.1)
|
@@ -100,7 +110,7 @@ GEM
|
|
100
110
|
googleauth (~> 0.9)
|
101
111
|
grpc (~> 1.24)
|
102
112
|
rly (~> 0.2.3)
|
103
|
-
google-protobuf (3.
|
113
|
+
google-protobuf (3.11.0)
|
104
114
|
googleapis-common-protos (1.3.9)
|
105
115
|
google-protobuf (~> 3.0)
|
106
116
|
googleapis-common-protos-types (~> 1.0)
|
@@ -114,7 +124,7 @@ GEM
|
|
114
124
|
multi_json (~> 1.11)
|
115
125
|
os (>= 0.9, < 2.0)
|
116
126
|
signet (~> 0.12)
|
117
|
-
grpc (1.25.0
|
127
|
+
grpc (1.25.0)
|
118
128
|
google-protobuf (~> 3.8)
|
119
129
|
googleapis-common-protos-types (~> 1.0)
|
120
130
|
grpc-google-iam-v1 (0.6.9)
|
@@ -125,7 +135,7 @@ GEM
|
|
125
135
|
concurrent-ruby (~> 1.0)
|
126
136
|
jaro_winkler (1.5.4)
|
127
137
|
jwt (2.2.1)
|
128
|
-
loofah (2.
|
138
|
+
loofah (2.4.0)
|
129
139
|
crass (~> 1.0.2)
|
130
140
|
nokogiri (>= 1.5.9)
|
131
141
|
mail (2.7.1)
|
@@ -143,8 +153,10 @@ GEM
|
|
143
153
|
nio4r (2.5.2)
|
144
154
|
nokogiri (1.10.5)
|
145
155
|
mini_portile2 (~> 2.4.0)
|
156
|
+
octokit (4.14.0)
|
157
|
+
sawyer (~> 0.8.0, >= 0.5.3)
|
146
158
|
os (1.0.1)
|
147
|
-
parallel (1.19.
|
159
|
+
parallel (1.19.1)
|
148
160
|
parser (2.6.5.0)
|
149
161
|
ast (~> 2.4.0)
|
150
162
|
public_suffix (4.0.1)
|
@@ -181,6 +193,7 @@ GEM
|
|
181
193
|
rainbow (3.0.0)
|
182
194
|
rake (10.5.0)
|
183
195
|
redis (4.1.3)
|
196
|
+
retriable (3.1.2)
|
184
197
|
rly (0.2.3)
|
185
198
|
rspec (3.9.0)
|
186
199
|
rspec-core (~> 3.9.0)
|
@@ -210,10 +223,13 @@ GEM
|
|
210
223
|
rainbow (>= 2.2.2, < 4.0)
|
211
224
|
ruby-progressbar (~> 1.7)
|
212
225
|
unicode-display_width (>= 1.4.0, < 1.7)
|
213
|
-
rubocop-rspec (1.
|
226
|
+
rubocop-rspec (1.37.0)
|
214
227
|
rubocop (>= 0.68.1)
|
215
228
|
ruby-progressbar (1.10.1)
|
216
229
|
safe_yaml (1.0.5)
|
230
|
+
sawyer (0.8.2)
|
231
|
+
addressable (>= 2.3.5)
|
232
|
+
faraday (> 0.8, < 2.0)
|
217
233
|
signet (0.12.0)
|
218
234
|
addressable (~> 2.3)
|
219
235
|
faraday (~> 0.9)
|
@@ -249,6 +265,7 @@ DEPENDENCIES
|
|
249
265
|
appraisal
|
250
266
|
bundler (~> 2.0)
|
251
267
|
cloudtasker!
|
268
|
+
github_changelog_generator
|
252
269
|
rails (= 6.0)
|
253
270
|
rake (~> 10.0)
|
254
271
|
rspec (~> 3.0)
|
@@ -121,7 +121,7 @@ module Cloudtasker
|
|
121
121
|
@http_request = http_request
|
122
122
|
@schedule_time = Time.at(schedule_time || 0)
|
123
123
|
@retries = retries || 0
|
124
|
-
@queue = queue
|
124
|
+
@queue = queue || Cloudtasker::Config::DEFAULT_JOB_QUEUE
|
125
125
|
end
|
126
126
|
|
127
127
|
#
|
@@ -163,10 +163,13 @@ module Cloudtasker
|
|
163
163
|
# @param [Integer] interval The delay in seconds before retrying the task
|
164
164
|
#
|
165
165
|
def retry_later(interval, is_error: true)
|
166
|
-
redis.write(
|
167
|
-
|
168
|
-
|
169
|
-
|
166
|
+
redis.write(
|
167
|
+
gid,
|
168
|
+
retries: is_error ? retries + 1 : retries,
|
169
|
+
http_request: http_request,
|
170
|
+
schedule_time: (Time.now + interval).to_i,
|
171
|
+
queue: queue
|
172
|
+
)
|
170
173
|
end
|
171
174
|
|
172
175
|
#
|
data/lib/cloudtasker/config.rb
CHANGED
@@ -101,8 +101,11 @@ module Cloudtasker
|
|
101
101
|
def processor_host=(val)
|
102
102
|
@processor_host = val
|
103
103
|
|
104
|
+
# Check if Rails supports host filtering
|
105
|
+
return unless val && defined?(Rails) && Rails.application.config.respond_to?(:hosts)
|
106
|
+
|
104
107
|
# Add processor host to the list of authorized hosts
|
105
|
-
Rails.application.config.hosts << val.gsub(%r{https?://}, '')
|
108
|
+
Rails.application.config.hosts << val.gsub(%r{https?://}, '')
|
106
109
|
end
|
107
110
|
|
108
111
|
#
|
data/lib/cloudtasker/version.rb
CHANGED
data/lib/cloudtasker/worker.rb
CHANGED
@@ -35,7 +35,7 @@ module Cloudtasker
|
|
35
35
|
def self.from_hash(hash)
|
36
36
|
# Symbolize metadata keys and stringify job arguments
|
37
37
|
payload = JSON.parse(hash.to_json, symbolize_names: true)
|
38
|
-
payload[:job_args] = JSON.parse(
|
38
|
+
payload[:job_args] = JSON.parse(payload[:job_args].to_json)
|
39
39
|
|
40
40
|
# Extract worker parameters
|
41
41
|
klass_name = payload&.dig(:worker)
|
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.8.
|
4
|
+
version: 0.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arnaud Lachaume
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-12-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -264,10 +264,10 @@ files:
|
|
264
264
|
- CHANGELOG.md
|
265
265
|
- CODE_OF_CONDUCT.md
|
266
266
|
- Gemfile
|
267
|
-
- Gemfile.lock
|
268
267
|
- LICENSE.txt
|
269
268
|
- README.md
|
270
269
|
- Rakefile
|
270
|
+
- _config.yml
|
271
271
|
- app/controllers/cloudtasker/application_controller.rb
|
272
272
|
- app/controllers/cloudtasker/worker_controller.rb
|
273
273
|
- bin/console
|
data/Gemfile.lock
DELETED
@@ -1,280 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
cloudtasker (0.8.0)
|
5
|
-
activesupport
|
6
|
-
fugit
|
7
|
-
google-cloud-tasks
|
8
|
-
jwt
|
9
|
-
redis
|
10
|
-
|
11
|
-
GEM
|
12
|
-
remote: https://rubygems.org/
|
13
|
-
specs:
|
14
|
-
actioncable (6.0.0)
|
15
|
-
actionpack (= 6.0.0)
|
16
|
-
nio4r (~> 2.0)
|
17
|
-
websocket-driver (>= 0.6.1)
|
18
|
-
actionmailbox (6.0.0)
|
19
|
-
actionpack (= 6.0.0)
|
20
|
-
activejob (= 6.0.0)
|
21
|
-
activerecord (= 6.0.0)
|
22
|
-
activestorage (= 6.0.0)
|
23
|
-
activesupport (= 6.0.0)
|
24
|
-
mail (>= 2.7.1)
|
25
|
-
actionmailer (6.0.0)
|
26
|
-
actionpack (= 6.0.0)
|
27
|
-
actionview (= 6.0.0)
|
28
|
-
activejob (= 6.0.0)
|
29
|
-
mail (~> 2.5, >= 2.5.4)
|
30
|
-
rails-dom-testing (~> 2.0)
|
31
|
-
actionpack (6.0.0)
|
32
|
-
actionview (= 6.0.0)
|
33
|
-
activesupport (= 6.0.0)
|
34
|
-
rack (~> 2.0)
|
35
|
-
rack-test (>= 0.6.3)
|
36
|
-
rails-dom-testing (~> 2.0)
|
37
|
-
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
38
|
-
actiontext (6.0.0)
|
39
|
-
actionpack (= 6.0.0)
|
40
|
-
activerecord (= 6.0.0)
|
41
|
-
activestorage (= 6.0.0)
|
42
|
-
activesupport (= 6.0.0)
|
43
|
-
nokogiri (>= 1.8.5)
|
44
|
-
actionview (6.0.0)
|
45
|
-
activesupport (= 6.0.0)
|
46
|
-
builder (~> 3.1)
|
47
|
-
erubi (~> 1.4)
|
48
|
-
rails-dom-testing (~> 2.0)
|
49
|
-
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
50
|
-
activejob (6.0.0)
|
51
|
-
activesupport (= 6.0.0)
|
52
|
-
globalid (>= 0.3.6)
|
53
|
-
activemodel (6.0.0)
|
54
|
-
activesupport (= 6.0.0)
|
55
|
-
activerecord (6.0.0)
|
56
|
-
activemodel (= 6.0.0)
|
57
|
-
activesupport (= 6.0.0)
|
58
|
-
activestorage (6.0.0)
|
59
|
-
actionpack (= 6.0.0)
|
60
|
-
activejob (= 6.0.0)
|
61
|
-
activerecord (= 6.0.0)
|
62
|
-
marcel (~> 0.3.1)
|
63
|
-
activesupport (6.0.0)
|
64
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
65
|
-
i18n (>= 0.7, < 2)
|
66
|
-
minitest (~> 5.1)
|
67
|
-
tzinfo (~> 1.1)
|
68
|
-
zeitwerk (~> 2.1, >= 2.1.8)
|
69
|
-
addressable (2.7.0)
|
70
|
-
public_suffix (>= 2.0.2, < 5.0)
|
71
|
-
appraisal (2.2.0)
|
72
|
-
bundler
|
73
|
-
rake
|
74
|
-
thor (>= 0.14.0)
|
75
|
-
ast (2.4.0)
|
76
|
-
builder (3.2.3)
|
77
|
-
concurrent-ruby (1.1.5)
|
78
|
-
crack (0.4.3)
|
79
|
-
safe_yaml (~> 1.0.0)
|
80
|
-
crass (1.0.5)
|
81
|
-
diff-lcs (1.3)
|
82
|
-
erubi (1.9.0)
|
83
|
-
et-orbi (1.2.2)
|
84
|
-
tzinfo
|
85
|
-
faraday (0.17.0)
|
86
|
-
multipart-post (>= 1.2, < 3)
|
87
|
-
faraday-http-cache (2.0.0)
|
88
|
-
faraday (~> 0.8)
|
89
|
-
fugit (1.3.3)
|
90
|
-
et-orbi (~> 1.1, >= 1.1.8)
|
91
|
-
raabro (~> 1.1)
|
92
|
-
github_changelog_generator (1.15.0)
|
93
|
-
activesupport
|
94
|
-
faraday-http-cache
|
95
|
-
multi_json
|
96
|
-
octokit (~> 4.6)
|
97
|
-
rainbow (>= 2.2.1)
|
98
|
-
rake (>= 10.0)
|
99
|
-
retriable (~> 3.0)
|
100
|
-
globalid (0.4.2)
|
101
|
-
activesupport (>= 4.2.0)
|
102
|
-
google-cloud-tasks (1.3.1)
|
103
|
-
google-gax (~> 1.8)
|
104
|
-
googleapis-common-protos (>= 1.3.9, < 2.0)
|
105
|
-
googleapis-common-protos-types (>= 1.0.4, < 2.0)
|
106
|
-
grpc-google-iam-v1 (~> 0.6.9)
|
107
|
-
google-gax (1.8.1)
|
108
|
-
google-protobuf (~> 3.9)
|
109
|
-
googleapis-common-protos (>= 1.3.9, < 2.0)
|
110
|
-
googleauth (~> 0.9)
|
111
|
-
grpc (~> 1.24)
|
112
|
-
rly (~> 0.2.3)
|
113
|
-
google-protobuf (3.11.0-universal-darwin)
|
114
|
-
googleapis-common-protos (1.3.9)
|
115
|
-
google-protobuf (~> 3.0)
|
116
|
-
googleapis-common-protos-types (~> 1.0)
|
117
|
-
grpc (~> 1.0)
|
118
|
-
googleapis-common-protos-types (1.0.4)
|
119
|
-
google-protobuf (~> 3.0)
|
120
|
-
googleauth (0.10.0)
|
121
|
-
faraday (~> 0.12)
|
122
|
-
jwt (>= 1.4, < 3.0)
|
123
|
-
memoist (~> 0.16)
|
124
|
-
multi_json (~> 1.11)
|
125
|
-
os (>= 0.9, < 2.0)
|
126
|
-
signet (~> 0.12)
|
127
|
-
grpc (1.25.0-universal-darwin)
|
128
|
-
google-protobuf (~> 3.8)
|
129
|
-
googleapis-common-protos-types (~> 1.0)
|
130
|
-
grpc-google-iam-v1 (0.6.9)
|
131
|
-
googleapis-common-protos (>= 1.3.1, < 2.0)
|
132
|
-
grpc (~> 1.0)
|
133
|
-
hashdiff (1.0.0)
|
134
|
-
i18n (1.7.0)
|
135
|
-
concurrent-ruby (~> 1.0)
|
136
|
-
jaro_winkler (1.5.4)
|
137
|
-
jwt (2.2.1)
|
138
|
-
loofah (2.3.1)
|
139
|
-
crass (~> 1.0.2)
|
140
|
-
nokogiri (>= 1.5.9)
|
141
|
-
mail (2.7.1)
|
142
|
-
mini_mime (>= 0.1.1)
|
143
|
-
marcel (0.3.3)
|
144
|
-
mimemagic (~> 0.3.2)
|
145
|
-
memoist (0.16.1)
|
146
|
-
method_source (0.9.2)
|
147
|
-
mimemagic (0.3.3)
|
148
|
-
mini_mime (1.0.2)
|
149
|
-
mini_portile2 (2.4.0)
|
150
|
-
minitest (5.13.0)
|
151
|
-
multi_json (1.14.1)
|
152
|
-
multipart-post (2.1.1)
|
153
|
-
nio4r (2.5.2)
|
154
|
-
nokogiri (1.10.5)
|
155
|
-
mini_portile2 (~> 2.4.0)
|
156
|
-
octokit (4.14.0)
|
157
|
-
sawyer (~> 0.8.0, >= 0.5.3)
|
158
|
-
os (1.0.1)
|
159
|
-
parallel (1.18.0)
|
160
|
-
parser (2.6.5.0)
|
161
|
-
ast (~> 2.4.0)
|
162
|
-
public_suffix (4.0.1)
|
163
|
-
raabro (1.1.6)
|
164
|
-
rack (2.0.7)
|
165
|
-
rack-test (1.1.0)
|
166
|
-
rack (>= 1.0, < 3)
|
167
|
-
rails (6.0.0)
|
168
|
-
actioncable (= 6.0.0)
|
169
|
-
actionmailbox (= 6.0.0)
|
170
|
-
actionmailer (= 6.0.0)
|
171
|
-
actionpack (= 6.0.0)
|
172
|
-
actiontext (= 6.0.0)
|
173
|
-
actionview (= 6.0.0)
|
174
|
-
activejob (= 6.0.0)
|
175
|
-
activemodel (= 6.0.0)
|
176
|
-
activerecord (= 6.0.0)
|
177
|
-
activestorage (= 6.0.0)
|
178
|
-
activesupport (= 6.0.0)
|
179
|
-
bundler (>= 1.3.0)
|
180
|
-
railties (= 6.0.0)
|
181
|
-
sprockets-rails (>= 2.0.0)
|
182
|
-
rails-dom-testing (2.0.3)
|
183
|
-
activesupport (>= 4.2.0)
|
184
|
-
nokogiri (>= 1.6)
|
185
|
-
rails-html-sanitizer (1.3.0)
|
186
|
-
loofah (~> 2.3)
|
187
|
-
railties (6.0.0)
|
188
|
-
actionpack (= 6.0.0)
|
189
|
-
activesupport (= 6.0.0)
|
190
|
-
method_source
|
191
|
-
rake (>= 0.8.7)
|
192
|
-
thor (>= 0.20.3, < 2.0)
|
193
|
-
rainbow (3.0.0)
|
194
|
-
rake (10.5.0)
|
195
|
-
redis (4.1.3)
|
196
|
-
retriable (3.1.2)
|
197
|
-
rly (0.2.3)
|
198
|
-
rspec (3.9.0)
|
199
|
-
rspec-core (~> 3.9.0)
|
200
|
-
rspec-expectations (~> 3.9.0)
|
201
|
-
rspec-mocks (~> 3.9.0)
|
202
|
-
rspec-core (3.9.0)
|
203
|
-
rspec-support (~> 3.9.0)
|
204
|
-
rspec-expectations (3.9.0)
|
205
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
206
|
-
rspec-support (~> 3.9.0)
|
207
|
-
rspec-mocks (3.9.0)
|
208
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
209
|
-
rspec-support (~> 3.9.0)
|
210
|
-
rspec-rails (3.9.0)
|
211
|
-
actionpack (>= 3.0)
|
212
|
-
activesupport (>= 3.0)
|
213
|
-
railties (>= 3.0)
|
214
|
-
rspec-core (~> 3.9.0)
|
215
|
-
rspec-expectations (~> 3.9.0)
|
216
|
-
rspec-mocks (~> 3.9.0)
|
217
|
-
rspec-support (~> 3.9.0)
|
218
|
-
rspec-support (3.9.0)
|
219
|
-
rubocop (0.76.0)
|
220
|
-
jaro_winkler (~> 1.5.1)
|
221
|
-
parallel (~> 1.10)
|
222
|
-
parser (>= 2.6)
|
223
|
-
rainbow (>= 2.2.2, < 4.0)
|
224
|
-
ruby-progressbar (~> 1.7)
|
225
|
-
unicode-display_width (>= 1.4.0, < 1.7)
|
226
|
-
rubocop-rspec (1.36.0)
|
227
|
-
rubocop (>= 0.68.1)
|
228
|
-
ruby-progressbar (1.10.1)
|
229
|
-
safe_yaml (1.0.5)
|
230
|
-
sawyer (0.8.2)
|
231
|
-
addressable (>= 2.3.5)
|
232
|
-
faraday (> 0.8, < 2.0)
|
233
|
-
signet (0.12.0)
|
234
|
-
addressable (~> 2.3)
|
235
|
-
faraday (~> 0.9)
|
236
|
-
jwt (>= 1.5, < 3.0)
|
237
|
-
multi_json (~> 1.10)
|
238
|
-
sprockets (4.0.0)
|
239
|
-
concurrent-ruby (~> 1.0)
|
240
|
-
rack (> 1, < 3)
|
241
|
-
sprockets-rails (3.2.1)
|
242
|
-
actionpack (>= 4.0)
|
243
|
-
activesupport (>= 4.0)
|
244
|
-
sprockets (>= 3.0.0)
|
245
|
-
sqlite3 (1.4.0)
|
246
|
-
thor (0.20.3)
|
247
|
-
thread_safe (0.3.6)
|
248
|
-
timecop (0.9.1)
|
249
|
-
tzinfo (1.2.5)
|
250
|
-
thread_safe (~> 0.1)
|
251
|
-
unicode-display_width (1.6.0)
|
252
|
-
webmock (3.7.6)
|
253
|
-
addressable (>= 2.3.6)
|
254
|
-
crack (>= 0.3.2)
|
255
|
-
hashdiff (>= 0.4.0, < 2.0.0)
|
256
|
-
websocket-driver (0.7.1)
|
257
|
-
websocket-extensions (>= 0.1.0)
|
258
|
-
websocket-extensions (0.1.4)
|
259
|
-
zeitwerk (2.2.1)
|
260
|
-
|
261
|
-
PLATFORMS
|
262
|
-
ruby
|
263
|
-
|
264
|
-
DEPENDENCIES
|
265
|
-
appraisal
|
266
|
-
bundler (~> 2.0)
|
267
|
-
cloudtasker!
|
268
|
-
github_changelog_generator
|
269
|
-
rails
|
270
|
-
rake (~> 10.0)
|
271
|
-
rspec (~> 3.0)
|
272
|
-
rspec-rails
|
273
|
-
rubocop (= 0.76.0)
|
274
|
-
rubocop-rspec
|
275
|
-
sqlite3
|
276
|
-
timecop
|
277
|
-
webmock
|
278
|
-
|
279
|
-
BUNDLED WITH
|
280
|
-
2.0.2
|