dateless_time 0.0.2 → 0.0.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: beb998e71c803edaa9cc5f5a43de996a3807d73b
4
- data.tar.gz: c3518170af494b7996b1a92b46bb2503048855e0
3
+ metadata.gz: 6ac149024e32610ff56ae354bfad143ad37639d5
4
+ data.tar.gz: 941a7c524b054ecbd995c48c8b5f44a82c5da92a
5
5
  SHA512:
6
- metadata.gz: a07b4e6b283c8a966e9783a9bbdab7bc66ad5bbbb15132dbb1d0c4bad3977bbaa4e8c4daf495d20e83c936b85fb3cf26f7993122e140609443689c0f6e781121
7
- data.tar.gz: 9c4e6aa1b15cbf44b3e9ba6aa18dd15270b861a3ec0140cf2bff4affd3f73eb88cc9137e06fcf7e08b520e9022f854140ec68a086d7e22c3668b50ca09665059
6
+ metadata.gz: 4a044edb3457d468247a6d8bf0919ebc71d3ef803b7a08344d7368262c37d7421c954fa0087e906537033108db0fb72038a5c034a65f8b18c131cd03c1e4bdf9
7
+ data.tar.gz: 56fc6415511cc95bef2d152e04d3f1f337a5d50a5af6551f076bda2fa27f1ae6750549c240be28932ae22e19d04b00b4544b7f2cfc2acdeaf599f7625ed4f471
data/README.md CHANGED
@@ -20,14 +20,15 @@ As easy as pie.
20
20
 
21
21
  ## Dependencies
22
22
 
23
- None. No external gems, nothing from the stdlib either.
23
+ No external gems.
24
+ `date` from the stdlib.
24
25
 
25
26
 
26
27
  ## Rubies
27
28
 
28
29
  Tested with:
29
30
 
30
- * MRI `1.9.3`, `2.0.0`, `2.1.0` and `2.1.1`
31
+ * MRI `1.9.3`, `2.0.0`, `2.1.0`, `2.1.1` and `2.1.2`
31
32
  * Rubinius `2.2.4`
32
33
  * JRuby `1.7.10`
33
34
 
@@ -46,6 +47,9 @@ time = DatelessTime.now
46
47
  # or a Time object
47
48
  time = DatelessTime.new Time.now
48
49
 
50
+ # or a DateTime object
51
+ time = DatelessTime.new DateTime.now
52
+
49
53
  # or a String (minutes and seconds are optional)
50
54
  time = DatelessTime.new "13:37:00"
51
55
 
@@ -58,6 +62,9 @@ time = DatelessTime.new hours: 13, minutes: 37, seconds: 0
58
62
  # or an Array (minutes and seconds are optional)
59
63
  time = DatelessTime.new [13, 37, 0]
60
64
 
65
+ # or another DatelessTime object
66
+ time = DatelessTime.new DatelessTime.new('00:42')
67
+
61
68
  ```
62
69
 
63
70
  Interface:
@@ -109,21 +116,26 @@ Comparisons:
109
116
  ```ruby
110
117
 
111
118
  @time_1 = DatelessTime.new "11:22"
112
- @time_1 = DatelessTime.new "11:30"
119
+ @time_2 = DatelessTime.new "11:30"
113
120
 
114
121
  # all the usual suspects
115
122
 
116
123
  @time_1 < @time_2
117
124
  # => true
118
125
 
119
- # all the usual suspects
120
126
  @time_1 == @time_2
121
127
  # => false
122
128
 
123
129
  @time_2.between? @time_1, DatelessTime.new("20:30")
124
130
  # => true
125
131
 
126
- #etc...
132
+ array = (1..5).map { DatelessTime.new(rand(DatelessTime::SECONDS_IN_24_HOURS)) }
133
+ array.map(&:to_s)
134
+ # => ["06:51:58", "04:50:32", "14:36:53", "21:36:38", "10:17:12"]
135
+ array.sort.map(&:to_s)
136
+ # => ["04:50:32", "06:51:58", "10:17:12", "14:36:53", "21:36:38"]
137
+
138
+ # etc...
127
139
 
128
140
  ```
129
141
 
@@ -21,5 +21,5 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "bundler", "~> 1.3"
22
22
  spec.add_development_dependency "rake", '~> 10.0'
23
23
 
24
- spec.add_development_dependency 'minitest', '~> 5.3.1'
24
+ spec.add_development_dependency 'minitest', '~> 5.3'
25
25
  end
@@ -1,4 +1,5 @@
1
- require "dateless_time/version"
1
+ require 'date'
2
+ require 'dateless_time/version'
2
3
 
3
4
  class DatelessTime
4
5
 
@@ -83,11 +84,13 @@ private
83
84
  def conditional_init(source)
84
85
  case source
85
86
  when Time then init_with_time(source)
87
+ when DateTime then init_with_datetime(source)
86
88
  when String then init_with_string(source)
87
89
  when Fixnum then init_with_seconds(source)
88
90
  when Hash then init_with_hash(source)
89
91
  when Array then init_with_array(source)
90
- else raise DatelessTime::InitializationError
92
+ when DatelessTime then init_with_dateless_time(source)
93
+ else raise DatelessTime::InitializationError, "DatelessTime objects cannot be initialized with instances of #{source.class}."
91
94
  end
92
95
  end
93
96
 
@@ -100,6 +103,14 @@ private
100
103
  end
101
104
 
102
105
 
106
+ def init_with_datetime(datetime)
107
+ @hours = datetime.hour
108
+ @minutes = datetime.min
109
+ @seconds = datetime.sec
110
+ seconds_since_midnight
111
+ end
112
+
113
+
103
114
  def init_with_string(string)
104
115
  validate_time_string string
105
116
  data = time_string_to_array string
@@ -133,6 +144,9 @@ private
133
144
  end
134
145
 
135
146
 
147
+ def init_with_dateless_time(source)
148
+ init_with_array([source.hours, source.minutes, source.seconds])
149
+ end
136
150
 
137
151
 
138
152
 
@@ -179,11 +193,26 @@ private
179
193
  end
180
194
 
181
195
  ary = str.split(":").map(&:to_i)
182
- ary[0] += 12 if (am_pm && am_pm == 'pm')
196
+ ary[0] = adjust_for_am_pm(ary[0], am_pm) if am_pm
183
197
  ary
184
198
  end
185
199
 
186
200
 
201
+ def adjust_for_am_pm(hour, am_pm)
202
+ if am_pm == 'am'
203
+ if hour == 12
204
+ hour = 0
205
+ end
206
+ elsif am_pm == 'pm'
207
+ if hour != 12
208
+ hour += 12
209
+ end
210
+ end
211
+ hour
212
+ end
213
+
214
+
215
+
187
216
  def validate_time_array(ary)
188
217
  if ary.empty?
189
218
  raise DatelessTime::InitializationError
@@ -1,3 +1,3 @@
1
1
  class DatelessTime
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -107,4 +107,16 @@ class ComparableTest < Minitest::Test
107
107
  refute @t3.between?(@t1, @t2)
108
108
  end
109
109
 
110
+
111
+ def test_sort
112
+ @t1 = DatelessTime.new "20:45:10"
113
+ @t2 = DatelessTime.new "13:30:00"
114
+ @t3 = DatelessTime.new "9:20"
115
+ @t4 = DatelessTime.new "20:45:11"
116
+ @array = [@t1, @t2, @t3, @t4]
117
+
118
+ refute_equal @array, @array.sort
119
+ assert_equal [@t3, @t2, @t1, @t4], @array.sort
120
+ end
121
+
110
122
  end
@@ -26,6 +26,17 @@ class CreationTest < Minitest::Test
26
26
  end
27
27
 
28
28
 
29
+ def test_create_with_datetime
30
+ @datetime = DateTime.new 2014, 1, 1, 13, 37, 42
31
+ @dl_time = DatelessTime.new @datetime
32
+
33
+ assert_equal 13, @dl_time.hours
34
+ assert_equal 37, @dl_time.minutes
35
+ assert_equal 42, @dl_time.seconds
36
+ assert_equal (42 + (37 * 60) + (13 * 60 * 60)), @dl_time.to_i
37
+ end
38
+
39
+
29
40
 
30
41
  def test_create_with_string
31
42
  @dl_time = DatelessTime.new "12:13:14"
@@ -125,6 +136,26 @@ class CreationTest < Minitest::Test
125
136
  end
126
137
  end
127
138
 
139
+
140
+
141
+
142
+ def test_create_with_borderline_am
143
+ @dl_time = DatelessTime.new "12:13:14 am"
144
+ assert_equal 0, @dl_time.hours
145
+ assert_equal 13, @dl_time.minutes
146
+ assert_equal 14, @dl_time.seconds
147
+ assert_equal (14 + (13 * 60) + 0), @dl_time.to_i
148
+ end
149
+
150
+
151
+ def test_create_with_borderline_pm
152
+ @dl_time = DatelessTime.new "12:13:14 pm"
153
+ assert_equal 12, @dl_time.hours
154
+ assert_equal 13, @dl_time.minutes
155
+ assert_equal 14, @dl_time.seconds
156
+ assert_equal (14 + (13 * 60) + (12 * 60 * 60)), @dl_time.to_i
157
+ end
158
+
128
159
 
129
160
 
130
161
  def test_create_with_seconds
@@ -290,6 +321,17 @@ class CreationTest < Minitest::Test
290
321
  end
291
322
 
292
323
 
324
+ def test_create_with_other_dateless_time
325
+ @other = DatelessTime.now
326
+ @this = DatelessTime.new(@other)
327
+
328
+ assert_equal @other.hours, @this.hours
329
+ assert_equal @other.minutes, @this.minutes
330
+ assert_equal @other.seconds, @this.seconds
331
+ assert_equal @other.to_i, @this.to_i
332
+ end
333
+
334
+
293
335
 
294
336
  def test_create_without_argument
295
337
  @time = Time.now
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dateless_time
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tommaso Pavese
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-06 00:00:00.000000000 Z
11
+ date: 2014-06-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 5.3.1
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
- version: 5.3.1
54
+ version: '5.3'
55
55
  description: A class to handle dateless time values. DatelessTime objects are a lightweight
56
56
  alternative to Ruby's default Time class, and don't care about timezones and DST.
57
57
  email: