ruby-clock 2.0.0.beta3 → 2.0.0.beta4

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: 17d680fbe8df5efadea1cfa9123682fd2557828515fabfafad6825476669b368
4
- data.tar.gz: d68673fdc64e3985a170d129b6642b00f323256904e4e54c07660bf1d73cd4e3
3
+ metadata.gz: 8900519602f68a1eb7e0a5b49aa1752c5a42ffb65a16b409b8f12c003237c568
4
+ data.tar.gz: bb9d30d35bafa38b970f061faa0416bffb66197f5fddd5d46a691c05e04fe82b
5
5
  SHA512:
6
- metadata.gz: 789d4ba0e97036cf12473ba5d0c6b190ce164e81573738c3f284910fb6de39fb13ae9a1e3342d6c621ede962b105923a05cc7c226c0294aea26dbb3d160c64f8
7
- data.tar.gz: 381e0a04c4d0dc0425176d8414939658b669caaa0b1f2c2253c511506800ce01788eac2f4ef8cac9ebbdaac31031171917a8fac1965b4f3098f8f8c7a5b2cc8d
6
+ metadata.gz: 50482fd2178c9098bd8e2eb1218f56c56596d5983d82571246d5516cd977227a344598f056019027f2b97222ffc8a628eed503ed2d10defea116bfe5d6b953f1
7
+ data.tar.gz: 5eb78d5f6dffb1d09d09e9d1ada59a0bae9646253f789affec38311237b74b937192b1f7a414b2a5ff3e8fc2b34a3beb6fe1e8fda8a6aeffedfac80941e8a5a5
data/CHANGELOG.md CHANGED
@@ -1,19 +1,34 @@
1
1
  ## 2.0.0 beta
2
2
 
3
+ ### Features
3
4
  * The way the [rails app reloader](https://guides.rubyonrails.org/threading_and_code_execution.html)
4
5
  is implemented is now compatible with both rails 6 and 7
5
- * The setup for rails is now less complicated
6
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
7
  * 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`)
10
- * around callbacks now have a top-level namespace method, which is different from the above in that...
11
- * multiple around callbacks can be consecutively assigned
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` - see readme
10
+ * Multiple around callbacks can be consecutively assigned - no need to put all behavior into one action
11
+ * Errors encountered when loading Clockfile (such as incorrect cron syntaxt)
12
+ will be reported to the error handler
13
+
14
+ ### Anti-Features
15
+ * rake and shell runners are no longer top-level (`shell` → `RubyClock::Runners.shell`, `rake` → `RubyClock::Runners.rake`)
16
+
17
+ ### Code Improvements
18
+ * The code which implements the rails reloader/executor is now less complicated
19
+ * Code reorganization so there are no unnecessary methods in top-level Kernel namespace
20
+
12
21
 
13
22
  ### Migrating from ruby-clock version 1 to version 2
14
23
 
15
- * if you have and existing `def schedule.around_trigger`, you will need to change it to use the new
16
- `around_action` method. see readme.
24
+ * The top of every Clockfile must begin with `using RubyClock::DSL`
25
+ * rake and shell runners must be invoked like so: `RubyClock::Runners.rake`, `RubyClock::Runners.shell`, etc.
26
+ * If you have an existing `def schedule.around_trigger`, you will need to change it to use the new
27
+ `around_action` method. Failure to change this will silently appear to keep working,
28
+ but will break the rails reloader/executor implementation.
29
+ * Your existing Clockfile will still work, but you now have the option to use
30
+ `every`, `cron`, and `on_error` at the top-level, without referencing `schedule`.
31
+ See the readme for examples.
17
32
  * There is no longer a need to have a binstub in rails. You can delete bin/clock from your app.
18
33
  * The invocations (in Procfile, or wherever else you start ruby-clock) should change from
19
34
 
@@ -21,9 +36,6 @@
21
36
  to
22
37
 
23
38
  bundle exec clock
24
- * Your existing Clockfile will still work, but you now have the option to use
25
- `every`, `cron`, and `on_error` at the top-level, without referencing `schedule`.
26
- See the readme for examples.
27
39
 
28
40
  ## 1.0.0
29
41
 
data/README.md CHANGED
@@ -50,6 +50,8 @@ Create a file named Clockfile. This will hold your job definitions.
50
50
  Define jobs like this:
51
51
 
52
52
  ```ruby
53
+ using RubyClock::DSL
54
+
53
55
  every('5 minutes') do
54
56
  UserDataReports.generate
55
57
  end
@@ -90,9 +92,9 @@ You may wish to
90
92
  for your jobs. You can do so with the around trigger:
91
93
 
92
94
  ```ruby
93
- def schedule.around_trigger(job)
95
+ around_action(job_proc)
94
96
  ActiveRecord::Base.uncached do
95
- yield
97
+ job_proc.call
96
98
  end
97
99
  end
98
100
  ```
@@ -142,11 +144,17 @@ add `$stdout.sync = true` to the top of your Clockfile.
142
144
  ### Error Handling
143
145
 
144
146
  You can catch and report errors raised in your jobs by defining an error catcher at
145
- the top of your Clockfile like this:
147
+ the top of your Clockfile like this. You should handle these two cases so that you can get
148
+ error reports about problems while loading the Clockfile:
146
149
 
147
150
  ```ruby
148
151
  on_error do |job, error|
149
- ErrorReporter.track_exception(error)
152
+ case job
153
+ when String # this means there was a problem parsing the Clockfile while starting
154
+ ErrorReporter.track_exception(error, tag: 'clock', severity: 'high')
155
+ else
156
+ ErrorReporter.track_exception(error, tag: 'clock', custom_attribute: {job_name: job.identifier})
157
+ end
150
158
  end
151
159
  ```
152
160
 
@@ -198,7 +206,7 @@ You can run shell commands in your jobs.
198
206
 
199
207
  ```ruby
200
208
  every '1 day' do
201
- shell('sh scripts/process_stuff.sh')
209
+ RubyClock::Runners.shell('sh scripts/process_stuff.sh')
202
210
  end
203
211
  ```
204
212
 
@@ -244,11 +252,12 @@ needing to shell out and start another process.
244
252
 
245
253
  ```ruby
246
254
  every '1 day' do
247
- rake('reports:daily')
255
+ RubyClock::Runners.rake('reports:daily')
248
256
  end
249
257
  ```
250
258
 
251
- There is also `rake_execute` and `rake_async`. See [the code](https://github.com/jjb/ruby-clock/blob/main/lib/ruby-clock.rb)
259
+ There is also `RubyClock::Runners.rake_execute` and `RubyClock::Runners.rake_async`.
260
+ See [the code](https://github.com/jjb/ruby-clock/blob/main/lib/rake.rb)
252
261
  and [this article](https://code.jjb.cc/running-rake-tasks-from-within-ruby-on-rails-code) for more info.
253
262
 
254
263
  ### Job Identifier
@@ -286,10 +295,12 @@ This can be used for keeping track of job behavior in logs or a
286
295
  stats tracker. For example:
287
296
 
288
297
  ```ruby
289
- def schedule.on_post_trigger(job, trigger_time)
298
+ around_action(job_proc, job_info)
299
+ trigger_time = Time.now
300
+ job_proc.call
290
301
  duration = Time.now-trigger_time.to_t
291
302
  StatsTracker.value('Clock: Job Execution Time', duration.round(2))
292
- StatsTracker.value("Clock: Job #{job.identifier} Execution Time", duration.round(2))
303
+ StatsTracker.value("Clock: Job #{job_info.identifier} Execution Time", duration.round(2))
293
304
  StatsTracker.increment('Clock: Job Executions')
294
305
  end
295
306
 
@@ -1,6 +1,14 @@
1
+ using RubyClock::DSL
2
+
1
3
  on_error do |job, error|
2
- puts "An error has occurred with job #{job.identifier}: #{error.class}: #{error.message}"
4
+ case job
5
+ when String
6
+ puts "#{job}: #{error.class}: #{error.message}"
7
+ else
8
+ puts "An error has occurred with job #{job.identifier}: #{error.class}: #{error.message}"
9
+ end
3
10
  end
11
+
4
12
  # on_error do |job, error|
5
13
  # raise error
6
14
  # end
@@ -17,24 +25,30 @@ around_action do |job_proc|
17
25
  puts "after2"
18
26
  end
19
27
 
20
- around_action do |job_proc, job_info|
21
- puts "before3 #{job_info.class}"
22
- job_proc.call
23
- puts "after3"
24
- end
25
-
26
28
  every('2 seconds') do
27
29
  puts "hello from a ruby-clock job"
28
30
  end
29
31
 
30
32
  every('2 seconds') do
31
- shell 'say hello'
33
+ RubyClock::Runners.shell 'say hello'
32
34
  end
33
35
 
34
36
  every('2 seconds') do
35
- raise "An error."
37
+ raise "🐈️ this error is expected, to test the error catcher"
36
38
  end
37
39
 
38
40
  cron('*/10 * * * * *') do
39
41
  puts "cron running on every 10th second #{Time.now}"
40
42
  end
43
+
44
+ every('2 seconds') do
45
+ if defined?(schedule)
46
+ raise "💥 we do not expect the ruby-clock DSL to be available inside a job, but it is"
47
+ end
48
+ end
49
+
50
+ every('2 seconds') do
51
+ if defined?(shell) || defined?(rake)
52
+ puts "💥 we do not expect runners to be available inside a job, but it is"
53
+ end
54
+ end
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- ruby-clock (2.0.0.beta2)
4
+ ruby-clock (2.0.0.beta4)
5
5
  method_source
6
6
  rufus-scheduler (~> 3.8)
7
7
 
@@ -1,5 +1,19 @@
1
+ using RubyClock::DSL
2
+
1
3
  load '../example-app/Clockfile'
2
4
 
3
5
  every('2 seconds') do
4
6
  puts Example.count
5
7
  end
8
+
9
+ every('2 seconds') do
10
+ puts Example.check_for_global_method
11
+ end
12
+
13
+ every('2 seconds') do
14
+ puts Example.check_for_runner
15
+ end
16
+
17
+ every('2 seconds') do
18
+ RubyClock::Runners.rake 'about'
19
+ end
@@ -1,2 +1,18 @@
1
1
  class Example < ApplicationRecord
2
+ def self.check_for_global_method
3
+ if defined?(schedule)
4
+ raise "💥 Oh no, the ruby-clock DSL is in the global environment! 💥"
5
+ else
6
+ "🦝"
7
+ end
8
+ end
9
+
10
+ def self.check_for_runner
11
+ if defined?(shell) || defined?(rake)
12
+ raise "💥 Oh no, the runners got included in the global environment! 💥"
13
+ else
14
+ "🐅"
15
+ end
16
+ end
17
+
2
18
  end
data/exe/clock CHANGED
@@ -1,72 +1,22 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- begin
4
- require './config/environment.rb'
5
- puts "Detected rails app has been loaded."
6
- rescue LoadError
7
- end
8
-
9
3
  require 'ruby-clock'
10
- require 'method_source'
11
-
12
- class Rufus::Scheduler::Job
13
- def identifier
14
- @identifier ||= begin
15
- name || handler.source.split("\n").reject(&:empty?).grep_v(/#.*/)[-2].strip
16
- rescue
17
- begin
18
- source_location.join('-')
19
- rescue
20
- 'error-calculating-job-identifier'
21
- end
22
- end
23
- end
24
- end
25
-
4
+ RubyClock.detect_and_load_rails_app
5
+ require 'rufus_monkeypatch'
26
6
  RubyClock.instance.listen_to_signals
27
7
  RubyClock.instance.prepare_rake
28
8
  RubyClock.instance.schedule.pause
9
+ RubyClock.instance.add_rails_executor_to_around_actions
29
10
 
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)
11
+ begin
12
+ load ARGV[0] || 'Clockfile'
13
+ rescue => clockfile_error
14
+ if RubyClock.instance.on_error
15
+ RubyClock.instance.on_error.call("An error has occured while parsing the clockfile", clockfile_error)
41
16
  end
42
- end
43
-
44
- def around_action(&b)
45
- RubyClock.instance.around_actions << b
46
- end
47
-
48
- def cron(...)
49
- RubyClock.instance.schedule.cron(...)
50
- end
51
-
52
- def every(...)
53
- RubyClock.instance.schedule.every(...)
54
- end
55
-
56
- def shell(string)
57
- RubyClock.instance.shell(string)
58
- end
59
- #####################################
60
17
 
61
-
62
- load ARGV[0] || 'Clockfile'
63
-
64
- if defined?(::Rails)
65
- around_action do |job_proc|
66
- ::Rails.application.reloader.wrap do
67
- job_proc.call
68
- end
69
- end
18
+ raise
70
19
  end
71
20
 
21
+ RubyClock.instance.freeze_around_actions
72
22
  RubyClock.instance.run_jobs
@@ -0,0 +1,33 @@
1
+ module RubyClock::AroundActions
2
+
3
+ attr_accessor :around_actions
4
+
5
+ def freeze_around_actions
6
+ @around_actions.freeze
7
+ end
8
+
9
+ def set_up_around_actions
10
+ @around_actions = []
11
+ def schedule.around_trigger(job_info, &job_proc)
12
+ RubyClock.instance.call_with_around_action_stack(
13
+ RubyClock.instance.around_actions.reverse,
14
+ job_proc,
15
+ job_info
16
+ )
17
+ end
18
+ end
19
+
20
+ def call_with_around_action_stack(wrappers, job_proc, job_info)
21
+ case wrappers.count
22
+ when 0
23
+ job_proc.call(job_info)
24
+ else
25
+ call_with_around_action_stack(
26
+ wrappers[1..],
27
+ Proc.new{ wrappers.first.call(job_proc, job_info) },
28
+ job_info
29
+ )
30
+ end
31
+ end
32
+
33
+ end
@@ -0,0 +1,26 @@
1
+ module RubyClock::DSL
2
+ refine ::Kernel do
3
+ def schedule
4
+ RubyClock.instance.schedule
5
+ end
6
+
7
+ def on_error(&on_error_block)
8
+ RubyClock.instance.on_error = on_error_block
9
+ def schedule.on_error(job, error)
10
+ RubyClock.instance.on_error.call(job, error)
11
+ end
12
+ end
13
+
14
+ def around_action(&b)
15
+ RubyClock.instance.around_actions << b
16
+ end
17
+
18
+ def cron(...)
19
+ RubyClock.instance.schedule.cron(...)
20
+ end
21
+
22
+ def every(...)
23
+ RubyClock.instance.schedule.every(...)
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,24 @@
1
+ # There is also rails-relevant code in rake.rb
2
+ module RubyClock::Rails
3
+ module ClassMethods
4
+ def detect_and_load_rails_app
5
+ begin
6
+ require './config/environment.rb'
7
+ puts "Detected rails app has been loaded."
8
+ rescue LoadError
9
+ end
10
+ end
11
+ end
12
+
13
+ module InstanceMethods
14
+ def add_rails_executor_to_around_actions
15
+ if defined?(::Rails)
16
+ RubyClock.instance.around_actions << Proc.new do |job_proc|
17
+ ::Rails.application.executor.wrap do
18
+ job_proc.call
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,37 @@
1
+ # See https://code.jjb.cc/running-rake-tasks-from-within-ruby-on-rails-code
2
+ module RubyClock::Rake
3
+ def prepare_rake
4
+ if defined?(::Rails) && Rails.application
5
+ Rails.application.load_tasks
6
+ Rake::Task.tasks.each{|t| t.prerequisites.delete 'environment' }
7
+ @rake_mutex = Mutex.new
8
+ else
9
+ puts <<~MESSAGE
10
+ Because this is not a rails application, we do not know how to load your
11
+ rake tasks. You can do this yourself at the top of your Clockfile if you want
12
+ to run rake tasks from ruby-clock.
13
+ MESSAGE
14
+ end
15
+ end
16
+
17
+ # for tasks that don't have dependencies
18
+ def rake_execute(task)
19
+ Rake::Task[task].execute
20
+ end
21
+
22
+ # If the task doesn't share dependencies with another task,
23
+ # or if it does and you know you'll never run tasks such that any overlap
24
+ def rake_async(task)
25
+ Rake::Task[task].invoke
26
+ ensure
27
+ Rake::Task[task].reenable
28
+ Rake::Task[task].all_prerequisite_tasks.each(&:reenable)
29
+ end
30
+
31
+ # If the task has shared dependencies and you might run more than one at the same time
32
+ # This is the safest option and hence the default.
33
+ def rake(task)
34
+ @rake_mutex.synchronize { rake_async(task) }
35
+ end
36
+
37
+ end
@@ -0,0 +1,23 @@
1
+ # if we ever want to make these available at the top-level using refinements,
2
+ # like we do with the DSL, it doesn't work in Rails because Rails prepends Kernel after
3
+ # we use the refinment. Initial tests show that prepending ActiveSupport::ForkTracker::CoreExtPrivate
4
+ # works, but maybe that's not reliable or has unknown side effects
5
+ # https://stackoverflow.com/questions/74119178/
6
+
7
+ module RubyClock::Runners
8
+ def self.shell(string)
9
+ RubyClock.instance.shell(string)
10
+ end
11
+
12
+ def self.rake(string)
13
+ RubyClock.instance.rake(string)
14
+ end
15
+
16
+ def self.rake_execute(string)
17
+ RubyClock.instance.rake_execute(string)
18
+ end
19
+
20
+ def self.rake_async(string)
21
+ RubyClock.instance.rake_async(string)
22
+ end
23
+ end
@@ -0,0 +1,38 @@
1
+ module RubyClock::Shell
2
+ def shell_runner
3
+ @shell_runner ||= begin
4
+ require 'terrapin'
5
+ require 'posix-spawn'
6
+
7
+ unless Terrapin::CommandLine.runner.class == Terrapin::CommandLine::PosixRunner
8
+ puts <<~MESSAGE
9
+
10
+ 🤷 terrapin and posix-spawn are installed, but for some reason terrapin is
11
+ not using posix-spawn as its runner.
12
+
13
+ MESSAGE
14
+ end
15
+
16
+ puts '🐆 Using terrapin for shell commands.'
17
+ :terrapin
18
+ rescue LoadError
19
+ puts <<~MESSAGE
20
+
21
+ 🦥 Using ruby backticks for shell commands.
22
+ For better performance, install the terrapin and posix-spawn gems.
23
+ See README.md for more info.
24
+
25
+ MESSAGE
26
+ :backticks
27
+ end
28
+ end
29
+
30
+ def shell(command)
31
+ case shell_runner
32
+ when :terrapin
33
+ Terrapin::CommandLine.new(command).run
34
+ when :backticks
35
+ `#{command}`
36
+ end
37
+ end
38
+ end
@@ -1,3 +1,3 @@
1
1
  class RubyClock
2
- VERSION = "2.0.0.beta3"
2
+ VERSION = "2.0.0.beta4"
3
3
  end
data/lib/ruby-clock.rb CHANGED
@@ -1,23 +1,26 @@
1
+ require "ruby-clock/dsl"
1
2
  require "ruby-clock/version"
3
+ require "ruby-clock/rake"
4
+ require "ruby-clock/shell"
5
+ require "ruby-clock/around_actions"
6
+ require "ruby-clock/dsl"
7
+ require "ruby-clock/runners"
8
+ require "ruby-clock/rails"
2
9
  require 'rufus-scheduler'
3
10
  require 'singleton'
4
11
 
5
12
  class RubyClock
6
-
7
13
  include Singleton
14
+ include RubyClock::Rails::InstanceMethods
15
+ extend RubyClock::Rails::ClassMethods
16
+ include RubyClock::Rake
17
+ include RubyClock::Shell
18
+ include RubyClock::AroundActions
8
19
 
9
- attr_accessor :on_error, :around_actions
20
+ attr_accessor :on_error
10
21
 
11
22
  def initialize
12
- @around_actions = []
13
-
14
- def schedule.around_trigger(job_info, &job_proc)
15
- RubyClock.instance.call_with_around_action_stack(
16
- RubyClock.instance.around_actions.reverse,
17
- job_proc,
18
- job_info
19
- )
20
- end
23
+ set_up_around_actions
21
24
  end
22
25
 
23
26
  def wait_seconds
@@ -54,91 +57,4 @@ class RubyClock
54
57
  schedule.resume
55
58
  schedule.join
56
59
  end
57
-
58
- def prepare_rake
59
- if defined?(::Rails) && Rails.application
60
- Rails.application.load_tasks
61
- Rake::Task.tasks.each{|t| t.prerequisites.delete 'environment' }
62
- @rake_mutex = Mutex.new
63
- else
64
- puts <<~MESSAGE
65
- Because this is not a rails application, we do not know how to load your
66
- rake tasks. You can do this yourself at the top of your Clockfile if you want
67
- to run rake tasks from ruby-clock.
68
- MESSAGE
69
- end
70
- end
71
-
72
- # See https://code.jjb.cc/running-rake-tasks-from-within-ruby-on-rails-code
73
-
74
- # for tasks that don't have dependencies
75
- def rake_execute(task)
76
- Rake::Task[task].execute
77
- end
78
-
79
- # If the task doesn't share dependencies with another task,
80
- # or if it does and you know you'll never run tasks such that any overlap
81
- def rake_async(task)
82
- Rake::Task[task].invoke
83
- ensure
84
- Rake::Task[task].reenable
85
- Rake::Task[task].all_prerequisite_tasks.each(&:reenable)
86
- end
87
-
88
- # If the task has shared dependencies and you might run more than one at the same time
89
- # This is the safest option and hence the default.
90
- def rake(task)
91
- @rake_mutex.synchronize { rake_async(task) }
92
- end
93
-
94
- def shell_runner
95
- @shell_runner ||= begin
96
- require 'terrapin'
97
- require 'posix-spawn'
98
-
99
- unless Terrapin::CommandLine.runner.class == Terrapin::CommandLine::PosixRunner
100
- puts <<~MESSAGE
101
-
102
- 🤷 terrapin and posix-spawn are installed, but for some reason terrapin is
103
- not using posix-spawn as its runner.
104
-
105
- MESSAGE
106
- end
107
-
108
- puts '🐆 Using terrapin for shell commands.'
109
- :terrapin
110
- rescue LoadError
111
- puts <<~MESSAGE
112
-
113
- 🦥 Using ruby backticks for shell commands.
114
- For better performance, install the terrapin and posix-spawn gems.
115
- See README.md for more info.
116
-
117
- MESSAGE
118
- :backticks
119
- end
120
- end
121
-
122
- def shell(command)
123
- case shell_runner
124
- when :terrapin
125
- Terrapin::CommandLine.new(command).run
126
- when :backticks
127
- `#{command}`
128
- end
129
- end
130
-
131
- def call_with_around_action_stack(wrappers, job_proc, job_info)
132
- case wrappers.count
133
- when 0
134
- job_proc.call(job_info)
135
- else
136
- call_with_around_action_stack(
137
- wrappers[1..],
138
- Proc.new{ wrappers.first.call(job_proc, job_info) },
139
- job_info
140
- )
141
- end
142
- end
143
-
144
60
  end
@@ -0,0 +1,14 @@
1
+ require 'method_source'
2
+ class Rufus::Scheduler::Job
3
+ def identifier
4
+ @identifier ||= begin
5
+ name || handler.source.split("\n").reject(&:empty?).grep_v(/#.*/)[-2].strip
6
+ rescue
7
+ begin
8
+ source_location.join('-')
9
+ rescue
10
+ 'error-calculating-job-identifier'
11
+ end
12
+ end
13
+ end
14
+ end
data/ruby-clock.gemspec CHANGED
@@ -6,8 +6,17 @@ Gem::Specification.new do |spec|
6
6
  spec.authors = ["John Bachir"]
7
7
  spec.email = ["j@jjb.cc"]
8
8
 
9
- spec.summary = 'A "clock" process for invoking ruby code within a persistent runtime'
9
+ spec.summary = 'A job scheduler which runs jobs each in their own thread in a persistent process.'
10
10
  # spec.description = %q{TODO: Write a longer description or delete this line.}
11
+ spec.post_install_message = <<~MESSAGE
12
+
13
+ If you are updating ruby-clock from 1→2, there are a few things you need to change in your Clockfile.
14
+
15
+ It's quick, easy, and fun! See instructions here:
16
+ https://github.com/jjb/ruby-clock/blob/main/CHANGELOG.md#migrating-from-ruby-clock-version-1-to-version-2
17
+
18
+ MESSAGE
19
+
11
20
  spec.homepage = "https://github.com/jjb/ruby-clock"
12
21
  spec.license = "MIT"
13
22
  spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
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.beta3
4
+ version: 2.0.0.beta4
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-16 00:00:00.000000000 Z
11
+ date: 2022-10-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rufus-scheduler
@@ -142,7 +142,14 @@ files:
142
142
  - example-rails-app/vendor/javascript/.keep
143
143
  - exe/clock
144
144
  - lib/ruby-clock.rb
145
+ - lib/ruby-clock/around_actions.rb
146
+ - lib/ruby-clock/dsl.rb
147
+ - lib/ruby-clock/rails.rb
148
+ - lib/ruby-clock/rake.rb
149
+ - lib/ruby-clock/runners.rb
150
+ - lib/ruby-clock/shell.rb
145
151
  - lib/ruby-clock/version.rb
152
+ - lib/rufus_monkeypatch.rb
146
153
  - release.md
147
154
  - ruby-clock.gemspec
148
155
  homepage: https://github.com/jjb/ruby-clock
@@ -151,7 +158,13 @@ licenses:
151
158
  metadata:
152
159
  homepage_uri: https://github.com/jjb/ruby-clock
153
160
  source_code_uri: https://github.com/jjb/ruby-clock
154
- post_install_message:
161
+ post_install_message: |2+
162
+
163
+ If you are updating ruby-clock from 1→2, there are a few things you need to change in your Clockfile.
164
+
165
+ It's quick, easy, and fun! See instructions here:
166
+ https://github.com/jjb/ruby-clock/blob/main/CHANGELOG.md#migrating-from-ruby-clock-version-1-to-version-2
167
+
155
168
  rdoc_options: []
156
169
  require_paths:
157
170
  - lib
@@ -169,5 +182,7 @@ requirements: []
169
182
  rubygems_version: 3.1.6
170
183
  signing_key:
171
184
  specification_version: 4
172
- summary: A "clock" process for invoking ruby code within a persistent runtime
185
+ summary: A job scheduler which runs jobs each in their own thread in a persistent
186
+ process.
173
187
  test_files: []
188
+ ...