partial-date 1.1.8 → 1.1.9
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog.markdown +5 -0
- data/lib/partial-date/date.rb +30 -8
- data/lib/partial-date/version.rb +1 -1
- data/spec/date_spec.rb +18 -13
- metadata +1 -1
data/ChangeLog.markdown
CHANGED
data/lib/partial-date/date.rb
CHANGED
@@ -39,7 +39,7 @@ module PartialDate
|
|
39
39
|
|
40
40
|
FORMATS = { :default => "%Y-%m-%d", :short => "%d %m %Y", :medium => "%d %b %Y", :long => "%d %B %Y", :number => "%Y%m%d", }
|
41
41
|
FORMAT_METHODS = {
|
42
|
-
"%Y" => lambda { |d| (d.year != 0) ? d.year.to_s.rjust(4, '0') : ""
|
42
|
+
"%Y" => lambda { |d| (d.year != 0) ? d.year.to_s.rjust(4, '0') : ""},
|
43
43
|
"%m" => lambda { |d| (d.month != 0) ? d.month.to_s.rjust(2, '0') : "" },
|
44
44
|
"%b" => lambda { |d| (d.month != 0) ? ABBR_MONTH_NAMES[d.month - 1] : "" },
|
45
45
|
"%B" => lambda { |d| (d.month != 0) ? MONTH_NAMES[d.month - 1] : "" },
|
@@ -266,22 +266,44 @@ module PartialDate
|
|
266
266
|
result.gsub!( key, value.call( self )) if result.include? key
|
267
267
|
end
|
268
268
|
|
269
|
-
result.strip!
|
270
269
|
# Remove any leading "/-," chars.
|
271
270
|
# Remove double white spaces.
|
272
271
|
# Remove any duplicate "/-," chars and replace with the single char.
|
273
272
|
# Remove any trailing "/-," chars.
|
274
|
-
# Anything else -
|
275
|
-
|
273
|
+
# Anything else - you're on your own ;-)
|
274
|
+
lead_trim = (year != 0 && format.lstrip.start_with?("%Y")) ? /\A[\/\,\s]+/ : /\A[\/\,\-\s]+/
|
275
|
+
result = result.gsub(lead_trim, '').gsub(/\s\s/, ' ').gsub(/[\/\-\,]([\/\-\,])/, '\1').gsub(/[\/\,\-\s]+\z/, '')
|
276
276
|
end
|
277
277
|
|
278
|
-
# Public: Spaceship operator for date comparisons. Comparisons
|
279
|
-
# made
|
280
|
-
#
|
278
|
+
# Public: Spaceship operator for date comparisons. Comparisons
|
279
|
+
# are made by cascading down from year, to month to day. This
|
280
|
+
# should be faster than passing to self.value <=> other_date.value
|
281
|
+
# since the integer value attribute requires multiplication to
|
282
|
+
# calculate.
|
281
283
|
#
|
282
284
|
# Returns -1, 1, or 0
|
283
285
|
def <=>(other_date)
|
284
|
-
|
286
|
+
if self.year < other_date.year
|
287
|
+
return -1
|
288
|
+
elsif self.year > other_date.year
|
289
|
+
return 1
|
290
|
+
else
|
291
|
+
if self.month < other_date.month
|
292
|
+
return -1
|
293
|
+
elsif
|
294
|
+
self.month > other_date.month
|
295
|
+
return 1
|
296
|
+
else
|
297
|
+
if self.day < other_date.day
|
298
|
+
return -1
|
299
|
+
elsif
|
300
|
+
self.day > other_date.day
|
301
|
+
return 1
|
302
|
+
else
|
303
|
+
return 0
|
304
|
+
end
|
305
|
+
end
|
306
|
+
end
|
285
307
|
end
|
286
308
|
|
287
309
|
|
data/lib/partial-date/version.rb
CHANGED
data/spec/date_spec.rb
CHANGED
@@ -47,20 +47,7 @@ describe PartialDate::Date do
|
|
47
47
|
expect {new_date = PartialDate::Date.new {|d| d.value = 10485761232 }}.to raise_error(PartialDate::PartialDateError, "Date value must be an integer betwen -10485761231 and 10485761231")
|
48
48
|
end
|
49
49
|
|
50
|
-
it "should return a string representation of date in the correct format" do
|
51
|
-
new_date = PartialDate::Date.new {|d| d.year = 2012; d.month = 12; d.day = 31}
|
52
|
-
new_date.to_s.should match(/\A\d{4}-\d{2}-\d{2}\z/)
|
53
|
-
end
|
54
|
-
|
55
|
-
# it "should return a string representation of a partial date in the correct format" do
|
56
|
-
# new_date = PartialDate::Date.new {|d| d.year = 2012; d.month = 12}
|
57
|
-
# new_date.to_s.should match(/\\A\\d{4}-\\d{2}\\z/)
|
58
|
-
# end
|
59
50
|
|
60
|
-
# it "should return a string representation of a partial date in the correct format" do
|
61
|
-
# new_date = PartialDate::Date.new {|d| d.year = 2012}
|
62
|
-
# new_date.to_s.should match(/\\A\\d{4}\\z/)
|
63
|
-
# end
|
64
51
|
|
65
52
|
describe "Sign" do
|
66
53
|
it "should be set to 1" do
|
@@ -91,6 +78,11 @@ describe PartialDate::Date do
|
|
91
78
|
expect {date.year = 1048577 }.to raise_error(PartialDate::YearError, "Year must be an integer from -1048576 to 1048576")
|
92
79
|
end
|
93
80
|
|
81
|
+
it "should allow a negative year to be set from the block" do
|
82
|
+
date = PartialDate::Date.new { |d| d.year = -1000 }
|
83
|
+
date.year.should == -1000
|
84
|
+
end
|
85
|
+
|
94
86
|
it "should return a postive year when a positive year is set" do
|
95
87
|
date.year = 2050
|
96
88
|
date.year.should == 2050
|
@@ -238,4 +230,17 @@ describe PartialDate::Date do
|
|
238
230
|
a.should be == b
|
239
231
|
end
|
240
232
|
end
|
233
|
+
|
234
|
+
describe "String formats" do
|
235
|
+
|
236
|
+
it "should return a string representation of date in the correct format" do
|
237
|
+
new_date = PartialDate::Date.new {|d| d.year = 2012; d.month = 12; d.day = 31}
|
238
|
+
new_date.to_s.should match(/\A\d{4}-\d{2}-\d{2}\z/)
|
239
|
+
end
|
240
|
+
|
241
|
+
it "should have a minus sign in front of negative dates" do
|
242
|
+
date = PartialDate::Date.new { |d| d.year = -1000; d.month = 12; d.day = 1}
|
243
|
+
date.to_s.should start_with("-")
|
244
|
+
end
|
245
|
+
end
|
241
246
|
end
|