dateless_time 0.0.4 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/CHANGELOG.md +50 -0
- data/README.md +14 -6
- data/lib/dateless_time.rb +27 -2
- data/lib/dateless_time/version.rb +1 -1
- data/test/query_test.rb +109 -0
- metadata +14 -12
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
OGQyMDYzMzMxNDQxNDllNmIwNzk3ZjdkMzNmZjJlZjU2YmU4NDI5MQ==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: bbe2b44e02e4194d806aa04a9cfa911a4a223385
|
4
|
+
data.tar.gz: 00f469012a6eb6a00e1d53f85032a3e321942085
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
ZDM3Mzc1ZGIzYzhhN2E3NDBkYzVkMzdhZGYyMGFjMTE2YWMxNDQwNDliNGE1
|
11
|
-
MWRjZDlkYjA2ZmU3NGUwZmI1NTBiZjRiZDM1MTU4NmZhOWU0MDg=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
ZTk3YTY5NWQ0ZmViYWQ1NDdjNTVhYzYyMDkwM2VkZjI2MWJmNjgxZTEwNDAx
|
14
|
-
MDE3MDJiMWJlZTMzNGQzNjQwYTc1Mjc1M2UxODlkNzJhYzJkMDYxMDkyNzJl
|
15
|
-
NTRhN2MwNmJkMWM1MjlhMjFiNmViM2Y5OTQ1MDI0NjJkOTkwOWI=
|
6
|
+
metadata.gz: e3eb28671b034fa1fd58ec92c91c24ecc49c54e3157ba2f5db91815ccfc981b5f71b174dc3fee7fbeff13c11d312435de745ebb873629c2da7a8c063f71df023
|
7
|
+
data.tar.gz: f06462a8feb45a5eb8cb55433cd9c944d3892bbddaf850416fc035cb6f02c9b2c321de8455afc338e39694be6c64d458b1813fee550450e4598db5c8d284b684
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
# DatelessTime Changelog
|
2
|
+
|
3
|
+
## 1.0.0
|
4
|
+
|
5
|
+
The gem graduates from `0.0.x`. The basic functionality is stable and not going to change. The other additions that go into this release are small incremental changes.
|
6
|
+
|
7
|
+
#### New Features
|
8
|
+
|
9
|
+
* Added a changelog.
|
10
|
+
* The method `#to_time` now also accepts `DateTime` objects as base values, in addition to `Time` and `Date`.
|
11
|
+
* Added `#to_datetime` method, with semantics similar to `#to_time`.
|
12
|
+
|
13
|
+
#### Changes
|
14
|
+
|
15
|
+
* Small internal improvements.
|
16
|
+
|
17
|
+
## 0.0.4
|
18
|
+
#### New Features
|
19
|
+
|
20
|
+
* Added methos aliases for `hour`, `min` and `sec`, to make the interface more consistent with the default `Time` class.
|
21
|
+
* The method `#to_time` now also accepts `Date` objects as base values, in addition to `Time` objects.
|
22
|
+
|
23
|
+
## 0.0.3
|
24
|
+
#### New Features
|
25
|
+
|
26
|
+
* Added support to initialize new `DatelessTime` objects with other existing `DatelessTime` objects as sources.
|
27
|
+
* Added support to initizlize new `DatelessTime` objects with `DateTime` objects as sources.
|
28
|
+
* Offical support for sorting in arrays (just added tests to make sure it works).
|
29
|
+
|
30
|
+
#### Changes
|
31
|
+
|
32
|
+
* The gem now explicitly requires `date` from the standard library.
|
33
|
+
|
34
|
+
#### Bug Fixes
|
35
|
+
|
36
|
+
* Inizializing `DatelessTime` objects with strings like `"12:01 am"` or `"12:01 pm"` was generating invalid data.
|
37
|
+
|
38
|
+
## 0.0.2
|
39
|
+
|
40
|
+
#### New Features
|
41
|
+
|
42
|
+
* Implemented support for the `Comparable` module. `DatelessTime` objects now support comparison operators: `==`, `<`, etc.
|
43
|
+
|
44
|
+
#### Bug Fixes
|
45
|
+
|
46
|
+
* The return value of `#to_time` was memoized, this made it impossible to use it moltiple times with different base values.
|
47
|
+
|
48
|
+
## 0.0.1
|
49
|
+
|
50
|
+
The initial release.
|
data/README.md
CHANGED
@@ -28,9 +28,9 @@ No external gems.
|
|
28
28
|
|
29
29
|
Tested with:
|
30
30
|
|
31
|
-
* MRI
|
32
|
-
* Rubinius
|
33
|
-
* JRuby
|
31
|
+
* MRI `>= 1.9.3`
|
32
|
+
* Rubinius `>= 2.2`
|
33
|
+
* JRuby `>= 1.7`
|
34
34
|
|
35
35
|
|
36
36
|
## How
|
@@ -75,7 +75,7 @@ require 'dateless_time'
|
|
75
75
|
time = DatelessTime.new "13:37:42"
|
76
76
|
|
77
77
|
time.hours
|
78
|
-
|
78
|
+
time.hour
|
79
79
|
#=> 13
|
80
80
|
|
81
81
|
time.minutes
|
@@ -87,7 +87,6 @@ time.sec
|
|
87
87
|
#=> 42
|
88
88
|
|
89
89
|
time.seconds_since_midnight
|
90
|
-
# or
|
91
90
|
time.to_i
|
92
91
|
# => 49062
|
93
92
|
|
@@ -99,13 +98,21 @@ time.to_time
|
|
99
98
|
time.to_time(Time.new(1985, 10, 25, 0, 0, 0, "-08:00"))
|
100
99
|
# => 1985-10-25 13:37:42 -0800
|
101
100
|
|
102
|
-
# or a base Date
|
101
|
+
# or a base Date or DateTime
|
103
102
|
time.to_time(Date.new(1985, 10, 25))
|
104
103
|
# => 1985-10-25 13:37:42 +0100
|
105
104
|
|
106
105
|
time.to_time.class
|
107
106
|
# => Time
|
108
107
|
|
108
|
+
# this uses DateTime.now to fill the date-related bits
|
109
|
+
time.to_datetime
|
110
|
+
# => #<DateTime: 2015-11-11T13:37:42+00:00 ((2457338j,49062s,0n),+0s,2299161j)>
|
111
|
+
|
112
|
+
# but here, too, you can supply a base object instead (Date, Time or DateTime)
|
113
|
+
time.to_datetime(Date.new(1985, 10, 25))
|
114
|
+
# => #<DateTime: 1985-10-25T13:37:42+00:00 ((2446364j,49062s,0n),+0s,2299161j)>
|
115
|
+
|
109
116
|
time.strftime("%-l:%M %P")
|
110
117
|
# => "1:37 pm"
|
111
118
|
|
@@ -189,6 +196,7 @@ end
|
|
189
196
|
|
190
197
|
1. implement the `+` and `-` artimetic operators, in a way consistent with Ruby's `Time`
|
191
198
|
2. nice to have: other methods from `Time`'s public interface
|
199
|
+
3. using `DateTime` objects as base for `#to_time` and `#to_datetime` does not support fractional utc offsets (e.g. Australia)
|
192
200
|
|
193
201
|
|
194
202
|
|
data/lib/dateless_time.rb
CHANGED
@@ -36,8 +36,33 @@ class DatelessTime
|
|
36
36
|
|
37
37
|
def to_time(base = Time.now)
|
38
38
|
args = [base.year, base.month, base.day, @hours, @minutes, @seconds]
|
39
|
-
|
40
|
-
|
39
|
+
|
40
|
+
if base.is_a?(Time)
|
41
|
+
args << base.utc_offset
|
42
|
+
elsif base.is_a?(DateTime)
|
43
|
+
args << (base.offset * SECONDS_IN_24_HOURS)
|
44
|
+
end
|
45
|
+
|
46
|
+
Time.new(*args)
|
47
|
+
rescue
|
48
|
+
nil
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
def to_datetime(base = DateTime.now)
|
53
|
+
args = [base.year, base.month, base.day, @hours, @minutes, @seconds]
|
54
|
+
|
55
|
+
normalized_offset = begin
|
56
|
+
if base.is_a?(DateTime)
|
57
|
+
base.offset * 24
|
58
|
+
elsif base.is_a?(Time)
|
59
|
+
base.utc_offset / 3600
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
normalized_offset && args << sprintf("%+d", normalized_offset)
|
64
|
+
|
65
|
+
DateTime.new(*args)
|
41
66
|
rescue
|
42
67
|
nil
|
43
68
|
end
|
data/test/query_test.rb
CHANGED
@@ -27,6 +27,15 @@ class QueryTest < Minitest::Test
|
|
27
27
|
end
|
28
28
|
|
29
29
|
|
30
|
+
def test_to_time_with_time_with_offset_base
|
31
|
+
base = Time.new(1990, 11, 10, 12, 13, 14, '+04:00')
|
32
|
+
@to_time = @dl_time.to_time(base)
|
33
|
+
|
34
|
+
assert_equal Time, @to_time.class
|
35
|
+
assert_equal Time.new(1990, 11, 10, 13, 37, 42, '+04:00'), @to_time
|
36
|
+
end
|
37
|
+
|
38
|
+
|
30
39
|
def test_to_time_with_date_base
|
31
40
|
base = Date.new(1990, 11, 10)
|
32
41
|
@to_time = @dl_time.to_time(base)
|
@@ -36,6 +45,25 @@ class QueryTest < Minitest::Test
|
|
36
45
|
end
|
37
46
|
|
38
47
|
|
48
|
+
|
49
|
+
def test_to_time_with_datetime_base
|
50
|
+
base = DateTime.new(1990, 11, 10, 12, 13, 14)
|
51
|
+
@to_time = @dl_time.to_time(base)
|
52
|
+
|
53
|
+
assert_equal Time, @to_time.class
|
54
|
+
assert_equal Time.new(1990, 11, 10, 13, 37, 42), @to_time
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
def test_to_time_with_datetime_with_offset_base
|
59
|
+
base = DateTime.new(1990, 11, 10, 12, 13, 14, '+4')
|
60
|
+
@to_time = @dl_time.to_time(base)
|
61
|
+
|
62
|
+
assert_equal Time, @to_time.class
|
63
|
+
assert_equal Time.new(1990, 11, 10, 13, 37, 42, '+04:00'), @to_time
|
64
|
+
end
|
65
|
+
|
66
|
+
|
39
67
|
def test_to_time_with_different_bases_should_change
|
40
68
|
@to_time = @dl_time.to_time
|
41
69
|
now = Time.now
|
@@ -53,6 +81,87 @@ class QueryTest < Minitest::Test
|
|
53
81
|
end
|
54
82
|
|
55
83
|
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
def test_to_datetime_without_base
|
90
|
+
@to_datetime = @dl_time.to_datetime
|
91
|
+
now = DateTime.now
|
92
|
+
expected = DateTime.new(now.year, now.month, now.day, 13, 37, 42)
|
93
|
+
|
94
|
+
assert_equal DateTime, @to_datetime.class
|
95
|
+
assert_equal expected, @to_datetime
|
96
|
+
end
|
97
|
+
|
98
|
+
|
99
|
+
def test_to_datetime_with_time_base
|
100
|
+
base = Time.new(1990, 11, 10, 12, 13, 14)
|
101
|
+
@to_datetime = @dl_time.to_datetime(base)
|
102
|
+
|
103
|
+
assert_equal DateTime, @to_datetime.class
|
104
|
+
assert_equal DateTime.new(1990, 11, 10, 13, 37, 42), @to_datetime
|
105
|
+
end
|
106
|
+
|
107
|
+
|
108
|
+
def test_to_datetime_with_time_with_offset_base
|
109
|
+
base = Time.new(1990, 11, 10, 12, 13, 14, '+04:00')
|
110
|
+
@to_datetime = @dl_time.to_datetime(base)
|
111
|
+
|
112
|
+
assert_equal DateTime, @to_datetime.class
|
113
|
+
assert_equal DateTime.new(1990, 11, 10, 13, 37, 42, '+4'), @to_datetime
|
114
|
+
end
|
115
|
+
|
116
|
+
|
117
|
+
def test_to_datetime_with_date_base
|
118
|
+
base = Date.new(1990, 11, 10)
|
119
|
+
@to_datetime = @dl_time.to_datetime(base)
|
120
|
+
|
121
|
+
assert_equal DateTime, @to_datetime.class
|
122
|
+
assert_equal DateTime.new(1990, 11, 10, 13, 37, 42), @to_datetime
|
123
|
+
end
|
124
|
+
|
125
|
+
|
126
|
+
|
127
|
+
def test_to_datetime_with_datetime_base
|
128
|
+
base = DateTime.new(1990, 11, 10, 12, 13, 14)
|
129
|
+
@to_datetime = @dl_time.to_datetime(base)
|
130
|
+
|
131
|
+
assert_equal DateTime, @to_datetime.class
|
132
|
+
assert_equal DateTime.new(1990, 11, 10, 13, 37, 42), @to_datetime
|
133
|
+
end
|
134
|
+
|
135
|
+
|
136
|
+
def test_to_datetime_with_datetime_with_offset_base
|
137
|
+
base = DateTime.new(1990, 11, 10, 12, 13, 14, '+4')
|
138
|
+
@to_datetime = @dl_time.to_datetime(base)
|
139
|
+
|
140
|
+
assert_equal DateTime, @to_datetime.class
|
141
|
+
assert_equal DateTime.new(1990, 11, 10, 13, 37, 42, '+4'), @to_datetime
|
142
|
+
end
|
143
|
+
|
144
|
+
|
145
|
+
def test_to_datetime_with_different_bases_should_change
|
146
|
+
@to_datetime = @dl_time.to_datetime
|
147
|
+
now = Time.now
|
148
|
+
expected = DateTime.new(now.year, now.month, now.day, 13, 37, 42)
|
149
|
+
|
150
|
+
assert_equal DateTime, @to_datetime.class
|
151
|
+
assert_equal expected, @to_datetime
|
152
|
+
|
153
|
+
|
154
|
+
base = Time.new(1990, 11, 10, 12, 13, 14)
|
155
|
+
@to_datetime = @dl_time.to_datetime(base)
|
156
|
+
|
157
|
+
assert_equal DateTime, @to_datetime.class
|
158
|
+
assert_equal DateTime.new(1990, 11, 10, 13, 37, 42), @to_datetime
|
159
|
+
end
|
160
|
+
|
161
|
+
|
162
|
+
|
163
|
+
|
164
|
+
|
56
165
|
def test_to_s
|
57
166
|
assert_equal "13:37:42", @dl_time.to_s
|
58
167
|
end
|
metadata
CHANGED
@@ -1,55 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dateless_time
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tommaso Pavese
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-11-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.3'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '10.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: minitest
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '5.3'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '5.3'
|
55
55
|
description: A class to handle dateless time values. DatelessTime objects are a lightweight
|
@@ -59,7 +59,8 @@ executables: []
|
|
59
59
|
extensions: []
|
60
60
|
extra_rdoc_files: []
|
61
61
|
files:
|
62
|
-
- .gitignore
|
62
|
+
- ".gitignore"
|
63
|
+
- CHANGELOG.md
|
63
64
|
- Gemfile
|
64
65
|
- LICENSE.txt
|
65
66
|
- README.md
|
@@ -81,17 +82,17 @@ require_paths:
|
|
81
82
|
- lib
|
82
83
|
required_ruby_version: !ruby/object:Gem::Requirement
|
83
84
|
requirements:
|
84
|
-
- -
|
85
|
+
- - ">="
|
85
86
|
- !ruby/object:Gem::Version
|
86
87
|
version: '0'
|
87
88
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
89
|
requirements:
|
89
|
-
- -
|
90
|
+
- - ">="
|
90
91
|
- !ruby/object:Gem::Version
|
91
92
|
version: '0'
|
92
93
|
requirements: []
|
93
94
|
rubyforge_project:
|
94
|
-
rubygems_version: 2.
|
95
|
+
rubygems_version: 2.4.5.1
|
95
96
|
signing_key:
|
96
97
|
specification_version: 4
|
97
98
|
summary: A class to handle dateless time values.
|
@@ -100,3 +101,4 @@ test_files:
|
|
100
101
|
- test/creation_test.rb
|
101
102
|
- test/query_test.rb
|
102
103
|
- test/test_helper.rb
|
104
|
+
has_rdoc:
|