iso8601 0.1.1 → 0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +2 -1
- data/lib/iso8601.rb +1 -1
- data/lib/iso8601/duration.rb +2 -2
- data/test/iso8601/test_duration.rb +4 -0
- metadata +3 -4
data/README.md
CHANGED
@@ -14,7 +14,7 @@ Because Durations and DateTime has substract method, Durations has sign to repre
|
|
14
14
|
|
15
15
|
## TODO
|
16
16
|
|
17
|
-
* Decimal fraction in dateTime
|
17
|
+
* Decimal fraction in dateTime patterns
|
18
18
|
* Recurring time intervals
|
19
19
|
* Ordinal date pattern (YYYY-DDD)
|
20
20
|
* Week date pattern (YYYY-Www-D)
|
@@ -23,6 +23,7 @@ Because Durations and DateTime has substract method, Durations has sign to repre
|
|
23
23
|
|
24
24
|
* [Nick Lynch](https://github.com/njlynch)
|
25
25
|
* [Pelle Braendgaard](https://github.com/pelle)
|
26
|
+
* [Takahiro Noda](https://github.com/tnoda)
|
26
27
|
|
27
28
|
## Credits
|
28
29
|
Arnau Siches under [LGPL](http://www.gnu.org/licenses/lgpl.html) license. LICENSE file for details.
|
data/lib/iso8601.rb
CHANGED
data/lib/iso8601/duration.rb
CHANGED
@@ -4,7 +4,7 @@ module ISO8601
|
|
4
4
|
class Duration
|
5
5
|
attr_reader :base, :atoms
|
6
6
|
def initialize(duration, base = nil)
|
7
|
-
@duration = /^(\+|-)?P(((\d+Y)?(\d+M)?(\d+D)?(T(\d+H)?(\d+M)?(\d+S)?)?)|(\d+W))$/.match(duration)
|
7
|
+
@duration = /^(\+|-)?P(((\d+Y)?(\d+M)?(\d+D)?(T(\d+H)?(\d+M)?(\d+(?:\.\d+)?S)?)?)|(\d+W))$/.match(duration)
|
8
8
|
@base = base #date base for duration calculations
|
9
9
|
valid_pattern?
|
10
10
|
valid_base?
|
@@ -104,7 +104,7 @@ module ISO8601
|
|
104
104
|
days, d_mod = (m_mod / self.days.factor).to_i, (m_mod % self.days.factor)
|
105
105
|
hours, h_mod = (d_mod / self.hours.factor).to_i, (d_mod % self.hours.factor)
|
106
106
|
minutes, mi_mod = (h_mod / self.minutes.factor).to_i, (h_mod % self.minutes.factor)
|
107
|
-
seconds = mi_mod.to_i
|
107
|
+
seconds = mi_mod.div(1) == mi_mod ? mi_mod.to_i : mi_mod.to_f # Coerce to Integer when needed (`PT1S` instead of `PT1.0S`)
|
108
108
|
|
109
109
|
seconds = (seconds != 0 or (years == 0 and months == 0 and days == 0 and hours == 0 and minutes == 0)) ? "#{seconds}S" : ""
|
110
110
|
minutes = (minutes != 0) ? "#{minutes}M" : ""
|
@@ -18,6 +18,7 @@ class TestDuration < Test::Unit::TestCase
|
|
18
18
|
assert_nothing_raised() { ISO8601::Duration.new("PT1H1M") }
|
19
19
|
assert_nothing_raised() { ISO8601::Duration.new("PT1H1S") }
|
20
20
|
assert_nothing_raised() { ISO8601::Duration.new("PT1H1M1S") }
|
21
|
+
assert_nothing_raised() { ISO8601::Duration.new("P1Y2M3DT5H20M30.123S")}
|
21
22
|
assert_nothing_raised() { ISO8601::Duration.new("+PT1H1M1S") }
|
22
23
|
assert_nothing_raised() { ISO8601::Duration.new("-PT1H1M1S") }
|
23
24
|
assert_raise(ISO8601::Errors::UnknownPattern) { ISO8601::Duration.new("~PT1H1M1S") }
|
@@ -70,7 +71,9 @@ class TestDuration < Test::Unit::TestCase
|
|
70
71
|
assert_equal(27003, ISO8601::Duration.new("PT7H30M3S").to_seconds, "PT[n]H[n]M[n]S form")
|
71
72
|
assert_equal(2040, ISO8601::Duration.new("PT34M").to_seconds, "PT[n]M form")
|
72
73
|
assert_equal(2050, ISO8601::Duration.new("PT34M10S").to_seconds, "PT[n]M[n]S form")
|
74
|
+
assert_equal(2050.4, ISO8601::Duration.new("PT34M10.4S").to_seconds, "PT[n]M[n.m]S form")
|
73
75
|
assert_equal(10, ISO8601::Duration.new("PT10S").to_seconds, "PT[n]S form")
|
76
|
+
assert_equal(10.5, ISO8601::Duration.new("PT10.5S").to_seconds, "PT[n.m]S form")
|
74
77
|
assert_equal(ISO8601::Duration.new("PT1H15M").to_seconds, ISO8601::Duration.new("PT75M").to_seconds, "PT[n]H[n]M equivalent to PT[n]M")
|
75
78
|
end
|
76
79
|
|
@@ -87,5 +90,6 @@ class TestDuration < Test::Unit::TestCase
|
|
87
90
|
|
88
91
|
def test_seconds_to_iso
|
89
92
|
assert_equal(ISO8601::Duration.new("P1Y2M3DT4H5M6S").to_seconds, ISO8601::Duration.seconds_to_iso(37065906).to_seconds)
|
93
|
+
assert_equal(ISO8601::Duration.new("P1Y2M3DT4H5M6.9S").to_seconds, ISO8601::Duration.seconds_to_iso(37065906.9).to_seconds)
|
90
94
|
end
|
91
95
|
end
|
metadata
CHANGED
@@ -4,9 +4,8 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
|
9
|
-
version: 0.1.1
|
7
|
+
- 2
|
8
|
+
version: "0.2"
|
10
9
|
platform: ruby
|
11
10
|
authors:
|
12
11
|
- Arnau Siches
|
@@ -14,7 +13,7 @@ autorequire:
|
|
14
13
|
bindir: bin
|
15
14
|
cert_chain: []
|
16
15
|
|
17
|
-
date: 2012-
|
16
|
+
date: 2012-03-05 00:00:00 +01:00
|
18
17
|
default_executable:
|
19
18
|
dependencies: []
|
20
19
|
|