ruby-clock 2.0.0.beta1 → 2.0.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 567b66555b094f4c722a3340b9cc5ca99abab18918033ed972dc8c65ce242b18
4
- data.tar.gz: 2c9a42194dcd969623b04b1bfc21eb327cdd225322703a488f87fa1819a9302c
3
+ metadata.gz: 9fdfa3656f0ffbdf60b162a594809e29e9f0579cf3f5f52e98ffd857a811c348
4
+ data.tar.gz: f63dd579f2cd258f89f17666338ec9d433a63e2b93d0a400975ee6c1e61886fa
5
5
  SHA512:
6
- metadata.gz: 0cdd8a85ec8f8de256486f027639c9d4c341131eb7dc88d519baf249733c7c655f72af923b8c8914b51d405f09a24cd9aa17efc4fc96cf807dcacdd74b024878
7
- data.tar.gz: e655dce4688f88154bac50957fb321f11e07dc7d40ee5fc679a25d0e0a8feff097016ac7df128e77f4eaccae5e3fa817caa76d5a300bee364e48999bd4c0ea50
6
+ metadata.gz: 938ec658ba3837be8a90c49fdd8d2d6a050b1b6a19486bc2b10479e81370ed3fe5c0e4501293b02a2c8efcfe82d67974e887c2069270986f3398b89762c04707
7
+ data.tar.gz: c3376b79456a66c2b3c1eb5492b9a0429e69ece7b5207a73d2792c8830c33355c14dc622c2a37e8b6b8e2b9b27cdaaa4d0c83449e6e9c8aca3ae2538e2a90af0
data/CHANGELOG.md CHANGED
@@ -1,16 +1,25 @@
1
- ## 2.0.0.beta1
1
+ ## 2.0.0 beta
2
2
 
3
3
  * The way the [rails app reloader](https://guides.rubyonrails.org/threading_and_code_execution.html)
4
4
  is implemented is now compatible with both rails 6 and 7
5
5
  * The setup for rails is now less complicated
6
+ * RUBY_CLOCK_SHUTDOWN_WAIT_SECONDS value is logged when starting
7
+ * Code reorganization so there are no unnecessary methods in top-level Kernel namespace
8
+ * DSL methods are now at the top-level namespace (`schedule.every` → `every`, `schedule.cron` → `cron`)
9
+ * error handler definition is now at the top-level namespace (`def schedule.on_error` → `on_error do`)
6
10
 
7
11
  ### Migrating from ruby-clock version 1 to version 2
8
12
 
9
13
  * There is no longer a need to have a binstub in rails. You can delete bin/clock from your app.
10
14
  * The invocations (in Procfile, or wherever else you start ruby-clock) should change from
15
+
11
16
  bundle exec rails runner bin/clock
12
17
  to
18
+
13
19
  bundle exec clock
20
+ * Your existing Clockfile will still work, but you now have the option to use
21
+ `every`, `cron`, and `on_error` at the top-level, without referencing `schedule`.
22
+ See the readme for examples.
14
23
 
15
24
  ## 1.0.0
16
25
 
data/README.md CHANGED
@@ -1,3 +1,7 @@
1
+ THESE ARE THE DOCS FOR VERSION 2.0.0.beta2
2
+
3
+ See version 1 docs here: https://github.com/jjb/ruby-clock/tree/v1.0.0
4
+
1
5
  # ruby-clock
2
6
 
3
7
  ruby-clock is a [job scheduler](https://en.wikipedia.org/wiki/Job_scheduler),
@@ -24,6 +28,8 @@ You can change this number with `RUBY_CLOCK_SHUTDOWN_WAIT_SECONDS` in the enviro
24
28
 
25
29
  ## Installation
26
30
 
31
+ ruby >= 2.7 is required.
32
+
27
33
  Add these lines to your application's Gemfile:
28
34
 
29
35
  ```ruby
@@ -41,17 +47,15 @@ Or install it yourself as:
41
47
  ## Usage
42
48
 
43
49
  Create a file named Clockfile. This will hold your job definitions.
44
- The DSL and capabilities
45
- are the same as those of [rufus-scheduler](https://github.com/jmettraux/rufus-scheduler/).
46
- Read the rufus-scheduler documentation to see what you can do.
50
+ Define jobs like this:
47
51
 
48
52
  ```ruby
49
- schedule.every('5 minutes') do
53
+ every('5 minutes') do
50
54
  UserDataReports.generate
51
55
  end
52
56
 
53
57
  # do something every day, five minutes after midnight
54
- schedule.cron '5 0 * * *' do
58
+ cron '5 0 * * *' do
55
59
  DailyActivitySummary.generate_and_send
56
60
  end
57
61
  ```
@@ -99,7 +103,7 @@ Require your app's code at the top of Clockfile:
99
103
 
100
104
  ```ruby
101
105
  require_relative './lib/app.rb'
102
- schedule.every('5 minutes') do
106
+ every('5 minutes') do
103
107
  ...
104
108
  ```
105
109
 
@@ -141,7 +145,7 @@ You can catch and report errors raised in your jobs by defining an error catcher
141
145
  the top of your Clockfile like this:
142
146
 
143
147
  ```ruby
144
- def schedule.on_error(job, error)
148
+ on_error do |job, error|
145
149
  ErrorReporter.track_exception(error)
146
150
  end
147
151
  ```
@@ -157,7 +161,7 @@ to learn how to do this. Where the documentation references `s`, you should use
157
161
  You can run shell commands in your jobs.
158
162
 
159
163
  ```ruby
160
- schedule.every '1 day' do
164
+ every '1 day' do
161
165
  shell('sh scripts/process_stuff.sh')
162
166
  end
163
167
  ```
@@ -172,7 +176,7 @@ If you want to use other terrapin features, you can skip the `shell` command
172
176
  and use terrapin directly:
173
177
 
174
178
  ```ruby
175
- schedule.every '1 day' do
179
+ every '1 day' do
176
180
  line = Terrapin::CommandLine.new('optimize_png', ":file")
177
181
  Organization.with_new_logos.find_each do |o|
178
182
  line.run(file: o.logo_file_path)
@@ -203,7 +207,7 @@ You can run tasks from within the persistent runtime of ruby-clock, without
203
207
  needing to shell out and start another process.
204
208
 
205
209
  ```ruby
206
- schedule.every '1 day' do
210
+ every '1 day' do
207
211
  rake('reports:daily')
208
212
  end
209
213
  ```
@@ -222,12 +226,12 @@ fallback is the line number of the job in Clockfile.
222
226
  Some examples of jobs and their identifiers:
223
227
 
224
228
  ```ruby
225
- schedule.every '1 second', name: 'my job' do
229
+ every '1 second', name: 'my job' do
226
230
  Foo.bar
227
231
  end
228
232
  # => my job
229
233
 
230
- schedule.every '1 day' do
234
+ every '1 day' do
231
235
  daily_things = Foo.setup_daily
232
236
  daily_things.process
233
237
  # TODO: figure out best time of day
@@ -235,7 +239,7 @@ end
235
239
  # => daily_things.process
236
240
 
237
241
  # n.b. ruby-clock isn't yet smart enough to remove trailing comments
238
- schedule.every '1 week' do
242
+ every '1 week' do
239
243
  weekly_things = Foo.setup_weekly
240
244
  weekly_things.process # does this work???!1~
241
245
  end
@@ -253,7 +257,7 @@ def schedule.on_post_trigger(job, trigger_time)
253
257
  StatsTracker.increment('Clock: Job Executions')
254
258
  end
255
259
 
256
- schedule.every '10 seconds', name: 'thread stats' do
260
+ every '10 seconds', name: 'thread stats' do
257
261
  thread_usage = Hash.new(0)
258
262
  schedule.work_threads(:active).each do |t|
259
263
  thread_usage[t[:rufus_scheduler_job].identifier] += 1
@@ -268,14 +272,17 @@ schedule.every '10 seconds', name: 'thread stats' do
268
272
  end
269
273
  ```
270
274
 
271
- ### other rufus-scheduler Options
275
+ ### Other rufus-scheduler Options
272
276
 
273
- All rufus-scheduler options are set to defaults. The `schedule` variable
274
- available in your Clockfile is an instance of `Rufus::Scheduler`,
275
- so anything you can do on this instance, you can do in your Clockfile.
277
+ All [rufus-scheduler](https://github.com/jmettraux/rufus-scheduler/) options are set to defaults.
278
+ There is a `schedule` variable available in your Clockfile, which is the singleton instance of `Rufus::Scheduler`.
279
+ ruby-clock methods such as `every` and `cron` are convenience methods which invoke `schedule.every`
280
+ and `schedule.cron`.
281
+ Anything you can do on this instance, you can do in your Clockfile.
282
+ See the rufus-scheduler documentation to see what you can do.
276
283
 
277
- Perhaps in the future ruby-clock will add some easier specific configuration
278
- capabilities for some things. Let me know if you have a request!
284
+ If you have ideas for rufus-scheduler features that can be brought in as
285
+ more abstract or default ruby-clock behavior, let me know!
279
286
 
280
287
  ## Syntax highlighting for Clockfile
281
288
 
@@ -1,11 +1,15 @@
1
- def schedule.on_error(job, error)
1
+ on_error do |job, error|
2
2
  raise error
3
3
  end
4
4
 
5
- schedule.every('2 seconds') do
5
+ every('2 seconds') do
6
6
  puts "hello from a ruby-clock job"
7
7
  end
8
8
 
9
- schedule.every('2 seconds') do
9
+ every('2 seconds') do
10
10
  shell 'say hello'
11
11
  end
12
+
13
+ cron('*/10 * * * * *') do
14
+ puts "cron running on every 10th second #{Time.now}"
15
+ end
@@ -1,19 +1,23 @@
1
- def schedule.on_error(job, error)
1
+ on_error do |job, error|
2
2
  puts "An error has occurred: #{error.class}: #{error.message}"
3
3
  end
4
4
 
5
- schedule.every('2 seconds') do
5
+ every('2 seconds') do
6
6
  puts "hello from a ruby-clock job"
7
7
  end
8
8
 
9
- schedule.every('2 seconds') do
9
+ every('2 seconds') do
10
10
  shell 'say hello'
11
11
  end
12
12
 
13
- schedule.every('2 seconds') do
13
+ every('2 seconds') do
14
14
  puts Example.count
15
15
  end
16
16
 
17
- schedule.every('2 seconds') do
17
+ every('2 seconds') do
18
18
  raise "An error."
19
19
  end
20
+
21
+ cron('*/10 * * * * *') do
22
+ puts "cron running on every 10th second #{Time.now}"
23
+ end
data/exe/clock CHANGED
@@ -23,11 +23,37 @@ class Rufus::Scheduler::Job
23
23
  end
24
24
  end
25
25
 
26
- include RubyClock
26
+ RubyClock.instance.listen_to_signals
27
+ RubyClock.instance.prepare_rake
28
+ RubyClock.instance.schedule.pause
29
+
30
+
31
+
32
+ ## Add methods to top-level namespace
33
+ def schedule
34
+ RubyClock.instance.schedule
35
+ end
36
+
37
+ def on_error(&on_error_block)
38
+ RubyClock.instance.on_error = on_error_block
39
+ def schedule.on_error(job, error)
40
+ RubyClock.instance.on_error.call(job, error)
41
+ end
42
+ end
43
+
44
+ def cron(...)
45
+ RubyClock.instance.schedule.cron(...)
46
+ end
47
+
48
+ def every(...)
49
+ RubyClock.instance.schedule.every(...)
50
+ end
51
+
52
+ def shell(string)
53
+ RubyClock.instance.shell(string)
54
+ end
55
+ #####################################
27
56
 
28
- listen_to_signals
29
- prepare_rake
30
- schedule.pause
31
57
 
32
58
  load ARGV[0] || 'Clockfile'
33
59
 
@@ -42,4 +68,4 @@ if defined?(::Rails)
42
68
  end
43
69
  end
44
70
 
45
- run_jobs
71
+ RubyClock.instance.run_jobs
@@ -1,3 +1,3 @@
1
- module RubyClock
2
- VERSION = "2.0.0.beta1"
1
+ class RubyClock
2
+ VERSION = "2.0.0.beta2"
3
3
  end
data/lib/ruby-clock.rb CHANGED
@@ -1,9 +1,18 @@
1
1
  require "ruby-clock/version"
2
2
  require 'rufus-scheduler'
3
+ require 'singleton'
4
+
5
+ class RubyClock
6
+
7
+ include Singleton
8
+
9
+ attr_accessor :on_error
10
+
11
+ def wait_seconds
12
+ ENV['RUBY_CLOCK_SHUTDOWN_WAIT_SECONDS']&.to_i || 29
13
+ end
3
14
 
4
- module RubyClock
5
15
  def shutdown
6
- wait_seconds = ENV['RUBY_CLOCK_SHUTDOWN_WAIT_SECONDS']&.to_i || 29
7
16
  puts "Shutting down ruby-clock. Waiting #{wait_seconds} seconds for jobs to finish..."
8
17
  schedule.shutdown(wait: wait_seconds)
9
18
  puts "...done 🐈️ 👋"
@@ -21,6 +30,7 @@ module RubyClock
21
30
  end
22
31
  end
23
32
  end
33
+ puts "RUBY_CLOCK_SHUTDOWN_WAIT_SECONDS is set to #{wait_seconds}"
24
34
  end
25
35
 
26
36
  def schedule
data/ruby-clock.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  # spec.description = %q{TODO: Write a longer description or delete this line.}
11
11
  spec.homepage = "https://github.com/jjb/ruby-clock"
12
12
  spec.license = "MIT"
13
- spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
13
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
14
14
 
15
15
  # spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
16
16
 
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.beta1
4
+ version: 2.0.0.beta2
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Bachir
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-10-01 00:00:00.000000000 Z
11
+ date: 2022-10-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rufus-scheduler
@@ -159,7 +159,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
159
159
  requirements:
160
160
  - - ">="
161
161
  - !ruby/object:Gem::Version
162
- version: 2.3.0
162
+ version: 2.7.0
163
163
  required_rubygems_version: !ruby/object:Gem::Requirement
164
164
  requirements:
165
165
  - - ">"