belated 0.6.2 → 0.6.6
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.
- checksums.yaml +4 -4
- data/.github/workflows/main.yml +9 -4
- data/.rubocop.yml +5 -1
- data/CHANGELOG.md +24 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +12 -4
- data/README.md +26 -9
- data/belated.gemspec +2 -1
- data/bin/belated +9 -1
- data/lib/belated/client.rb +25 -10
- data/lib/belated/exceptions.rb +3 -0
- data/lib/belated/job_wrapper.rb +1 -1
- data/lib/belated/logging.rb +8 -0
- data/lib/belated/testing.rb +37 -0
- data/lib/belated/version.rb +1 -1
- data/lib/belated.rb +8 -7
- metadata +19 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 628f04309c824751bd90f72163d29738f5600f7ed5b759b0106d09b9eccbf23e
|
4
|
+
data.tar.gz: 1318b353fb2047ae6e185f0af720a987a3d8c784a483df04a79601fb595ff28f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: de9793daf6f3987be47b798916dbdfa16e7be92211f46395ed4d63eabf7ae127420952c047df749de584404cd18e80a002f5fadb40896421583e80f3ebe9bf2a
|
7
|
+
data.tar.gz: 3a09388e73a833d3230787f6191cd02a86cc4ebf3e58ba950d8631eba31a67fe4cf319bfaa448bc471b5fe1a933d9564c7d846d3416d91832a7b5331c78e62b9
|
data/.github/workflows/main.yml
CHANGED
@@ -4,14 +4,19 @@ on: [push,pull_request]
|
|
4
4
|
|
5
5
|
jobs:
|
6
6
|
build:
|
7
|
-
|
7
|
+
strategy:
|
8
|
+
fail-fast: false
|
9
|
+
matrix:
|
10
|
+
os: [ubuntu-latest, macos-latest]
|
11
|
+
# Due to https://github.com/actions/runner/issues/849, we have to use quotes for '3.0'
|
12
|
+
ruby: [2.6, 2.7, '3.0']
|
13
|
+
runs-on: ${{ matrix.os }}
|
8
14
|
steps:
|
9
15
|
- uses: actions/checkout@v2
|
10
16
|
- name: Set up Ruby
|
11
17
|
uses: ruby/setup-ruby@v1
|
12
18
|
with:
|
13
|
-
ruby-version:
|
14
|
-
bundler-cache: true
|
15
|
-
cache-version: 1
|
19
|
+
ruby-version: ${{ matrix.ruby }}
|
20
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
16
21
|
- name: Run the default task
|
17
22
|
run: bundle exec rake
|
data/.rubocop.yml
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
AllCops:
|
2
|
-
TargetRubyVersion: 2.
|
2
|
+
TargetRubyVersion: 2.6
|
3
3
|
NewCops: enable
|
4
4
|
Exclude:
|
5
5
|
- 'dummy/**/*'
|
6
6
|
- 'vendor/**/*'
|
7
|
+
- '*gemspec'
|
7
8
|
|
8
9
|
Lint/HashCompareByIdentity:
|
9
10
|
Enabled: false
|
@@ -37,6 +38,9 @@ Style/BlockDelimiters:
|
|
37
38
|
Style/ModuleFunction:
|
38
39
|
EnforcedStyle: extend_self
|
39
40
|
|
41
|
+
Metrics/AbcSize:
|
42
|
+
Max: 17
|
43
|
+
|
40
44
|
Metrics/BlockLength:
|
41
45
|
Exclude:
|
42
46
|
- 'spec/**/*.rb'
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,29 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
## [0.6.6] - 2021-08-25
|
4
|
+
|
5
|
+
- Tests now run agains Ruby 2.6, so relaxing the version constraint.
|
6
|
+
- Add client_heartbeat option, so you can define how often you want jobs sent to the Belated server.
|
7
|
+
## [0.6.5] - 2021-08-23
|
8
|
+
|
9
|
+
- Timezone used inside Belated is all using the server time now, so it's up to the user to take care of that(using `Time.now` instead of `Time.now.utc`)
|
10
|
+
- Possible to configure host and port.
|
11
|
+
- No need to call `.start` on the client anymore.
|
12
|
+
- Logging some error and warn messages now too, instead of it all being info
|
13
|
+
|
14
|
+
## [0.6.4] - 2021-08-22
|
15
|
+
- Inline jobs for testing!
|
16
|
+
```ruby
|
17
|
+
`belated/testing`
|
18
|
+
Belated::Testing.inline!
|
19
|
+
```
|
20
|
+
- Very much inspired by how Sidekiq is doing this.
|
21
|
+
- Read more in the testing part of README.md
|
22
|
+
|
23
|
+
## [0.6.3] - 2021-08-21
|
24
|
+
|
25
|
+
- Needed to have the hash inside the mutex when going over it; otherwise you still the get can't add key into hash during iteration error. Of course.
|
26
|
+
|
3
27
|
## [0.6.2] - 2021-08-20
|
4
28
|
|
5
29
|
- Use a mutex for the proc_table used by the client. Fixes
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
belated (0.6.
|
4
|
+
belated (0.6.6)
|
5
5
|
drb
|
6
6
|
dry-configurable
|
7
|
+
ruby2_keywords
|
7
8
|
sorted_set
|
8
9
|
|
9
10
|
GEM
|
@@ -97,9 +98,15 @@ GEM
|
|
97
98
|
marcel (1.0.1)
|
98
99
|
method_source (1.0.0)
|
99
100
|
mini_mime (1.1.0)
|
101
|
+
mini_portile2 (2.6.1)
|
100
102
|
minitest (5.14.4)
|
101
103
|
nio4r (2.5.7)
|
102
|
-
nokogiri (1.
|
104
|
+
nokogiri (1.12.3)
|
105
|
+
mini_portile2 (~> 2.6.1)
|
106
|
+
racc (~> 1.4)
|
107
|
+
nokogiri (1.12.3-x86_64-darwin)
|
108
|
+
racc (~> 1.4)
|
109
|
+
nokogiri (1.12.3-x86_64-linux)
|
103
110
|
racc (~> 1.4)
|
104
111
|
parallel (1.20.1)
|
105
112
|
parser (3.0.2.0)
|
@@ -178,6 +185,7 @@ GEM
|
|
178
185
|
rubocop (~> 1.0)
|
179
186
|
rubocop-ast (>= 1.1.0)
|
180
187
|
ruby-progressbar (1.11.0)
|
188
|
+
ruby2_keywords (0.0.5)
|
181
189
|
set (1.0.1)
|
182
190
|
sorted_set (1.0.3)
|
183
191
|
rbtree
|
@@ -190,7 +198,6 @@ GEM
|
|
190
198
|
activesupport (>= 4.0)
|
191
199
|
sprockets (>= 3.0.0)
|
192
200
|
sqlite3 (1.4.2)
|
193
|
-
stackprof (0.2.16)
|
194
201
|
thor (1.1.0)
|
195
202
|
tzinfo (2.0.4)
|
196
203
|
concurrent-ruby (~> 1.0)
|
@@ -201,6 +208,8 @@ GEM
|
|
201
208
|
zeitwerk (2.4.2)
|
202
209
|
|
203
210
|
PLATFORMS
|
211
|
+
ruby
|
212
|
+
x86_64-darwin-19
|
204
213
|
x86_64-linux
|
205
214
|
|
206
215
|
DEPENDENCIES
|
@@ -214,7 +223,6 @@ DEPENDENCIES
|
|
214
223
|
rubocop (~> 1.7)
|
215
224
|
rubocop-discourse
|
216
225
|
sqlite3
|
217
|
-
stackprof
|
218
226
|
|
219
227
|
BUNDLED WITH
|
220
228
|
2.2.22
|
data/README.md
CHANGED
@@ -10,19 +10,13 @@ Note that Belated used to be called HardWorker. That name was already in use in
|
|
10
10
|
|
11
11
|
It uses dRuby to do the communication! Which is absolute great. No need for Redis or PostgreSQL, just Ruby standard libraries.
|
12
12
|
|
13
|
-
Note that currently the timezone is hardcoded to UTC.
|
14
|
-
|
15
13
|
Can be used with or without Rails.
|
16
14
|
|
17
15
|
Can be used if you're on a normal instance such as EC2 or Digital Ocean drop. Not if you're on a Heroku or Docker, or anything with ephemeral storage.
|
18
16
|
|
19
17
|
TODO LIST:
|
20
18
|
|
21
|
-
-
|
22
|
-
- Use GDBM for queue storage? That way could maybe get rid of YAML dumping and make things a bit safer. Not ordered though, so maybe keep a list of the jobs as YAML and update it sometimes? Just as backup. Or RocksDB?
|
23
|
-
- Make DRb port configurable.
|
24
|
-
- Don't hardcode timezone to UTC.
|
25
|
-
- Add some checks to the client for proper jobs.
|
19
|
+
- Use GDBM for queue storage? That way could maybe get rid of YAML dumping and make things a bit safer. Not ordered though, so maybe keep a list of the jobs as YAML and update it sometimes? Just as backup. Or RocksDB? Would need to be configurable if you don't have something installed.
|
26
20
|
- Maybe support ActiveJob?
|
27
21
|
- Have a web UI.
|
28
22
|
- Have a job history
|
@@ -87,8 +81,6 @@ Then,
|
|
87
81
|
```ruby
|
88
82
|
# Get the client
|
89
83
|
client = Belated::Client.instance
|
90
|
-
# Start the client, only need to do this once
|
91
|
-
client.start unless client.started?
|
92
84
|
```
|
93
85
|
|
94
86
|
and you can use the client!
|
@@ -138,8 +130,33 @@ Path to Rails project.
|
|
138
130
|
|
139
131
|
$ bundle exec belated --workers=10
|
140
132
|
|
133
|
+
Other available settings:
|
134
|
+
|
135
|
+
$ bundle exec belated --host=1.1.1.1 --port=1234
|
136
|
+
# druby://1.1.1.1:1234
|
137
|
+
$ bundle exec belated --env=test
|
138
|
+
# environment
|
139
|
+
$ bundle exec belated --client_heartbeat=10
|
140
|
+
# how often client sends jobs to server, default is once every 5 seconds
|
141
|
+
|
142
|
+
|
141
143
|
Number of workers.
|
142
144
|
|
145
|
+
## Testing
|
146
|
+
|
147
|
+
When testing, you can require `belated/testing` and then call `Belated::Testing.inline!` to make your jobs perform inline.
|
148
|
+
|
149
|
+
```ruby
|
150
|
+
`belated/testing`
|
151
|
+
c = Belated::Client.instance
|
152
|
+
c.perform(proc { 2/ 1}) # Tries to push the job to the drb backend
|
153
|
+
# <Belated::JobWrapper:0x00005654bc2db1f0 @at=nil, @completed=false, @id="95e4dc6a-1876-4adf-ae0f-5ae902f5f024", @job=#<Proc:0x00005654bc2db330 (irb):3>, @max_retries=5, @proc_klass=true, @retries=0>
|
154
|
+
Belated::Testing.inline! # Sidekiq-inspired, now jobs run inline
|
155
|
+
c.perform(proc { 2/ 1}) # Returns 2 right away
|
156
|
+
# 2
|
157
|
+
Belated::Client.test_mode_off! # Turn off inline job processing
|
158
|
+
```
|
159
|
+
|
143
160
|
## Development
|
144
161
|
|
145
162
|
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.
|
data/belated.gemspec
CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |spec|
|
|
15
15
|
).gsub(/\s+/, ' ').strip
|
16
16
|
spec.homepage = 'https://github.com/sampokuokkanen/belated'
|
17
17
|
spec.license = 'MIT'
|
18
|
-
spec.required_ruby_version = Gem::Requirement.new('>= 2.
|
18
|
+
spec.required_ruby_version = Gem::Requirement.new('>= 2.6.0')
|
19
19
|
|
20
20
|
spec.metadata['homepage_uri'] = spec.homepage
|
21
21
|
spec.metadata['source_code_uri'] = spec.homepage
|
@@ -33,6 +33,7 @@ Gem::Specification.new do |spec|
|
|
33
33
|
# Uncomment to register a new dependency of your gem
|
34
34
|
spec.add_dependency 'drb'
|
35
35
|
spec.add_dependency 'dry-configurable'
|
36
|
+
spec.add_dependency 'ruby2_keywords'
|
36
37
|
spec.add_dependency 'sorted_set'
|
37
38
|
spec.add_development_dependency 'byebug'
|
38
39
|
|
data/bin/belated
CHANGED
@@ -28,9 +28,17 @@ OptionParser.new { |opts|
|
|
28
28
|
Belated.config.env = env
|
29
29
|
end
|
30
30
|
|
31
|
-
opts.on('-c=CONNECT', '--connect=CONNECT', 'Start dRuby connection, default true') do |connect|
|
31
|
+
opts.on('-c=CONNECT', '--connect=CONNECT', 'Start dRuby connection, default true, use for testing only') do |connect|
|
32
32
|
Belated.config.connect = connect == 'true'
|
33
33
|
end
|
34
|
+
|
35
|
+
opts.on('-h=HOST', '--host=HOST', 'dRuby host') do |host|
|
36
|
+
Belated.config.host = host
|
37
|
+
end
|
38
|
+
|
39
|
+
opts.on('-p=PORT', '--port=PORT', 'dRuby port') do |port|
|
40
|
+
Belated.config.port = port
|
41
|
+
end
|
34
42
|
}.parse!
|
35
43
|
|
36
44
|
instance = Belated.instance
|
data/lib/belated/client.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'belated/job_wrapper'
|
2
|
+
require 'belated/exceptions'
|
2
3
|
require 'singleton'
|
3
4
|
class Belated
|
4
5
|
# The client class is responsible for managing the connection to the
|
@@ -16,6 +17,8 @@ class Belated
|
|
16
17
|
# Connects to the queue through DRb.
|
17
18
|
# @return [void]
|
18
19
|
def start
|
20
|
+
return if started?
|
21
|
+
|
19
22
|
server_uri = Belated::URI
|
20
23
|
DRb.start_service
|
21
24
|
self.proc_table = {}
|
@@ -30,19 +33,23 @@ class Belated
|
|
30
33
|
@started
|
31
34
|
end
|
32
35
|
|
36
|
+
# Makes it possible to reset the client
|
37
|
+
def turn_off
|
38
|
+
@started = false
|
39
|
+
banker_thread&.kill
|
40
|
+
end
|
41
|
+
|
33
42
|
# Thread in charge of handling the bank queue.
|
34
43
|
# You probably want to memoize the client in order to avoid
|
35
44
|
# having many threads in the sleep state.
|
36
45
|
# @return [void]
|
37
46
|
def start_banker_thread
|
38
|
-
|
47
|
+
Thread.new do
|
39
48
|
loop do
|
40
49
|
delete_from_table
|
41
|
-
if bank.empty?
|
42
|
-
|
43
|
-
|
44
|
-
end
|
45
|
-
begin
|
50
|
+
sleep Belated.client_heartbeat and next if bank.empty?
|
51
|
+
|
52
|
+
bank.length.times do
|
46
53
|
queue.push(wrapper = bank.pop)
|
47
54
|
rescue DRb::DRbConnError
|
48
55
|
bank.push(wrapper)
|
@@ -52,10 +59,10 @@ class Belated
|
|
52
59
|
end
|
53
60
|
|
54
61
|
def delete_from_table
|
55
|
-
return if proc_table.
|
62
|
+
return if proc_table.length < 25
|
56
63
|
|
57
|
-
|
58
|
-
|
64
|
+
@mutex.synchronize do
|
65
|
+
proc_table.select { |_k, v| v.completed }.each do |key, _value|
|
59
66
|
proc_table.delete(key)
|
60
67
|
end
|
61
68
|
end
|
@@ -68,12 +75,14 @@ class Belated
|
|
68
75
|
# @param max_retries [Integer] - Times the job should be retried if it fails.
|
69
76
|
# @return [JobWrapper] - The job wrapper for the queue.
|
70
77
|
def perform(job, at: nil, max_retries: 5)
|
78
|
+
start unless started?
|
79
|
+
check_if_proper_job!(job)
|
71
80
|
job_wrapper = wrap_job(job, at: at, max_retries: max_retries)
|
72
81
|
bank.push(job_wrapper)
|
73
82
|
@mutex.synchronize do
|
74
83
|
proc_table[job_wrapper.object_id] = job_wrapper if job_wrapper.proc_klass
|
75
84
|
end
|
76
|
-
start_banker_thread if banker_thread.nil?
|
85
|
+
self.banker_thread = start_banker_thread if banker_thread.nil?
|
77
86
|
job_wrapper
|
78
87
|
end
|
79
88
|
alias perform_belated perform
|
@@ -81,6 +90,12 @@ class Belated
|
|
81
90
|
|
82
91
|
private
|
83
92
|
|
93
|
+
def check_if_proper_job!(job)
|
94
|
+
return if job.respond_to?(:call) || job.respond_to?(:perform)
|
95
|
+
|
96
|
+
raise JobError, 'job does not implement .call nor .perform!'
|
97
|
+
end
|
98
|
+
|
84
99
|
def wrap_job(job, at:, max_retries:)
|
85
100
|
return job if job.is_a?(JobWrapper)
|
86
101
|
|
data/lib/belated/job_wrapper.rb
CHANGED
data/lib/belated/logging.rb
CHANGED
@@ -0,0 +1,37 @@
|
|
1
|
+
class Belated
|
2
|
+
# Testing helpers
|
3
|
+
# Enable or disable testing
|
4
|
+
class Testing
|
5
|
+
@@testing = false
|
6
|
+
|
7
|
+
def self.inline?
|
8
|
+
@@testing == true
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.inline!
|
12
|
+
@@testing = true
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.test_mode_off!
|
16
|
+
@@testing = false
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class Belated
|
22
|
+
# A client that can perform jobs inline
|
23
|
+
class Client
|
24
|
+
alias old_perform perform
|
25
|
+
def perform(job, at: nil, max_retries: 5)
|
26
|
+
if Belated::Testing.inline?
|
27
|
+
if job.respond_to?(:call)
|
28
|
+
job.call
|
29
|
+
else
|
30
|
+
job.perform
|
31
|
+
end
|
32
|
+
else
|
33
|
+
old_perform(job, at: at, max_retries: max_retries)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/belated/version.rb
CHANGED
data/lib/belated.rb
CHANGED
@@ -22,16 +22,19 @@ class Belated
|
|
22
22
|
extend Dry::Configurable
|
23
23
|
include Logging
|
24
24
|
include Singleton unless $TESTING
|
25
|
-
URI = 'druby://localhost:8788'
|
26
25
|
@@queue = Belated::Queue.new
|
27
26
|
|
28
27
|
setting :rails, true
|
29
28
|
setting :rails_path, '.'
|
30
29
|
setting :workers, 1
|
31
30
|
setting :connect, true
|
32
|
-
setting :environment, 'development'
|
31
|
+
setting :environment, 'development', reader: true
|
33
32
|
setting :logger, Logger.new($stdout), reader: true
|
34
33
|
setting :log_level, :info, reader: true
|
34
|
+
setting :host, 'localhost', reader: true
|
35
|
+
setting :port, '8788', reader: true
|
36
|
+
setting :client_heartbeat, 5, reader: true
|
37
|
+
URI = "druby://#{Belated.host}:#{Belated.port}"
|
35
38
|
|
36
39
|
# Since it's running as a singleton, we need something to start it up.
|
37
40
|
# Aliased for testing purposes.
|
@@ -55,7 +58,7 @@ class Belated
|
|
55
58
|
def connect!
|
56
59
|
DRb.start_service(URI, @@queue, verbose: true)
|
57
60
|
rescue DRb::DRbConnError, Errno::EADDRINUSE
|
58
|
-
|
61
|
+
error 'Could not connect to DRb server.'
|
59
62
|
end
|
60
63
|
|
61
64
|
def trap_signals
|
@@ -96,12 +99,12 @@ class Belated
|
|
96
99
|
sleep 5
|
97
100
|
next
|
98
101
|
end
|
99
|
-
if job.at <= Time.now
|
102
|
+
if job.at <= Time.now
|
100
103
|
log "Deleting #{@@queue.future_jobs.delete(job)} from future jobs"
|
101
104
|
@@queue.push(job)
|
102
105
|
end
|
103
106
|
rescue DRb::DRbConnError
|
104
|
-
|
107
|
+
error 'DRb connection error!!!!!!'
|
105
108
|
log stats
|
106
109
|
end
|
107
110
|
end
|
@@ -173,8 +176,6 @@ class Belated
|
|
173
176
|
def self.job_list
|
174
177
|
@@queue
|
175
178
|
end
|
176
|
-
|
177
|
-
class Error < StandardError; end
|
178
179
|
end
|
179
180
|
|
180
181
|
require 'belated/rails' if defined?(::Rails::Engine)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: belated
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sampo Kuokkanen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-08-
|
11
|
+
date: 2021-08-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: drb
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: ruby2_keywords
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: sorted_set
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,11 +108,13 @@ files:
|
|
94
108
|
- bin/setup
|
95
109
|
- lib/belated.rb
|
96
110
|
- lib/belated/client.rb
|
111
|
+
- lib/belated/exceptions.rb
|
97
112
|
- lib/belated/job.rb
|
98
113
|
- lib/belated/job_wrapper.rb
|
99
114
|
- lib/belated/logging.rb
|
100
115
|
- lib/belated/queue.rb
|
101
116
|
- lib/belated/rails.rb
|
117
|
+
- lib/belated/testing.rb
|
102
118
|
- lib/belated/version.rb
|
103
119
|
- lib/belated/worker.rb
|
104
120
|
homepage: https://github.com/sampokuokkanen/belated
|
@@ -116,7 +132,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
116
132
|
requirements:
|
117
133
|
- - ">="
|
118
134
|
- !ruby/object:Gem::Version
|
119
|
-
version: 2.
|
135
|
+
version: 2.6.0
|
120
136
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
137
|
requirements:
|
122
138
|
- - ">="
|