ruby-clock 2.0.0.beta6 → 2.0.0.beta8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -6
- data/README.md +15 -4
- data/example-app/Clockfile +17 -1
- data/example-app/Gemfile +0 -1
- data/exe/clock +20 -2
- data/lib/ruby-clock/shell.rb +4 -6
- data/lib/ruby-clock/version.rb +1 -1
- data/lib/rufus_monkeypatch.rb +8 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 315bcc30c6fc32c1676e452750d76e839b0123f19fe7512bbe6662ae72ee0ecc
|
4
|
+
data.tar.gz: a5831b721e9d99af3082cb31dd472f4e282d5665616f40694ba41def7250b907
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '0983e40393e4d273feddbcb53d67c0a8b2ccbb194439a16df9ddb1edaeedcf89f36338bffc80d8ffb44809500b3553cbc601c55275fcd4dba86d18b67ad57bf5'
|
7
|
+
data.tar.gz: 563039f0ea34927b4d6e1abd64db0f2ae086c44f37d03852d8ca510223e1ce0f57ebe275ce7059d704de3e29a1e7f33d1412b92ad4b7a5a7e4e6d5ec661e9605
|
data/CHANGELOG.md
CHANGED
@@ -6,10 +6,17 @@
|
|
6
6
|
* RUBY_CLOCK_SHUTDOWN_WAIT_SECONDS value is logged when starting
|
7
7
|
* DSL methods are now at the top-level namespace (`schedule.every` → `every`, `schedule.cron` → `cron`)
|
8
8
|
* Error handler definition is now at the top-level namespace (`def schedule.on_error` → `on_error do`)
|
9
|
-
* Around callbacks now have a top-level namespace method. `def schedule.around_trigger` → `around_action`
|
10
|
-
* Multiple around callbacks can be consecutively assigned - no need to put all behavior into one
|
11
|
-
* Errors encountered when loading Clockfile (such as incorrect cron
|
9
|
+
* Around callbacks now have a top-level namespace method. `def schedule.around_trigger` → `around_action do`
|
10
|
+
* Multiple around callbacks can be consecutively assigned - no need to put all behavior into one method
|
11
|
+
* Errors encountered when loading Clockfile (such as incorrect cron syntax)
|
12
12
|
will be reported to the error handler
|
13
|
+
* The automatic identifier generator will now ignore `}` and `end` lines
|
14
|
+
* posix-spawn is no longer used. In ruby 3, native `Process.spawn` is more performant. See
|
15
|
+
[posix-spawn#90](https://github.com/rtomayko/posix-spawn/issues/90)
|
16
|
+
and
|
17
|
+
[terrapin#19](https://github.com/thoughtbot/terrapin/pull/19)
|
18
|
+
for more info.
|
19
|
+
* `--environment-and-syntax-check` capability
|
13
20
|
|
14
21
|
### Anti-Features
|
15
22
|
* ruby 3.0 is now the minimum version
|
@@ -26,11 +33,9 @@
|
|
26
33
|
* The top of every Clockfile must begin with `using RubyClock::DSL`
|
27
34
|
* If you have an existing `def schedule.around_trigger`, you will need to change it to use the new
|
28
35
|
`around_action` method.
|
29
|
-
* Your existing Clockfile will still work, but you now have the option to use
|
36
|
+
* Your existing Clockfile with `schedule.foo` invocations will still work, but you now have the option to use
|
30
37
|
`every`, `cron`, and `on_error` at the top-level, without referencing `schedule`.
|
31
|
-
See the readme for examples.
|
32
38
|
* You now have the option of catching and reporting errors encountered when parsing the Clockfile.
|
33
|
-
See the readme.
|
34
39
|
* There is no longer a need to have a binstub in rails. You can delete bin/clock from your app.
|
35
40
|
* The invocations (in Procfile, or wherever else you start ruby-clock) should change from
|
36
41
|
|
data/README.md
CHANGED
@@ -28,7 +28,7 @@ You can change this number with `RUBY_CLOCK_SHUTDOWN_WAIT_SECONDS` in the enviro
|
|
28
28
|
|
29
29
|
## Installation
|
30
30
|
|
31
|
-
ruby >=
|
31
|
+
ruby >= 3.0 is required.
|
32
32
|
|
33
33
|
Add these lines to your application's Gemfile:
|
34
34
|
|
@@ -139,6 +139,17 @@ to another process or file. To change this behavior and have logs flush immediat
|
|
139
139
|
add `$stdout.sync = true` to the top of your Clockfile.
|
140
140
|
|
141
141
|
|
142
|
+
#### Testing
|
143
|
+
|
144
|
+
You can use the `--environment-and-syntax-check` flag to load the app environment and check
|
145
|
+
Clockfile syntax without actually running jobs. This can be used to check if cron syntax
|
146
|
+
is valid during dev, or in automate tests.
|
147
|
+
|
148
|
+
```ruby
|
149
|
+
# system returns true/false depending on 0/1 exit status of process
|
150
|
+
assert(system("bundle exec --environment-and-syntax-check clock/my_clockfile.rb"))
|
151
|
+
```
|
152
|
+
|
142
153
|
## More Config and Capabilities
|
143
154
|
|
144
155
|
### Error Handling
|
@@ -151,7 +162,7 @@ error reports about problems while loading the Clockfile:
|
|
151
162
|
on_error do |job, error|
|
152
163
|
case job
|
153
164
|
when String # this means there was a problem parsing the Clockfile while starting
|
154
|
-
ErrorReporter.track_exception(error, tag: 'clock', severity: 'high')
|
165
|
+
ErrorReporter.track_exception(StandardError.new(error), tag: 'clock', severity: 'high')
|
155
166
|
else
|
156
167
|
ErrorReporter.track_exception(error, tag: 'clock', custom_attribute: {job_name: job.identifier})
|
157
168
|
end
|
@@ -239,7 +250,7 @@ end
|
|
239
250
|
By default they will be run with
|
240
251
|
[ruby backticks](https://livebook.manning.com/concept/ruby/backtick).
|
241
252
|
For better performance, install the [terrapin](https://github.com/thoughtbot/terrapin)
|
242
|
-
|
253
|
+
gem.
|
243
254
|
|
244
255
|
`shell` is a convenience method which just passes the string on.
|
245
256
|
If you want to use other terrapin features, you can skip the `shell` command
|
@@ -283,7 +294,7 @@ end
|
|
283
294
|
```
|
284
295
|
|
285
296
|
There are also `rake_execute` and `rake_async`.
|
286
|
-
See [the code](https://github.com/jjb/ruby-clock/blob/main/lib/rake.rb)
|
297
|
+
See [the code](https://github.com/jjb/ruby-clock/blob/main/lib/ruby-clock/rake.rb)
|
287
298
|
and [this article](https://code.jjb.cc/running-rake-tasks-from-within-ruby-on-rails-code) for more info.
|
288
299
|
|
289
300
|
### Job Identifier
|
data/example-app/Clockfile
CHANGED
@@ -14,7 +14,7 @@ end
|
|
14
14
|
# end
|
15
15
|
|
16
16
|
around_action do |job_proc, job_info|
|
17
|
-
puts "before1 #{job_info.class}"
|
17
|
+
puts "before1 #{job_info.class} #{job_info.identifier}"
|
18
18
|
job_proc.call
|
19
19
|
puts "after1"
|
20
20
|
end
|
@@ -60,3 +60,19 @@ end
|
|
60
60
|
# def schedule.around_trigger(job_info, &job_proc)
|
61
61
|
# puts "ruby-clock 1-style around trigger!"
|
62
62
|
# end
|
63
|
+
|
64
|
+
every('2 seconds', blocking: true) do
|
65
|
+
begin
|
66
|
+
|
67
|
+
1.times {
|
68
|
+
begin
|
69
|
+
puts "hello from a stress test for the autonamer"
|
70
|
+
end
|
71
|
+
|
72
|
+
}
|
73
|
+
# this is a comment!
|
74
|
+
|
75
|
+
end
|
76
|
+
# another comment
|
77
|
+
|
78
|
+
end
|
data/example-app/Gemfile
CHANGED
data/exe/clock
CHANGED
@@ -9,8 +9,21 @@ RubyClock.instance.prepare_rake
|
|
9
9
|
RubyClock.instance.schedule.pause
|
10
10
|
RubyClock.instance.add_rails_executor_to_around_actions
|
11
11
|
|
12
|
+
clockfile = 'Clockfile'
|
13
|
+
check_syntax = false
|
14
|
+
case ARGV[0]
|
15
|
+
when '--environment-and-syntax-check'
|
16
|
+
check_syntax = true
|
17
|
+
case ARGV[1]
|
18
|
+
when String
|
19
|
+
clockfile = ARGV[1]
|
20
|
+
end
|
21
|
+
when String
|
22
|
+
clockfile = ARGV[0]
|
23
|
+
end
|
24
|
+
|
12
25
|
begin
|
13
|
-
load
|
26
|
+
load clockfile
|
14
27
|
rescue => clockfile_error
|
15
28
|
if RubyClock.instance.on_error
|
16
29
|
RubyClock.instance.on_error.call("An error has occured while parsing the clockfile", clockfile_error)
|
@@ -21,4 +34,9 @@ end
|
|
21
34
|
|
22
35
|
RubyClock.instance.ensure_around_trigger_has_not_been_redefined
|
23
36
|
RubyClock.instance.freeze_around_actions
|
24
|
-
|
37
|
+
|
38
|
+
if check_syntax
|
39
|
+
puts "✨ Environment & Syntax OK ✨"
|
40
|
+
else
|
41
|
+
RubyClock.instance.run_jobs
|
42
|
+
end
|
data/lib/ruby-clock/shell.rb
CHANGED
@@ -2,13 +2,11 @@ module RubyClock::Shell
|
|
2
2
|
def shell_runner
|
3
3
|
@shell_runner ||= begin
|
4
4
|
require 'terrapin'
|
5
|
-
|
6
|
-
|
7
|
-
unless Terrapin::CommandLine.runner.class == Terrapin::CommandLine::PosixRunner
|
5
|
+
unless Terrapin::CommandLine.runner.class == Terrapin::CommandLine::ProcessRunner
|
8
6
|
puts <<~MESSAGE
|
9
7
|
|
10
|
-
🤷 terrapin
|
11
|
-
|
8
|
+
🤷 terrapin is installed, but for some reason terrapin is
|
9
|
+
using backticks as its runner.
|
12
10
|
|
13
11
|
MESSAGE
|
14
12
|
end
|
@@ -19,7 +17,7 @@ module RubyClock::Shell
|
|
19
17
|
puts <<~MESSAGE
|
20
18
|
|
21
19
|
🦥 Using ruby backticks for shell commands.
|
22
|
-
For better performance, install the terrapin
|
20
|
+
For better performance, install the terrapin gem.
|
23
21
|
See README.md for more info.
|
24
22
|
|
25
23
|
MESSAGE
|
data/lib/ruby-clock/version.rb
CHANGED
data/lib/rufus_monkeypatch.rb
CHANGED
@@ -1,8 +1,15 @@
|
|
1
1
|
require 'method_source'
|
2
2
|
class Rufus::Scheduler::Job
|
3
|
+
UNDESIRED_ELEMENTS = ['', '}', 'end']
|
3
4
|
def identifier
|
4
5
|
@identifier ||= begin
|
5
|
-
name
|
6
|
+
return name if name
|
7
|
+
|
8
|
+
lines = handler.source.split("\n")
|
9
|
+
whitespace_removed = lines.map(&:strip)
|
10
|
+
undesired_removed = whitespace_removed - UNDESIRED_ELEMENTS
|
11
|
+
comment_only_lines_removed = undesired_removed.grep_v(/#.*/)
|
12
|
+
comment_only_lines_removed[-1] # final line
|
6
13
|
rescue
|
7
14
|
begin
|
8
15
|
source_location.join('-')
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-clock
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.
|
4
|
+
version: 2.0.0.beta8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Bachir
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-04-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rufus-scheduler
|
@@ -276,7 +276,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
276
276
|
- !ruby/object:Gem::Version
|
277
277
|
version: 1.3.1
|
278
278
|
requirements: []
|
279
|
-
rubygems_version: 3.
|
279
|
+
rubygems_version: 3.3.7
|
280
280
|
signing_key:
|
281
281
|
specification_version: 4
|
282
282
|
summary: A job scheduler which runs jobs each in their own thread in a persistent
|