rufus-scheduler 1.0.5 → 1.0.6

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.
data/CHANGELOG.txt CHANGED
@@ -2,6 +2,14 @@
2
2
  = rufus-scheduler CHANGELOG.txt
3
3
 
4
4
 
5
+ == rufus-scheduler - 1.0.6 not yet released
6
+
7
+ - bug #20476 : no cron jobs on sundays (wday == 0). Fixed.
8
+ (thanks to Manfred Usselmann)
9
+ - todo #19619 : added :thread_name options to Scheduler.new
10
+ - source moved to http://github.com/jmettraux/rufus-scheduler
11
+
12
+
5
13
  == rufus-scheduler - 1.0.5 released 2008/03/17
6
14
 
7
15
  - bug #18363 : constrained precision to 0.0 < p <= 1.0 - s188
data/CREDITS.txt CHANGED
@@ -3,6 +3,7 @@
3
3
 
4
4
  == Feedback
5
5
 
6
+ - Manfred Usselman (no cronjobs on sundays bug)
6
7
  - Michael Goth, tests with precision > 1s
7
8
 
8
9
  * many people gave feedback previously, see
data/README.txt CHANGED
@@ -54,9 +54,9 @@ http://rubyforge.org/tracker/?atid=18584&group_id=4812&func=browse
54
54
 
55
55
  == source
56
56
 
57
- http://rufus.rubyforge.org/svn/trunk/scheduler
57
+ http://github.com/jmettraux/rufus-scheduler
58
58
 
59
- svn checkout http://rufus.rubyforge.org/svn/trunk/scheduler
59
+ git clone git://github.com/jmettraux/rufus-scheduler.git
60
60
 
61
61
 
62
62
  == author
@@ -65,6 +65,11 @@ John Mettraux, jmettraux@gmail.com
65
65
  http://jmettraux.wordpress.com
66
66
 
67
67
 
68
+ == the rest of Rufus
69
+
70
+ http://rufus.rubyforge.org
71
+
72
+
68
73
  == license
69
74
 
70
75
  MIT
data/lib/rufus/otime.rb CHANGED
@@ -8,10 +8,10 @@
8
8
  # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
9
  # copies of the Software, and to permit persons to whom the Software is
10
10
  # furnished to do so, subject to the following conditions:
11
- #
11
+ #
12
12
  # The above copyright notice and this permission notice shall be included in
13
13
  # all copies or substantial portions of the Software.
14
- #
14
+ #
15
15
  # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
16
  # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
17
  # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -34,328 +34,328 @@ require 'date'
34
34
 
35
35
  module Rufus
36
36
 
37
- #TIME_FORMAT = "%Y-%m-%d %H:%M:%S"
38
-
39
- #
40
- # Returns the current time as an ISO date string
41
- #
42
- def Rufus.now
43
-
44
- to_iso8601_date(Time.new())
45
- end
46
-
47
- #
48
- # As the name implies.
49
- #
50
- def Rufus.to_iso8601_date (date)
51
-
52
- if date.kind_of? Float
53
- date = to_datetime(Time.at(date))
54
- elsif date.kind_of? Time
55
- date = to_datetime(date)
56
- elsif not date.kind_of? Date
57
- date = DateTime.parse(date)
58
- end
59
-
60
- s = date.to_s # this is costly
61
- s[10] = " "
62
-
63
- s
64
- end
65
-
66
- #
67
- # the old method we used to generate our ISO datetime strings
68
- #
69
- def Rufus.time_to_iso8601_date (time)
70
-
71
- s = time.getutc().strftime(TIME_FORMAT)
72
- o = time.utc_offset / 3600
73
- o = o.to_s + "00"
74
- o = "0" + o if o.length < 4
75
- o = "+" + o unless o[0..1] == '-'
37
+ #TIME_FORMAT = "%Y-%m-%d %H:%M:%S"
76
38
 
77
- s + " " + o.to_s
78
- end
79
-
80
- #
81
- # Returns a Ruby time
82
- #
83
- def Rufus.to_ruby_time (iso_date)
84
-
85
- DateTime.parse(iso_date)
86
- end
87
-
88
- #def Rufus.parse_date (date)
89
- #end
39
+ #
40
+ # Returns the current time as an ISO date string
41
+ #
42
+ def Rufus.now
90
43
 
91
- #
92
- # equivalent to java.lang.System.currentTimeMillis()
93
- #
94
- def Rufus.current_time_millis
44
+ to_iso8601_date(Time.new())
45
+ end
95
46
 
96
- (Time.new.to_f * 1000).to_i
97
- end
47
+ #
48
+ # As the name implies.
49
+ #
50
+ def Rufus.to_iso8601_date (date)
98
51
 
99
- #
100
- # Turns a string like '1m10s' into a float like '70.0', more formally,
101
- # turns a time duration expressed as a string into a Float instance
102
- # (millisecond count).
103
- #
104
- # w -> week
105
- # d -> day
106
- # h -> hour
107
- # m -> minute
108
- # s -> second
109
- # M -> month
110
- # y -> year
111
- # 'nada' -> millisecond
112
- #
113
- # Some examples :
114
- #
115
- # Rufus.parse_time_string "500" # => 0.5
116
- # Rufus.parse_time_string "1000" # => 1.0
117
- # Rufus.parse_time_string "1h" # => 3600.0
118
- # Rufus.parse_time_string "1h10s" # => 3610.0
119
- # Rufus.parse_time_string "1w2d" # => 777600.0
120
- #
121
- def Rufus.parse_time_string (string)
122
-
123
- string = string.strip
124
-
125
- index = -1
126
- result = 0.0
127
-
128
- number = ""
129
-
130
- loop do
131
-
132
- index = index + 1
133
-
134
- if index >= string.length
135
- result = result + (Float(number) / 1000.0) if number.length > 0
136
- break
137
- end
138
-
139
- c = string[index, 1]
140
-
141
- #if is_digit?(c)
142
- if (c >= "0" and c <= "9")
143
- number = number + c
144
- next
145
- end
146
-
147
- value = Integer(number)
148
- number = ""
149
-
150
- multiplier = DURATIONS[c]
151
-
152
- raise "unknown time char '#{c}'" \
153
- if not multiplier
154
-
155
- result = result + (value * multiplier)
156
- end
157
-
158
- result
52
+ if date.kind_of? Float
53
+ date = to_datetime(Time.at(date))
54
+ elsif date.kind_of? Time
55
+ date = to_datetime(date)
56
+ elsif not date.kind_of? Date
57
+ date = DateTime.parse(date)
159
58
  end
160
59
 
161
- class << self
162
- alias_method :parse_duration_string, :parse_time_string
60
+ s = date.to_s # this is costly
61
+ s[10] = " "
62
+
63
+ s
64
+ end
65
+
66
+ #
67
+ # the old method we used to generate our ISO datetime strings
68
+ #
69
+ def Rufus.time_to_iso8601_date (time)
70
+
71
+ s = time.getutc().strftime(TIME_FORMAT)
72
+ o = time.utc_offset / 3600
73
+ o = o.to_s + "00"
74
+ o = "0" + o if o.length < 4
75
+ o = "+" + o unless o[0..1] == '-'
76
+
77
+ s + " " + o.to_s
78
+ end
79
+
80
+ #
81
+ # Returns a Ruby time
82
+ #
83
+ def Rufus.to_ruby_time (iso_date)
84
+
85
+ DateTime.parse(iso_date)
86
+ end
87
+
88
+ #def Rufus.parse_date (date)
89
+ #end
90
+
91
+ #
92
+ # equivalent to java.lang.System.currentTimeMillis()
93
+ #
94
+ def Rufus.current_time_millis
95
+
96
+ (Time.new.to_f * 1000).to_i
97
+ end
98
+
99
+ #
100
+ # Turns a string like '1m10s' into a float like '70.0', more formally,
101
+ # turns a time duration expressed as a string into a Float instance
102
+ # (millisecond count).
103
+ #
104
+ # w -> week
105
+ # d -> day
106
+ # h -> hour
107
+ # m -> minute
108
+ # s -> second
109
+ # M -> month
110
+ # y -> year
111
+ # 'nada' -> millisecond
112
+ #
113
+ # Some examples :
114
+ #
115
+ # Rufus.parse_time_string "500" # => 0.5
116
+ # Rufus.parse_time_string "1000" # => 1.0
117
+ # Rufus.parse_time_string "1h" # => 3600.0
118
+ # Rufus.parse_time_string "1h10s" # => 3610.0
119
+ # Rufus.parse_time_string "1w2d" # => 777600.0
120
+ #
121
+ def Rufus.parse_time_string (string)
122
+
123
+ string = string.strip
124
+
125
+ index = -1
126
+ result = 0.0
127
+
128
+ number = ""
129
+
130
+ loop do
131
+
132
+ index = index + 1
133
+
134
+ if index >= string.length
135
+ result = result + (Float(number) / 1000.0) if number.length > 0
136
+ break
137
+ end
138
+
139
+ c = string[index, 1]
140
+
141
+ #if is_digit?(c)
142
+ if (c >= "0" and c <= "9")
143
+ number = number + c
144
+ next
145
+ end
146
+
147
+ value = Integer(number)
148
+ number = ""
149
+
150
+ multiplier = DURATIONS[c]
151
+
152
+ raise "unknown time char '#{c}'" \
153
+ if not multiplier
154
+
155
+ result = result + (value * multiplier)
163
156
  end
164
157
 
165
- #
166
- # Returns true if the character c is a digit
167
- #
168
- # (probably better served by a regex)
169
- #
170
- def Rufus.is_digit? (c)
171
-
172
- return false if not c.kind_of?(String)
173
- return false if c.length > 1
174
- (c >= "0" and c <= "9")
158
+ result
159
+ end
160
+
161
+ class << self
162
+ alias_method :parse_duration_string, :parse_time_string
163
+ end
164
+
165
+ #
166
+ # Returns true if the character c is a digit
167
+ #
168
+ # (probably better served by a regex)
169
+ #
170
+ def Rufus.is_digit? (c)
171
+
172
+ return false if not c.kind_of?(String)
173
+ return false if c.length > 1
174
+ (c >= "0" and c <= "9")
175
+ end
176
+
177
+ #
178
+ # conversion methods between Date[Time] and Time
179
+
180
+ #
181
+ # Ruby Cookbook 1st edition p.111
182
+ # http://www.oreilly.com/catalog/rubyckbk/
183
+ # a must
184
+ #
185
+
186
+ #
187
+ # converts a Time instance to a DateTime one
188
+ #
189
+ def Rufus.to_datetime (time)
190
+
191
+ s = time.sec + Rational(time.usec, 10**6)
192
+ o = Rational(time.utc_offset, 3600 * 24)
193
+
194
+ begin
195
+
196
+ DateTime.new(
197
+ time.year,
198
+ time.month,
199
+ time.day,
200
+ time.hour,
201
+ time.min,
202
+ s,
203
+ o)
204
+
205
+ rescue Exception => e
206
+
207
+ DateTime.new(
208
+ time.year,
209
+ time.month,
210
+ time.day,
211
+ time.hour,
212
+ time.min,
213
+ time.sec,
214
+ time.utc_offset)
175
215
  end
176
-
177
- #
178
- # conversion methods between Date[Time] and Time
179
-
180
- #
181
- # Ruby Cookbook 1st edition p.111
182
- # http://www.oreilly.com/catalog/rubyckbk/
183
- # a must
184
- #
185
-
186
- #
187
- # converts a Time instance to a DateTime one
188
- #
189
- def Rufus.to_datetime (time)
190
-
191
- s = time.sec + Rational(time.usec, 10**6)
192
- o = Rational(time.utc_offset, 3600 * 24)
193
-
194
- begin
195
-
196
- DateTime.new(
197
- time.year,
198
- time.month,
199
- time.day,
200
- time.hour,
201
- time.min,
202
- s,
203
- o)
204
-
205
- rescue Exception => e
206
-
207
- DateTime.new(
208
- time.year,
209
- time.month,
210
- time.day,
211
- time.hour,
212
- time.min,
213
- time.sec,
214
- time.utc_offset)
215
- end
216
+ end
217
+
218
+ def Rufus.to_gm_time (dtime)
219
+
220
+ to_ttime(dtime.new_offset, :gm)
221
+ end
222
+
223
+ def Rufus.to_local_time (dtime)
224
+
225
+ to_ttime(dtime.new_offset(DateTime.now.offset-offset), :local)
226
+ end
227
+
228
+ def Rufus.to_ttime (d, method)
229
+
230
+ usec = (d.sec_fraction * 3600 * 24 * (10**6)).to_i
231
+ Time.send(method, d.year, d.month, d.day, d.hour, d.min, d.sec, usec)
232
+ end
233
+
234
+ #
235
+ # Turns a number of seconds into a a time string
236
+ #
237
+ # Rufus.to_duration_string 0 # => '0s'
238
+ # Rufus.to_duration_string 60 # => '1m'
239
+ # Rufus.to_duration_string 3661 # => '1h1m1s'
240
+ # Rufus.to_duration_string 7 * 24 * 3600 # => '1w'
241
+ # Rufus.to_duration_string 30 * 24 * 3600 + 1 # => "4w2d1s"
242
+ #
243
+ # It goes from seconds to the year. Months are not counted (as they
244
+ # are of variable length). Weeks are counted.
245
+ #
246
+ # For 30 days months to be counted, the second parameter of this
247
+ # method can be set to true.
248
+ #
249
+ # Rufus.to_time_string 30 * 24 * 3600 + 1, true # => "1M1s"
250
+ #
251
+ # (to_time_string is an alias for to_duration_string)
252
+ #
253
+ # If a Float value is passed, milliseconds will be displayed without
254
+ # 'marker'
255
+ #
256
+ # Rufus.to_duration_string 0.051 # =>"51"
257
+ # Rufus.to_duration_string 7.051 # =>"7s51"
258
+ # Rufus.to_duration_string 0.120 + 30 * 24 * 3600 + 1 # =>"4w2d1s120"
259
+ #
260
+ # (this behaviour mirrors the one found for parse_time_string()).
261
+ #
262
+ # Options are :
263
+ #
264
+ # * :months, if set to true, months (M) of 30 days will be taken into
265
+ # account when building up the result
266
+ # * :drop_seconds, if set to true, seconds and milliseconds will be trimmed
267
+ # from the result
268
+ #
269
+ def Rufus.to_duration_string (seconds, options={})
270
+
271
+ return (options[:drop_seconds] ? '0m' : '0s') if seconds <= 0
272
+
273
+ h = to_duration_hash seconds, options
274
+
275
+ s = DU_KEYS.inject("") do |r, key|
276
+ count = h[key]
277
+ count = nil if count == 0
278
+ r << "#{count}#{key}" if count
279
+ r
216
280
  end
217
281
 
218
- def Rufus.to_gm_time (dtime)
219
-
220
- to_ttime(dtime.new_offset, :gm)
282
+ ms = h[:ms]
283
+ s << ms.to_s if ms
284
+
285
+ s
286
+ end
287
+
288
+ class << self
289
+ alias_method :to_time_string, :to_duration_string
290
+ end
291
+
292
+ #
293
+ # Turns a number of seconds (integer or Float) into a hash like in :
294
+ #
295
+ # Rufus.to_duration_hash 0.051
296
+ # # => { :ms => "51" }
297
+ # Rufus.to_duration_hash 7.051
298
+ # # => { :s => 7, :ms => "51" }
299
+ # Rufus.to_duration_hash 0.120 + 30 * 24 * 3600 + 1
300
+ # # => { :w => 4, :d => 2, :s => 1, :ms => "120" }
301
+ #
302
+ # This method is used by to_duration_string (to_time_string) behind
303
+ # the scene.
304
+ #
305
+ # Options are :
306
+ #
307
+ # * :months, if set to true, months (M) of 30 days will be taken into
308
+ # account when building up the result
309
+ # * :drop_seconds, if set to true, seconds and milliseconds will be trimmed
310
+ # from the result
311
+ #
312
+ def Rufus.to_duration_hash (seconds, options={})
313
+
314
+ h = {}
315
+
316
+ if seconds.is_a?(Float)
317
+ h[:ms] = (seconds % 1 * 1000).to_i
318
+ seconds = seconds.to_i
221
319
  end
222
320
 
223
- def Rufus.to_local_time (dtime)
224
-
225
- to_ttime(dtime.new_offset(DateTime.now.offset-offset), :local)
321
+ if options[:drop_seconds]
322
+ h.delete :ms
323
+ seconds = (seconds - seconds % 60)
226
324
  end
227
325
 
228
- def Rufus.to_ttime (d, method)
326
+ durations = options[:months] ? DURATIONS2M : DURATIONS2
229
327
 
230
- usec = (d.sec_fraction * 3600 * 24 * (10**6)).to_i
231
- Time.send(method, d.year, d.month, d.day, d.hour, d.min, d.sec, usec)
232
- end
328
+ durations.each do |key, duration|
233
329
 
234
- #
235
- # Turns a number of seconds into a a time string
236
- #
237
- # Rufus.to_duration_string 0 # => '0s'
238
- # Rufus.to_duration_string 60 # => '1m'
239
- # Rufus.to_duration_string 3661 # => '1h1m1s'
240
- # Rufus.to_duration_string 7 * 24 * 3600 # => '1w'
241
- # Rufus.to_duration_string 30 * 24 * 3600 + 1 # => "4w2d1s"
242
- #
243
- # It goes from seconds to the year. Months are not counted (as they
244
- # are of variable length). Weeks are counted.
245
- #
246
- # For 30 days months to be counted, the second parameter of this
247
- # method can be set to true.
248
- #
249
- # Rufus.to_time_string 30 * 24 * 3600 + 1, true # => "1M1s"
250
- #
251
- # (to_time_string is an alias for to_duration_string)
252
- #
253
- # If a Float value is passed, milliseconds will be displayed without
254
- # 'marker'
255
- #
256
- # Rufus.to_duration_string 0.051 # =>"51"
257
- # Rufus.to_duration_string 7.051 # =>"7s51"
258
- # Rufus.to_duration_string 0.120 + 30 * 24 * 3600 + 1 # =>"4w2d1s120"
259
- #
260
- # (this behaviour mirrors the one found for parse_time_string()).
261
- #
262
- # Options are :
263
- #
264
- # * :months, if set to true, months (M) of 30 days will be taken into
265
- # account when building up the result
266
- # * :drop_seconds, if set to true, seconds and milliseconds will be trimmed
267
- # from the result
268
- #
269
- def Rufus.to_duration_string (seconds, options={})
270
-
271
- return (options[:drop_seconds] ? '0m' : '0s') if seconds <= 0
272
-
273
- h = to_duration_hash seconds, options
274
-
275
- s = DU_KEYS.inject("") do |r, key|
276
- count = h[key]
277
- count = nil if count == 0
278
- r << "#{count}#{key}" if count
279
- r
280
- end
281
-
282
- ms = h[:ms]
283
- s << ms.to_s if ms
284
-
285
- s
286
- end
330
+ count = seconds / duration
331
+ seconds = seconds % duration
287
332
 
288
- class << self
289
- alias_method :to_time_string, :to_duration_string
333
+ h[key.to_sym] = count if count > 0
290
334
  end
291
335
 
292
- #
293
- # Turns a number of seconds (integer or Float) into a hash like in :
294
- #
295
- # Rufus.to_duration_hash 0.051
296
- # # => { :ms => "51" }
297
- # Rufus.to_duration_hash 7.051
298
- # # => { :s => 7, :ms => "51" }
299
- # Rufus.to_duration_hash 0.120 + 30 * 24 * 3600 + 1
300
- # # => { :w => 4, :d => 2, :s => 1, :ms => "120" }
301
- #
302
- # This method is used by to_duration_string (to_time_string) behind
303
- # the scene.
304
- #
305
- # Options are :
306
- #
307
- # * :months, if set to true, months (M) of 30 days will be taken into
308
- # account when building up the result
309
- # * :drop_seconds, if set to true, seconds and milliseconds will be trimmed
310
- # from the result
311
- #
312
- def Rufus.to_duration_hash (seconds, options={})
313
-
314
- h = {}
315
-
316
- if seconds.is_a?(Float)
317
- h[:ms] = (seconds % 1 * 1000).to_i
318
- seconds = seconds.to_i
319
- end
320
-
321
- if options[:drop_seconds]
322
- h.delete :ms
323
- seconds = (seconds - seconds % 60)
324
- end
325
-
326
- durations = options[:months] ? DURATIONS2M : DURATIONS2
327
-
328
- durations.each do |key, duration|
329
-
330
- count = seconds / duration
331
- seconds = seconds % duration
332
-
333
- h[key.to_sym] = count if count > 0
334
- end
335
-
336
- h
336
+ h
337
+ end
338
+
339
+ protected
340
+
341
+ DURATIONS2M = [
342
+ [ "y", 365 * 24 * 3600 ],
343
+ [ "M", 30 * 24 * 3600 ],
344
+ [ "w", 7 * 24 * 3600 ],
345
+ [ "d", 24 * 3600 ],
346
+ [ "h", 3600 ],
347
+ [ "m", 60 ],
348
+ [ "s", 1 ]
349
+ ]
350
+ DURATIONS2 = DURATIONS2M.dup
351
+ DURATIONS2.delete_at 1
352
+
353
+ DURATIONS = DURATIONS2M.inject({}) do |r, (k, v)|
354
+ r[k] = v
355
+ r
337
356
  end
338
357
 
339
- protected
340
-
341
- DURATIONS2M = [
342
- [ "y", 365 * 24 * 3600 ],
343
- [ "M", 30 * 24 * 3600 ],
344
- [ "w", 7 * 24 * 3600 ],
345
- [ "d", 24 * 3600 ],
346
- [ "h", 3600 ],
347
- [ "m", 60 ],
348
- [ "s", 1 ]
349
- ]
350
- DURATIONS2 = DURATIONS2M.dup
351
- DURATIONS2.delete_at 1
352
-
353
- DURATIONS = DURATIONS2M.inject({}) do |r, (k, v)|
354
- r[k] = v
355
- r
356
- end
357
-
358
- DU_KEYS = DURATIONS2M.collect { |k, v| k.to_sym }
358
+ DU_KEYS = DURATIONS2M.collect { |k, v| k.to_sym }
359
359
 
360
360
  end
361
361