rocketjob 2.0.0.rc3 → 2.0.0

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.
@@ -0,0 +1,291 @@
1
+ #--
2
+ # Copyright (c) 2006-2016, John Mettraux, jmettraux@gmail.com
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in
12
+ # all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ # THE SOFTWARE.
21
+ #
22
+ # Made in Japan.
23
+ #++
24
+
25
+ module RocketJob::Plugins::Rufus
26
+
27
+ TIMEZONES = %w[
28
+ GB NZ UCT EET CET PRC ROC WET GMT EST ROK UTC MST HST MET Zulu Cuba Iran W-SU
29
+ Eire GMT0 Libya Japan Egypt GMT+0 GMT-0 Israel Poland Navajo Turkey GB-Eire
30
+ Iceland PST8PDT Etc/UCT CST6CDT NZ-CHAT MST7MDT Jamaica EST5EDT Etc/GMT Etc/UTC
31
+ US/Samoa Etc/GMT0 Portugal Hongkong Etc/Zulu Singapore Asia/Baku Etc/GMT-9
32
+ Etc/GMT+1 Etc/GMT+0 Asia/Aden Etc/GMT+2 Etc/GMT+3 Etc/GMT+4 Etc/GMT+5 Etc/GMT+6
33
+ Etc/GMT+7 Etc/GMT+8 Etc/GMT+9 Etc/GMT-0 Etc/GMT-1 Universal Asia/Dili Greenwich
34
+ Asia/Gaza Etc/GMT-8 Etc/GMT-7 US/Alaska Asia/Oral Etc/GMT-6 Etc/GMT-5 Etc/GMT-4
35
+ Asia/Hovd Etc/GMT-3 US/Hawaii Etc/GMT-2 Kwajalein Asia/Omsk Asia/Macao
36
+ Etc/GMT-14 Asia/Kabul US/Central Etc/GMT-13 US/Arizona Asia/Macau Asia/Qatar
37
+ Asia/Seoul Asia/Tokyo Asia/Dubai US/Pacific Etc/GMT-12 Etc/GMT-11 Etc/GMT-10
38
+ Asia/Dhaka Asia/Dacca Asia/Chita Etc/GMT+12 Etc/GMT+10 Asia/Amman Asia/Aqtau
39
+ Etc/GMT+11 US/Eastern Asia/Thimbu Asia/Brunei Asia/Tehran Asia/Beirut
40
+ Europe/Rome Europe/Riga Brazil/Acre Brazil/East Europe/Oslo Brazil/West
41
+ Africa/Lome Asia/Taipei Asia/Saigon Asia/Riyadh Asia/Aqtobe Asia/Anadyr
42
+ Europe/Kiev Asia/Almaty Africa/Juba Pacific/Yap US/Aleutian Asia/Muscat
43
+ US/Mountain Asia/Harbin Asia/Hebron Asia/Manila Asia/Kuwait Asia/Urumqi
44
+ US/Michigan Indian/Mahe SystemV/EST5 Asia/Kashgar Indian/Cocos Asia/Jakarta
45
+ Asia/Kolkata Asia/Kuching America/Atka Asia/Irkutsk Pacific/Apia Asia/Magadan
46
+ Africa/Dakar America/Lima Pacific/Fiji Pacific/Guam Europe/Vaduz Pacific/Niue
47
+ Asia/Nicosia Africa/Ceuta Pacific/Truk America/Adak Pacific/Wake Africa/Tunis
48
+ Africa/Cairo Asia/Colombo SystemV/AST4 SystemV/CST6 Asia/Karachi Asia/Rangoon
49
+ SystemV/MST7 Asia/Baghdad Europe/Malta Africa/Lagos Europe/Minsk SystemV/PST8
50
+ Canada/Yukon Asia/Tbilisi America/Nome Asia/Bahrain Africa/Accra Europe/Paris
51
+ Asia/Bangkok Asia/Bishkek Asia/Thimphu SystemV/YST9 Asia/Yerevan Asia/Yakutsk
52
+ Europe/Sofia Asia/Ust-Nera Australia/ACT Australia/LHI Europe/Tirane
53
+ Asia/Tel_Aviv Australia/NSW Africa/Luanda Asia/Tashkent Africa/Lusaka
54
+ Asia/Shanghai Africa/Malabo Asia/Sakhalin Africa/Maputo Africa/Maseru
55
+ SystemV/HST10 Africa/Kigali Africa/Niamey Pacific/Samoa America/Sitka
56
+ Pacific/Palau Pacific/Nauru Pacific/Efate Asia/Makassar Pacific/Chuuk
57
+ Africa/Harare Africa/Douala America/Aruba America/Thule America/Bahia
58
+ America/Jujuy America/Belem Asia/Katmandu America/Boise Indian/Comoro
59
+ Indian/Chagos Asia/Jayapura Europe/Zurich Asia/Istanbul Europe/Zagreb
60
+ Etc/Greenwich Europe/Warsaw Europe/Vienna Etc/Universal Asia/Dushanbe
61
+ Europe/Athens Europe/Berlin Africa/Bissau Asia/Damascus Africa/Banjul
62
+ Europe/Dublin Africa/Bangui Africa/Bamako Europe/Jersey Africa/Asmera
63
+ Europe/Lisbon Africa/Asmara Europe/London Asia/Ashgabat Asia/Calcutta
64
+ Europe/Madrid Europe/Monaco Europe/Moscow Europe/Prague Europe/Samara
65
+ Europe/Skopje Asia/Khandyga Canada/Pacific Africa/Abidjan America/Manaus
66
+ Asia/Chongqing Asia/Chungking Africa/Algiers America/Maceio US/Pacific-New
67
+ Africa/Conakry America/La_Paz America/Juneau America/Nassau America/Inuvik
68
+ Europe/Andorra Africa/Kampala Asia/Ashkhabad Asia/Hong_Kong America/Havana
69
+ Canada/Eastern Europe/Belfast Canada/Central Australia/West Asia/Jerusalem
70
+ Africa/Mbabane Asia/Kamchatka America/Virgin America/Guyana Asia/Kathmandu
71
+ Mexico/General America/Panama Europe/Nicosia America/Denver Europe/Tallinn
72
+ Africa/Nairobi America/Dawson Europe/Vatican Europe/Vilnius America/Cuiaba
73
+ Africa/Tripoli Pacific/Wallis Atlantic/Faroe Pacific/Tarawa Pacific/Tahiti
74
+ Pacific/Saipan Pacific/Ponape America/Cayman America/Cancun Asia/Pontianak
75
+ Asia/Pyongyang Asia/Vientiane Asia/Qyzylorda Pacific/Noumea America/Bogota
76
+ Pacific/Midway Pacific/Majuro Asia/Samarkand Indian/Mayotte Pacific/Kosrae
77
+ Asia/Singapore Indian/Reunion America/Belize America/Regina America/Recife
78
+ Pacific/Easter Mexico/BajaSur America/Merida Pacific/Chatham Pacific/Fakaofo
79
+ Pacific/Gambier America/Rosario Asia/Ulan_Bator Indian/Maldives Pacific/Norfolk
80
+ America/Antigua Asia/Phnom_Penh America/Phoenix America/Caracas America/Cayenne
81
+ Atlantic/Azores Pacific/Pohnpei Atlantic/Canary America/Chicago Atlantic/Faeroe
82
+ Africa/Windhoek America/Cordoba America/Creston Africa/Timbuktu America/Curacao
83
+ Africa/Sao_Tome Africa/Ndjamena SystemV/AST4ADT Europe/Uzhgorod Europe/Tiraspol
84
+ SystemV/CST6CDT Africa/Monrovia America/Detroit Europe/Sarajevo Australia/Eucla
85
+ America/Tijuana America/Toronto America/Godthab America/Grenada Europe/Istanbul
86
+ America/Ojinaga America/Tortola Australia/Perth Europe/Helsinki Australia/South
87
+ Europe/Guernsey SystemV/EST5EDT Europe/Chisinau SystemV/MST7MDT Europe/Busingen
88
+ Europe/Budapest Europe/Brussels America/Halifax America/Mendoza America/Noronha
89
+ America/Nipigon Canada/Atlantic America/Yakutat SystemV/PST8PDT SystemV/YST9YDT
90
+ Canada/Mountain Africa/Kinshasa Africa/Khartoum Africa/Gaborone Africa/Freetown
91
+ America/Iqaluit America/Jamaica US/East-Indiana Africa/El_Aaiun America/Knox_IN
92
+ Africa/Djibouti Africa/Blantyre America/Moncton America/Managua Asia/Choibalsan
93
+ America/Marigot Australia/North Europe/Belgrade America/Resolute
94
+ America/Mazatlan Pacific/Funafuti Pacific/Auckland Pacific/Honolulu
95
+ Pacific/Johnston America/Miquelon America/Santarem Mexico/BajaNorte
96
+ America/Santiago Antarctica/Troll America/Asuncion America/Atikokan
97
+ America/Montreal America/Barbados Africa/Bujumbura Pacific/Pitcairn
98
+ Asia/Ulaanbaatar Indian/Mauritius America/New_York Antarctica/Syowa
99
+ America/Shiprock Indian/Kerguelen Asia/Novosibirsk America/Anguilla
100
+ Indian/Christmas Asia/Vladivostok Asia/Ho_Chi_Minh Antarctica/Davis
101
+ Atlantic/Bermuda Europe/Amsterdam Antarctica/Casey America/St_Johns
102
+ Atlantic/Madeira America/Winnipeg America/St_Kitts Europe/Volgograd
103
+ Brazil/DeNoronha Europe/Bucharest Africa/Mogadishu America/St_Lucia
104
+ Atlantic/Stanley Europe/Stockholm Australia/Currie Europe/Gibraltar
105
+ Australia/Sydney Asia/Krasnoyarsk Australia/Darwin America/Dominica
106
+ America/Edmonton America/Eirunepe Europe/Podgorica America/Ensenada
107
+ Europe/Ljubljana Australia/Hobart Europe/Mariehamn Africa/Lubumbashi
108
+ America/Goose_Bay Europe/Luxembourg America/Menominee America/Glace_Bay
109
+ America/Fortaleza Africa/Nouakchott America/Matamoros Pacific/Galapagos
110
+ America/Guatemala Pacific/Kwajalein Pacific/Marquesas America/Guayaquil
111
+ Asia/Kuala_Lumpur Europe/San_Marino America/Monterrey Europe/Simferopol
112
+ America/Araguaina Antarctica/Vostok Europe/Copenhagen America/Catamarca
113
+ Pacific/Pago_Pago America/Sao_Paulo America/Boa_Vista America/St_Thomas
114
+ Chile/Continental America/Vancouver Africa/Casablanca Europe/Bratislava
115
+ Pacific/Enderbury Pacific/Rarotonga Europe/Zaporozhye US/Indiana-Starke
116
+ Antarctica/Palmer Asia/Novokuznetsk Africa/Libreville America/Chihuahua
117
+ America/Anchorage Pacific/Tongatapu Antarctica/Mawson Africa/Porto-Novo
118
+ Asia/Yekaterinburg America/Paramaribo America/Hermosillo Atlantic/Jan_Mayen
119
+ Antarctica/McMurdo America/Costa_Rica Antarctica/Rothera America/Grand_Turk
120
+ Atlantic/Reykjavik Atlantic/St_Helena Australia/Victoria Chile/EasterIsland
121
+ Asia/Ujung_Pandang Australia/Adelaide America/Montserrat America/Porto_Acre
122
+ Africa/Brazzaville Australia/Brisbane America/Kralendijk America/Montevideo
123
+ America/St_Vincent America/Louisville Australia/Canberra Australia/Tasmania
124
+ Europe/Isle_of_Man Europe/Kaliningrad Africa/Ouagadougou America/Rio_Branco
125
+ Pacific/Kiritimati Africa/Addis_Ababa America/Metlakatla America/Martinique
126
+ Asia/Srednekolymsk America/Guadeloupe America/Fort_Wayne Australia/Lindeman
127
+ America/Whitehorse Arctic/Longyearbyen America/Pangnirtung America/Mexico_City
128
+ America/Los_Angeles America/Rainy_River Atlantic/Cape_Verde Pacific/Guadalcanal
129
+ Indian/Antananarivo America/El_Salvador Australia/Lord_Howe Africa/Johannesburg
130
+ America/Tegucigalpa Canada/Saskatchewan America/Thunder_Bay Canada/Newfoundland
131
+ America/Puerto_Rico America/Yellowknife Australia/Melbourne America/Porto_Velho
132
+ Australia/Queensland Australia/Yancowinna America/Santa_Isabel
133
+ America/Blanc-Sablon America/Scoresbysund America/Danmarkshavn
134
+ Pacific/Port_Moresby Antarctica/Macquarie America/Buenos_Aires
135
+ Africa/Dar_es_Salaam America/Campo_Grande America/Dawson_Creek
136
+ America/Indianapolis Pacific/Bougainville America/Rankin_Inlet
137
+ America/Indiana/Knox America/Lower_Princes America/Coral_Harbour
138
+ America/St_Barthelemy Australia/Broken_Hill America/Cambridge_Bay
139
+ America/Indiana/Vevay America/Swift_Current America/Port_of_Spain
140
+ Antarctica/South_Pole America/Santo_Domingo Atlantic/South_Georgia
141
+ America/Port-au-Prince America/Bahia_Banderas America/Indiana/Winamac
142
+ America/Indiana/Marengo America/Argentina/Jujuy America/Argentina/Salta
143
+ Canada/East-Saskatchewan America/Indiana/Vincennes America/Argentina/Tucuman
144
+ America/Argentina/Ushuaia Antarctica/DumontDUrville America/Indiana/Tell_City
145
+ America/Argentina/Mendoza America/Argentina/Cordoba America/Indiana/Petersburg
146
+ America/Argentina/San_Luis America/Argentina/San_Juan America/Argentina/La_Rioja
147
+ America/North_Dakota/Center America/Kentucky/Monticello
148
+ America/North_Dakota/Beulah America/Kentucky/Louisville
149
+ America/Argentina/Catamarca America/Indiana/Indianapolis
150
+ America/North_Dakota/New_Salem America/Argentina/Rio_Gallegos
151
+ America/Argentina/Buenos_Aires America/Argentina/ComodRivadavia
152
+ ]
153
+ TIMEZONEs = TIMEZONES.collect(&:downcase)
154
+
155
+ #
156
+ # Zon{ing|ed}Time, whatever.
157
+ #
158
+ class ZoTime
159
+
160
+ attr_accessor :seconds
161
+ attr_accessor :zone
162
+
163
+ def initialize(s, zone)
164
+
165
+ @seconds = s.to_f
166
+ @zone = zone
167
+ end
168
+
169
+ def time
170
+
171
+ in_zone do
172
+
173
+ t = Time.at(@seconds)
174
+
175
+ #if t.isdst
176
+ # t1 = Time.at(@seconds + 3600)
177
+ # t = t1 if t.zone != t1.zone && t.hour == t1.hour && t.min == t1.min
178
+ # # ambiguous TZ (getting out of DST)
179
+ #else
180
+ # t.hour # force t to compute itself
181
+ #end
182
+ #
183
+ # jump out of DST as soon as possible, jumps 1h as seen from UTC
184
+
185
+ t.hour # force t to compute itself
186
+ #
187
+ # stay in DST as long as possible, no jump seen from UTC
188
+
189
+ t
190
+ end
191
+ end
192
+
193
+ def utc
194
+
195
+ time.utc
196
+ end
197
+
198
+ def add(s)
199
+
200
+ @seconds += s.to_f
201
+ end
202
+
203
+ def substract(s)
204
+
205
+ @seconds -= s.to_f
206
+ end
207
+
208
+ def to_f
209
+
210
+ @seconds
211
+ end
212
+
213
+ #DELTA_TZ_REX = /^[+-][0-1][0-9]:?[0-5][0-9]$/
214
+
215
+ def self.envtzable?(s)
216
+
217
+ TIMEZONES.include?(s)
218
+ end
219
+
220
+ def self.parse(str, opts={})
221
+
222
+ if defined?(::Chronic) && t = ::Chronic.parse(str, opts)
223
+ return ZoTime.new(t, ENV['TZ'])
224
+ end
225
+
226
+ begin
227
+ DateTime.parse(str)
228
+ rescue
229
+ fail ArgumentError, "no time information in #{o.inspect}"
230
+ end if RUBY_VERSION < '1.9.0'
231
+
232
+ zone = nil
233
+
234
+ s =
235
+ str.gsub(/\S+/) { |m|
236
+ if envtzable?(m)
237
+ zone ||= m
238
+ ''
239
+ else
240
+ m
241
+ end
242
+ }
243
+
244
+ return nil unless zone.nil? || is_timezone?(zone)
245
+
246
+ zt = ZoTime.new(0, zone || ENV['TZ'])
247
+ zt.in_zone { zt.seconds = Time.parse(s).to_f }
248
+
249
+ zt.seconds == nil ? nil : zt
250
+ end
251
+
252
+ def self.is_timezone?(str)
253
+
254
+ return false if str == nil
255
+ return false if str == '*'
256
+
257
+ return false if str.index('#')
258
+ # "sun#2", etc... On OSX would go all the way to true
259
+
260
+ return true if Time.zone_offset(str)
261
+
262
+ return !! (::TZInfo::Timezone.get(str) rescue nil) if defined?(::TZInfo)
263
+
264
+ return true if TIMEZONES.include?(str)
265
+ return true if TIMEZONEs.include?(str)
266
+
267
+ t = ZoTime.new(0, str).time
268
+
269
+ return false if t.zone == ''
270
+ return false if t.zone == 'UTC'
271
+ return false if t.utc_offset == 0 && str.start_with?(t.zone)
272
+ # 3 common fallbacks...
273
+
274
+ return false if RUBY_PLATFORM.include?('java') && ! envtzable?(str)
275
+
276
+ true
277
+ end
278
+
279
+ def in_zone(&block)
280
+
281
+ current_timezone = ENV['TZ']
282
+ ENV['TZ'] = @zone
283
+
284
+ block.call
285
+
286
+ ensure
287
+
288
+ ENV['TZ'] = current_timezone
289
+ end
290
+ end
291
+ end
@@ -1,4 +1,4 @@
1
1
  # encoding: UTF-8
2
2
  module RocketJob #:nodoc
3
- VERSION = '2.0.0.rc3'
3
+ VERSION = '2.0.0'
4
4
  end
@@ -344,7 +344,7 @@ module RocketJob
344
344
  skip_job_ids = []
345
345
  processed = false
346
346
  while (job = Job.rocket_job_next_job(name, skip_job_ids)) && !shutting_down?
347
- logger.fast_tag("Job #{job.id}") do
347
+ logger.fast_tag("job:#{job.id}") do
348
348
  if job.rocket_job_work(self)
349
349
  # Need to skip the specified job due to throttling or no work available
350
350
  skip_job_ids << job.id
@@ -7,33 +7,39 @@ require 'rocket_job/version'
7
7
 
8
8
  # @formatter:off
9
9
  module RocketJob
10
- autoload :CLI, 'rocket_job/cli'
11
- autoload :Config, 'rocket_job/config'
12
- autoload :DirmonEntry, 'rocket_job/dirmon_entry'
13
- autoload :Heartbeat, 'rocket_job/heartbeat'
14
- autoload :Job, 'rocket_job/job'
15
- autoload :JobException, 'rocket_job/job_exception'
16
- autoload :Worker, 'rocket_job/worker'
10
+ autoload :CLI, 'rocket_job/cli'
11
+ autoload :Config, 'rocket_job/config'
12
+ autoload :DirmonEntry, 'rocket_job/dirmon_entry'
13
+ autoload :Heartbeat, 'rocket_job/heartbeat'
14
+ autoload :Job, 'rocket_job/job'
15
+ autoload :JobException, 'rocket_job/job_exception'
16
+ autoload :Worker, 'rocket_job/worker'
17
17
 
18
18
  module Plugins
19
19
  module Job
20
- autoload :Callbacks, 'rocket_job/plugins/job/callbacks'
21
- autoload :Defaults, 'rocket_job/plugins/job/defaults'
22
- autoload :StateMachine, 'rocket_job/plugins/job/state_machine'
23
- autoload :Logger, 'rocket_job/plugins/job/logger'
24
- autoload :Model, 'rocket_job/plugins/job/model'
25
- autoload :Persistence, 'rocket_job/plugins/job/persistence'
26
- autoload :Worker, 'rocket_job/plugins/job/worker'
20
+ autoload :Callbacks, 'rocket_job/plugins/job/callbacks'
21
+ autoload :Defaults, 'rocket_job/plugins/job/defaults'
22
+ autoload :StateMachine, 'rocket_job/plugins/job/state_machine'
23
+ autoload :Logger, 'rocket_job/plugins/job/logger'
24
+ autoload :Model, 'rocket_job/plugins/job/model'
25
+ autoload :Persistence, 'rocket_job/plugins/job/persistence'
26
+ autoload :Worker, 'rocket_job/plugins/job/worker'
27
27
  end
28
- autoload :Document, 'rocket_job/plugins/document'
29
- autoload :Restart, 'rocket_job/plugins/restart'
30
- autoload :Singleton, 'rocket_job/plugins/singleton'
31
- autoload :StateMachine, 'rocket_job/plugins/state_machine'
28
+ module Rufus
29
+ autoload :CronLine, 'rocket_job/plugins/rufus/cron_line'
30
+ autoload :ZoTime, 'rocket_job/plugins/rufus/zo_time'
31
+ end
32
+ autoload :Cron, 'rocket_job/plugins/cron'
33
+ autoload :Document, 'rocket_job/plugins/document'
34
+ autoload :ProcessingWindow, 'rocket_job/plugins/processing_window'
35
+ autoload :Restart, 'rocket_job/plugins/restart'
36
+ autoload :Singleton, 'rocket_job/plugins/singleton'
37
+ autoload :StateMachine, 'rocket_job/plugins/state_machine'
32
38
  end
33
39
 
34
40
  module Jobs
35
- autoload :DirmonJob, 'rocket_job/jobs/dirmon_job'
36
- autoload :SimpleJob, 'rocket_job/jobs/simple_job'
41
+ autoload :DirmonJob, 'rocket_job/jobs/dirmon_job'
42
+ autoload :SimpleJob, 'rocket_job/jobs/simple_job'
37
43
  end
38
44
 
39
45
  # @formatter:on
@@ -0,0 +1,78 @@
1
+ require_relative '../test_helper'
2
+
3
+ # Unit Test for RocketJob::Job
4
+ module Plugins
5
+ class CronTest < Minitest::Test
6
+ class CronJob < RocketJob::Job
7
+ include RocketJob::Plugins::Cron
8
+
9
+ def perform
10
+ 'DONE'
11
+ end
12
+ end
13
+
14
+ describe RocketJob::Plugins::Cron do
15
+ before do
16
+ # destroy_all could create new instances
17
+ CronJob.delete_all
18
+ assert_equal 0, CronJob.count
19
+ end
20
+
21
+ after do
22
+ @job.destroy if @job && !@job.new_record?
23
+ CronJob.delete_all
24
+ end
25
+
26
+ describe '#create!' do
27
+ it 'queues a new job' do
28
+ @job = CronJob.create!(cron_schedule: '* 1 * * *')
29
+ assert @job.valid?
30
+ refute @job.new_record?
31
+ end
32
+
33
+ describe 'timezones are supported' do
34
+ it 'handles UTC' do
35
+ time = Time.parse('2015-12-09 17:50:05 +0000')
36
+ Time.stub(:now, time) do
37
+ @job = CronJob.create!(cron_schedule: '* 1 * * * UTC')
38
+ end
39
+ assert @job.valid?
40
+ refute @job.new_record?
41
+ assert_equal Time.parse('2015-12-10 01:00:00 UTC'), @job.run_at
42
+ end
43
+
44
+ it 'handles Eastern' do
45
+ time = Time.parse('2015-12-09 17:50:05 +0000')
46
+ Time.stub(:now, time) do
47
+ @job = CronJob.create!(cron_schedule: '* 1 * * * America/New_York')
48
+ end
49
+ assert @job.valid?
50
+ refute @job.new_record?
51
+ assert_equal Time.parse('2015-12-10 06:00:00 UTC'), @job.run_at
52
+ end
53
+ end
54
+
55
+ end
56
+
57
+ describe '#valid?' do
58
+ it 'fails on missing cron schedule' do
59
+ @job = CronJob.new
60
+ refute @job.valid?
61
+ assert_equal "can't be blank", @job.errors.messages[:cron_schedule].first
62
+ end
63
+
64
+ it 'fails on bad cron schedule' do
65
+ @job = CronJob.new(cron_schedule: 'blah')
66
+ refute @job.valid?
67
+ assert_equal "not a valid cronline : 'blah'", @job.errors.messages[:cron_schedule].first
68
+ end
69
+
70
+ it 'passes on valid cron schedule' do
71
+ @job = CronJob.new(cron_schedule: '* 1 * * *')
72
+ assert @job.valid?
73
+ end
74
+ end
75
+
76
+ end
77
+ end
78
+ end
@@ -43,12 +43,12 @@ module Plugins
43
43
  end
44
44
 
45
45
  it 'adds completed logging' do
46
- @job = LoggerJob.new
47
- benchmark_called = false
48
- @job.logger.stub(:benchmark_info, -> description, *args { benchmark_called = true if description == 'Completed #perform' }) do
46
+ @job = LoggerJob.new
47
+ measure_called = false
48
+ @job.logger.stub(:measure_info, -> description, *args { measure_called = true if description == 'Completed #perform' }) do
49
49
  @job.perform_now
50
50
  end
51
- assert benchmark_called, "In Plugins::Job::Logger.around_perform logger.benchmark_info('Completed #perform') not called"
51
+ assert measure_called, "In Plugins::Job::Logger.around_perform logger.measure_info('Completed #perform') not called"
52
52
  end
53
53
  end
54
54