dateless_time 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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: