time_keeper 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,102 @@
1
+ require 'spec_helper'
2
+
3
+ describe TimeKeeper::TimeRangeManipulation do
4
+ #
5
+ # before do
6
+ # Time.zone = "Asia/Singapore"
7
+ # end
8
+ #
9
+ # template "split time range by day" do
10
+ #
11
+ # example "range: 24h exactly",
12
+ # "2010-01-01 00:00:00",
13
+ # "2010-01-02 00:00:00",
14
+ # [
15
+ # ["2010-01-01 00:00:00", "2010-01-01 23:59:59"],
16
+ # ["2010-01-02 00:00:00", "2010-01-02 00:00:00"],
17
+ # ]
18
+ #
19
+ # example "range < 24h",
20
+ # "2010-01-01 00:00:00",
21
+ # "2010-01-01 23:59:59",
22
+ # [
23
+ # ["2010-01-01 00:00:00", "2010-01-01 23:59:59"],
24
+ # ]
25
+ #
26
+ # example "range < 24h offset",
27
+ # "2010-01-01 05:00:00",
28
+ # "2010-01-02 04:59:59",
29
+ # [
30
+ # ["2010-01-01 05:00:00", "2010-01-01 23:59:59"],
31
+ # ["2010-01-02 00:00:00", "2010-01-02 04:59:59"],
32
+ # ]
33
+ #
34
+ # example "range night diff",
35
+ # "2010-01-01 22:00:00",
36
+ # "2010-01-02 06:00:00",
37
+ # [
38
+ # ["2010-01-01 22:00:00", "2010-01-01 23:59:59"],
39
+ # ["2010-01-02 00:00:00", "2010-01-02 06:00:00"],
40
+ # ]
41
+ #
42
+ # example "range > 24h",
43
+ # "2010-01-01 00:00:00",
44
+ # "2010-01-02 00:00:01",
45
+ # [
46
+ # ["2010-01-01 00:00:00", "2010-01-01 23:59:59"],
47
+ # ["2010-01-02 00:00:00", "2010-01-02 00:00:01"],
48
+ # ]
49
+ #
50
+ # example "3 days",
51
+ # "2010-01-01 00:00:00",
52
+ # "2010-01-03 10:00:00",
53
+ # [
54
+ # ["2010-01-01 00:00:00", "2010-01-01 23:59:59"],
55
+ # ["2010-01-02 00:00:00", "2010-01-02 23:59:59"],
56
+ # ["2010-01-03 00:00:00", "2010-01-03 10:00:00"],
57
+ # ]
58
+ #
59
+ # example "range = 0",
60
+ # "2010-01-01 00:00:00",
61
+ # "2010-01-01 00:00:00",
62
+ # [
63
+ # ["2010-01-01 00:00:00", "2010-01-01 00:00:00"],
64
+ # ]
65
+ #
66
+ # example "range < 0",
67
+ # "2010-01-02 00:00:00",
68
+ # "2010-01-01 00:05:00",
69
+ # [
70
+ # ["2010-01-02 00:00:00", "2010-01-01 00:05:00"],
71
+ # ]
72
+ #
73
+ # example "range < -24h",
74
+ # "2010-01-03 00:00:00",
75
+ # "2010-01-01 00:05:00",
76
+ # [
77
+ # ["2010-01-03 00:00:00", "2010-01-01 00:05:00"],
78
+ # ]
79
+ #
80
+ # def subject
81
+ # TimeKeeper::TimeRangeManipulation
82
+ # end
83
+ #
84
+ # each do |from, to, expected|
85
+ # range = Chronic.parse(from) .. Chronic.parse(to)
86
+ # r = Timeout.timeout(1) do
87
+ # subject.split_time_range_by_day(range)
88
+ # end
89
+ # expected = expected.map { |i|
90
+ # Chronic.parse(i.first) .. Chronic.parse(i.last)
91
+ # }
92
+ # fix_float_errors(r).should == expected
93
+ # end
94
+ #
95
+ # def fix_float_errors(r)
96
+ # r.map { |i|
97
+ # Chronic.parse(i.first.to_s) .. Chronic.parse(i.last.to_s)
98
+ # }
99
+ # end
100
+
101
+ # end
102
+ end
@@ -0,0 +1,96 @@
1
+ require 'spec_helper'
2
+
3
+ describe TimeKeeper::TimeRange do
4
+ subject do
5
+ TimeKeeper::TimeRange.new("05:30 to 16:00")
6
+ end
7
+
8
+ describe "#initialize" do
9
+ it "should set range" do
10
+ TimeKeeper::TimeRange.new("05:30 am to 04:10 pm").instance_variable_get("@range").should eq("05:30 am-04:10 pm")
11
+ end
12
+ end
13
+
14
+ describe "#parse" do
15
+ it "should set the start time" do
16
+ subject.parse
17
+ subject.instance_variable_get("@start_time").in_minutes.should eq(330)
18
+ end
19
+
20
+ it "should set the start day" do
21
+ subject.parse
22
+ subject.instance_variable_get('@start_day').should eq(0)
23
+ end
24
+
25
+ it "should set the end time" do
26
+ subject.parse
27
+ subject.instance_variable_get('@end_time').in_minutes.should eq(960)
28
+ end
29
+
30
+ it "should set the end day" do
31
+ subject.parse
32
+ subject.instance_variable_get('@end_day').should eq(0)
33
+ end
34
+
35
+ it "should return the TimeKeeper::TimeRange object" do
36
+ subject.parse.should eq(subject)
37
+ end
38
+ end
39
+
40
+ describe "#days_elapsed" do
41
+ context "when schedule passes to the next day" do
42
+ before(:each) do
43
+ subject.instance_variable_set("@start_time", TimeKeeper::CustomTime.new("22:00").parse)
44
+ subject.instance_variable_set("@end_time", TimeKeeper::CustomTime.new("06:00").parse)
45
+ end
46
+
47
+ it "should set to next day" do
48
+ subject.send(:days_elapsed).should eq(1)
49
+ end
50
+ end
51
+
52
+ context "when schedule is on the same day" do
53
+ before(:each) do
54
+ subject.instance_variable_set("@start_time", TimeKeeper::CustomTime.new("05:30").parse)
55
+ subject.instance_variable_set("@end_time", TimeKeeper::CustomTime.new("13:00").parse)
56
+ end
57
+
58
+ it "should set to next day to same day" do
59
+ subject.send(:days_elapsed).should eq(0)
60
+ end
61
+ end
62
+ end
63
+
64
+ describe "#duration_in_seconds" do
65
+ before(:each) do
66
+ subject.range = "10:00 to 09:00"
67
+ subject.parse
68
+ end
69
+
70
+ it "should return the duration of the time interval in seconds" do
71
+ subject.duration_in_seconds.should eq(82800)
72
+ end
73
+ end
74
+
75
+ describe "#duration_in_minutes" do
76
+ before(:each) do
77
+ subject.range = "10:00 to 09:00"
78
+ subject.parse
79
+ end
80
+
81
+ it "should return the duration of the time interval in minutes" do
82
+ subject.duration_in_minutes.should eq(1380)
83
+ end
84
+ end
85
+
86
+ describe "#duration_in_hours" do
87
+ before(:each) do
88
+ subject.range = "10:00 to 09:00"
89
+ subject.parse
90
+ end
91
+
92
+ it "should return the duration of the time interval in minutes" do
93
+ subject.duration_in_hours.should eq(23)
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,11 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ require 'rspec'
4
+ require 'time_keeper'
5
+
6
+ RSpec.configure do |config|
7
+ config.mock_with :mocha
8
+ end
9
+
10
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
11
+
@@ -0,0 +1,4 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "TimeKeeper" do
4
+ end
@@ -0,0 +1,89 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "time_keeper"
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Suman Mukherjee"]
12
+ s.date = "2011-12-18"
13
+ s.description = "A simple gem to pass time in string format without dates and perform various useful operations on it. This has been derived from an app."
14
+ s.email = "sumanmukherjee03@gmail.com"
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".rspec",
22
+ "Gemfile",
23
+ "Gemfile.lock",
24
+ "LICENSE.txt",
25
+ "README.rdoc",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "lib/time_keeper.rb",
29
+ "lib/time_keeper/custom_time.rb",
30
+ "lib/time_keeper/parser.rb",
31
+ "lib/time_keeper/parser/base.rb",
32
+ "lib/time_keeper/parser/meridian.rb",
33
+ "lib/time_keeper/parser/military.rb",
34
+ "lib/time_keeper/string_minutes_support.rb",
35
+ "lib/time_keeper/time_range.rb",
36
+ "lib/time_keeper/time_range_collection.rb",
37
+ "lib/time_keeper/time_range_manipulation.rb",
38
+ "lib/time_keeper/time_span_support.rb",
39
+ "spec/lib/time_keeper/custom_time_spec.rb",
40
+ "spec/lib/time_keeper/parser/base_spec.rb",
41
+ "spec/lib/time_keeper/parser/meridian_spec.rb",
42
+ "spec/lib/time_keeper/parser/military_spec.rb",
43
+ "spec/lib/time_keeper/time_range_collection_spec.rb",
44
+ "spec/lib/time_keeper/time_range_manipulation_spec.rb",
45
+ "spec/lib/time_keeper/time_range_spec.rb",
46
+ "spec/spec_helper.rb",
47
+ "spec/time_keeper_spec.rb",
48
+ "time_keeper.gemspec"
49
+ ]
50
+ s.homepage = "http://github.com/sumanmukherjee03/time_keeper"
51
+ s.licenses = ["MIT"]
52
+ s.require_paths = ["lib"]
53
+ s.rubygems_version = "1.8.10"
54
+ s.summary = "Define time without dates as strings, perform operations on time spans and collection of time spans."
55
+
56
+ if s.respond_to? :specification_version then
57
+ s.specification_version = 3
58
+
59
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
60
+ s.add_runtime_dependency(%q<activemodel>, ["< 3.1.0", ">= 3.0.0"])
61
+ s.add_runtime_dependency(%q<activesupport>, ["< 3.1.0", ">= 3.0.0"])
62
+ s.add_development_dependency(%q<rspec>, ["~> 2.0.0"])
63
+ s.add_development_dependency(%q<mocha>, [">= 0"])
64
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
65
+ s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
66
+ s.add_development_dependency(%q<rcov>, [">= 0"])
67
+ s.add_development_dependency(%q<ruby-debug>, [">= 0"])
68
+ else
69
+ s.add_dependency(%q<activemodel>, ["< 3.1.0", ">= 3.0.0"])
70
+ s.add_dependency(%q<activesupport>, ["< 3.1.0", ">= 3.0.0"])
71
+ s.add_dependency(%q<rspec>, ["~> 2.0.0"])
72
+ s.add_dependency(%q<mocha>, [">= 0"])
73
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
74
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
75
+ s.add_dependency(%q<rcov>, [">= 0"])
76
+ s.add_dependency(%q<ruby-debug>, [">= 0"])
77
+ end
78
+ else
79
+ s.add_dependency(%q<activemodel>, ["< 3.1.0", ">= 3.0.0"])
80
+ s.add_dependency(%q<activesupport>, ["< 3.1.0", ">= 3.0.0"])
81
+ s.add_dependency(%q<rspec>, ["~> 2.0.0"])
82
+ s.add_dependency(%q<mocha>, [">= 0"])
83
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
84
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
85
+ s.add_dependency(%q<rcov>, [">= 0"])
86
+ s.add_dependency(%q<ruby-debug>, [">= 0"])
87
+ end
88
+ end
89
+
metadata ADDED
@@ -0,0 +1,231 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: time_keeper
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Suman Mukherjee
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-12-18 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ version_requirements: &id001 !ruby/object:Gem::Requirement
22
+ none: false
23
+ requirements:
24
+ - - <
25
+ - !ruby/object:Gem::Version
26
+ hash: 3
27
+ segments:
28
+ - 3
29
+ - 1
30
+ - 0
31
+ version: 3.1.0
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ hash: 7
35
+ segments:
36
+ - 3
37
+ - 0
38
+ - 0
39
+ version: 3.0.0
40
+ requirement: *id001
41
+ type: :runtime
42
+ prerelease: false
43
+ name: activemodel
44
+ - !ruby/object:Gem::Dependency
45
+ version_requirements: &id002 !ruby/object:Gem::Requirement
46
+ none: false
47
+ requirements:
48
+ - - <
49
+ - !ruby/object:Gem::Version
50
+ hash: 3
51
+ segments:
52
+ - 3
53
+ - 1
54
+ - 0
55
+ version: 3.1.0
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ hash: 7
59
+ segments:
60
+ - 3
61
+ - 0
62
+ - 0
63
+ version: 3.0.0
64
+ requirement: *id002
65
+ type: :runtime
66
+ prerelease: false
67
+ name: activesupport
68
+ - !ruby/object:Gem::Dependency
69
+ version_requirements: &id003 !ruby/object:Gem::Requirement
70
+ none: false
71
+ requirements:
72
+ - - ~>
73
+ - !ruby/object:Gem::Version
74
+ hash: 15
75
+ segments:
76
+ - 2
77
+ - 0
78
+ - 0
79
+ version: 2.0.0
80
+ requirement: *id003
81
+ type: :development
82
+ prerelease: false
83
+ name: rspec
84
+ - !ruby/object:Gem::Dependency
85
+ version_requirements: &id004 !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ hash: 3
91
+ segments:
92
+ - 0
93
+ version: "0"
94
+ requirement: *id004
95
+ type: :development
96
+ prerelease: false
97
+ name: mocha
98
+ - !ruby/object:Gem::Dependency
99
+ version_requirements: &id005 !ruby/object:Gem::Requirement
100
+ none: false
101
+ requirements:
102
+ - - ~>
103
+ - !ruby/object:Gem::Version
104
+ hash: 23
105
+ segments:
106
+ - 1
107
+ - 0
108
+ - 0
109
+ version: 1.0.0
110
+ requirement: *id005
111
+ type: :development
112
+ prerelease: false
113
+ name: bundler
114
+ - !ruby/object:Gem::Dependency
115
+ version_requirements: &id006 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ~>
119
+ - !ruby/object:Gem::Version
120
+ hash: 7
121
+ segments:
122
+ - 1
123
+ - 6
124
+ - 4
125
+ version: 1.6.4
126
+ requirement: *id006
127
+ type: :development
128
+ prerelease: false
129
+ name: jeweler
130
+ - !ruby/object:Gem::Dependency
131
+ version_requirements: &id007 !ruby/object:Gem::Requirement
132
+ none: false
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ hash: 3
137
+ segments:
138
+ - 0
139
+ version: "0"
140
+ requirement: *id007
141
+ type: :development
142
+ prerelease: false
143
+ name: rcov
144
+ - !ruby/object:Gem::Dependency
145
+ version_requirements: &id008 !ruby/object:Gem::Requirement
146
+ none: false
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ hash: 3
151
+ segments:
152
+ - 0
153
+ version: "0"
154
+ requirement: *id008
155
+ type: :development
156
+ prerelease: false
157
+ name: ruby-debug
158
+ description: A simple gem to pass time in string format without dates and perform various useful operations on it. This has been derived from an app.
159
+ email: sumanmukherjee03@gmail.com
160
+ executables: []
161
+
162
+ extensions: []
163
+
164
+ extra_rdoc_files:
165
+ - LICENSE.txt
166
+ - README.rdoc
167
+ files:
168
+ - .document
169
+ - .rspec
170
+ - Gemfile
171
+ - Gemfile.lock
172
+ - LICENSE.txt
173
+ - README.rdoc
174
+ - Rakefile
175
+ - VERSION
176
+ - lib/time_keeper.rb
177
+ - lib/time_keeper/custom_time.rb
178
+ - lib/time_keeper/parser.rb
179
+ - lib/time_keeper/parser/base.rb
180
+ - lib/time_keeper/parser/meridian.rb
181
+ - lib/time_keeper/parser/military.rb
182
+ - lib/time_keeper/string_minutes_support.rb
183
+ - lib/time_keeper/time_range.rb
184
+ - lib/time_keeper/time_range_collection.rb
185
+ - lib/time_keeper/time_range_manipulation.rb
186
+ - lib/time_keeper/time_span_support.rb
187
+ - spec/lib/time_keeper/custom_time_spec.rb
188
+ - spec/lib/time_keeper/parser/base_spec.rb
189
+ - spec/lib/time_keeper/parser/meridian_spec.rb
190
+ - spec/lib/time_keeper/parser/military_spec.rb
191
+ - spec/lib/time_keeper/time_range_collection_spec.rb
192
+ - spec/lib/time_keeper/time_range_manipulation_spec.rb
193
+ - spec/lib/time_keeper/time_range_spec.rb
194
+ - spec/spec_helper.rb
195
+ - spec/time_keeper_spec.rb
196
+ - time_keeper.gemspec
197
+ homepage: http://github.com/sumanmukherjee03/time_keeper
198
+ licenses:
199
+ - MIT
200
+ post_install_message:
201
+ rdoc_options: []
202
+
203
+ require_paths:
204
+ - lib
205
+ required_ruby_version: !ruby/object:Gem::Requirement
206
+ none: false
207
+ requirements:
208
+ - - ">="
209
+ - !ruby/object:Gem::Version
210
+ hash: 3
211
+ segments:
212
+ - 0
213
+ version: "0"
214
+ required_rubygems_version: !ruby/object:Gem::Requirement
215
+ none: false
216
+ requirements:
217
+ - - ">="
218
+ - !ruby/object:Gem::Version
219
+ hash: 3
220
+ segments:
221
+ - 0
222
+ version: "0"
223
+ requirements: []
224
+
225
+ rubyforge_project:
226
+ rubygems_version: 1.8.10
227
+ signing_key:
228
+ specification_version: 3
229
+ summary: Define time without dates as strings, perform operations on time spans and collection of time spans.
230
+ test_files: []
231
+