datet 0.0.2 → 0.0.3
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/VERSION +1 -1
- data/datet.gemspec +1 -1
- data/lib/datet.rb +33 -39
- data/spec/datet_spec.rb +39 -2
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.3
|
data/datet.gemspec
CHANGED
data/lib/datet.rb
CHANGED
@@ -48,13 +48,23 @@ class Datet
|
|
48
48
|
@@days_in_months = [nil, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
|
49
49
|
|
50
50
|
#Initializes the object. Default is the current time. A time-object can be given.
|
51
|
+
#=Examples
|
52
|
+
# datet = Datet.new #=> Datet-object with the current date and time.
|
53
|
+
#
|
54
|
+
# time = Time.new
|
55
|
+
# datet = Datet.new(time) #=> Datet-object with the date and time from the given Time-object.
|
56
|
+
#
|
57
|
+
# datet = Datet.new(1985, 06, 17) #=> Datet-object with the date 1985-06-17.
|
58
|
+
# datet = Datet.new(1985, 06, 17, 10) #=> Datet-object with the date 1985-06-17 10:00:00
|
59
|
+
#
|
60
|
+
# datet = Datet.new(1985, 06, 35) #=> Datet-object with the date 1985-07-05 00:00:00. Notice the invalid day of 35 was automatically converted to the right date.
|
51
61
|
def initialize(*args)
|
52
62
|
if args.length == 1 and args.first.is_a?(Time)
|
53
63
|
self.update_from_time(args.first)
|
54
64
|
return nil
|
55
65
|
elsif args.empty?
|
56
|
-
|
57
|
-
|
66
|
+
self.update_from_time(Time.now)
|
67
|
+
return nil
|
58
68
|
end
|
59
69
|
|
60
70
|
days_left = 0
|
@@ -170,6 +180,8 @@ class Datet
|
|
170
180
|
end
|
171
181
|
|
172
182
|
#Returns a new 'Time'-object based on the data of the 'Datet'-object.
|
183
|
+
#=Examples
|
184
|
+
# Datet.new.time #=> 2012-07-13 16:14:27 +0200
|
173
185
|
def time
|
174
186
|
return Time.new(@t_year, @t_month, @t_day, @t_hour, @t_min, @t_sec)
|
175
187
|
end
|
@@ -212,18 +224,12 @@ class Datet
|
|
212
224
|
cur_usecs = @t_usec
|
213
225
|
next_usec = cur_usecs + usecs
|
214
226
|
|
215
|
-
if next_usec >= 1000000
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
self.add_usecs(usecs_left) if usecs_left > 0
|
220
|
-
elsif next_usec < 0
|
221
|
-
@t_usec = 99999
|
222
|
-
self.add_secs(-1)
|
223
|
-
usecs_left = usecs + cur_usecs + 1
|
224
|
-
self.add_usecs(usecs_left) if usecs_left > 0
|
227
|
+
if next_usec >= 1000000 or next_usec <= -1000000
|
228
|
+
secs = (next_usec.to_f / 1000000.0).to_f.floor
|
229
|
+
@t_usec = next_usec - (secs * 1000000)
|
230
|
+
self.add_secs(secs)
|
225
231
|
else
|
226
|
-
|
232
|
+
@t_usec = next_usec
|
227
233
|
end
|
228
234
|
|
229
235
|
return self
|
@@ -233,18 +239,12 @@ class Datet
|
|
233
239
|
def add_secs(secs = 1)
|
234
240
|
secs = secs.to_i
|
235
241
|
cur_secs = @t_sec
|
236
|
-
next_sec
|
242
|
+
next_sec = cur_secs + secs
|
237
243
|
|
238
|
-
if next_sec >= 60
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
self.add_secs(secs_left) if secs_left > 0
|
243
|
-
elsif next_sec < 0
|
244
|
-
@t_sec = 59
|
245
|
-
self.add_mins(-1)
|
246
|
-
secs_left = secs + cur_secs + 1
|
247
|
-
self.add_secs(secs_left) if secs_left > 0
|
244
|
+
if next_sec >= 60 or next_sec <= -60
|
245
|
+
mins = (next_sec.to_f / 60.0).floor
|
246
|
+
@t_sec = next_sec - (mins * 60)
|
247
|
+
self.add_mins(mins)
|
248
248
|
else
|
249
249
|
@t_sec = next_sec
|
250
250
|
end
|
@@ -295,7 +295,7 @@ class Datet
|
|
295
295
|
self.add_hours(hours_left) if hours_left > 0
|
296
296
|
elsif next_hour < 0
|
297
297
|
@t_hour = 23
|
298
|
-
.add_days(-1)
|
298
|
+
self.add_days(-1)
|
299
299
|
hours_left = hours + cur_hour + 1
|
300
300
|
self.add_hours(hours_left) if hours_left < 0
|
301
301
|
else
|
@@ -312,7 +312,6 @@ class Datet
|
|
312
312
|
# datet.time #=> 2012-06-01 17:42:27 +0200
|
313
313
|
def add_days(days = 1)
|
314
314
|
days = days.to_i
|
315
|
-
return self if days == 0
|
316
315
|
dim = self.days_in_month
|
317
316
|
cur_day = @t_day
|
318
317
|
next_day = cur_day + days
|
@@ -321,13 +320,11 @@ class Datet
|
|
321
320
|
@t_day = 1
|
322
321
|
self.add_months(1)
|
323
322
|
days_left = (days - 1) - (dim - cur_day)
|
324
|
-
self.add_days(days_left) if days_left
|
325
|
-
elsif next_day
|
326
|
-
self.date = 1
|
323
|
+
self.add_days(days_left) if days_left != 0
|
324
|
+
elsif next_day < 0
|
327
325
|
self.add_months(-1)
|
328
|
-
|
329
326
|
@t_day = self.days_in_month
|
330
|
-
days_left = days +
|
327
|
+
days_left = days + cur_day
|
331
328
|
self.add_days(days_left) if days_left != 0
|
332
329
|
else
|
333
330
|
@t_day = next_day
|
@@ -347,12 +344,10 @@ class Datet
|
|
347
344
|
cur_day = @t_day
|
348
345
|
next_month = cur_month + months.to_i
|
349
346
|
|
350
|
-
if next_month > 12
|
351
|
-
|
352
|
-
@
|
353
|
-
self.add_years(
|
354
|
-
months_left = (months - 1) - (12 - cur_month)
|
355
|
-
self.add_months(months_left) if months_left > 0
|
347
|
+
if next_month > 12 or next_month < 0
|
348
|
+
years = (next_month.to_f / 12.0).floor
|
349
|
+
@t_month = next_month - (years * 12)
|
350
|
+
self.add_years(years)
|
356
351
|
elsif next_month < 1
|
357
352
|
@t_month = 12
|
358
353
|
self.add_years(-1)
|
@@ -378,8 +373,7 @@ class Datet
|
|
378
373
|
# datet.add_years(3)
|
379
374
|
# datet.time #> 2014-08-01 17:42:27 +0200
|
380
375
|
def add_years(years = 1)
|
381
|
-
|
382
|
-
@t_year = next_year
|
376
|
+
@t_year = @t_year + years.to_i
|
383
377
|
return self
|
384
378
|
end
|
385
379
|
|
data/spec/datet_spec.rb
CHANGED
@@ -90,6 +90,43 @@ describe "Datet" do
|
|
90
90
|
end
|
91
91
|
|
92
92
|
it "should be able to handle invalid timestamps" do
|
93
|
+
datet = Datet.new(2012, 7, 13, 16, 15, 04)
|
94
|
+
raise "Expected dbstr to be '2012-07-13 16:15:04' but it wasnt: '#{datet.dbstr}'." if datet.dbstr != "2012-07-13 16:15:04"
|
95
|
+
|
96
|
+
#Test 'add_secs'.
|
97
|
+
datet.add_secs(120)
|
98
|
+
raise "Expected dbstr to be '2012-07-13 16:17:04' but it wasnt: '#{datet.dbstr}'." if datet.dbstr != "2012-07-13 16:17:04"
|
99
|
+
|
100
|
+
#Test 'add_days'.
|
101
|
+
datet.add_days(60)
|
102
|
+
raise "Expected dbstr to be '2012-09-11 16:17:04' but it wasnt: '#{datet.dbstr}'." if datet.dbstr != "2012-09-11 16:17:04"
|
103
|
+
|
104
|
+
#Test 'add_usecs'.
|
105
|
+
datet.add_usecs(10000000)
|
106
|
+
raise "Expected dbstr to be '2012-09-11 16:17:14' but it wasnt: '#{datet.dbstr}'." if datet.dbstr != "2012-09-11 16:17:14"
|
107
|
+
datet.add_usecs(-10000000)
|
108
|
+
raise "Expected dbstr to be '2012-09-11 16:17:04' but it wasnt: '#{datet.dbstr}'." if datet.dbstr != "2012-09-11 16:17:04"
|
109
|
+
|
110
|
+
#Test negative 'add_secs'.
|
111
|
+
datet.add_secs(-125)
|
112
|
+
raise "Expected dbstr to be '2012-09-11 16:14:59' but it wasnt: '#{datet.dbstr}'." if datet.dbstr != "2012-09-11 16:14:59"
|
113
|
+
|
114
|
+
#Test negative 'add_days'.
|
115
|
+
datet.add_days(-62)
|
116
|
+
raise "Expected dbstr to be '2012-07-11 16:14:59' but it wasnt: '#{datet.dbstr}'." if datet.dbstr != "2012-07-11 16:14:59"
|
117
|
+
|
118
|
+
#Test 'add_months'.
|
119
|
+
datet.add_months(25)
|
120
|
+
raise "Expected dbstr to be '2014-08-11 16:14:59' but it wasnt: '#{datet.dbstr}'." if datet.dbstr != "2014-08-11 16:14:59"
|
121
|
+
datet.add_months(-25)
|
122
|
+
raise "Expected dbstr to be '2012-07-11 16:14:59' but it wasnt: '#{datet.dbstr}'." if datet.dbstr != "2012-07-11 16:14:59"
|
123
|
+
|
124
|
+
#Test 'add_years'.
|
125
|
+
datet.add_years(12)
|
126
|
+
raise "Expected dbstr to be '2024-07-11 16:14:59' but it wasnt: '#{datet.dbstr}'." if datet.dbstr != "2024-07-11 16:14:59"
|
127
|
+
datet.add_years(-12)
|
128
|
+
raise "Expected dbstr to be '2012-07-11 16:14:59' but it wasnt: '#{datet.dbstr}'." if datet.dbstr != "2012-07-11 16:14:59"
|
129
|
+
|
93
130
|
datet = Datet.new(2012, 3, 40)
|
94
131
|
raise "Expected dbstr to be '2012-04-09' but it wasnt: '#{datet.dbstr(:time => false)}'." if datet.dbstr(:time => false) != "2012-04-09"
|
95
132
|
|
@@ -103,10 +140,10 @@ describe "Datet" do
|
|
103
140
|
raise "Expected dbstr to be '1985-06-18 05:08:00' but it wasnt: '#{datet.dbstr}'." if datet.dbstr != "1985-06-18 05:08:00"
|
104
141
|
|
105
142
|
datet = Datet.new(1985, 6, 17, 28, 68, 68)
|
106
|
-
raise "Expected dbstr to be '1985-06-18 05:09:
|
143
|
+
raise "Expected dbstr to be '1985-06-18 05:09:09' but it wasnt: '#{datet.dbstr}'." if datet.dbstr != "1985-06-18 05:09:09"
|
107
144
|
|
108
145
|
datet = Datet.new(1985, 6, 17, 28, 68, 68, 1000008)
|
109
|
-
raise "Expected dbstr to be '1985-06-18 05:09:
|
146
|
+
raise "Expected dbstr to be '1985-06-18 05:09:10' but it wasnt: '#{datet.dbstr}'." if datet.dbstr != "1985-06-18 05:09:10"
|
110
147
|
end
|
111
148
|
|
112
149
|
it "should be able to convert day-strings into numbers" do
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: datet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.3
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Kasper Johansen
|
@@ -104,7 +104,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
104
104
|
requirements:
|
105
105
|
- - ">="
|
106
106
|
- !ruby/object:Gem::Version
|
107
|
-
hash:
|
107
|
+
hash: -1455855206107876040
|
108
108
|
segments:
|
109
109
|
- 0
|
110
110
|
version: "0"
|