sidekiq-scheduler 2.1.0 → 2.1.1

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
  SHA1:
3
- metadata.gz: 5f61962caca434778af22dffae98cdbb9c154774
4
- data.tar.gz: 7ecd8c8fc1b61780593346b11f88f719d900cddf
3
+ metadata.gz: e699dac84cd996f77b54a71564a2e888a5444c6d
4
+ data.tar.gz: 597847f71ef33050a54ded0d313204d3604f2742
5
5
  SHA512:
6
- metadata.gz: 11efa51145977a60adf4238a316a2e906ffe3f7767ea5ac15a30f1b7fd2f0331412db631371e91ca48869609c9fa6142621df190c962e1a74fc6eb95c3d34703
7
- data.tar.gz: 1086eb5cdfb1920a3d6f713a793939cccf62c74a8c235aedc598ba6216ec9fc3eb97967f2e962fa6b5c2e7c20b32492a10d48a009558e726e84c0f0cb28915bd
6
+ metadata.gz: 933d343adcbb79210f95308de2b4612d4c0dd1185ea1b2b1d0fa9ae810b2e4a10031ef0d7b5ef90d95cf9168d742c9a9f4fa5369a87b3157397e9de0cc8b730f
7
+ data.tar.gz: 6813ae6ab82f3ffc24446734071114ad0ed446d15060bf8789b8ae98f6cfb44941c209bb9a1eb5875e8f6bc90a55a8050629ba15546c4972835f09421d63290a
data/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  <p align="center">
8
8
  <a href="https://badge.fury.io/rb/sidekiq-scheduler">
9
- <img src="https://badge.fury.io/rb/sidekiq-scheduler.png" alt="Gem Version">
9
+ <img src="https://badge.fury.io/rb/sidekiq-scheduler.svg" alt="Gem Version">
10
10
  </a>
11
11
  <a href="https://codeclimate.com/github/moove-it/sidekiq-scheduler">
12
12
  <img src="https://codeclimate.com/github/moove-it/sidekiq-scheduler/badges/gpa.svg" alt="Code Climate">
@@ -25,261 +25,213 @@
25
25
  </a>
26
26
  </p>
27
27
 
28
- sidekiq-scheduler is an extension to [Sidekiq](http://github.com/mperham/sidekiq) that adds support
29
- for running scheduled jobs, which are like cron jobs, recurring on a regular basis.
28
+ `sidekiq-scheduler` is an extension to [Sidekiq](http://github.com/mperham/sidekiq) that
29
+ pushes jobs in a scheduled way, mimicking cron utility.
30
30
 
31
31
  ## Installation
32
32
 
33
- Add this to your Gemfile:
34
-
35
- ``` ruby
36
- gem 'sidekiq-scheduler', '~> 2.0'
33
+ ``` shell
34
+ gem install sidekiq-scheduler
37
35
  ```
38
36
 
39
- If you are using Rails you are set.
37
+ ## Usage
38
+
39
+ ### Hello World
40
40
 
41
- If you are not using Rails create a file with this content:
42
41
 
43
42
  ``` ruby
44
- # config/initializers/scheduler.rb
43
+ # hello-scheduler.rb
45
44
 
46
45
  require 'sidekiq-scheduler'
47
46
 
48
- Dir[File.join(__dir__, '../../lib/workers/**/*.rb')].each(&method(:require))
47
+ class HelloWorld
48
+ include Sidekiq::Worker
49
+
50
+ def perform
51
+ puts 'Hello world'
52
+ end
53
+ end
49
54
  ```
50
55
 
51
- and then execute:
56
+ ``` yaml
57
+ # config/sidekiq.yml
52
58
 
53
- ``` sh
54
- sidekiq -r ./config/initializers/scheduler.rb
59
+ :schedule:
60
+ hello_world:
61
+ every: 1m # Runs once per minute
62
+ class: HelloWorld
55
63
  ```
56
64
 
57
- Look at [Loading the schedule](https://github.com/moove-it/sidekiq-scheduler/#loading-the-schedule)
58
- for information on how to load your schedule.
65
+ Run sidekiq:
59
66
 
60
- You can add sidekiq-scheduler configuration options to `sidekiq.yml` config file.
61
- Available options are:
67
+ ``` sh
68
+ sidekiq -r ./hello-scheduler.rb
69
+ ```
70
+
71
+ You'll see the following output:
62
72
 
63
- ``` yaml
64
- :schedule: <the schedule to be run>
65
- :dynamic: <if true the schedule can be modified in runtime [false by default]>
66
- :enabled: <enables scheduler if true [true by default]>
67
- :scheduler:
68
- :listened_queues_only: <push jobs whose queue is being listened by sidekiq [false by default]>
69
73
  ```
74
+ 2016-12-10T11:53:08.561Z 6452 TID-ovouhwvm4 INFO: Loading Schedule
75
+ 2016-12-10T11:53:08.561Z 6452 TID-ovouhwvm4 INFO: Scheduling HelloWorld {"cron"=>"0 * * * * *", "class"=>"HelloWorld"}
76
+ 2016-12-10T11:53:08.562Z 6452 TID-ovouhwvm4 INFO: Schedules Loaded
70
77
 
71
- ## Manage tasks from Unicorn/Rails server
78
+ 2016-12-10T11:54:00.212Z 6452 TID-ovoulivew HelloWorld JID-b35f36a562733fcc5e58444d INFO: start
79
+ Hello world
80
+ 2016-12-10T11:54:00.213Z 6452 TID-ovoulivew HelloWorld JID-b35f36a562733fcc5e58444d INFO: done: 0.001 sec
72
81
 
73
- If you want start sidekiq-scheduler only from Unicorn/Rails, but not from Sidekiq you can have
74
- something like this in an initializer:
82
+ 2016-12-10T11:55:00.287Z 6452 TID-ovoulist0 HelloWorld JID-b7e2b244c258f3cd153c2494 INFO: start
83
+ Hello world
84
+ 2016-12-10T11:55:00.287Z 6452 TID-ovoulist0 HelloWorld JID-b7e2b244c258f3cd153c2494 INFO: done: 0.001 sec
85
+ ```
75
86
 
76
- ``` ruby
77
- # config/initializers/sidekiq_scheduler.rb
78
- require 'sidekiq/scheduler'
87
+ ## Configuration options
79
88
 
80
- puts "Sidekiq.server? is #{Sidekiq.server?.inspect}"
81
- puts "defined?(Rails::Server) is #{defined?(Rails::Server).inspect}"
82
- puts "defined?(Unicorn) is #{defined?(Unicorn).inspect}"
89
+ Configuration options are placed inside `sidekiq.yml` config file.
83
90
 
84
- if Rails.env == 'production' && (defined?(Rails::Server) || defined?(Unicorn))
85
- Sidekiq.configure_server do |config|
91
+ Available options are:
86
92
 
87
- config.on(:startup) do
88
- Sidekiq.schedule = YAML.load_file(File.expand_path('../../scheduler.yml', __FILE__))
89
- Sidekiq::Scheduler.reload_schedule!
90
- end
91
- end
92
- else
93
- Sidekiq::Scheduler.enabled = false
94
- puts "Sidekiq::Scheduler.enabled is #{Sidekiq::Scheduler.enabled.inspect}"
95
- end
93
+ ``` yaml
94
+ :dynamic: <if true the schedule can be modified in runtime [false by default]>
95
+ :enabled: <enables scheduler if true [true by default]>
96
+ :scheduler:
97
+ :listened_queues_only: <push jobs whose queue is being listened by sidekiq [false by default]>
96
98
  ```
97
99
 
98
- ## Scheduled Jobs (Recurring Jobs)
100
+ ## Schedule configuration
99
101
 
100
- Scheduled (or recurring) jobs are logically no different than a standard cron
101
- job. They are jobs that run based on a fixed schedule which is set at
102
- startup.
103
-
104
- The schedule is a list of Sidekiq worker classes with arguments and a
105
- schedule frequency (in crontab syntax). The schedule is just a Hash, being most likely
106
- stored in a YAML like so:
102
+ The schedule is configured through the `:schedule` config entry in the sidekiq config file:
107
103
 
108
104
  ``` yaml
105
+ :schedule:
109
106
  CancelAbandonedOrders:
110
- cron: "*/5 * * * *"
107
+ every: 5m # runs every 5 minutes, job's class: CancelAbandonedOrders
111
108
 
112
109
  queue_documents_for_indexing:
113
- cron: "0 0 * * *"
114
- # you can use rufus-scheduler "every" syntax in place of cron if you prefer
115
- # every: 1h
110
+ every: 1h # runs every 1 hour
116
111
 
117
- # By default the job name (Hash key) will be taken as worker class name.
112
+ # By default the job name will be taken as worker class name.
118
113
  # If you want to have a different job name and class name, provide the 'class' option
119
114
  class: QueueDocuments
120
115
 
121
- queue: high
122
- args:
123
- description: "This job queues all content for indexing in solr"
116
+ queue: slow
117
+ args: ['*.pdf']
118
+ description: "This job queues pdf content for indexing in solr"
124
119
 
125
- clear_leaderboards_contributors:
126
- cron: "30 6 * * 1"
127
- class: ClearLeaderboards
128
- queue: low
129
- args: contributors
130
- description: "This job resets the weekly leaderboard for contributions"
120
+ # Enable / disable a job. All jobs are enabled by default.
121
+ enabled: true
131
122
  ```
132
123
 
133
- You can provide options to `every` or `cron` via an Array:
134
124
 
135
- ``` yaml
136
- clear_leaderboards_moderator:
137
- every: ["30s", first_in: '120s']
138
- class: CheckDaemon
139
- queue: low
140
- description: "This job will check Daemon every 30 seconds after 120 seconds after start"
141
- ```
125
+ ## Schedule types
142
126
 
127
+ Supported types are `cron`, `every`, `interval`, `at`, `in`.
143
128
 
144
- NOTE: Six parameter cron's are also supported (as they supported by
145
- rufus-scheduler which powers the sidekiq-scheduler process). This allows you
146
- to schedule jobs per second (ie: `30 * * * * *` would fire a job every 30
147
- seconds past the minute).
129
+ Cron, every, and interval types push jobs into sidekiq in a recurrent manner.
148
130
 
149
- A big shout out to [rufus-scheduler](http://github.com/jmettraux/rufus-scheduler)
150
- for handling the heavy lifting of the actual scheduling engine.
131
+ `cron` follows the same pattern as cron utility, with seconds resolution.
151
132
 
152
- NOTE: As schedules are persisted in Redis, an empty schedule will purge any schedule previously stored.
153
- sidekiq-scheduler instances running with `dynamic` flag set to `true` and empty schedule configuration will not push any job.
154
- Before version 2.0.8, instances matching those conditions read the previously stored schedule and push the jobs to sidekiq as usual.
133
+ ``` yaml
134
+ :schedule:
135
+ HelloWorld:
136
+ cron: '0 * * * * *' # Runs when second = 0
137
+ ```
155
138
 
156
- With version >= `2.0.8` the purge of Redis schedules config can be prevented by setting
157
- `enabled` flag to `false`:
139
+ `every` triggers following a given frequency:
158
140
 
159
- ```yaml
160
- :enabled: false
141
+ ``` yaml
142
+ every: '45m' # Runs every 45 minutes
161
143
  ```
162
- ### Enabling/Disabling jobs
163
144
 
164
- By default all the jobs are enabled. There is an option at job's configuration to change
165
- this behavior.
145
+ `interval` is similar to `every`, the difference between them is that `interval` type schedules the
146
+ next execution after the interval has elapsed counting from its last job enqueue.
166
147
 
148
+ At, and in types push jobs only once. `at` schedules in a point in time:
167
149
  ``` yaml
168
- clear_leaderboards_moderator:
169
- every: "30s"
170
- class: CheckDaemon
171
- enabled: false
172
- description: "This job is disabled by default"
150
+ at: '3001/01/01'
173
151
  ```
174
152
 
175
- However, the flag can be changed through the web interface at the Recurring Jobs tab.
153
+ You can specify any string that `DateTime.parse` and `Chronic` understand. To enable Chronic
154
+ strings, you must add it as a dependency.
176
155
 
177
- NOTE: Changes made thorugh the UI supersede job's configuration, even after a restart.
156
+ `in` triggers after a time duration has elapsed:
178
157
 
179
- ### Loading the schedule
158
+ ``` yaml
159
+ in: 1h # pushes a sidekiq job in 1 hour, after start-up
160
+ ```
180
161
 
181
- Let's assume your scheduled jobs are defined in a file called `config/scheduler.yml` under your Rails project,
182
- you could create a Rails initializer called `config/initializers/scheduler.rb` which would load the job definitions:
162
+ You can provide options to `every` or `cron` via an Array:
183
163
 
184
- ```ruby
185
- require 'sidekiq/scheduler'
164
+ ``` yaml
165
+ every: ['30s', first_in: '120s']
166
+ ```
186
167
 
187
- Sidekiq.configure_server do |config|
188
- config.on(:startup) do
189
- Sidekiq.schedule = YAML.load_file(File.expand_path('../../scheduler.yml', __FILE__))
190
- Sidekiq::Scheduler.reload_schedule!
191
- end
192
- end
168
+ See https://github.com/jmettraux/rufus-scheduler for more information.
169
+
170
+ ## Load the schedule from a different file
171
+
172
+ You can place the schedule configuration in a separate file from `config/sidekiq.yml`
173
+
174
+ ``` yaml
175
+ # sidekiq_scheduler.yml
176
+
177
+ clear_leaderboards_contributors:
178
+ cron: '0 30 6 * * 1'
179
+ class: ClearLeaderboards
180
+ queue: low
181
+ args: contributors
182
+ description: 'This job resets the weekly leaderboard for contributions'
193
183
  ```
194
184
 
195
- If you are running a non Rails project you should add code to load the workers classes before loading the schedule.
185
+ Please notice that the `schedule` root key is not present in the separate file.
196
186
 
197
- ```ruby
187
+ To load the schedule:
188
+
189
+ ``` ruby
190
+ require 'sidekiq'
198
191
  require 'sidekiq/scheduler'
199
- Dir[File.expand_path('../../../lib/workers/*.rb', __FILE__)].each do |file| load file; end
200
192
 
201
193
  Sidekiq.configure_server do |config|
202
194
  config.on(:startup) do
203
- Sidekiq.schedule = YAML.load_file(File.expand_path("../../scheduler.yml", __FILE__))
195
+ Sidekiq.schedule = YAML.load_file(File.expand_path('../../sidekiq_scheduler.yml', __FILE__))
204
196
  Sidekiq::Scheduler.reload_schedule!
205
197
  end
206
198
  end
207
199
  ```
208
200
 
209
- You can also put your schedule information inside sidekiq.yml and load it with:
210
-
211
- ```sh
212
- sidekiq -C ./config/sidekiq.yml
213
- ```
214
-
215
- #### The Spring preloader and Testing your initializer via Rails console
201
+ The above code can be placed in an initializer (in `config/initializers`) that runs every time the app starts up.
216
202
 
217
- If you're pulling in your schedule from a YML file via an initializer as shown, be aware that the Spring application preloader included with Rails will interefere with testing via the Rails console.
218
-
219
- **Spring will not reload initializers** unless the initializer is changed. Therefore, if you're making a change to your YML schedule file and reloading Rails console to see the change, Spring will make it seem like your modified schedule is not being reloaded.
220
-
221
- To see your updated schedule, be sure to reload Spring by stopping it prior to booting the Rails console.
222
-
223
- Run `spring stop` to stop Spring.
224
-
225
- For more information, see [this issue](https://github.com/Moove-it/sidekiq-scheduler/issues/35#issuecomment-48067183) and [Spring's README](https://github.com/rails/spring/blob/master/README.md).
203
+ ## Dynamic schedule
226
204
 
227
- ### Reloading the schedules
205
+ The schedule can be modified after startup. To add / update a schedule, you have to:
228
206
 
229
- Schedules are stored in Redis. To add / update an schedule, you have to:
230
-
231
- ```ruby
207
+ ``` ruby
232
208
  Sidekiq.set_schedule('heartbeat', { 'every' => ['1m'], 'class' => 'HeartbeatWorker' })
233
209
  ```
234
210
 
235
- When `:dynamic` flag is set to `true`, schedule changes are loaded every 5 seconds.
211
+ If the schedule did not exist it will be created, if it existed it will be updated.
236
212
 
237
- You can set that flag in the following ways.
238
-
239
- - YAML configuration:
213
+ When `:dynamic` flag is set to `true`, schedule changes are loaded every 5 seconds.
240
214
 
241
- ```
215
+ ``` yaml
216
+ # config/sidekiq.yml
242
217
  :dynamic: true
243
218
  ```
244
219
 
245
- - Initializer configuration:
246
-
247
- ```ruby
248
- Sidekiq.configure_server do |config|
249
- # ...
250
- Sidekiq::Scheduler.dynamic = true
251
- end
252
- ```
253
-
254
- If `:dynamic` flag is set to `false`, you have to reload the schedule manually in sidekiq
220
+ If `:dynamic` flag is set to `false`, you'll have to reload the schedule manually in sidekiq
255
221
  side:
256
222
 
257
- ```ruby
223
+ ``` ruby
258
224
  Sidekiq::Scheduler.reload_schedule!
259
225
  ```
260
226
 
261
- If the schedule did not exist it will we created, if it existed it will be updated.
262
-
263
- ### Testing
264
-
265
- In your tests you can check that a schedule change has been set you have to:
266
-
267
- ```ruby
268
- require 'sidekiq'
269
- require 'sidekiq-scheduler'
270
- require 'sidekiq-scheduler/test'
271
-
272
- Sidekiq.set_schedule('some_name', { 'every' => ['1m'], 'class' => 'HardWorker' })
273
-
274
- Sidekiq::Scheduler.schedules
275
- # => { 'every' => ['1m'], 'class' => 'HardWorker' }
227
+ Invoke `Sidekiq.get_schedule` to obtain the current schedule:
276
228
 
277
- Sidekiq::Scheduler.schedules_changed
278
- # => ['every']
229
+ ``` ruby
230
+ Sidekiq.get_schedule
231
+ # => { 'every' => '1m', 'class' => 'HardWorker' }
279
232
  ```
280
233
 
281
-
282
- ### Time zones
234
+ ## Time zones
283
235
 
284
236
  Note that if you use the cron syntax, this will be interpreted as in the server time zone
285
237
  rather than the `config.time_zone` specified in Rails.
@@ -287,7 +239,7 @@ rather than the `config.time_zone` specified in Rails.
287
239
  You can explicitly specify the time zone that rufus-scheduler will use:
288
240
 
289
241
  ``` yaml
290
- cron: "30 6 * * 1 Europe/Stockholm"
242
+ cron: '0 30 6 * * 1 Europe/Stockholm'
291
243
  ```
292
244
 
293
245
  Also note that `config.time_zone` in Rails allows for a shorthand (e.g. "Stockholm")
@@ -298,32 +250,63 @@ from the `config.time_zone` value, make sure it's the right format, e.g. with:
298
250
  ActiveSupport::TimeZone.find_tzinfo(Rails.configuration.time_zone).name
299
251
  ```
300
252
 
301
- A future version of sidekiq-scheduler may do this for you.
302
-
303
- ### Sidekiq Web Integration
253
+ ## Sidekiq Web Integration
304
254
 
305
- SidekiqScheduler provides an extension to the Sidekiq web interface that adds a Recurring Jobs page.
306
-
307
- To use it, set up the Sidekiq web interface according to the Sidekiq documentation and then add the `sidekiq-scheduler/web` require:
255
+ sidekiq-scheduler provides an extension to the Sidekiq web interface that adds a `Recurring Jobs` page.
308
256
 
309
257
  ``` ruby
258
+ # config.ru
259
+
310
260
  require 'sidekiq/web'
261
+ require 'sidekiq-scheduler'
311
262
  require 'sidekiq-scheduler/web'
263
+
264
+ app = Rack::Builder.new {
265
+ run Sidekiq::Web
266
+ }.to_app
267
+
268
+ Rack::Handler::WEBrick.run app
312
269
  ```
313
270
 
314
- ## Note on Patches / Pull Requests
271
+ ## The Spring preloader and Testing your initializer via Rails console
272
+
273
+ If you're pulling in your schedule from a YML file via an initializer as shown, be aware that the Spring application preloader included with Rails will interefere with testing via the Rails console.
274
+
275
+ **Spring will not reload initializers** unless the initializer is changed. Therefore, if you're making a change to your YML schedule file and reloading Rails console to see the change, Spring will make it seem like your modified schedule is not being reloaded.
276
+
277
+ To see your updated schedule, be sure to reload Spring by stopping it prior to booting the Rails console.
278
+
279
+ Run `spring stop` to stop Spring.
280
+
281
+ For more information, see [this issue](https://github.com/Moove-it/sidekiq-scheduler/issues/35#issuecomment-48067183) and [Spring's README](https://github.com/rails/spring/blob/master/README.md).
315
282
 
316
- * Fork the project.
317
- * Make your feature addition or bug fix.
318
- * Add tests for it. This is important so it won't break it in a future version unintentionally.
319
- * Commit, do not mess with version, or history.
320
- (if you want to have your own version, that is fine but bump version in a commit by itself so it can be ignored when merging)
321
- * Send a pull request. Bonus points for topic branches.
322
283
 
323
- ## Credits
284
+ ## Manage tasks from Unicorn/Rails server
285
+
286
+ If you want start sidekiq-scheduler only from Unicorn/Rails, but not from sidekiq you can have
287
+ something like this in an initializer:
288
+
289
+ ``` ruby
290
+ # config/initializers/sidekiq_scheduler.rb
291
+ require 'sidekiq/scheduler'
324
292
 
325
- This work is a partial port of [resque-scheduler](https://github.com/bvandenbos/resque-scheduler) by Ben VandenBos.
326
- Modified to work with the Sidekiq queueing library by Morton Jonuschat.
293
+ puts "Sidekiq.server? is #{Sidekiq.server?.inspect}"
294
+ puts "defined?(Rails::Server) is #{defined?(Rails::Server).inspect}"
295
+ puts "defined?(Unicorn) is #{defined?(Unicorn).inspect}"
296
+
297
+ if Rails.env == 'production' && (defined?(Rails::Server) || defined?(Unicorn))
298
+ Sidekiq.configure_server do |config|
299
+
300
+ config.on(:startup) do
301
+ Sidekiq.schedule = YAML.load_file(File.expand_path('../../scheduler.yml', __FILE__))
302
+ Sidekiq::Scheduler.reload_schedule!
303
+ end
304
+ end
305
+ else
306
+ Sidekiq::Scheduler.enabled = false
307
+ puts "Sidekiq::Scheduler.enabled is #{Sidekiq::Scheduler.enabled.inspect}"
308
+ end
309
+ ```
327
310
 
328
311
  ## License
329
312
 
@@ -331,6 +314,6 @@ MIT License
331
314
 
332
315
  ## Copyright
333
316
 
334
- Copyright 2013 - 2016 Moove-IT.
317
+ Copyright 2013 - 2017 Moove-IT.
335
318
  Copyright 2012 Morton Jonuschat.
336
319
  Some parts copyright 2010 Ben VandenBos.
@@ -0,0 +1,29 @@
1
+ require 'hashie'
2
+
3
+ module SidekiqScheduler
4
+ class RufusUtils
5
+
6
+ # Normalizes schedule options to rufust scheduler options
7
+ #
8
+ # @param options [String, [Array]
9
+ #
10
+ # @return [Array]
11
+ #
12
+ # @example
13
+ # normalize_schedule_options('15m') => ['15m', {}]
14
+ # normalize_schedule_options(['15m']) => ['15m', {}]
15
+ # normalize_schedule_options(['15m', first_in: '5m']) => ['15m', { first_in: '5m' }]
16
+ def self.normalize_schedule_options(options)
17
+ schedule, opts = options
18
+
19
+ if !opts.is_a?(Hash)
20
+ opts = {}
21
+ end
22
+
23
+ opts = Hashie.symbolize_keys(opts)
24
+
25
+ return schedule, opts
26
+ end
27
+ end
28
+ end
29
+
@@ -1,5 +1,5 @@
1
1
  module SidekiqScheduler
2
2
 
3
- VERSION = '2.1.0'
3
+ VERSION = '2.1.1'
4
4
 
5
5
  end
@@ -2,6 +2,7 @@ require 'rufus/scheduler'
2
2
  require 'thwait'
3
3
  require 'sidekiq/util'
4
4
  require 'sidekiq-scheduler/manager'
5
+ require 'sidekiq-scheduler/rufus_utils'
5
6
  require 'json'
6
7
 
7
8
  module Sidekiq
@@ -79,21 +80,6 @@ module Sidekiq
79
80
  end
80
81
  end
81
82
 
82
- # modify interval type value to value with options if options available
83
- def optionizate_interval_value(value)
84
- args = value
85
- if args.is_a?(::Array)
86
- return args.first if args.size > 2 || !args.last.is_a?(::Hash)
87
- # symbolize keys of hash for options
88
- args[1] = args[1].inject({}) do |m, i|
89
- key, value = i
90
- m[(key.to_sym rescue key) || key] = value
91
- m
92
- end
93
- end
94
- args
95
- end
96
-
97
83
  # Loads a job schedule into the Rufus::Scheduler and stores it in @@scheduled_jobs
98
84
  def load_schedule_job(name, config)
99
85
  # If rails_env is set in the config, enforce ENV['RAILS_ENV'] as
@@ -109,9 +95,9 @@ module Sidekiq
109
95
 
110
96
  if !config_interval_type.nil? && config_interval_type.length > 0
111
97
 
112
- args = optionizate_interval_value(config_interval_type)
98
+ schedule, options = SidekiqScheduler::RufusUtils.normalize_schedule_options(config_interval_type)
113
99
 
114
- rufus_job = new_job(name, interval_type, config, args)
100
+ rufus_job = new_job(name, interval_type, config, schedule, options)
115
101
  @@scheduled_jobs[name] = rufus_job
116
102
  update_job_next_time(name, rufus_job.next_time)
117
103
 
@@ -224,7 +210,7 @@ module Sidekiq
224
210
  unschedule_job(schedule_name)
225
211
  end
226
212
  end
227
- logger.info 'Schedules Loaded'
213
+ logger.info 'Schedule updated'
228
214
  end
229
215
  end
230
216
 
@@ -369,10 +355,10 @@ module Sidekiq
369
355
  end
370
356
  end
371
357
 
372
- def new_job(name, interval_type, config, args)
373
- opts = { :job => true, :tags => [name] }
358
+ def new_job(name, interval_type, config, schedule, options)
359
+ options = options.merge({ :job => true, :tags => [name] })
374
360
 
375
- rufus_scheduler.send(interval_type, *args, opts) do |job, time|
361
+ rufus_scheduler.send(interval_type, schedule, options) do |job, time|
376
362
  idempotent_job_enqueue(name, time, sanitize_job_config(config)) if job_enabled?(name)
377
363
  end
378
364
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-scheduler
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Morton Jonuschat
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-01-13 00:00:00.000000000 Z
12
+ date: 2017-02-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: hashie
@@ -249,6 +249,7 @@ files:
249
249
  - lib/sidekiq-scheduler.rb
250
250
  - lib/sidekiq-scheduler/job_presenter.rb
251
251
  - lib/sidekiq-scheduler/manager.rb
252
+ - lib/sidekiq-scheduler/rufus_utils.rb
252
253
  - lib/sidekiq-scheduler/schedule.rb
253
254
  - lib/sidekiq-scheduler/version.rb
254
255
  - lib/sidekiq-scheduler/web.rb