home_run 0.9.0-x86-mswin32-60 → 0.9.1-x86-mswin32-60
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 +46 -0
- data/README.rdoc +45 -33
- data/Rakefile +26 -67
- data/bench/cpu_bench.rb +1 -54
- data/bench/cpu_bench_util.rb +55 -0
- data/bench/parser_bench.rb +20 -0
- data/bin/home_run +14 -17
- data/default.mspec +1 -1
- data/ext/{date_ext.c → date_ext/date_ext.c} +95 -208
- data/ext/date_ext/date_ext.h +187 -0
- data/ext/date_ext/date_parser.c +852 -0
- data/ext/date_ext/date_parser.rl +352 -0
- data/ext/{datetime.c → date_ext/datetime.c} +120 -77
- data/ext/date_ext/extconf.rb +6 -0
- data/lib/1.8/date_ext.so +0 -0
- data/lib/1.9/date_ext.so +0 -0
- data/{ext → lib}/date/format.rb +1 -1
- data/lib/date.rb +7 -0
- data/lib/home_run.rb +5 -0
- data/spec/date/allocate_spec.rb +7 -0
- data/spec/date/encoding_spec.rb +42 -0
- data/spec/date/limits_spec.rb +121 -0
- data/spec/date/parse_spec.rb +154 -0
- data/spec/date/parsing_spec.rb +11 -0
- data/spec/date/step_spec.rb +22 -0
- data/spec/date/strptime_spec.rb +35 -3
- data/spec/datetime/add_spec.rb +4 -4
- data/spec/datetime/allocate_spec.rb +7 -0
- data/spec/datetime/encoding_spec.rb +42 -0
- data/spec/datetime/limits_spec.rb +170 -0
- data/spec/datetime/parse_spec.rb +73 -0
- data/spec/datetime/parsing_spec.rb +4 -0
- data/spec/datetime/step_spec.rb +22 -0
- data/spec/datetime/strptime_spec.rb +10 -0
- metadata +24 -14
- data/ext/1.8/date_ext.so +0 -0
- data/ext/1.9/date_ext.so +0 -0
- data/ext/date.rb +0 -7
- data/ext/date_parser.c +0 -367
- data/ext/date_parser.rl +0 -134
- data/ext/extconf.rb +0 -6
@@ -0,0 +1,121 @@
|
|
1
|
+
require File.expand_path('../../spec_helper', __FILE__)
|
2
|
+
|
3
|
+
describe "Date limits: " do
|
4
|
+
before do
|
5
|
+
@d1 = Date.jd(Date::JULIAN - 1)
|
6
|
+
@d2 = Date.jd(Date::GREGORIAN + 1)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "#+ and #- should raise RangeError for dates that are too large or small" do
|
10
|
+
proc{Date.jd(@d1.jd) + 1}.should raise_error(RangeError)
|
11
|
+
proc{Date.jd(@d2.jd) - 1}.should raise_error(RangeError)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "#<< and #>> should raise RangeError for dates that are too large or small" do
|
15
|
+
proc{Date.jd(@d1.jd) >> 1}.should raise_error(RangeError)
|
16
|
+
proc{Date.jd(@d2.jd) << 1}.should raise_error(RangeError)
|
17
|
+
end
|
18
|
+
|
19
|
+
ruby_version_is "1.9" do
|
20
|
+
it "#next_year and #prev_year should raise RangeError for dates that are too large or small" do
|
21
|
+
proc{Date.jd(@d1.jd).next_year}.should raise_error(RangeError)
|
22
|
+
proc{Date.jd(@d2.jd).prev_year}.should raise_error(RangeError)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
it ".jd should raise RangeError for dates that are too large or small" do
|
27
|
+
proc{Date.jd(@d1.jd + 1)}.should raise_error(RangeError)
|
28
|
+
proc{Date.jd(@d2.jd - 1)}.should raise_error(RangeError)
|
29
|
+
end
|
30
|
+
|
31
|
+
it ".jd should not raise for dates that are not too large or small" do
|
32
|
+
proc{Date.jd(@d1.jd)}.should_not raise_error
|
33
|
+
proc{Date.jd(@d2.jd)}.should_not raise_error
|
34
|
+
end
|
35
|
+
|
36
|
+
it ".new! should raise RangeError for dates that are too large or small" do
|
37
|
+
proc{Date.new!(@d1.jd + 1)}.should raise_error(RangeError)
|
38
|
+
proc{Date.new!(@d2.jd - 1)}.should raise_error(RangeError)
|
39
|
+
end
|
40
|
+
|
41
|
+
it ".new! should not raise for dates that are not too large or small" do
|
42
|
+
proc{Date.new!(@d1.jd)}.should_not raise_error
|
43
|
+
proc{Date.new!(@d2.jd)}.should_not raise_error
|
44
|
+
end
|
45
|
+
|
46
|
+
it ".civil should raise RangeError for dates that are too large or small" do
|
47
|
+
proc{Date.civil(@d1.year, @d1.month, @d1.day + 1)}.should raise_error(RangeError)
|
48
|
+
proc{Date.civil(@d2.year, @d2.month, @d2.day - 1)}.should raise_error(RangeError)
|
49
|
+
end
|
50
|
+
|
51
|
+
it ".civil should not raise for dates that are not too large or small" do
|
52
|
+
proc{Date.civil(@d1.year, @d1.month, @d1.day)}.should_not raise_error
|
53
|
+
proc{Date.civil(@d2.year, @d2.month, @d2.day)}.should_not raise_error
|
54
|
+
end
|
55
|
+
|
56
|
+
it ".civil should correctly convert dates within limits to JD" do
|
57
|
+
Date.civil(@d1.year, @d1.month, @d1.day).jd.should == @d1.jd
|
58
|
+
Date.civil(@d2.year, @d2.month, @d2.day).jd.should == @d2.jd
|
59
|
+
end
|
60
|
+
|
61
|
+
it ".commercial should raise RangeError for dates that are too large or small" do
|
62
|
+
proc{Date.commercial(@d1.cwyear, @d1.cwday == 6 ? @d1.cweek + 1 : @d1.cweek, @d1.cwday == 6 ? 1 : @d1.cwday + 1)}.should raise_error(RangeError)
|
63
|
+
proc{Date.commercial(@d2.cwyear, @d2.cwday == 1 ? @d2.cweek - 1 : @d2.cweek, @d2.cwday == 1 ? 7 : @d2.cwday - 1)}.should raise_error(RangeError)
|
64
|
+
end
|
65
|
+
|
66
|
+
it ".commercial should not raise for dates that are not too large or small" do
|
67
|
+
proc{Date.commercial(@d1.cwyear, @d1.cweek, @d1.cwday)}.should_not raise_error
|
68
|
+
proc{Date.commercial(@d2.cwyear, @d2.cweek, @d2.cwday)}.should_not raise_error
|
69
|
+
end
|
70
|
+
|
71
|
+
it ".commercial should correctly convert dates within limits to JD" do
|
72
|
+
Date.commercial(@d1.cwyear, @d1.cweek, @d1.cwday).jd.should == @d1.jd
|
73
|
+
Date.commercial(@d2.cwyear, @d2.cweek, @d2.cwday).jd.should == @d2.jd
|
74
|
+
end
|
75
|
+
|
76
|
+
it ".ordinal should raise RangeError for dates that are too large or small" do
|
77
|
+
proc{Date.ordinal(@d1.year, @d1.yday + 1)}.should raise_error(RangeError)
|
78
|
+
proc{Date.ordinal(@d2.year, @d2.yday - 1)}.should raise_error(RangeError)
|
79
|
+
end
|
80
|
+
|
81
|
+
it ".ordinal should not raise for dates that are not too large or small" do
|
82
|
+
proc{Date.ordinal(@d1.year, @d1.yday)}.should_not raise_error
|
83
|
+
proc{Date.ordinal(@d2.year, @d2.yday)}.should_not raise_error
|
84
|
+
end
|
85
|
+
|
86
|
+
it ".ordinal should correctly convert dates within limits to JD" do
|
87
|
+
Date.ordinal(@d1.year, @d1.yday).jd.should == @d1.jd
|
88
|
+
Date.ordinal(@d2.year, @d2.yday).jd.should == @d2.jd
|
89
|
+
end
|
90
|
+
|
91
|
+
it ".parse should raise RangeError for civil dates that are too large or small" do
|
92
|
+
proc{Date.parse("#{@d1.year}-#{@d1.month}-#{@d1.day+1}")}.should raise_error(RangeError)
|
93
|
+
proc{Date.parse("#{@d2.year}-#{@d2.month}-#{@d2.day-1}")}.should raise_error(RangeError)
|
94
|
+
end
|
95
|
+
|
96
|
+
it ".parse should not raise for civil dates that are not too large or small" do
|
97
|
+
proc{Date.parse("#{@d1.year}-#{@d1.month}-#{@d1.day}")}.should_not raise_error
|
98
|
+
proc{Date.parse("#{@d2.year}-#{@d2.month}-#{@d2.day}")}.should_not raise_error
|
99
|
+
end
|
100
|
+
|
101
|
+
it ".parse should correctly convert civil dates within limits to JD" do
|
102
|
+
Date.parse("#{@d1.year}-#{@d1.month}-#{@d1.day}").jd.should == @d1.jd
|
103
|
+
Date.parse("#{@d2.year}-#{@d2.month}-#{@d2.day}").jd.should == @d2.jd
|
104
|
+
end
|
105
|
+
|
106
|
+
it ".strptime should raise RangeError for civil dates that are too large or small" do
|
107
|
+
proc{Date.strptime("#{@d1.year}-#{@d1.month}-#{@d1.day+1}", "%Y-%m-%d")}.should raise_error(RangeError)
|
108
|
+
proc{Date.strptime("#{@d2.year}-#{@d2.month}-#{@d2.day-1}", "%Y-%m-%d")}.should raise_error(RangeError)
|
109
|
+
end
|
110
|
+
|
111
|
+
it ".strptime should not raise for civil dates that are not too large or small" do
|
112
|
+
proc{Date.strptime("#{@d1.year}-#{@d1.month}-#{@d1.day}", "%Y-%m-%d")}.should_not raise_error
|
113
|
+
proc{Date.strptime("#{@d2.year}-#{@d2.month}-#{@d2.day}", "%Y-%m-%d")}.should_not raise_error
|
114
|
+
end
|
115
|
+
|
116
|
+
it ".strptime should correctly convert civil dates within limits to JD" do
|
117
|
+
Date.strptime("#{@d1.year}-#{@d1.month}-#{@d1.day}", "%Y-%m-%d").jd.should == @d1.jd
|
118
|
+
Date.strptime("#{@d2.year}-#{@d2.month}-#{@d2.day}", "%Y-%m-%d").jd.should == @d2.jd
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
data/spec/date/parse_spec.rb
CHANGED
@@ -11,11 +11,16 @@ ruby_version_is "" ... "1.9" do
|
|
11
11
|
Date.zone_to_diff('+08:00').should == 28800
|
12
12
|
Date.zone_to_diff('+08:30').should == 30600
|
13
13
|
Date.zone_to_diff('+08:30:04').should == 30604
|
14
|
+
Date.zone_to_diff('-08:00').should == -28800
|
15
|
+
Date.zone_to_diff('-08:30').should == -30600
|
16
|
+
Date.zone_to_diff('-08:30:04').should == -30604
|
14
17
|
end
|
15
18
|
|
16
19
|
it "should return the offset for the given numeric time zone with . or ," do
|
17
20
|
Date.zone_to_diff('+08,30').should == 29880
|
18
21
|
Date.zone_to_diff('+08.30').should == 29880
|
22
|
+
Date.zone_to_diff('-08,30').should == -29880
|
23
|
+
Date.zone_to_diff('-08.30').should == -29880
|
19
24
|
end
|
20
25
|
|
21
26
|
it "should return the offset for the given numeric time with all digits" do
|
@@ -73,7 +78,67 @@ describe "Date.parse" do
|
|
73
78
|
d.should == Date.civil(Date.today.year, Date.today.month, 5)
|
74
79
|
end
|
75
80
|
|
81
|
+
it "can handle BC/BCE in the string as being a negative year" do
|
82
|
+
Date.parse("BC 2012-11-10").should == Date.civil(-2011, 11, 10)
|
83
|
+
Date.parse("2012-11-10 BCE").should == Date.civil(-2011, 11, 10)
|
84
|
+
end
|
85
|
+
|
86
|
+
it "can handle a leftover DD string as a day if time has been parsed" do
|
87
|
+
Date.parse("'09 10:20:30 13").should == Date.civil(2009, 1, 13)
|
88
|
+
end
|
89
|
+
|
90
|
+
it "can handle 'DD as a year" do
|
91
|
+
Date.parse("'12").should == Date.civil(2012, 1, 1)
|
92
|
+
end
|
93
|
+
|
94
|
+
it "can handle JIS X 301 format" do
|
95
|
+
Date.parse("H22.01.06").should == Date.civil(2010, 1, 6)
|
96
|
+
end
|
97
|
+
|
98
|
+
it "can handle DDDD-MMM-DD VMS format" do
|
99
|
+
Date.parse("2012-jan-06").should == Date.civil(2012, 1, 6)
|
100
|
+
end
|
101
|
+
|
102
|
+
it "can handle MMM-DDDD-DD VMS format" do
|
103
|
+
Date.parse("jan-2012-06").should == Date.civil(2012, 1, 6)
|
104
|
+
end
|
105
|
+
|
106
|
+
# Less common ISO formats
|
107
|
+
|
108
|
+
it "can handle DDDD-wDD-D as a commercial week date" do
|
109
|
+
Date.parse("2011-w12-6").should == Date.commercial(2011, 12, 6)
|
110
|
+
end
|
111
|
+
|
112
|
+
it "can handle DD-wDD-D as a commercial week date" do
|
113
|
+
Date.parse("11-w12-6").should == Date.commercial(2011, 12, 6)
|
114
|
+
end
|
115
|
+
|
116
|
+
it "can handle -wDD-D as a commercial week date in the current year" do
|
117
|
+
Date.parse("-w12-6").should == Date.commercial(Time.now.year, 12, 6)
|
118
|
+
end
|
119
|
+
|
120
|
+
it "can handle -w-D as a commercial week date in the current year" do
|
121
|
+
Date.parse("-w-6").should == Date.commercial(Time.now.year, 1, 6)
|
122
|
+
end
|
123
|
+
|
124
|
+
it "can handle ---DD as a day in the current month" do
|
125
|
+
Date.parse("---06").should == Date.civil(Time.now.year, Time.now.month, 6)
|
126
|
+
end
|
127
|
+
|
128
|
+
it "can handle --DDDD as a month and day in the current year" do
|
129
|
+
Date.parse("--1206").should == Date.civil(Time.now.year, 12, 6)
|
130
|
+
end
|
131
|
+
|
132
|
+
it "can handle DDDD-DDD as an ordinal date" do
|
133
|
+
Date.parse("2012-106").should == Date.ordinal(2012, 106)
|
134
|
+
end
|
135
|
+
|
136
|
+
it "can handle -DDD as an ordinal day in the current year" do
|
137
|
+
Date.parse("blah-106").should == Date.ordinal(Time.now.year, 106)
|
138
|
+
end
|
139
|
+
|
76
140
|
# Specs using numbers
|
141
|
+
|
77
142
|
it "can't handle a single digit" do
|
78
143
|
lambda{ Date.parse("1") }.should raise_error(ArgumentError)
|
79
144
|
end
|
@@ -283,6 +348,14 @@ describe "Date#parse with ' ' separator" do
|
|
283
348
|
end
|
284
349
|
|
285
350
|
it_should_behave_like "date_parse"
|
351
|
+
|
352
|
+
it "can parse a 'DD mmm BC YYYY' string into a Date object" do
|
353
|
+
d = Date.parse("23 feb BC 2008")
|
354
|
+
d.year.should == -2007
|
355
|
+
d.month.should == 2
|
356
|
+
d.day.should == 23
|
357
|
+
end
|
358
|
+
|
286
359
|
end
|
287
360
|
|
288
361
|
describe "Date#parse with '/' separator US-style" do
|
@@ -438,5 +511,86 @@ describe "Date::Format::STYLE" do
|
|
438
511
|
d.month.should == 1
|
439
512
|
d.day.should == 10
|
440
513
|
end
|
514
|
+
|
515
|
+
it "Can parse DD/DD/'DD with all three types" do
|
516
|
+
Date::Format::STYLE[:slash] = :ymd
|
517
|
+
Date.parse("12/11/'10").should == Date.civil(2010, 11, 12)
|
518
|
+
Date::Format::STYLE[:slash] = :dmy
|
519
|
+
Date.parse("12/11/'10").should == Date.civil(2010, 11, 12)
|
520
|
+
Date::Format::STYLE[:slash] = :mdy
|
521
|
+
Date.parse("12/11/'10").should == Date.civil(2010, 12, 11)
|
522
|
+
end
|
523
|
+
|
524
|
+
it "Can parse 'DD/DD/DD with all three types" do
|
525
|
+
Date::Format::STYLE[:slash] = :ymd
|
526
|
+
Date.parse("'12/11/10").should == Date.civil(2012, 11, 10)
|
527
|
+
Date::Format::STYLE[:slash] = :dmy
|
528
|
+
Date.parse("'12/11/10").should == Date.civil(2012, 11, 10)
|
529
|
+
Date::Format::STYLE[:slash] = :mdy
|
530
|
+
Date.parse("'12/11/10").should == Date.civil(2012, 11, 10)
|
531
|
+
end
|
532
|
+
|
533
|
+
it "Can parse DD/'DD/DD with all three types" do
|
534
|
+
Date::Format::STYLE[:slash] = :ymd
|
535
|
+
Date.parse("12/'11/10").should == Date.civil(2011, 10, 12)
|
536
|
+
Date::Format::STYLE[:slash] = :dmy
|
537
|
+
Date.parse("12/'11/10").should == Date.civil(2011, 12, 10)
|
538
|
+
Date::Format::STYLE[:slash] = :mdy
|
539
|
+
Date.parse("12/'11/10").should == Date.civil(2011, 12, 10)
|
540
|
+
end
|
541
|
+
|
542
|
+
it "Can parse DD/'DD with all three types" do
|
543
|
+
Date::Format::STYLE[:slash] = :ymd
|
544
|
+
Date.parse("12/'11").should == Date.civil(2011, 12, 1)
|
545
|
+
Date::Format::STYLE[:slash] = :dmy
|
546
|
+
Date.parse("12/'11").should == Date.civil(2011, 12, 1)
|
547
|
+
Date::Format::STYLE[:slash] = :mdy
|
548
|
+
Date.parse("12/'11").should == Date.civil(2011, 12, 1)
|
549
|
+
end
|
550
|
+
|
551
|
+
it "Can parse 'DD/DD with all three types" do
|
552
|
+
Date::Format::STYLE[:slash] = :ymd
|
553
|
+
Date.parse("'12/11").should == Date.civil(2012, 11, 1)
|
554
|
+
Date::Format::STYLE[:slash] = :dmy
|
555
|
+
Date.parse("'12/11").should == Date.civil(2012, 11, 1)
|
556
|
+
Date::Format::STYLE[:slash] = :mdy
|
557
|
+
Date.parse("'12/11").should == Date.civil(2012, 11, 1)
|
558
|
+
end
|
559
|
+
|
560
|
+
it "Can parse 'D/DD with all three types" do
|
561
|
+
Date::Format::STYLE[:slash] = :ymd
|
562
|
+
Date.parse("'2/11").should == Date.civil(2002, 11, 1)
|
563
|
+
Date::Format::STYLE[:slash] = :dmy
|
564
|
+
Date.parse("'2/11").should == Date.civil(2002, 11, 1)
|
565
|
+
Date::Format::STYLE[:slash] = :mdy
|
566
|
+
Date.parse("'2/11").should == Date.civil(2002, 11, 1)
|
567
|
+
end
|
568
|
+
|
569
|
+
it "Can parse DD/DD with all three types" do
|
570
|
+
Date::Format::STYLE[:slash] = :ymd
|
571
|
+
Date.parse("12/11").should == Date.civil(Time.now.year, 12, 11)
|
572
|
+
Date::Format::STYLE[:slash] = :dmy
|
573
|
+
Date.parse("12/11").should == Date.civil(Time.now.year, 11, 12)
|
574
|
+
Date::Format::STYLE[:slash] = :mdy
|
575
|
+
Date.parse("12/11").should == Date.civil(Time.now.year, 12, 11)
|
576
|
+
end
|
577
|
+
|
578
|
+
it "Can parse DDDD/DD as year/month with all three types" do
|
579
|
+
Date::Format::STYLE[:slash] = :ymd
|
580
|
+
Date.parse("2012/11").should == Date.civil(2012, 11, 1)
|
581
|
+
Date::Format::STYLE[:slash] = :dmy
|
582
|
+
Date.parse("2012/11").should == Date.civil(2012, 11, 1)
|
583
|
+
Date::Format::STYLE[:slash] = :mdy
|
584
|
+
Date.parse("2012/11").should == Date.civil(2012, 11, 1)
|
585
|
+
end
|
586
|
+
|
587
|
+
it "Can parse DD/DDDD as month/year with all three types" do
|
588
|
+
Date::Format::STYLE[:slash] = :ymd
|
589
|
+
Date.parse("11/2012").should == Date.civil(2012, 11, 1)
|
590
|
+
Date::Format::STYLE[:slash] = :dmy
|
591
|
+
Date.parse("11/2012").should == Date.civil(2012, 11, 1)
|
592
|
+
Date::Format::STYLE[:slash] = :mdy
|
593
|
+
Date.parse("11/2012").should == Date.civil(2012, 11, 1)
|
594
|
+
end
|
441
595
|
end
|
442
596
|
|
data/spec/date/parsing_spec.rb
CHANGED
@@ -5,10 +5,15 @@ ruby_version_is "1.9" do
|
|
5
5
|
it "._httpdate should parse an HTTP format" do
|
6
6
|
Date._httpdate("Fri, 02 Jan 2009 00:00:00 GMT").should ==
|
7
7
|
{:year=>2009, :mon=>1, :mday=>2, :wday=>5, :hour=>0, :min=>0, :sec=>0, :offset=>0, :zone=>'GMT'}
|
8
|
+
Date._httpdate("Friday, 02-Jan-09 00:00:00 GMT").should ==
|
9
|
+
{:year=>2009, :mon=>1, :mday=>2, :wday=>5, :hour=>0, :min=>0, :sec=>0, :offset=>0, :zone=>'GMT'}
|
10
|
+
Date._httpdate("Fri Jan 2 00:00:00 2009").should ==
|
11
|
+
{:year=>2009, :mon=>1, :mday=>2, :wday=>5, :hour=>0, :min=>0, :sec=>0}
|
8
12
|
end
|
9
13
|
|
10
14
|
it "._iso8601 should parse an ISO8601 format" do
|
11
15
|
Date._iso8601("2009-01-02").should == {:year=>2009, :mon=>1, :mday=>2}
|
16
|
+
Date._iso8601("--1002").should == {:mon=>10, :mday=>2}
|
12
17
|
end
|
13
18
|
|
14
19
|
it "._jisx03010 should parse an JIS X 0301 format" do
|
@@ -19,11 +24,17 @@ ruby_version_is "1.9" do
|
|
19
24
|
Date._jisx0301("M06.01.02").should == {:year=>1873, :mon=>1, :mday=>2}
|
20
25
|
Date._jisx0301("1872-01-02").should == {:year=>1872, :mon=>1, :mday=>2}
|
21
26
|
Date._jisx0301("1867-01-02").should == {:year=>1867, :mon=>1, :mday=>2}
|
27
|
+
|
28
|
+
Date._jisx0301("21.01.02").should == {:year=>2009, :mon=>1, :mday=>2}
|
22
29
|
end
|
23
30
|
|
24
31
|
it "._rfc2822 should parse an RFC2822 format" do
|
25
32
|
Date._rfc2822("Fri, 2 Jan 2009 00:00:00 +0000").should ==
|
26
33
|
{:year=>2009, :mon=>1, :mday=>2, :wday=>5, :hour=>0, :min=>0, :sec=>0, :offset=>0, :zone=>'+0000'}
|
34
|
+
Date._rfc2822("Fri, 2 Jan 09 00:00:00 +0000").should ==
|
35
|
+
{:year=>2009, :mon=>1, :mday=>2, :wday=>5, :hour=>0, :min=>0, :sec=>0, :offset=>0, :zone=>'+0000'}
|
36
|
+
Date._rfc2822("Fri, 2 Jan 109 00:00:00 +0000").should ==
|
37
|
+
{:year=>2009, :mon=>1, :mday=>2, :wday=>5, :hour=>0, :min=>0, :sec=>0, :offset=>0, :zone=>'+0000'}
|
27
38
|
end
|
28
39
|
|
29
40
|
it "._rfc822 should parse an RFC822 format" do
|
data/spec/date/step_spec.rb
CHANGED
@@ -2,6 +2,28 @@ require File.expand_path('../../spec_helper', __FILE__)
|
|
2
2
|
|
3
3
|
describe "Date#step" do
|
4
4
|
|
5
|
+
ruby_version_is "" ... "1.9" do
|
6
|
+
it "should require a block" do
|
7
|
+
proc{Date.today.step(Date.today)}.should raise_error(LocalJumpError)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
ruby_version_is "1.9" do
|
12
|
+
it "should return an enumerator without a block" do
|
13
|
+
ds = Date.civil(2008, 10, 11)
|
14
|
+
de = Date.civil(2008, 9, 29)
|
15
|
+
e = de.step(ds)
|
16
|
+
e.should be_kind_of(Enumerator)
|
17
|
+
count = 0
|
18
|
+
e.each do |d|
|
19
|
+
d.should <= ds
|
20
|
+
d.should >= de
|
21
|
+
count += 1
|
22
|
+
end.should == de
|
23
|
+
count.should == 13
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
5
27
|
it "should be able to step forward in time" do
|
6
28
|
ds = Date.civil(2008, 10, 11)
|
7
29
|
de = Date.civil(2008, 9, 29)
|
data/spec/date/strptime_spec.rb
CHANGED
@@ -84,9 +84,15 @@ describe "Date#strptime" do
|
|
84
84
|
Date.strptime(" 6", "%e").should == Date.civil(d.year, d.month, 6)
|
85
85
|
end
|
86
86
|
|
87
|
-
it "parses a commercial year
|
87
|
+
it "parses a commercial year" do
|
88
88
|
Date.strptime("2000", "%G").should == Date.civil(2000, 1, 3)
|
89
89
|
Date.strptime("2002", "%G").should == Date.civil(2001, 12, 31)
|
90
|
+
Date.strptime("20000", "%G").should == Date.civil(20000, 1, 3)
|
91
|
+
end
|
92
|
+
|
93
|
+
it "parses a commercial year with trailing numbers" do
|
94
|
+
Date.strptime("20000", "%G0").should == Date.civil(2000, 1, 3)
|
95
|
+
Date.strptime("20023", "%G%u").should == Date.civil(2002, 1, 2)
|
90
96
|
end
|
91
97
|
|
92
98
|
it "parses a commercial year with only two digits" do
|
@@ -152,8 +158,15 @@ describe "Date#strptime" do
|
|
152
158
|
Date.strptime("2007 4", "%Y %w").should == Date.civil(2007, 1, 4)
|
153
159
|
end
|
154
160
|
|
155
|
-
it "parses a year
|
161
|
+
it "parses a full year " do
|
156
162
|
Date.strptime("2007", "%Y").should == Date.civil(2007, 1, 1)
|
163
|
+
Date.strptime("200", "%Y").should == Date.civil(200, 1, 1)
|
164
|
+
Date.strptime("20000", "%Y").should == Date.civil(20000, 1, 1)
|
165
|
+
end
|
166
|
+
|
167
|
+
it "parses a full year with trailing numbers" do
|
168
|
+
Date.strptime("20000", "%Y0").should == Date.civil(2000, 1, 1)
|
169
|
+
Date.strptime("200002", "%Y%m").should == Date.civil(2000, 2, 1)
|
157
170
|
end
|
158
171
|
|
159
172
|
it "parses a year in YY format" do
|
@@ -164,6 +177,11 @@ describe "Date#strptime" do
|
|
164
177
|
Date.strptime("00 % \n \t %1", "%y %% %n %t %%1").should == Date.civil(2000, 1, 1)
|
165
178
|
end
|
166
179
|
|
180
|
+
it "parse a %Y%m%d date" do
|
181
|
+
Date.strptime("20000203", "%Y%m%d").should == Date.civil(2000, 2, 3)
|
182
|
+
end
|
183
|
+
|
184
|
+
|
167
185
|
############################
|
168
186
|
# Specs that combine stuff #
|
169
187
|
############################
|
@@ -173,6 +191,11 @@ describe "Date#strptime" do
|
|
173
191
|
Date.strptime("Thu Apr 6 00:00:00 2000", "%a %b %e %H:%M:%S %Y").should == Date.civil(2000, 4, 6)
|
174
192
|
end
|
175
193
|
|
194
|
+
it "parses a full date with trailing digits" do
|
195
|
+
Date.strptime("Thu Apr 6 00:00:00 20000", "%c0").should == Date.civil(2000, 4, 6)
|
196
|
+
Date.strptime("Thu Apr 6 00:00:00 200012", "%c%m").should == Date.civil(2000, 12, 6)
|
197
|
+
end
|
198
|
+
|
176
199
|
it "parses a date with slashes" do
|
177
200
|
Date.strptime("04/06/00", "%D").should == Date.civil(2000, 4, 6)
|
178
201
|
Date.strptime("04/06/00", "%m/%d/%y").should == Date.civil(2000, 4, 6)
|
@@ -183,11 +206,16 @@ describe "Date#strptime" do
|
|
183
206
|
Date.strptime("2000-04-06", "%Y-%m-%d").should == Date.civil(2000, 4, 6)
|
184
207
|
end
|
185
208
|
|
186
|
-
it "parses a
|
209
|
+
it "parses a civil format with month name" do
|
187
210
|
Date.strptime(" 9-Apr-2000", "%v").should == Date.civil(2000, 4, 9)
|
188
211
|
Date.strptime(" 9-Apr-2000", "%e-%b-%Y").should == Date.civil(2000, 4, 9)
|
189
212
|
end
|
190
213
|
|
214
|
+
it "parses a civil format with month name with trailing digits" do
|
215
|
+
Date.strptime(" 9-Apr-20000", "%v0").should == Date.civil(2000, 4, 9)
|
216
|
+
Date.strptime(" 9-Apr-200012", "%v%m").should == Date.civil(2000, 12, 9)
|
217
|
+
end
|
218
|
+
|
191
219
|
it "parses a date given MM/DD/YY" do
|
192
220
|
Date.strptime("04/06/00", "%x").should == Date.civil(2000, 4, 6)
|
193
221
|
Date.strptime("04/06/00", "%m/%d/%y").should == Date.civil(2000, 4, 6)
|
@@ -198,4 +226,8 @@ describe "Date#strptime" do
|
|
198
226
|
Date.strptime("Sun Apr 9 00:00:00 +00:00 2000", "%a %b %e %H:%M:%S %Z %Y").should == Date.civil(2000, 4, 9)
|
199
227
|
end
|
200
228
|
|
229
|
+
it "parses a date given in full notation with trailing digits" do
|
230
|
+
Date.strptime("Sun Apr 9 00:00:00 +00:00 20000", "%+0").should == Date.civil(2000, 4, 9)
|
231
|
+
Date.strptime("Sun Apr 9 00:00:00 +00:00 200012", "%+%m").should == Date.civil(2000, 12, 9)
|
232
|
+
end
|
201
233
|
end
|
data/spec/datetime/add_spec.rb
CHANGED
@@ -27,10 +27,10 @@ describe "DateTime#+" do
|
|
27
27
|
end
|
28
28
|
|
29
29
|
it "should raise an error on non numeric parameters" do
|
30
|
-
lambda { DateTime.civil(2007,2,27) + :hello }.should raise_error
|
31
|
-
lambda { DateTime.civil(2007,2,27) + "hello" }.should raise_error
|
32
|
-
lambda { DateTime.civil(2007,2,27) + DateTime.new(2007,2,27) }.should raise_error
|
33
|
-
lambda { DateTime.civil(2007,2,27) + Object.new }.should raise_error
|
30
|
+
lambda { DateTime.civil(2007,2,27) + :hello }.should raise_error
|
31
|
+
lambda { DateTime.civil(2007,2,27) + "hello" }.should raise_error
|
32
|
+
lambda { DateTime.civil(2007,2,27) + DateTime.new(2007,2,27) }.should raise_error
|
33
|
+
lambda { DateTime.civil(2007,2,27) + Object.new }.should raise_error
|
34
34
|
end
|
35
35
|
|
36
36
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require File.expand_path('../../spec_helper', __FILE__)
|
2
|
+
|
3
|
+
ruby_version_is "1.9" do
|
4
|
+
describe "DateTime string encoding methods" do
|
5
|
+
it "should return strings in US-ASCII encoding by default" do
|
6
|
+
d = DateTime.now
|
7
|
+
d.asctime.encoding.name.should == 'US-ASCII'
|
8
|
+
d.ctime.encoding.name.should == 'US-ASCII'
|
9
|
+
d.httpdate.encoding.name.should == 'US-ASCII'
|
10
|
+
d.inspect.encoding.name.should == 'US-ASCII'
|
11
|
+
d.iso8601.encoding.name.should == 'US-ASCII'
|
12
|
+
d.jisx0301.encoding.name.should == 'US-ASCII'
|
13
|
+
d.rfc2822.encoding.name.should == 'US-ASCII'
|
14
|
+
d.rfc3339.encoding.name.should == 'US-ASCII'
|
15
|
+
d.rfc822.encoding.name.should == 'US-ASCII'
|
16
|
+
d.strftime('%S:%M:%H').encoding.name.should == 'US-ASCII'
|
17
|
+
d.to_s.encoding.name.should == 'US-ASCII'
|
18
|
+
d.xmlschema.encoding.name.should == 'US-ASCII'
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should return strings in default_internal encoding if set" do
|
22
|
+
begin
|
23
|
+
Encoding.default_internal = 'UTF-8'
|
24
|
+
d = DateTime.now
|
25
|
+
d.asctime.encoding.name.should == 'UTF-8'
|
26
|
+
d.ctime.encoding.name.should == 'UTF-8'
|
27
|
+
d.httpdate.encoding.name.should == 'UTF-8'
|
28
|
+
d.inspect.encoding.name.should == 'UTF-8'
|
29
|
+
d.iso8601.encoding.name.should == 'UTF-8'
|
30
|
+
d.jisx0301.encoding.name.should == 'UTF-8'
|
31
|
+
d.rfc2822.encoding.name.should == 'UTF-8'
|
32
|
+
d.rfc3339.encoding.name.should == 'UTF-8'
|
33
|
+
d.rfc822.encoding.name.should == 'UTF-8'
|
34
|
+
d.strftime('%S:%M:%H').encoding.name.should == 'UTF-8'
|
35
|
+
d.to_s.encoding.name.should == 'UTF-8'
|
36
|
+
d.xmlschema.encoding.name.should == 'UTF-8'
|
37
|
+
ensure
|
38
|
+
Encoding.default_internal = nil
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|