rufus-scheduler 1.0.3 → 1.0.4

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,8 +2,9 @@
2
2
  = rufus-scheduler CHANGELOG.txt
3
3
 
4
4
 
5
- == rufus-scheduler - 1.0.3 released 2008/02/29
5
+ == rufus-scheduler - 1.0.4 released 2008/02/29
6
6
 
7
+ - todo #18474 : implemented to_duration_array() - s183
7
8
  - todo #18472 : added Rufus::to_time_string - s181
8
9
 
9
10
 
data/lib/rufus/otime.rb CHANGED
@@ -132,17 +132,14 @@ module Rufus
132
132
  index = index + 1
133
133
 
134
134
  if index >= string.length
135
- if number.length > 0
136
- result = result + (Float(number) / 1000.0)
137
- end
135
+ result = result + (Float(number) / 1000.0) if number.length > 0
138
136
  break
139
137
  end
140
138
 
141
139
  c = string[index, 1]
142
140
 
143
- # TODO : investigate something better than this is_digit?
144
-
145
- if is_digit?(c)
141
+ #if is_digit?(c)
142
+ if (c >= "0" and c <= "9")
146
143
  number = number + c
147
144
  next
148
145
  end
@@ -161,8 +158,14 @@ module Rufus
161
158
  result
162
159
  end
163
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
164
167
  #
165
- # returns true if the character c is a digit
168
+ # (probably better served by a regex)
166
169
  #
167
170
  def Rufus.is_digit? (c)
168
171
 
@@ -201,14 +204,6 @@ module Rufus
201
204
 
202
205
  rescue Exception => e
203
206
 
204
- #puts
205
- #puts OpenWFE::exception_to_s(e)
206
- #puts
207
- #puts \
208
- # "\n Date.new() problem. Params :"+
209
- # "\n....y:#{time.year} M:#{time.month} d:#{time.day} "+
210
- # "h:#{time.hour} m:#{time.min} s:#{s} o:#{o}"
211
-
212
207
  DateTime.new(
213
208
  time.year,
214
209
  time.month,
@@ -239,11 +234,11 @@ module Rufus
239
234
  #
240
235
  # Turns a number of seconds into a a time string
241
236
  #
242
- # Rufus.to_time_string 0 # => '0s'
243
- # Rufus.to_time_string 60 # => '1m'
244
- # Rufus.to_time_string 3661 # => '1h1m1s'
245
- # Rufus.to_time_string 7 * 24 * 3600 # => '1w'
246
- # Rufus.to_time_string 30 * 24 * 3600 + 1 # => "4w2d1s"
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"
247
242
  #
248
243
  # It goes from seconds to the year. Months are not counted (as they
249
244
  # are of variable length). Weeks are counted.
@@ -253,70 +248,114 @@ module Rufus
253
248
  #
254
249
  # Rufus.to_time_string 30 * 24 * 3600 + 1, true # => "1M1s"
255
250
  #
251
+ # (to_time_string is an alias for to_duration_string)
252
+ #
256
253
  # If a Float value is passed, milliseconds will be displayed without
257
254
  # 'marker'
258
255
  #
259
- # Rufus.to_time_string 0.051 #=>"51"
260
- # Rufus.to_time_string 7.051 #=>"7s51"
261
- # Rufus.to_time_string 0.120 + 30 * 24 * 3600 + 1 #=>"4w2d1s120"
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"
262
259
  #
263
260
  # (this behaviour mirrors the one found for parse_time_string()).
264
261
  #
265
- def Rufus.to_time_string (seconds, months=false)
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={})
266
270
 
267
271
  return '0s' if seconds <= 0
268
272
 
269
- ms = nil
273
+ h = to_duration_hash seconds, options
270
274
 
271
- if seconds.is_a?(Float)
272
- ms = (seconds % 1 * 1000).to_i
273
- seconds = seconds.to_i
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
274
280
  end
275
281
 
276
- durations = months ? DURATIONS2w : DURATIONS2
282
+ ms = h[:ms]
283
+ s << ms.to_s if ms
277
284
 
278
- s = durations.inject([ seconds, "" ]) { |r, d|
285
+ s
286
+ end
279
287
 
280
- #puts "result : " + r.inspect
281
- #puts "duration : " + d.inspect
288
+ class << self
289
+ alias_method :to_time_string, :to_duration_string
290
+ end
282
291
 
283
- sec, str = r
284
- s, d = d
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 = {}
285
315
 
286
- count = sec / d
287
- rest = sec % d
316
+ if seconds.is_a?(Float)
317
+ h[:ms] = (seconds % 1 * 1000).to_i
318
+ seconds = seconds.to_i
319
+ end
288
320
 
289
- str << "#{count}#{s}" if count > 0
321
+ if options[:drop_seconds]
322
+ h.delete :ms
323
+ seconds = (seconds - seconds % 60)
324
+ end
290
325
 
291
- [ rest, str ]
292
- }[1]
326
+ durations = options[:months] ? DURATIONS2M : DURATIONS2
293
327
 
294
- "#{s}#{ms}"
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
295
337
  end
296
338
 
297
339
  protected
298
340
 
299
- DURATIONS = {
300
- "y" => 365 * 24 * 3600,
301
- "M" => 30 * 24 * 3600,
302
- "w" => 7 * 24 * 3600,
303
- "d" => 24 * 3600,
304
- "h" => 3600,
305
- "m" => 60,
306
- "s" => 1
307
- }
308
-
309
- DURATIONS2w = [
310
- [ "y", DURATIONS["y"] ],
311
- [ "M", DURATIONS["M"] ],
312
- [ "w", DURATIONS["w"] ],
313
- [ "d", DURATIONS["d"] ],
314
- [ "h", DURATIONS["h"] ],
315
- [ "m", DURATIONS["m"] ],
316
- [ "s", DURATIONS["s"] ]
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 ]
317
349
  ]
318
- DURATIONS2 = DURATIONS2w.dup
350
+ DURATIONS2 = DURATIONS2M.dup
319
351
  DURATIONS2.delete_at 1
320
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 }
359
+
321
360
  end
322
361
 
data/test/time_1_test.rb CHANGED
@@ -36,23 +36,40 @@ class Time1Test < Test::Unit::TestCase
36
36
 
37
37
  def test_1
38
38
 
39
- tts 30 * 24 * 3600 + 1, "1M1s", true
39
+ tts 30 * 24 * 3600 + 1, "1M1s", { :months => true }
40
40
  end
41
41
 
42
42
  def test_2
43
43
 
44
44
  tts 0.120 + 30 * 24 * 3600 + 1, "4w2d1s120"
45
45
  tts 0.130, "130"
46
+ tts 61.127, "1m", { :drop_seconds => true }
47
+ end
48
+
49
+ def test_3
50
+
51
+ tdh 0, {}
52
+ tdh 0.128, { :ms => 128 }
53
+ tdh 60.127, { :m => 1, :ms => 127 }
54
+ tdh 61.127, { :m => 1, :s => 1, :ms => 127 }
55
+ tdh 61.127, { :m => 1 }, { :drop_seconds => true }
46
56
  end
47
57
 
48
58
  protected
49
59
 
50
- def tts (seconds, time_string, months=false)
60
+ def tts (seconds, time_string, options={})
51
61
 
52
62
  assert_equal(
53
63
  time_string,
54
- Rufus::to_time_string(seconds, months),
64
+ Rufus::to_time_string(seconds, options),
55
65
  "#{seconds} seconds did not map to '#{time_string}'")
56
66
  end
57
67
 
68
+ def tdh (seconds, time_hash, options={})
69
+
70
+ assert_equal(
71
+ time_hash,
72
+ Rufus::to_duration_hash(seconds, options))
73
+ end
74
+
58
75
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rufus-scheduler
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Mettraux