iso8601 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -29,6 +29,10 @@ module ISO8601
29
29
  end
30
30
  end
31
31
  ##
32
+ # Raised when the type is unexpected
33
+ class TypeError < StandardError
34
+ end
35
+ ##
32
36
  # Raise when the base is not suitable.
33
37
  class DurationBaseError < StandardError
34
38
  def initialize(duration)
data/lib/iso8601/time.rb CHANGED
@@ -14,7 +14,7 @@ module ISO8601
14
14
 
15
15
  def_delegators(:@time,
16
16
  :to_time, :to_date, :to_datetime,
17
- :hour, :minute, :zone, :hash)
17
+ :hour, :minute, :zone)
18
18
  ##
19
19
  # The separator used in the original ISO 8601 string.
20
20
  attr_reader :separator
@@ -39,6 +39,25 @@ module ISO8601
39
39
  @second = @time.second + @time.second_fraction.to_f
40
40
  end
41
41
  ##
42
+ # @param [#hash] contrast The contrast to compare against
43
+ #
44
+ # @return [Boolean]
45
+ def ==(contrast)
46
+ (hash == contrast.hash)
47
+ end
48
+ ##
49
+ # @param [#hash] contrast The contrast to compare against
50
+ #
51
+ # @return [Boolean]
52
+ def eql?(contrast)
53
+ (hash == contrast.hash)
54
+ end
55
+ ##
56
+ # @return [Fixnum]
57
+ def hash
58
+ [atoms, self.class].hash
59
+ end
60
+ ##
42
61
  # Forwards the time the given amount of seconds.
43
62
  #
44
63
  # @param [Numeric] seconds The seconds to add
@@ -1,5 +1,5 @@
1
1
  module ISO8601
2
2
  ##
3
3
  # The gem version
4
- VERSION = '0.7.0'
4
+ VERSION = '0.8.0'
5
5
  end
@@ -1,8 +1,6 @@
1
- # encoding: utf-8
2
-
3
1
  require 'spec_helper'
4
2
 
5
- describe ISO8601::Atom do
3
+ RSpec.describe ISO8601::Atom do
6
4
  it "should raise a TypeError when receives anything but a Numeric value" do
7
5
  expect { ISO8601::Atom.new('1') }.to raise_error
8
6
  expect { ISO8601::Atom.new(true) }.to raise_error
@@ -20,16 +18,28 @@ describe ISO8601::Atom do
20
18
  expect { ISO8601::Atom.new(1, 10) }.to raise_error
21
19
  end
22
20
  it "should create a new atom" do
23
- ISO8601::Atom.new(-1).should be_an_instance_of(ISO8601::Atom)
21
+ expect(ISO8601::Atom.new(-1)).to be_an_instance_of(ISO8601::Atom)
24
22
  end
25
23
  describe '#to_i' do
26
24
  it "should return an integer" do
27
- ISO8601::Atom.new(1).to_i.should be_a_kind_of(Integer)
28
- ISO8601::Atom.new(1.0).to_i.should be_a_kind_of(Integer)
25
+ expect(ISO8601::Atom.new(1).to_i).to be_a_kind_of(Integer)
26
+ expect(ISO8601::Atom.new(1.0).to_i).to be_a_kind_of(Integer)
29
27
  end
30
28
  it "should return the integer part of the given number" do
31
- n = 1.0
32
- ISO8601::Atom.new(n).to_i.should == n.to_i
29
+ expect(ISO8601::Atom.new(1.0).to_i).to eq(1.0.to_i)
30
+ end
31
+ end
32
+ describe '#to_f' do
33
+ it "should return a float" do
34
+ expect(ISO8601::Atom.new(1).to_f).to be_a_kind_of(Float)
35
+ expect(ISO8601::Atom.new(1.0).to_f).to be_a_kind_of(Float)
36
+ end
37
+ end
38
+ describe '#value' do
39
+ it "should return the simplest value representation" do
40
+ expect(ISO8601::Atom.new(1).value).to eq(1)
41
+ expect(ISO8601::Atom.new(1.0).value).to eq(1)
42
+ expect(ISO8601::Atom.new(1.1).value).to eq(1.1)
33
43
  end
34
44
  end
35
45
  describe '#factor' do
@@ -43,31 +53,50 @@ describe ISO8601::Years do
43
53
  describe '#factor' do
44
54
  it "should return the Year factor" do
45
55
  expect { ISO8601::Years.new(1).factor }.to_not raise_error
46
- ISO8601::Years.new(2).factor.should == 31536000
47
- ISO8601::Years.new(1).factor.should == 31536000
56
+ expect(ISO8601::Years.new(2).factor).to eq(31536000)
57
+ expect(ISO8601::Years.new(1).factor).to eq(31536000)
48
58
  end
49
59
  it "should return the Year factor for a common year" do
50
- ISO8601::Years.new(1, ISO8601::DateTime.new("2010-01-01")).factor.should == 31536000
60
+ expect(ISO8601::Years.new(1, ISO8601::DateTime.new("2010-01-01")).factor).to eq(31536000)
51
61
  end
52
62
  it "should return the Year factor for a leap year" do
53
- ISO8601::Years.new(1, ISO8601::DateTime.new("2000-01-01")).factor.should == 31622400
63
+ expect(ISO8601::Years.new(1, ISO8601::DateTime.new("2000-01-01")).factor).to eq(31622400)
54
64
  end
55
65
  end
56
66
 
57
67
  describe '#to_seconds' do
58
68
  it "should return the amount of seconds" do
59
- ISO8601::Years.new(2).to_seconds.should == 63072000
60
- ISO8601::Years.new(-2).to_seconds.should == -63072000
69
+ expect(ISO8601::Years.new(2).to_seconds).to eq(63072000)
70
+ expect(ISO8601::Years.new(-2).to_seconds).to eq(-63072000)
61
71
  end
62
72
  it "should return the amount of seconds for a common year" do
63
73
  base = ISO8601::DateTime.new('2010-01-01')
64
- ISO8601::Years.new(2, base).to_seconds.should == 63072000
65
- ISO8601::Years.new(12, base).to_seconds.should == 378691200
74
+ expect(ISO8601::Years.new(2, base).to_seconds).to eq(63072000)
75
+ expect(ISO8601::Years.new(12, base).to_seconds).to eq(378691200)
66
76
  end
67
77
  it "should return the amount of seconds for a leap year" do
68
78
  base = ISO8601::DateTime.new('2000-01-01')
69
- ISO8601::Years.new(2, base).to_seconds.should == 63158400
70
- ISO8601::Years.new(15, base).to_seconds.should == 473385600
79
+ expect(ISO8601::Years.new(2, base).to_seconds).to eq(63158400)
80
+ expect(ISO8601::Years.new(15, base).to_seconds).to eq(473385600)
81
+ end
82
+ end
83
+
84
+ describe '#symbol' do
85
+ it "should return the ISO symbol" do
86
+ expect(ISO8601::Years.new(1)).to respond_to(:symbol)
87
+ expect(ISO8601::Years.new(1).symbol).to eq(:Y)
88
+ end
89
+ end
90
+
91
+ describe '#hash' do
92
+ let(:subject) { ISO8601::Years.new(3) }
93
+ it "should respond to #hash" do
94
+ expect(subject).to respond_to(:hash)
95
+ end
96
+ it "should build hash identity by value" do
97
+ contrast = ISO8601::Years.new(3)
98
+
99
+ expect(subject.hash == contrast.hash).to be_truthy
71
100
  end
72
101
  end
73
102
  end
@@ -76,38 +105,56 @@ describe ISO8601::Months do
76
105
  describe '#factor' do
77
106
  it "should return the Month factor" do
78
107
  expect { ISO8601::Months.new(1).factor }.to_not raise_error
79
- ISO8601::Months.new(2).factor.should == 2628000
108
+ expect(ISO8601::Months.new(2).factor).to eq(2628000)
80
109
  end
81
110
  it "should return the Month factor for a common year" do
82
- ISO8601::Months.new(1, ISO8601::DateTime.new('2010-01-01')).factor.should == 2678400
111
+ expect(ISO8601::Months.new(1, ISO8601::DateTime.new('2010-01-01')).factor).to eq(2678400)
83
112
  end
84
113
  it "should return the Month factor for a leap year" do
85
- ISO8601::Months.new(1, ISO8601::DateTime.new('2000-01-01')).factor.should == 2678400
114
+ expect(ISO8601::Months.new(1, ISO8601::DateTime.new('2000-01-01')).factor).to eq(2678400)
86
115
  end
87
116
  it "should return the Month factor based on february for a common year" do
88
- ISO8601::Months.new(1, ISO8601::DateTime.new('2010-02-01')).factor.should == 2419200
117
+ expect(ISO8601::Months.new(1, ISO8601::DateTime.new('2010-02-01')).factor).to eq(2419200)
89
118
  end
90
119
  it "should return the Month factor based on february for a leap year" do
91
- ISO8601::Months.new(1, ISO8601::DateTime.new('2000-02-01')).factor.should == 2505600
120
+ expect(ISO8601::Months.new(1, ISO8601::DateTime.new('2000-02-01')).factor).to eq(2505600)
92
121
  end
93
122
  end
94
123
  describe '#to_seconds' do
95
124
  it "should return the amount of seconds" do
96
- ISO8601::Months.new(2).to_seconds.should == 5256000
125
+ expect(ISO8601::Months.new(2).to_seconds).to eq(5256000)
97
126
  end
98
127
  it "should return the amount of seconds for a common year" do
99
- ISO8601::Months.new(2, ISO8601::DateTime.new('2010-01-01')).to_seconds.should == 5097600
128
+ expect(ISO8601::Months.new(2, ISO8601::DateTime.new('2010-01-01')).to_seconds).to eq(5097600)
100
129
  end
101
130
  it "should return the amount of seconds for a leap year" do
102
- ISO8601::Months.new(2, ISO8601::DateTime.new('2000-01-01')).to_seconds.should == 5184000
131
+ expect(ISO8601::Months.new(2, ISO8601::DateTime.new('2000-01-01')).to_seconds).to eq(5184000)
103
132
  end
104
133
  it "should return the amount of seconds based on februrary for a common year" do
105
- ISO8601::Months.new(2, ISO8601::DateTime.new('2010-02-01')).to_seconds.should == 5097600
134
+ expect(ISO8601::Months.new(2, ISO8601::DateTime.new('2010-02-01')).to_seconds).to eq(5097600)
106
135
  end
107
136
  it "should return the amount of seconds based on february for a leap year" do
108
- ISO8601::Months.new(2, ISO8601::DateTime.new('2000-02-01')).to_seconds.should == 5184000
109
- ISO8601::Months.new(12, ISO8601::DateTime.new('2000-02-01')).to_seconds.should == 31622400
110
- ISO8601::Months.new(12, ISO8601::DateTime.new('2000-02-01')).to_seconds.should == ISO8601::Years.new(1, ISO8601::DateTime.new("2000-02-01")).to_seconds
137
+ expect(ISO8601::Months.new(2, ISO8601::DateTime.new('2000-02-01')).to_seconds).to eq(5184000)
138
+ expect(ISO8601::Months.new(12, ISO8601::DateTime.new('2000-02-01')).to_seconds).to eq(31622400)
139
+ expect(ISO8601::Months.new(12, ISO8601::DateTime.new('2000-02-01')).to_seconds).to eq(ISO8601::Years.new(1, ISO8601::DateTime.new("2000-02-01")).to_seconds)
140
+ end
141
+ end
142
+ describe '#symbol' do
143
+ it "should return the ISO symbol" do
144
+ expect(ISO8601::Months.new(1)).to respond_to(:symbol)
145
+ expect(ISO8601::Months.new(1).symbol).to eq(:M)
146
+ end
147
+ end
148
+
149
+ describe '#hash' do
150
+ let(:subject) { ISO8601::Months.new(3) }
151
+ it "should respond to #hash" do
152
+ expect(subject).to respond_to(:hash)
153
+ end
154
+ it "should build hash identity by value" do
155
+ contrast = ISO8601::Months.new(3)
156
+
157
+ expect(subject.hash == contrast.hash).to be_truthy
111
158
  end
112
159
  end
113
160
  end
@@ -115,13 +162,31 @@ end
115
162
  describe ISO8601::Weeks do
116
163
  describe '#factor' do
117
164
  it "should return the Week factor" do
118
- ISO8601::Weeks.new(2).factor.should == 604800
165
+ expect(ISO8601::Weeks.new(2).factor).to eq(604800)
119
166
  end
120
167
  end
121
168
  describe '#to_seconds' do
122
169
  it "should return the amount of seconds" do
123
- ISO8601::Weeks.new(2).to_seconds.should == 1209600
124
- ISO8601::Weeks.new(-2).to_seconds.should == -1209600
170
+ expect(ISO8601::Weeks.new(2).to_seconds).to eq(1209600)
171
+ expect(ISO8601::Weeks.new(-2).to_seconds).to eq(-1209600)
172
+ end
173
+ end
174
+ describe '#symbol' do
175
+ it "should return the ISO symbol" do
176
+ expect(ISO8601::Weeks.new(1)).to respond_to(:symbol)
177
+ expect(ISO8601::Weeks.new(1).symbol).to eq(:W)
178
+ end
179
+ end
180
+
181
+ describe '#hash' do
182
+ let(:subject) { ISO8601::Weeks.new(3) }
183
+ it "should respond to #hash" do
184
+ expect(subject).to respond_to(:hash)
185
+ end
186
+ it "should build hash identity by value" do
187
+ contrast = ISO8601::Weeks.new(3)
188
+
189
+ expect(subject.hash == contrast.hash).to be_truthy
125
190
  end
126
191
  end
127
192
  end
@@ -129,11 +194,29 @@ end
129
194
  describe ISO8601::Days do
130
195
  describe '#factor' do
131
196
  it "should return the Day factor" do
132
- ISO8601::Days.new(2).factor.should == 86400
197
+ expect(ISO8601::Days.new(2).factor).to eq(86400)
133
198
  end
134
199
  it "should return the amount of seconds" do
135
- ISO8601::Days.new(2).to_seconds.should == 172800
136
- ISO8601::Days.new(-2).to_seconds.should == -172800
200
+ expect(ISO8601::Days.new(2).to_seconds).to eq(172800)
201
+ expect(ISO8601::Days.new(-2).to_seconds).to eq(-172800)
202
+ end
203
+ end
204
+ describe '#symbol' do
205
+ it "should return the ISO symbol" do
206
+ expect(ISO8601::Days.new(1)).to respond_to(:symbol)
207
+ expect(ISO8601::Days.new(1).symbol).to eq(:D)
208
+ end
209
+ end
210
+
211
+ describe '#hash' do
212
+ let(:subject) { ISO8601::Days.new(3) }
213
+ it "should respond to #hash" do
214
+ expect(subject).to respond_to(:hash)
215
+ end
216
+ it "should build hash identity by value" do
217
+ contrast = ISO8601::Days.new(3)
218
+
219
+ expect(subject.hash == contrast.hash).to be_truthy
137
220
  end
138
221
  end
139
222
  end
@@ -141,11 +224,29 @@ end
141
224
  describe ISO8601::Hours do
142
225
  describe '#factor' do
143
226
  it "should return the Hour factor" do
144
- ISO8601::Hours.new(2).factor.should == 3600
227
+ expect(ISO8601::Hours.new(2).factor).to eq(3600)
145
228
  end
146
229
  it "should return the amount of seconds" do
147
- ISO8601::Hours.new(2).to_seconds.should == 7200
148
- ISO8601::Hours.new(-2).to_seconds.should == -7200
230
+ expect(ISO8601::Hours.new(2).to_seconds).to eq(7200)
231
+ expect(ISO8601::Hours.new(-2).to_seconds).to eq(-7200)
232
+ end
233
+ end
234
+ describe '#symbol' do
235
+ it "should return the ISO symbol" do
236
+ expect(ISO8601::Hours.new(1)).to respond_to(:symbol)
237
+ expect(ISO8601::Hours.new(1).symbol).to eq(:H)
238
+ end
239
+ end
240
+
241
+ describe '#hash' do
242
+ let(:subject) { ISO8601::Hours.new(3) }
243
+ it "should respond to #hash" do
244
+ expect(subject).to respond_to(:hash)
245
+ end
246
+ it "should build hash identity by value" do
247
+ contrast = ISO8601::Hours.new(3)
248
+
249
+ expect(subject.hash == contrast.hash).to be_truthy
149
250
  end
150
251
  end
151
252
  end
@@ -153,11 +254,29 @@ end
153
254
  describe ISO8601::Minutes do
154
255
  describe '#factor' do
155
256
  it "should return the Minute factor" do
156
- ISO8601::Minutes.new(2).factor.should == 60
257
+ expect(ISO8601::Minutes.new(2).factor).to eq(60)
157
258
  end
158
259
  it "should return the amount of seconds" do
159
- ISO8601::Minutes.new(2).to_seconds.should == 120
160
- ISO8601::Minutes.new(-2).to_seconds.should == -120
260
+ expect(ISO8601::Minutes.new(2).to_seconds).to eq(120)
261
+ expect(ISO8601::Minutes.new(-2).to_seconds).to eq(-120)
262
+ end
263
+ end
264
+ describe '#symbol' do
265
+ it "should return the ISO symbol" do
266
+ expect(ISO8601::Minutes.new(1)).to respond_to(:symbol)
267
+ expect(ISO8601::Minutes.new(1).symbol).to eq(:M)
268
+ end
269
+ end
270
+
271
+ describe '#hash' do
272
+ let(:subject) { ISO8601::Minutes.new(3) }
273
+ it "should respond to #hash" do
274
+ expect(subject).to respond_to(:hash)
275
+ end
276
+ it "should build hash identity by value" do
277
+ contrast = ISO8601::Minutes.new(3)
278
+
279
+ expect(subject.hash == contrast.hash).to be_truthy
161
280
  end
162
281
  end
163
282
  end
@@ -165,12 +284,29 @@ end
165
284
  describe ISO8601::Seconds do
166
285
  describe '#factor' do
167
286
  it "should return the Second factor" do
168
- ISO8601::Seconds.new(2).factor.should == 1
287
+ expect(ISO8601::Seconds.new(2).factor).to eq(1)
169
288
  end
170
289
  it "should return the amount of seconds" do
171
- ISO8601::Seconds.new(2).to_seconds.should == 2
172
- ISO8601::Seconds.new(-2).to_seconds.should == -2
290
+ expect(ISO8601::Seconds.new(2).to_seconds).to eq(2)
291
+ expect(ISO8601::Seconds.new(-2).to_seconds).to eq(-2)
173
292
  end
174
293
  end
175
- end
294
+ describe '#symbol' do
295
+ it "should return the ISO symbol" do
296
+ expect(ISO8601::Seconds.new(1)).to respond_to(:symbol)
297
+ expect(ISO8601::Seconds.new(1).symbol).to eq(:S)
298
+ end
299
+ end
300
+
301
+ describe '#hash' do
302
+ let(:subject) { ISO8601::Seconds.new(3) }
303
+ it "should respond to #hash" do
304
+ expect(subject).to respond_to(:hash)
305
+ end
306
+ it "should build hash identity by value" do
307
+ contrast = ISO8601::Seconds.new(3)
176
308
 
309
+ expect(subject.hash == contrast.hash).to be_truthy
310
+ end
311
+ end
312
+ end
@@ -38,54 +38,51 @@ describe ISO8601::Date do
38
38
  context 'reduced patterns' do
39
39
  it "should parse correctly reduced dates" do
40
40
  reduced_date = ISO8601::Date.new('20100509')
41
- reduced_date.year.should == 2010
42
- reduced_date.month.should == 5
43
- reduced_date.day.should == 9
41
+ expect(reduced_date.year).to eq(2010)
42
+ expect(reduced_date.month).to eq(5)
43
+ expect(reduced_date.day).to eq(9)
44
44
  end
45
45
  end
46
46
 
47
47
  it "should return the right sign for the given year" do
48
- ISO8601::Date.new('-2014-05-31').year.should == -2014
49
- ISO8601::Date.new('+2014-05-31').year.should == 2014
48
+ expect(ISO8601::Date.new('-2014-05-31').year).to eq(-2014)
49
+ expect(ISO8601::Date.new('+2014-05-31').year).to eq(2014)
50
50
  end
51
51
 
52
52
  it "should respond to delegated casting methods" do
53
- dt = ISO8601::Date.new('2014-12-11')
54
- dt.should respond_to(:to_s, :to_time, :to_date, :to_datetime)
53
+ expect(ISO8601::Date.new('2014-12-11')).to respond_to(:to_s, :to_time, :to_date, :to_datetime)
55
54
  end
56
55
 
57
56
  describe '#+' do
58
57
  it "should return the result of the addition" do
59
- (ISO8601::Date.new('2012-07-07') + 7).to_s.should == '2012-07-14'
58
+ expect((ISO8601::Date.new('2012-07-07') + 7).to_s).to eq('2012-07-14')
60
59
  end
61
60
  end
62
61
 
63
62
  describe '#-' do
64
63
  it "should return the result of the substraction" do
65
- (ISO8601::Date.new('2012-07-07') - 7).to_s.should == '2012-06-30'
64
+ expect((ISO8601::Date.new('2012-07-07') - 7).to_s).to eq('2012-06-30')
66
65
  end
67
66
  end
68
67
 
69
68
  describe '#to_a' do
70
69
  it "should return an array of atoms" do
71
- dt = ISO8601::Date.new('2014-05-31').to_a
72
- dt.should be_kind_of(Array)
73
- dt.should == [2014, 5, 31]
70
+ expect(ISO8601::Date.new('2014-05-31').to_a).to eq([2014, 5, 31])
74
71
  end
75
72
  end
76
73
 
77
74
  describe '#atoms' do
78
75
  it "should return an array of original atoms" do
79
- ISO8601::Date.new('2014-05-02').atoms.should == [2014, 5, 2]
80
- ISO8601::Date.new('2014-05').atoms.should == [2014, 5]
81
- ISO8601::Date.new('2014').atoms.should == [2014]
76
+ expect(ISO8601::Date.new('2014-05-02').atoms).to eq([2014, 5, 2])
77
+ expect(ISO8601::Date.new('2014-05').atoms).to eq([2014, 5])
78
+ expect(ISO8601::Date.new('2014').atoms).to eq([2014])
82
79
  end
83
80
  end
84
81
 
85
82
  describe '#hash' do
86
83
  it "should return the date hash" do
87
84
  subject = ISO8601::Date.new('2014-08-16')
88
- contrast = ::Date.new(2014, 8, 16)
85
+ contrast = ISO8601::Date.new('2014-08-16')
89
86
 
90
87
  expect(subject).to respond_to(:hash)
91
88
  expect(subject.hash).to eq(contrast.hash)