home_run 0.9.0 → 0.9.1
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 -71
- 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 +22 -21
- 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/{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 +85 -61
- 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,170 @@
|
|
1
|
+
require File.expand_path('../../spec_helper', __FILE__)
|
2
|
+
|
3
|
+
describe "DateTime limits: " do
|
4
|
+
before do
|
5
|
+
@d1 = DateTime.jd(DateTime::JULIAN - 1)
|
6
|
+
@d2 = DateTime.jd(DateTime::GREGORIAN + 1)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "#+ and #- should raise RangeError for dates that are too large or small" do
|
10
|
+
proc{DateTime.jd(@d1.jd) + 1}.should raise_error(RangeError)
|
11
|
+
proc{DateTime.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{DateTime.jd(@d1.jd) >> 1}.should raise_error(RangeError)
|
16
|
+
proc{DateTime.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{DateTime.jd(@d1.jd).next_year}.should raise_error(RangeError)
|
22
|
+
proc{DateTime.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{DateTime.jd(@d1.jd + 1)}.should raise_error(RangeError)
|
28
|
+
proc{DateTime.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{DateTime.jd(@d1.jd)}.should_not raise_error
|
33
|
+
proc{DateTime.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{DateTime.new!(@d1.jd + 1)}.should raise_error(RangeError)
|
38
|
+
# Need to use 1.5 instead of 1 because new! adds a half day
|
39
|
+
proc{DateTime.new!(@d2.jd - 1.5)}.should raise_error(RangeError)
|
40
|
+
end
|
41
|
+
|
42
|
+
it ".new! should not raise for dates that are not too large or small" do
|
43
|
+
proc{DateTime.new!(@d1.jd)}.should_not raise_error
|
44
|
+
proc{DateTime.new!(@d2.jd)}.should_not raise_error
|
45
|
+
end
|
46
|
+
|
47
|
+
it ".civil should raise RangeError for dates that are too large or small" do
|
48
|
+
proc{DateTime.civil(@d1.year, @d1.month, @d1.day + 1)}.should raise_error(RangeError)
|
49
|
+
proc{DateTime.civil(@d2.year, @d2.month, @d2.day - 1)}.should raise_error(RangeError)
|
50
|
+
end
|
51
|
+
|
52
|
+
it ".civil should not raise for dates that are not too large or small" do
|
53
|
+
proc{DateTime.civil(@d1.year, @d1.month, @d1.day)}.should_not raise_error
|
54
|
+
proc{DateTime.civil(@d2.year, @d2.month, @d2.day)}.should_not raise_error
|
55
|
+
end
|
56
|
+
|
57
|
+
it ".civil should correctly convert dates within limits to JD" do
|
58
|
+
DateTime.civil(@d1.year, @d1.month, @d1.day).jd.should == @d1.jd
|
59
|
+
DateTime.civil(@d2.year, @d2.month, @d2.day).jd.should == @d2.jd
|
60
|
+
end
|
61
|
+
|
62
|
+
it ".commercial should raise RangeError for dates that are too large or small" do
|
63
|
+
proc{DateTime.commercial(@d1.cwyear, @d1.cwday == 6 ? @d1.cweek + 1 : @d1.cweek, @d1.cwday == 6 ? 1 : @d1.cwday + 1)}.should raise_error(RangeError)
|
64
|
+
proc{DateTime.commercial(@d2.cwyear, @d2.cwday == 1 ? @d2.cweek - 1 : @d2.cweek, @d2.cwday == 1 ? 7 : @d2.cwday - 1)}.should raise_error(RangeError)
|
65
|
+
end
|
66
|
+
|
67
|
+
it ".commercial should not raise for dates that are not too large or small" do
|
68
|
+
proc{DateTime.commercial(@d1.cwyear, @d1.cweek, @d1.cwday)}.should_not raise_error
|
69
|
+
proc{DateTime.commercial(@d2.cwyear, @d2.cweek, @d2.cwday)}.should_not raise_error
|
70
|
+
end
|
71
|
+
|
72
|
+
it ".commercial should correctly convert dates within limits to JD" do
|
73
|
+
DateTime.commercial(@d1.cwyear, @d1.cweek, @d1.cwday).jd.should == @d1.jd
|
74
|
+
DateTime.commercial(@d2.cwyear, @d2.cweek, @d2.cwday).jd.should == @d2.jd
|
75
|
+
end
|
76
|
+
|
77
|
+
it ".ordinal should raise RangeError for dates that are too large or small" do
|
78
|
+
proc{DateTime.ordinal(@d1.year, @d1.yday + 1)}.should raise_error(RangeError)
|
79
|
+
proc{DateTime.ordinal(@d2.year, @d2.yday - 1)}.should raise_error(RangeError)
|
80
|
+
end
|
81
|
+
|
82
|
+
it ".ordinal should not raise for dates that are not too large or small" do
|
83
|
+
proc{DateTime.ordinal(@d1.year, @d1.yday)}.should_not raise_error
|
84
|
+
proc{DateTime.ordinal(@d2.year, @d2.yday)}.should_not raise_error
|
85
|
+
end
|
86
|
+
|
87
|
+
it ".ordinal should correctly convert dates within limits to JD" do
|
88
|
+
DateTime.ordinal(@d1.year, @d1.yday).jd.should == @d1.jd
|
89
|
+
DateTime.ordinal(@d2.year, @d2.yday).jd.should == @d2.jd
|
90
|
+
end
|
91
|
+
|
92
|
+
it ".parse should raise RangeError for civil dates that are too large or small" do
|
93
|
+
proc{DateTime.parse("#{@d1.year}-#{@d1.month}-#{@d1.day+1}")}.should raise_error(RangeError)
|
94
|
+
proc{DateTime.parse("#{@d2.year}-#{@d2.month}-#{@d2.day-1}")}.should raise_error(RangeError)
|
95
|
+
end
|
96
|
+
|
97
|
+
it ".parse should not raise for civil dates that are not too large or small" do
|
98
|
+
proc{DateTime.parse("#{@d1.year}-#{@d1.month}-#{@d1.day}")}.should_not raise_error
|
99
|
+
proc{DateTime.parse("#{@d2.year}-#{@d2.month}-#{@d2.day}")}.should_not raise_error
|
100
|
+
end
|
101
|
+
|
102
|
+
it ".parse should correctly convert civil dates within limits to JD" do
|
103
|
+
DateTime.parse("#{@d1.year}-#{@d1.month}-#{@d1.day}").jd.should == @d1.jd
|
104
|
+
DateTime.parse("#{@d2.year}-#{@d2.month}-#{@d2.day}").jd.should == @d2.jd
|
105
|
+
end
|
106
|
+
|
107
|
+
it ".strptime should raise RangeError for civil dates that are too large or small" do
|
108
|
+
proc{DateTime.strptime("#{@d1.year}-#{@d1.month}-#{@d1.day+1}", "%Y-%m-%d")}.should raise_error(RangeError)
|
109
|
+
proc{DateTime.strptime("#{@d2.year}-#{@d2.month}-#{@d2.day-1}", "%Y-%m-%d")}.should raise_error(RangeError)
|
110
|
+
end
|
111
|
+
|
112
|
+
it ".strptime should not raise for civil dates that are not too large or small" do
|
113
|
+
proc{DateTime.strptime("#{@d1.year}-#{@d1.month}-#{@d1.day}", "%Y-%m-%d")}.should_not raise_error
|
114
|
+
proc{DateTime.strptime("#{@d2.year}-#{@d2.month}-#{@d2.day}", "%Y-%m-%d")}.should_not raise_error
|
115
|
+
end
|
116
|
+
|
117
|
+
it ".strptime should correctly convert civil dates within limits to JD" do
|
118
|
+
DateTime.strptime("#{@d1.year}-#{@d1.month}-#{@d1.day}", "%Y-%m-%d").jd.should == @d1.jd
|
119
|
+
DateTime.strptime("#{@d2.year}-#{@d2.month}-#{@d2.day}", "%Y-%m-%d").jd.should == @d2.jd
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
123
|
+
|
124
|
+
describe "DateTime offset limits: " do
|
125
|
+
it "methods should raise ArgumentError for offets that are too large or small" do
|
126
|
+
max = (14 + 1.0/60)/24
|
127
|
+
min = -(14 + 1.0/60)/24
|
128
|
+
proc{DateTime.civil(2009, 1, 1, 0, 0, 0, max)}.should raise_error(ArgumentError)
|
129
|
+
proc{DateTime.civil(2009, 1, 1, 0, 0, 0, min)}.should raise_error(ArgumentError)
|
130
|
+
proc{DateTime.commercial(2009, 1, 1, 0, 0, 0, max)}.should raise_error(ArgumentError)
|
131
|
+
proc{DateTime.commercial(2009, 1, 1, 0, 0, 0, min)}.should raise_error(ArgumentError)
|
132
|
+
proc{DateTime.ordinal(2009, 1, 0, 0, 0, max)}.should raise_error(ArgumentError)
|
133
|
+
proc{DateTime.ordinal(2009, 1, 0, 0, 0, min)}.should raise_error(ArgumentError)
|
134
|
+
proc{DateTime.jd(2009, 0, 0, 0, max)}.should raise_error(ArgumentError)
|
135
|
+
proc{DateTime.jd(2009, 0, 0, 0, min)}.should raise_error(ArgumentError)
|
136
|
+
proc{DateTime.new!(2009, max)}.should raise_error(ArgumentError)
|
137
|
+
proc{DateTime.new!(2009, min)}.should raise_error(ArgumentError)
|
138
|
+
proc{DateTime.parse("00:00:00+14:01", "%H:%M:%S%z")}.should raise_error(ArgumentError)
|
139
|
+
proc{DateTime.parse("00:00:00-14:01", "%H:%M:%S%z")}.should raise_error(ArgumentError)
|
140
|
+
proc{DateTime.strptime("00:00:00+14:01", "%H:%M:%S%z")}.should raise_error(ArgumentError)
|
141
|
+
proc{DateTime.strptime("00:00:00-14:01", "%H:%M:%S%z")}.should raise_error(ArgumentError)
|
142
|
+
|
143
|
+
d = DateTime.jd(2009)
|
144
|
+
proc{d.new_offset(max)}.should raise_error(ArgumentError)
|
145
|
+
proc{d.new_offset(min)}.should raise_error(ArgumentError)
|
146
|
+
end
|
147
|
+
|
148
|
+
it "methods should not raise for offsets that are not too large or small" do
|
149
|
+
max = 14.0/24
|
150
|
+
min = -14.0/24
|
151
|
+
proc{DateTime.civil(2009, 1, 1, 0, 0, 0, max)}.should_not raise_error
|
152
|
+
proc{DateTime.civil(2009, 1, 1, 0, 0, 0, min)}.should_not raise_error
|
153
|
+
proc{DateTime.commercial(2009, 1, 1, 0, 0, 0, max)}.should_not raise_error
|
154
|
+
proc{DateTime.commercial(2009, 1, 1, 0, 0, 0, min)}.should_not raise_error
|
155
|
+
proc{DateTime.ordinal(2009, 1, 0, 0, 0, max)}.should_not raise_error
|
156
|
+
proc{DateTime.ordinal(2009, 1, 0, 0, 0, min)}.should_not raise_error
|
157
|
+
proc{DateTime.jd(2009, 0, 0, 0, max)}.should_not raise_error
|
158
|
+
proc{DateTime.jd(2009, 0, 0, 0, min)}.should_not raise_error
|
159
|
+
proc{DateTime.new!(2009, max)}.should_not raise_error
|
160
|
+
proc{DateTime.new!(2009, min)}.should_not raise_error
|
161
|
+
proc{DateTime.parse("00:00:00+14:00", "%H:%M:%S%z")}.should_not raise_error
|
162
|
+
proc{DateTime.parse("00:00:00-14:00", "%H:%M:%S%z")}.should_not raise_error
|
163
|
+
proc{DateTime.strptime("00:00:00+14:00", "%H:%M:%S%z")}.should_not raise_error
|
164
|
+
proc{DateTime.strptime("00:00:00-14:00", "%H:%M:%S%z")}.should_not raise_error
|
165
|
+
|
166
|
+
d = DateTime.jd(2009)
|
167
|
+
proc{d.new_offset(max)}.should_not raise_error
|
168
|
+
proc{d.new_offset(min)}.should_not raise_error
|
169
|
+
end
|
170
|
+
end
|
data/spec/datetime/parse_spec.rb
CHANGED
@@ -82,40 +82,113 @@ describe "DateTime#parse" do
|
|
82
82
|
proc{DateTime.parse(Time.now.to_s)}.should_not raise_error
|
83
83
|
end
|
84
84
|
|
85
|
+
it "can handle a leftover DD as an hour if the day has already been parsed" do
|
86
|
+
DateTime.parse("2009-12-13 10").should == DateTime.civil(2009, 12, 13, 10)
|
87
|
+
end
|
88
|
+
|
85
89
|
it "can handle DD as month day number" do
|
86
90
|
DateTime.parse("10").should == DateTime.civil(Date.today.year, Date.today.month, 10)
|
87
91
|
DateTime.parse("10 01:02:03").should == DateTime.civil(Date.today.year, Date.today.month, 10, 1, 2, 3)
|
88
92
|
end
|
89
93
|
|
94
|
+
it "can handle DDz as day and zone" do
|
95
|
+
DateTime.parse("10z").should == DateTime.civil(Date.today.year, Date.today.month, 10)
|
96
|
+
end
|
97
|
+
|
98
|
+
it "can handle DD+DD as day and zone" do
|
99
|
+
DateTime.parse("10+11").should == DateTime.civil(Date.today.year, Date.today.month, 10, 0, 0, 0, 11/24.0)
|
100
|
+
end
|
101
|
+
|
102
|
+
it "can handle DD[DDDD] as day and zone" do
|
103
|
+
DateTime.parse("10[1112]").should == DateTime.civil(Date.today.year, Date.today.month, 10, 0, 0, 0, 11.2/24.0)
|
104
|
+
end
|
105
|
+
|
106
|
+
it "can handle DD.D as second" do
|
107
|
+
DateTime.parse("11.1").should == DateTime.civil(Date.today.year, Date.today.month, Date.today.day, 0, 0, 11) + 0.1/86400
|
108
|
+
end
|
109
|
+
|
110
|
+
it "can handle DDtDD as hour" do
|
111
|
+
DateTime.parse("11t12").should == DateTime.civil(Date.today.year, Date.today.month, 11, 12, 0, 0)
|
112
|
+
end
|
113
|
+
|
114
|
+
it "can handle DDtDDDD as hour and minute" do
|
115
|
+
DateTime.parse("11t1213").should == DateTime.civil(Date.today.year, Date.today.month, 11, 12, 13, 0)
|
116
|
+
end
|
117
|
+
|
118
|
+
it "can handle DDtDDDDDD as hour, minute, and second" do
|
119
|
+
DateTime.parse("11t121314").should == DateTime.civil(Date.today.year, Date.today.month, 11, 12, 13, 14)
|
120
|
+
end
|
121
|
+
|
122
|
+
it "can handle DDtDDDDDD.D as hour, minute, and second" do
|
123
|
+
DateTime.parse("11t121314.1").should == DateTime.civil(Date.today.year, Date.today.month, 11, 12, 13, 14) + 0.1/86400
|
124
|
+
end
|
125
|
+
|
90
126
|
it "can handle DDD as year day number" do
|
91
127
|
DateTime.parse("050").should == DateTime.civil(Date.today.year, 2, 19)
|
92
128
|
DateTime.parse("050 1:02:03").should == DateTime.civil(Date.today.year, 2, 19, 1, 2, 3)
|
93
129
|
end
|
94
130
|
|
131
|
+
it "can handle DDD.D as minute and second" do
|
132
|
+
DateTime.parse("211.1").should == DateTime.civil(Date.today.year, Date.today.month, Date.today.day, 0, 2, 11) + 0.1/86400
|
133
|
+
end
|
134
|
+
|
95
135
|
it "can handle MMDD as month and day" do
|
96
136
|
DateTime.parse("1108").should == DateTime.civil(Date.today.year, 11, 8)
|
97
137
|
DateTime.parse("1108 10:02:03").should == DateTime.civil(Date.today.year, 11, 8, 10, 2, 3)
|
98
138
|
end
|
99
139
|
|
140
|
+
it "can handle DDDD.D as minute and second" do
|
141
|
+
DateTime.parse("1211.1").should == DateTime.civil(Date.today.year, Date.today.month, Date.today.day, 0, 12, 11) + 0.1/86400
|
142
|
+
end
|
143
|
+
|
100
144
|
it "can handle YYDDD as year and day number" do
|
101
145
|
DateTime.parse("10100").should == DateTime.civil(2010, 4, 10)
|
102
146
|
DateTime.parse("10100 23:02:03").should == DateTime.civil(2010, 4, 10, 23, 2, 3)
|
103
147
|
end
|
104
148
|
|
149
|
+
it "can handle DDDDD.D as hour, minute, and second" do
|
150
|
+
DateTime.parse("31211.1").should == DateTime.civil(Date.today.year, Date.today.month, Date.today.day, 3, 12, 11) + 0.1/86400
|
151
|
+
end
|
152
|
+
|
105
153
|
it "can handle YYMMDD as year month and day" do
|
106
154
|
DateTime.parse("201023").should == DateTime.civil(2020, 10, 23)
|
107
155
|
DateTime.parse("201023 23:02:03 +0800").should == DateTime.civil(2020, 10, 23, 23, 2, 3, 8/24.0)
|
108
156
|
end
|
109
157
|
|
158
|
+
it "can handle DDDDDD.D as hour, minute, and second" do
|
159
|
+
DateTime.parse("131211.1").should == DateTime.civil(Date.today.year, Date.today.month, Date.today.day, 13, 12, 11) + 0.1/86400
|
160
|
+
end
|
161
|
+
|
110
162
|
it "can handle YYYYDDD as year and day number" do
|
111
163
|
DateTime.parse("1910100").should == DateTime.civil(1910, 4, 10)
|
112
164
|
DateTime.parse("1910100 23:02:03 -0101").should == DateTime.civil(1910, 4, 10, 23, 2, 3, -61/1440.0)
|
113
165
|
end
|
114
166
|
|
167
|
+
it "can handle DDDDDDD.D as day, hour, minute, and second" do
|
168
|
+
DateTime.parse("4131211.1").should == DateTime.civil(Date.today.year, Date.today.month, 4, 13, 12, 11) + 0.1/86400
|
169
|
+
end
|
170
|
+
|
115
171
|
it "can handle YYYYMMDD as year and day number" do
|
116
172
|
DateTime.parse("19101101").should == DateTime.civil(1910, 11, 1)
|
117
173
|
DateTime.parse("19101101T23:02:03 +0000").should == DateTime.civil(1910, 11, 1, 23, 2, 3)
|
118
174
|
end
|
175
|
+
|
176
|
+
it "can handle DDDDDDDD.D as day, hour, minute, and second" do
|
177
|
+
DateTime.parse("14131211.1").should == DateTime.civil(Date.today.year, Date.today.month, 14, 13, 12, 11) + 0.1/86400
|
178
|
+
end
|
179
|
+
|
180
|
+
it "can handle DDDDDDDD.D as month, day, hour, minute, and second" do
|
181
|
+
DateTime.parse("1014131211.1").should == DateTime.civil(Date.today.year, 10, 14, 13, 12, 11) + 0.1/86400
|
182
|
+
end
|
183
|
+
|
184
|
+
it "can handle DDDDDDDDDD.D as year, month, day, hour, minute, and second" do
|
185
|
+
DateTime.parse("091014131211.1").should == DateTime.civil(2009, 10, 14, 13, 12, 11) + 0.1/86400
|
186
|
+
end
|
187
|
+
|
188
|
+
it "can handle DDDDDDDDDDDD.D as year, month, day, hour, minute, and second" do
|
189
|
+
DateTime.parse("20091014131211.1").should == DateTime.civil(2009, 10, 14, 13, 12, 11) + 0.1/86400
|
190
|
+
end
|
191
|
+
|
119
192
|
end
|
120
193
|
|
121
194
|
describe :date_parse, :shared => true do
|
@@ -9,6 +9,8 @@ ruby_version_is "1.9" do
|
|
9
9
|
|
10
10
|
it "._iso8601 should parse an ISO8601 format" do
|
11
11
|
DateTime._iso8601("2009-01-02T03:04:05+12:00").should == {:year=>2009, :mon=>1, :mday=>2, :hour=>3, :min=>4, :sec=>5, :offset=>43200, :zone=>'+12:00'}
|
12
|
+
DateTime._iso8601("03:04:05+12:00").should == {:hour=>3, :min=>4, :sec=>5, :offset=>43200, :zone=>'+12:00'}
|
13
|
+
DateTime._iso8601(" 030405.1+1200").should == {:hour=>3, :min=>4, :sec=>5, :offset=>43200, :zone=>'+1200', :sec_fraction=>0.1}
|
12
14
|
end
|
13
15
|
|
14
16
|
it "._jisx03010 should parse an JIS X 0301 format" do
|
@@ -38,6 +40,8 @@ ruby_version_is "1.9" do
|
|
38
40
|
|
39
41
|
it "._xmlschema should parse an ISO8601 format" do
|
40
42
|
DateTime._xmlschema("2009-01-02T03:04:05+12:00").should == {:year=>2009, :mon=>1, :mday=>2, :hour=>3, :min=>4, :sec=>5, :offset=>43200, :zone=>'+12:00'}
|
43
|
+
DateTime._xmlschema("03:04:05+12:00").should == {:hour=>3, :min=>4, :sec=>5, :offset=>43200, :zone=>'+12:00'}
|
44
|
+
DateTime._xmlschema("---01+12:00").should == {:mday=>1, :offset=>43200, :zone=>'+12:00'}
|
41
45
|
end
|
42
46
|
|
43
47
|
it ".httpdate should parse an HTTP format" do
|
data/spec/datetime/step_spec.rb
CHANGED
@@ -2,6 +2,28 @@ require File.expand_path('../../spec_helper', __FILE__)
|
|
2
2
|
|
3
3
|
describe "DateTime#step" do
|
4
4
|
|
5
|
+
ruby_version_is "" ... "1.9" do
|
6
|
+
it "should require a block" do
|
7
|
+
proc{DateTime.now.step(DateTime.now)}.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 = DateTime.civil(2008, 10, 11)
|
14
|
+
de = DateTime.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 = DateTime.civil(2008, 10, 11)
|
7
29
|
de = DateTime.civil(2008, 9, 29)
|
@@ -48,6 +48,11 @@ describe "DateTime.strptime" do
|
|
48
48
|
DateTime.strptime("10 500", '%M %L').should == DateTime.civil(@t.year, @t.mon, @t.day, 0, 10, 0) + (0.5/86400)
|
49
49
|
end
|
50
50
|
|
51
|
+
it "should be able to parse the number of milliseconds of the second with trailing numbers" do
|
52
|
+
DateTime.strptime("10 0000", '%M %L0').should == DateTime.civil(@t.year, @t.mon, @t.day, 0, 10, 0)
|
53
|
+
DateTime.strptime("10 50012", '%M %L%m').should == DateTime.civil(@t.year, 12, 1, 0, 10, 0) + (0.5/86400)
|
54
|
+
end
|
55
|
+
|
51
56
|
it "should be able to parse the minute with leading zero" do
|
52
57
|
DateTime.strptime("10", '%M').should == DateTime.civil(@t.year, @t.mon, @t.day, 0, 10, 0)
|
53
58
|
DateTime.strptime("09", '%M').should == DateTime.civil(@t.year, @t.mon, @t.day, 0, 9, 0)
|
@@ -58,6 +63,11 @@ describe "DateTime.strptime" do
|
|
58
63
|
DateTime.strptime("10 500000000", '%M %N').should == DateTime.civil(@t.year, @t.mon, @t.day, 0, 10, 0) + (0.5/86400)
|
59
64
|
end
|
60
65
|
|
66
|
+
it "should be able to parse the number of nanoseconds of the second with trailing numbers" do
|
67
|
+
DateTime.strptime("10 0000000000", '%M %N0').should == DateTime.civil(@t.year, @t.mon, @t.day, 0, 10, 0)
|
68
|
+
DateTime.strptime("10 50000000012", '%M %N%m').should == DateTime.civil(@t.year, 12, 1, 0, 10, 0) + (0.5/86400)
|
69
|
+
end
|
70
|
+
|
61
71
|
it "should be able to parse the number of seconds since the unix epoch" do
|
62
72
|
Date.strptime("954979200", "%s").should == Date.civil(2000, 4, 6)
|
63
73
|
end
|
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: home_run
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 57
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 9
|
9
|
+
- 1
|
10
|
+
version: 0.9.1
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- Jeremy Evans
|
@@ -9,7 +15,7 @@ autorequire:
|
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date: 2010-08-
|
18
|
+
date: 2010-08-31 00:00:00 -07:00
|
13
19
|
default_executable:
|
14
20
|
dependencies: []
|
15
21
|
|
@@ -22,7 +28,7 @@ email: code@jeremyevans.net
|
|
22
28
|
executables:
|
23
29
|
- home_run
|
24
30
|
extensions:
|
25
|
-
- ext/extconf.rb
|
31
|
+
- ext/date_ext/extconf.rb
|
26
32
|
extra_rdoc_files:
|
27
33
|
- README.rdoc
|
28
34
|
- CHANGELOG
|
@@ -34,72 +40,82 @@ files:
|
|
34
40
|
- Rakefile
|
35
41
|
- default.mspec
|
36
42
|
- bin/home_run
|
37
|
-
-
|
38
|
-
-
|
39
|
-
-
|
40
|
-
- ext/
|
41
|
-
- ext/date_ext.c
|
42
|
-
- ext/
|
43
|
-
- ext/
|
44
|
-
-
|
45
|
-
-
|
46
|
-
- spec/
|
47
|
-
- spec/
|
48
|
-
- spec/
|
49
|
-
- spec/
|
50
|
-
- spec/
|
51
|
-
- spec/
|
52
|
-
- spec/
|
53
|
-
- spec/
|
54
|
-
- spec/
|
55
|
-
- spec/datetime/format_spec.rb
|
56
|
-
- spec/datetime/conversions_spec.rb
|
57
|
-
- spec/datetime/upto_spec.rb
|
58
|
-
- spec/datetime/step_spec.rb
|
59
|
-
- spec/datetime/hash_spec.rb
|
60
|
-
- spec/datetime/leap_spec.rb
|
61
|
-
- spec/datetime/succ_spec.rb
|
62
|
-
- spec/datetime/add_month_spec.rb
|
63
|
-
- spec/datetime/day_spec.rb
|
64
|
-
- spec/datetime/minus_month_spec.rb
|
65
|
-
- spec/datetime/relationship_spec.rb
|
66
|
-
- spec/datetime/parsing_spec.rb
|
67
|
-
- spec/datetime/next_prev_spec.rb
|
68
|
-
- spec/spec_helper.rb
|
69
|
-
- spec/date/accessor_spec.rb
|
43
|
+
- lib/date/format.rb
|
44
|
+
- lib/home_run.rb
|
45
|
+
- lib/date.rb
|
46
|
+
- ext/date_ext/date_ext.c
|
47
|
+
- ext/date_ext/date_parser.c
|
48
|
+
- ext/date_ext/datetime.c
|
49
|
+
- ext/date_ext/date_ext.h
|
50
|
+
- ext/date_ext/extconf.rb
|
51
|
+
- ext/date_ext/date_parser.rl
|
52
|
+
- spec/date/limits_spec.rb
|
53
|
+
- spec/date/strptime_spec.rb
|
54
|
+
- spec/date/next_prev_spec.rb
|
55
|
+
- spec/date/downto_spec.rb
|
56
|
+
- spec/date/leap_spec.rb
|
57
|
+
- spec/date/minus_spec.rb
|
58
|
+
- spec/date/minus_month_spec.rb
|
59
|
+
- spec/date/encoding_spec.rb
|
60
|
+
- spec/date/format_spec.rb
|
70
61
|
- spec/date/add_month_spec.rb
|
71
62
|
- spec/date/add_spec.rb
|
72
|
-
- spec/date/boat_spec.rb
|
73
|
-
- spec/date/civil_spec.rb
|
74
|
-
- spec/date/commercial_spec.rb
|
75
|
-
- spec/date/constants_spec.rb
|
76
|
-
- spec/date/conversions_spec.rb
|
77
|
-
- spec/date/downto_spec.rb
|
78
63
|
- spec/date/eql_spec.rb
|
64
|
+
- spec/date/relationship_spec.rb
|
79
65
|
- spec/date/gregorian_spec.rb
|
80
|
-
- spec/date/hash_spec.rb
|
81
|
-
- spec/date/julian_spec.rb
|
82
|
-
- spec/date/minus_month_spec.rb
|
83
|
-
- spec/date/minus_spec.rb
|
84
|
-
- spec/date/ordinal_spec.rb
|
85
66
|
- spec/date/parse_spec.rb
|
86
67
|
- spec/date/day_spec.rb
|
87
|
-
- spec/date/
|
88
|
-
- spec/date/
|
89
|
-
- spec/date/
|
90
|
-
- spec/date/strptime_spec.rb
|
68
|
+
- spec/date/julian_spec.rb
|
69
|
+
- spec/date/parsing_spec.rb
|
70
|
+
- spec/date/accessor_spec.rb
|
91
71
|
- spec/date/upto_spec.rb
|
92
|
-
- spec/date/
|
72
|
+
- spec/date/step_spec.rb
|
73
|
+
- spec/date/commercial_spec.rb
|
74
|
+
- spec/date/boat_spec.rb
|
93
75
|
- spec/date/succ_spec.rb
|
76
|
+
- spec/date/conversions_spec.rb
|
77
|
+
- spec/date/civil_spec.rb
|
78
|
+
- spec/date/hash_spec.rb
|
79
|
+
- spec/date/allocate_spec.rb
|
80
|
+
- spec/date/constants_spec.rb
|
94
81
|
- spec/date/today_spec.rb
|
95
|
-
- spec/date/
|
96
|
-
- spec/date/
|
97
|
-
- spec/
|
82
|
+
- spec/date/ordinal_spec.rb
|
83
|
+
- spec/date/strftime_spec.rb
|
84
|
+
- spec/datetime/limits_spec.rb
|
85
|
+
- spec/datetime/strptime_spec.rb
|
86
|
+
- spec/datetime/next_prev_spec.rb
|
87
|
+
- spec/datetime/downto_spec.rb
|
88
|
+
- spec/datetime/leap_spec.rb
|
89
|
+
- spec/datetime/minus_spec.rb
|
90
|
+
- spec/datetime/minus_month_spec.rb
|
91
|
+
- spec/datetime/encoding_spec.rb
|
92
|
+
- spec/datetime/format_spec.rb
|
93
|
+
- spec/datetime/add_month_spec.rb
|
94
|
+
- spec/datetime/add_spec.rb
|
95
|
+
- spec/datetime/eql_spec.rb
|
96
|
+
- spec/datetime/relationship_spec.rb
|
97
|
+
- spec/datetime/constructor_spec.rb
|
98
|
+
- spec/datetime/now_spec.rb
|
99
|
+
- spec/datetime/parse_spec.rb
|
100
|
+
- spec/datetime/day_spec.rb
|
101
|
+
- spec/datetime/parsing_spec.rb
|
102
|
+
- spec/datetime/accessor_spec.rb
|
103
|
+
- spec/datetime/upto_spec.rb
|
104
|
+
- spec/datetime/step_spec.rb
|
105
|
+
- spec/datetime/boat_spec.rb
|
106
|
+
- spec/datetime/succ_spec.rb
|
107
|
+
- spec/datetime/conversions_spec.rb
|
108
|
+
- spec/datetime/hash_spec.rb
|
109
|
+
- spec/datetime/allocate_spec.rb
|
110
|
+
- spec/datetime/strftime_spec.rb
|
111
|
+
- spec/spec_helper.rb
|
112
|
+
- bench/dt_mem_bench.rb
|
113
|
+
- bench/garbage_bench.rb
|
98
114
|
- bench/cpu_bench.rb
|
99
115
|
- bench/dt_garbage_bench.rb
|
100
|
-
- bench/dt_mem_bench.rb
|
101
116
|
- bench/mem_bench.rb
|
102
|
-
- bench/
|
117
|
+
- bench/parser_bench.rb
|
118
|
+
- bench/cpu_bench_util.rb
|
103
119
|
has_rdoc: true
|
104
120
|
homepage: http://github.com/jeremyevans/home_run
|
105
121
|
licenses: []
|
@@ -114,23 +130,31 @@ rdoc_options:
|
|
114
130
|
- --main
|
115
131
|
- README.rdoc
|
116
132
|
require_paths:
|
117
|
-
-
|
133
|
+
- lib
|
118
134
|
required_ruby_version: !ruby/object:Gem::Requirement
|
135
|
+
none: false
|
119
136
|
requirements:
|
120
137
|
- - ">="
|
121
138
|
- !ruby/object:Gem::Version
|
139
|
+
hash: 59
|
140
|
+
segments:
|
141
|
+
- 1
|
142
|
+
- 8
|
143
|
+
- 6
|
122
144
|
version: 1.8.6
|
123
|
-
version:
|
124
145
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
|
+
none: false
|
125
147
|
requirements:
|
126
148
|
- - ">="
|
127
149
|
- !ruby/object:Gem::Version
|
150
|
+
hash: 3
|
151
|
+
segments:
|
152
|
+
- 0
|
128
153
|
version: "0"
|
129
|
-
version:
|
130
154
|
requirements: []
|
131
155
|
|
132
156
|
rubyforge_project:
|
133
|
-
rubygems_version: 1.3.
|
157
|
+
rubygems_version: 1.3.7
|
134
158
|
signing_key:
|
135
159
|
specification_version: 3
|
136
160
|
summary: Fast Date/DateTime classes for ruby
|