tod 1.0.0

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.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
4
+ nbproject
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 Jack Christensen
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.markdown ADDED
@@ -0,0 +1,89 @@
1
+ Tod
2
+ ===
3
+
4
+ Supplies TimeOfDay class that includes parsing, strftime, comparison, and
5
+ arithmetic.
6
+
7
+
8
+ Installation
9
+ ============
10
+
11
+ gem install tod
12
+
13
+ Examples
14
+ ========
15
+
16
+ Loading Tod
17
+ -----------
18
+
19
+ require 'tod'
20
+
21
+ Creating from hour, minute, and second
22
+ --------------------------------------
23
+
24
+ TimeOfDay.new 8 # => 08:00:00
25
+ TimeOfDay.new 8, 15, 30 # => 08:15:30
26
+
27
+ Parsing text
28
+ ------------
29
+
30
+ Strings only need to contain an hour. Minutes, seconds, AM or PM, and colons
31
+ are all optional.
32
+
33
+ TimeOfDay.parse "8" # => 08:00:00
34
+ TimeOfDay.parse "8am" # => 08:00:00
35
+ TimeOfDay.parse "8pm" # => 20:00:00
36
+ TimeOfDay.parse "8p" # => 20:00:00
37
+ TimeOfDay.parse "9:30" # => 09:30:00
38
+ TimeOfDay.parse "15:30" # => 15:30:00
39
+ TimeOfDay.parse "3:30pm" # => 15:30:00
40
+ TimeOfDay.parse "1230" # => 12:30:00
41
+ TimeOfDay.parse "3:25:58" # => 03:25:58
42
+ TimeOfDay.parse "515p" # => 17:15:00
43
+ TimeOfDay.parse "151253" # => 15:12:53
44
+
45
+ Adding or subtracting time
46
+ -----------------------------
47
+
48
+ Seconds can be added to or subtracted TimeOfDay objects. Time correctly wraps
49
+ around midnight.
50
+
51
+ TimeOfDay.new(8) + 3600 # => 09:00:00
52
+ TimeOfDay.new(8) - 3600 # => 07:00:00
53
+ TimeOfDay.new(0) - 30 # => 23:59:30
54
+ TimeOfDay.new(23,59,45) + 30 # => 00:00:15
55
+
56
+ Comparing
57
+ --------------------
58
+
59
+ TimeOfDay includes Comparable.
60
+
61
+ TimeOfDay.new(8) < TimeOfDay.new(9) # => true
62
+ TimeOfDay.new(8) == TimeOfDay.new(9) # => false
63
+ TimeOfDay.new(9) == TimeOfDay.new(9) # => true
64
+ TimeOfDay.new(10) > TimeOfDay.new(9) # => true
65
+
66
+ Formatting
67
+ ----------
68
+
69
+ Format strings are passed to Time#strftime.
70
+
71
+ TimeOfDay.new(8,30).strftime("%H:%M") # => "08:30"
72
+ TimeOfDay.new(17,15).strftime("%I:%M %p") # => "05:15 PM"
73
+ TimeOfDay.new(22,5,15).strftime("%I:%M:%S %p") # => "10:05:15 PM"
74
+
75
+ Convenience methods for dates and times
76
+ ---------------------------------------
77
+
78
+ Tod adds Date#on and Time#to_time_of_day. If you do not want the core extensions
79
+ then require 'tod/time_of_day' instead of 'tod'.
80
+
81
+ tod = TimeOfDay.new 8, 30 # => 08:30:00
82
+ tod.on Date.today # => 2010-12-29 08:30:00 -0600
83
+ Date.today.at tod # => 2010-12-29 08:30:00 -0600
84
+ Time.now.to_time_of_day # => 16:30:43
85
+
86
+ License
87
+ =======
88
+
89
+ Copyright (c) 2010 Jack Christensen, released under the MIT license
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rake/testtask'
5
+
6
+ Rake::TestTask.new do |t|
7
+ t.libs << "lib"
8
+ t.libs << "test"
9
+ t.test_files = FileList['test/tod/*_test.rb']
10
+ t.verbose = true
11
+ end
data/lib/tod/date.rb ADDED
@@ -0,0 +1,6 @@
1
+ class Date
2
+ # Returns a local Time instance with this date and time_of_day
3
+ def at(time_of_day)
4
+ Time.local year, month, day, time_of_day.hour, time_of_day.minute, time_of_day.second
5
+ end
6
+ end
data/lib/tod/time.rb ADDED
@@ -0,0 +1,5 @@
1
+ class Time
2
+ def to_time_of_day
3
+ TimeOfDay.new hour, min, sec
4
+ end
5
+ end
@@ -0,0 +1,129 @@
1
+ module Tod
2
+ class TimeOfDay
3
+ include Comparable
4
+
5
+ attr_reader :hour, :minute, :second, :second_of_day
6
+ alias_method :min, :minute
7
+ alias_method :sec, :second
8
+
9
+ PARSE_24H_REGEX = /
10
+ \A
11
+ ([01]?\d|2[0-3])
12
+ :?
13
+ ([0-5]\d)?
14
+ :?
15
+ ([0-5]\d)?
16
+ \z
17
+ /x
18
+
19
+ PARSE_12H_REGEX = /
20
+ \A
21
+ (0?\d|1[0-2])
22
+ :?
23
+ ([0-5]\d)?
24
+ :?
25
+ ([0-5]\d)?
26
+ \s*
27
+ ([ap])
28
+ \.?
29
+ \s*
30
+ m?
31
+ \.?
32
+ \z
33
+ /x
34
+
35
+ NUM_SECONDS_IN_DAY = 86400
36
+ NUM_SECONDS_IN_HOUR = 3600
37
+ NUM_SECONDS_IN_MINUTE = 60
38
+
39
+ def initialize(h, m=0, s=0)
40
+ @hour = Integer(h)
41
+ @minute = Integer(m)
42
+ @second = Integer(s)
43
+
44
+ raise ArgumentError, "hour must be between 0 and 23" unless (0..23).include?(@hour)
45
+ raise ArgumentError, "minute must be between 0 and 59" unless (0..59).include?(@minute)
46
+ raise ArgumentError, "second must be between 0 and 59" unless (0..59).include?(@second)
47
+
48
+ @second_of_day = @hour * 60 * 60 + @minute * 60 + @second
49
+
50
+ freeze # TimeOfDay instances are value objects
51
+ end
52
+
53
+ def <=>(other)
54
+ @second_of_day <=> other.second_of_day
55
+ end
56
+
57
+ # Formats identically to Time#strftime
58
+ def strftime(format_string)
59
+ Time.local(2000,1,1, @hour, @minute, @second).strftime(format_string)
60
+ end
61
+
62
+ def to_s
63
+ strftime "%H:%M:%S"
64
+ end
65
+
66
+ # Return a new TimeOfDay num_seconds greater than self. It will wrap around
67
+ # at midnight.
68
+ def +(num_seconds)
69
+ TimeOfDay.from_second_of_day @second_of_day + num_seconds
70
+ end
71
+
72
+ # Return a new TimeOfDay num_seconds less than self. It will wrap around
73
+ # at midnight.
74
+ def -(num_seconds)
75
+ TimeOfDay.from_second_of_day @second_of_day - num_seconds
76
+ end
77
+
78
+ # Returns a Time instance on date using self as the time of day
79
+ def on(date)
80
+ Time.local date.year, date.month, date.day, @hour, @minute, @second
81
+ end
82
+
83
+ # Build a new TimeOfDay instance from second_of_day
84
+ #
85
+ # TimeOfDay.from_second_of_day(3600) == TimeOfDay.new(1) # => true
86
+ def self.from_second_of_day(second_of_day)
87
+ remaining_seconds = second_of_day % NUM_SECONDS_IN_DAY
88
+ hour = remaining_seconds / NUM_SECONDS_IN_HOUR
89
+ remaining_seconds -= hour * NUM_SECONDS_IN_HOUR
90
+ minute = remaining_seconds / NUM_SECONDS_IN_MINUTE
91
+ remaining_seconds -= minute * NUM_SECONDS_IN_MINUTE
92
+ new hour, minute, remaining_seconds
93
+ end
94
+
95
+ # Build a TimeOfDay instance from string
96
+ #
97
+ # Strings only need to contain an hour. Minutes, seconds, AM or PM, and colons
98
+ # are all optional.
99
+ # TimeOfDay.parse "8" # => 08:00:00
100
+ # TimeOfDay.parse "8am" # => 08:00:00
101
+ # TimeOfDay.parse "8pm" # => 20:00:00
102
+ # TimeOfDay.parse "8p" # => 20:00:00
103
+ # TimeOfDay.parse "9:30" # => 09:30:00
104
+ # TimeOfDay.parse "15:30" # => 15:30:00
105
+ # TimeOfDay.parse "3:30pm" # => 15:30:00
106
+ # TimeOfDay.parse "1230" # => 12:30:00
107
+ # TimeOfDay.parse "3:25:58" # => 03:25:58
108
+ # TimeOfDay.parse "515p" # => 17:15:00
109
+ # TimeOfDay.parse "151253" # => 15:12:53
110
+ def self.parse(tod_string)
111
+ tod_string = tod_string.strip
112
+ tod_string = tod_string.downcase
113
+ if PARSE_24H_REGEX =~ tod_string || PARSE_12H_REGEX =~ tod_string
114
+ hour, minute, second, a_or_p = $1.to_i, $2.to_i, $3.to_i, $4
115
+ if hour == 12 && a_or_p == "a"
116
+ hour = 0
117
+ elsif hour < 12 && a_or_p == "p"
118
+ hour += 12
119
+ end
120
+
121
+ new hour, minute, second
122
+ else
123
+ raise ArgumentError, "Invalid time of day string"
124
+ end
125
+ end
126
+ end
127
+ end
128
+
129
+ TimeOfDay = Tod::TimeOfDay
@@ -0,0 +1,3 @@
1
+ class TimeOfDay
2
+ VERSION = "1.0.0"
3
+ end
data/lib/tod.rb ADDED
@@ -0,0 +1,3 @@
1
+ require 'tod/time_of_day'
2
+ require 'tod/date'
3
+ require 'tod/time'
@@ -0,0 +1,6 @@
1
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__),'..','lib')
2
+
3
+ require 'tod'
4
+ require 'test/unit'
5
+ require 'shoulda'
6
+ require 'mocha'
@@ -0,0 +1,11 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__),'..','test_helper'))
2
+
3
+ class DateTest < Test::Unit::TestCase
4
+ context "at" do
5
+ should "accept TimeOfDay and return Time on same date" do
6
+ date = Date.civil 2000,1,1
7
+ tod = TimeOfDay.new 8,30
8
+ assert_equal Time.local(2000,1,1, 8,30), date.at(tod)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,183 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__),'..','test_helper'))
2
+
3
+ class TimeOfDayTest < Test::Unit::TestCase
4
+ context "initialize" do
5
+ should "block invalid hours" do
6
+ assert_raise(ArgumentError) { TimeOfDay.new -1 }
7
+ assert_raise(ArgumentError) { TimeOfDay.new 24 }
8
+ end
9
+
10
+ should "block invalid minutes" do
11
+ assert_raise(ArgumentError) { TimeOfDay.new 0, -1 }
12
+ assert_raise(ArgumentError) { TimeOfDay.new 0, 60 }
13
+ end
14
+
15
+ should "block invalid seconds" do
16
+ assert_raise(ArgumentError) { TimeOfDay.new 0, 0, -1 }
17
+ assert_raise(ArgumentError) { TimeOfDay.new 0, 0, 60 }
18
+ end
19
+ end
20
+
21
+ context "second_of_day" do
22
+ should "be 0 at midnight" do
23
+ assert_equal 0, TimeOfDay.new(0,0,0).second_of_day
24
+ end
25
+
26
+ should "be 3661 at 1:01:01" do
27
+ assert_equal 3661, TimeOfDay.new(1,1,1).second_of_day
28
+ end
29
+
30
+ should "be 86399 at last second of day" do
31
+ assert_equal 86399, TimeOfDay.new(23,59,59).second_of_day
32
+ end
33
+ end
34
+
35
+ def self.should_parse(parse_string, expected_hour, expected_minute, expected_second)
36
+ expected_tod = TimeOfDay.new expected_hour, expected_minute, expected_second
37
+
38
+ should "parse '#{parse_string}' into #{expected_tod.inspect}" do
39
+ assert_equal expected_tod, TimeOfDay.parse(parse_string)
40
+ end
41
+ end
42
+
43
+ def self.should_not_parse(parse_string)
44
+ should "not parse '#{parse_string}'" do
45
+ assert_raise(ArgumentError) { TimeOfDay.parse(parse_string) }
46
+ end
47
+ end
48
+
49
+ should_parse "9", 9, 0, 0
50
+ should_parse "13", 13, 0, 0
51
+ should_parse "1230", 12,30, 0
52
+ should_parse "08:15", 8,15, 0
53
+ should_parse "08:15:30", 8,15,30
54
+ should_parse "18", 18, 0, 0
55
+ should_parse "23", 23, 0, 0
56
+
57
+ should_parse "9a", 9, 0, 0
58
+ should_parse "900a", 9, 0, 0
59
+ should_parse "9A", 9, 0, 0
60
+ should_parse "9am", 9, 0, 0
61
+ should_parse "9AM", 9, 0, 0
62
+ should_parse "9 a", 9, 0, 0
63
+ should_parse "9 am", 9, 0, 0
64
+ should_parse "09:30:45 am", 9,30,45
65
+
66
+ should_parse "9p", 21, 0, 0
67
+ should_parse "900p", 21, 0, 0
68
+ should_parse "9P", 21, 0, 0
69
+ should_parse "9pm", 21, 0, 0
70
+ should_parse "9PM", 21, 0, 0
71
+ should_parse "9 p", 21, 0, 0
72
+ should_parse "9 pm", 21, 0, 0
73
+ should_parse "09:30:45 pm", 21,30,45
74
+
75
+ should_parse "12a", 0, 0, 0
76
+ should_parse "12p", 12, 0, 0
77
+
78
+ should_not_parse "-1:30"
79
+ should_not_parse "24:00:00"
80
+ should_not_parse "24"
81
+ should_not_parse "00:60"
82
+ should_not_parse "00:00:60"
83
+ should_not_parse "13a"
84
+ should_not_parse "13p"
85
+ should_not_parse "10.5"
86
+
87
+ should "provide spaceship operator" do
88
+ assert_equal -1, TimeOfDay.new(8,0,0) <=> TimeOfDay.new(9,0,0)
89
+ assert_equal 0, TimeOfDay.new(9,0,0) <=> TimeOfDay.new(9,0,0)
90
+ assert_equal 1, TimeOfDay.new(10,0,0) <=> TimeOfDay.new(9,0,0)
91
+ end
92
+
93
+ should "compare equality by value" do
94
+ assert_equal TimeOfDay.new(8,0,0), TimeOfDay.new(8,0,0)
95
+ end
96
+
97
+
98
+ context "strftime" do
99
+ should "delegate to Time.parse" do
100
+ format_string = "%H:%M"
101
+ Time.any_instance.expects(:strftime).with(format_string)
102
+ TimeOfDay.new(8,15,30).strftime format_string
103
+ end
104
+ end
105
+
106
+ context "to_s" do
107
+ should "format to HH:MM:SS" do
108
+ assert_equal "08:15:30", TimeOfDay.new(8,15,30).to_s
109
+ assert_equal "22:10:45", TimeOfDay.new(22,10,45).to_s
110
+ end
111
+ end
112
+
113
+ context "addition" do
114
+ should "add seconds" do
115
+ original = TimeOfDay.new(8,0,0)
116
+ result = original + 15
117
+ assert_equal TimeOfDay.new(8,0,15), result
118
+ end
119
+
120
+ should "wrap around midnight" do
121
+ original = TimeOfDay.new(23,0,0)
122
+ result = original + 7200
123
+ assert_equal TimeOfDay.new(1,0,0), result
124
+ end
125
+
126
+ should "return new TimeOfDay" do
127
+ original = TimeOfDay.new(8,0,0)
128
+ result = original + 15
129
+ assert_not_equal original.object_id, result.object_id
130
+ end
131
+ end
132
+
133
+ context "subtraction" do
134
+ should "subtract seconds" do
135
+ original = TimeOfDay.new(8,0,0)
136
+ result = original - 15
137
+ assert_equal TimeOfDay.new(7,59,45), result
138
+ end
139
+
140
+ should "wrap around midnight" do
141
+ original = TimeOfDay.new(1,0,0)
142
+ result = original - 7200
143
+ assert_equal TimeOfDay.new(23,0,0), result
144
+ end
145
+
146
+ should "return new TimeOfDay" do
147
+ original = TimeOfDay.new(8,0,0)
148
+ result = original - 15
149
+ assert_not_equal original.object_id, result.object_id
150
+ end
151
+ end
152
+
153
+ context "from_second_of_day" do
154
+ should "handle positive numbers" do
155
+ assert_equal TimeOfDay.new(0,0,30), TimeOfDay.from_second_of_day(30)
156
+ assert_equal TimeOfDay.new(0,1,30), TimeOfDay.from_second_of_day(90)
157
+ assert_equal TimeOfDay.new(1,1,5), TimeOfDay.from_second_of_day(3665)
158
+ assert_equal TimeOfDay.new(23,59,59), TimeOfDay.from_second_of_day(86399)
159
+ end
160
+
161
+ should "handle positive numbers a day or more away" do
162
+ assert_equal TimeOfDay.new(0,0,0), TimeOfDay.from_second_of_day(86400)
163
+ assert_equal TimeOfDay.new(0,0,30), TimeOfDay.from_second_of_day(86430)
164
+ assert_equal TimeOfDay.new(0,1,30), TimeOfDay.from_second_of_day(86490)
165
+ assert_equal TimeOfDay.new(1,1,5), TimeOfDay.from_second_of_day(90065)
166
+ assert_equal TimeOfDay.new(23,59,59), TimeOfDay.from_second_of_day(172799)
167
+ end
168
+
169
+ should "handle negative numbers" do
170
+ assert_equal TimeOfDay.new(23,59,30), TimeOfDay.from_second_of_day(-30)
171
+ end
172
+
173
+ should "handle negative numbers more than a day away" do
174
+ assert_equal TimeOfDay.new(23,59,30), TimeOfDay.from_second_of_day(-86430)
175
+ end
176
+ end
177
+
178
+ context "on" do
179
+ should "be local Time on given date" do
180
+ assert_equal Time.local(2010,12,29, 8,30), TimeOfDay.new(8,30).on(Date.civil(2010,12,29))
181
+ end
182
+ end
183
+ end
@@ -0,0 +1,10 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__),'..','test_helper'))
2
+
3
+ class TimeTest < Test::Unit::TestCase
4
+ context "to_time_of_day" do
5
+ should "be TimeOfDay" do
6
+ time = Time.local 2000,1,1, 12,30,15
7
+ assert_equal TimeOfDay.new(12,30,15), time.to_time_of_day
8
+ end
9
+ end
10
+ end
data/tod.gemspec ADDED
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "tod/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "tod"
7
+ s.version = TimeOfDay::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Jack Christensen"]
10
+ s.email = ["jack@jackchristensen.com"]
11
+ s.homepage = "https://github.com/JackC/tod"
12
+ s.summary = %q{Supplies TimeOfDay class}
13
+ s.description = %q{Supplies TimeOfDay class that includes parsing, strftime, comparison, and arithmetic.}
14
+
15
+ s.add_development_dependency "test-unit"
16
+ s.add_development_dependency "shoulda"
17
+ s.add_development_dependency "mocha"
18
+
19
+ s.files = `git ls-files`.split("\n")
20
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
21
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
22
+ s.require_paths = ["lib"]
23
+ end
metadata ADDED
@@ -0,0 +1,116 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tod
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 1
7
+ - 0
8
+ - 0
9
+ version: 1.0.0
10
+ platform: ruby
11
+ authors:
12
+ - Jack Christensen
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-12-29 00:00:00 -06:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: test-unit
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ version: "0"
31
+ type: :development
32
+ version_requirements: *id001
33
+ - !ruby/object:Gem::Dependency
34
+ name: shoulda
35
+ prerelease: false
36
+ requirement: &id002 !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ version: "0"
44
+ type: :development
45
+ version_requirements: *id002
46
+ - !ruby/object:Gem::Dependency
47
+ name: mocha
48
+ prerelease: false
49
+ requirement: &id003 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ segments:
55
+ - 0
56
+ version: "0"
57
+ type: :development
58
+ version_requirements: *id003
59
+ description: Supplies TimeOfDay class that includes parsing, strftime, comparison, and arithmetic.
60
+ email:
61
+ - jack@jackchristensen.com
62
+ executables: []
63
+
64
+ extensions: []
65
+
66
+ extra_rdoc_files: []
67
+
68
+ files:
69
+ - .gitignore
70
+ - MIT-LICENSE
71
+ - README.markdown
72
+ - Rakefile
73
+ - lib/tod.rb
74
+ - lib/tod/date.rb
75
+ - lib/tod/time.rb
76
+ - lib/tod/time_of_day.rb
77
+ - lib/tod/version.rb
78
+ - test/test_helper.rb
79
+ - test/tod/date_test.rb
80
+ - test/tod/time_of_day_test.rb
81
+ - test/tod/time_test.rb
82
+ - tod.gemspec
83
+ has_rdoc: true
84
+ homepage: https://github.com/JackC/tod
85
+ licenses: []
86
+
87
+ post_install_message:
88
+ rdoc_options: []
89
+
90
+ require_paths:
91
+ - lib
92
+ required_ruby_version: !ruby/object:Gem::Requirement
93
+ none: false
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ segments:
98
+ - 0
99
+ version: "0"
100
+ required_rubygems_version: !ruby/object:Gem::Requirement
101
+ none: false
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ segments:
106
+ - 0
107
+ version: "0"
108
+ requirements: []
109
+
110
+ rubyforge_project:
111
+ rubygems_version: 1.3.7
112
+ signing_key:
113
+ specification_version: 3
114
+ summary: Supplies TimeOfDay class
115
+ test_files: []
116
+