pretty_time 0.1.0 → 0.2.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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
@@ -0,0 +1,230 @@
1
+ #
2
+ # Simple time serializer with two main functionalities:
3
+ # 1. Takes a time in seconds and converts it into a pretty string
4
+ # 2. Takes a pretty string and converts it into time in seconds
5
+ #
6
+ # Dependencies:
7
+ # ActiveSupport
8
+ #
9
+ class PrettyTime
10
+
11
+ # Serializes(if you will) time in seconds supplied as integer to a
12
+ # pretty time string
13
+ # Example:
14
+ #
15
+ # PrettyTime.load(130) # 2 minutes 10 seconds
16
+ def self.load(time_in_sec)
17
+ pretty_time.load(time_in_sec)
18
+ end
19
+
20
+ # De-serializes(if you will) a pretty time into time in seconds
21
+ # Example:
22
+ #
23
+ # PrettyTime.dump('2 minutes 10 seconds') # 130
24
+ def self.dump(time_as_pretty_string)
25
+ pretty_time.dump(time_as_pretty_string)
26
+ end
27
+
28
+ # Creates an instance of itself if one does not exist
29
+ def self.pretty_time
30
+ @pretty_time ||= Core.new
31
+ end
32
+
33
+ # Accepts a block and passes the configuration instance to the block
34
+ def self.configuration
35
+ yield config
36
+ end
37
+
38
+ # Creates a new configuration instance
39
+ def self.config
40
+ @config ||= PrettyTime::Configuration.new
41
+ end
42
+
43
+ # Parent Class for unit's of time
44
+ # for exaple: Hours, Minutes and Seconds
45
+ class UnitOfTime
46
+ attr_accessor :value
47
+
48
+ def initialize(value)
49
+ @value = value
50
+ end
51
+
52
+ def to_seconds
53
+ @value
54
+ end
55
+ end
56
+
57
+ # Subclass of UnitofTime
58
+ # converts hours into seconds
59
+ class Hours < UnitOfTime
60
+ def to_seconds
61
+ @value.hours
62
+ end
63
+ end
64
+
65
+ # Subclass of UnitofTime
66
+ # converts minutes into seconds
67
+ class Minutes < UnitOfTime
68
+ def to_seconds
69
+ @value.minutes
70
+ end
71
+ end
72
+
73
+ # Subclass of UnitofTime
74
+ class Seconds < UnitOfTime
75
+ end
76
+
77
+ # Various mappings to allow one to pass in strings like:
78
+ #
79
+ # 4 hours
80
+ # 4 hrs
81
+ # 4 h
82
+ # Same goes for minutes and seconds.
83
+ H = Hrs = Hr = Hour = Hours
84
+ M = Mins = Min = Minute = Minutes
85
+ S = Secs = Sec = Second = Seconds
86
+
87
+ # Configuration Class
88
+ # Defines the suffixes to be used
89
+ # when time in seconds is converted to
90
+ # pretty time.
91
+ #
92
+ # Example:
93
+ #
94
+ # PrettyTime.configuration do |config|
95
+ # config.hours_suffix = 'hrs'
96
+ # config.minutes_suffix = 'mins'
97
+ # config.seconds_suffix = 'secs'
98
+ # end
99
+ #
100
+ # PrettyTime.load(7805) # Returns 2 hrs 10 mins 5 secs
101
+ #
102
+ # Default values are:
103
+ # hours
104
+ # minutes
105
+ # seconds
106
+ #
107
+ class Configuration
108
+
109
+ DEFAULT_HOURS_SUFFIX = "hours"
110
+ DEFAULT_MINUTES_SUFFIX = "minutes"
111
+ DEFAULT_SECONDS_SUFFIX = "seconds"
112
+
113
+ attr_accessor :hours_suffix, :minutes_suffix, :seconds_suffix
114
+
115
+ def hours_suffix
116
+ @hours_suffix || DEFAULT_HOURS_SUFFIX
117
+ end
118
+
119
+ def minutes_suffix
120
+ @minutes_suffix || DEFAULT_MINUTES_SUFFIX
121
+ end
122
+
123
+ def seconds_suffix
124
+ @seconds_suffix || DEFAULT_SECONDS_SUFFIX
125
+ end
126
+
127
+ end
128
+
129
+ # Core class which provides the entry point to other useful methods
130
+ class Core
131
+
132
+ # Core method that does all the work
133
+ def load(time_in_secs)
134
+ hours, minutes, seconds = hours_and_minutes_and_seconds(time_in_secs)
135
+
136
+ time_as_pretty_string = ""
137
+
138
+ if has_hours?(hours)
139
+ time_as_pretty_string << "#{with_suffix(hours, PrettyTime.config.hours_suffix)}"
140
+ end
141
+
142
+ if has_minutes?(minutes)
143
+ if has_hours?(hours)
144
+ time_as_pretty_string << " "
145
+ end
146
+ time_as_pretty_string << "#{with_suffix(minutes, PrettyTime.config.minutes_suffix)}"
147
+ end
148
+
149
+ if has_seconds?(seconds)
150
+ if has_hours?(hours) || has_minutes?(minutes)
151
+ time_as_pretty_string << " "
152
+ end
153
+ time_as_pretty_string << "#{with_suffix(seconds, PrettyTime.config.seconds_suffix)}"
154
+ end
155
+
156
+ time_as_pretty_string
157
+ end
158
+
159
+ # Core method that does all the work
160
+ def dump(time_as_pretty_string)
161
+ time_in_secs = 0
162
+ match_data_as_array = match_it(time_as_pretty_string).to_a
163
+ match_data_as_array.slice(1..match_data_as_array.length).each_slice(2).each do |match_array|
164
+ time_in_secs += "PrettyTime::#{match_array[1].strip.classify}".constantize.new(match_array[0].to_i).to_seconds
165
+ end
166
+
167
+ time_in_secs
168
+ end
169
+
170
+
171
+ private
172
+
173
+ # Converts time in seconds to an array of hours, minutes and seconds
174
+ def hours_and_minutes_and_seconds(time_in_sec)
175
+ minutes, seconds = minutes_and_seconds(time_in_sec)
176
+ hours = 0
177
+ if minutes >= 60
178
+ hours = minutes / 60
179
+ minutes = minutes % 60
180
+ end
181
+ [hours, minutes, seconds]
182
+ end
183
+
184
+ # Converts time in seconds to an array of minutes and seconds
185
+ def minutes_and_seconds(time_in_sec)
186
+ [time_in_sec / 60, time_in_sec % 60]
187
+ end
188
+
189
+ # Checks if supplied value is zero
190
+ def non_zero?(value)
191
+ value != 0
192
+ end
193
+
194
+ # Adds the correct suffix
195
+ # Example:
196
+ #
197
+ # 1 hour # becuase it's == 1 so singular
198
+ # 3 hours # becuase it's > 1 so plural
199
+ def with_suffix(value, type)
200
+ if value > 1
201
+ return "#{value} #{type}"
202
+ end
203
+
204
+ return "#{value} #{type.gsub(/s$/, '')}"
205
+ end
206
+
207
+ # Takes a string (i.e. time as a string) and matches it against various regular expressions
208
+ # and returns the match as MatchData
209
+ # Example:
210
+ # match_it("4 hours 40 minutes")
211
+ # match_it("4 hrs 40 mins")
212
+ # match_it("4 hrs 1 min")
213
+ #
214
+ def match_it(time_as_pretty_string)
215
+ /^(\d+) (hours?) (\d+) (minutes?) (\d+) (seconds?)/.match(time_as_pretty_string) ||
216
+ /^(\d+) (hours?) (\d+) (minutes?)/.match(time_as_pretty_string) ||
217
+ /^(\d+) (minutes?) (\d+) (seconds?)/.match(time_as_pretty_string) ||
218
+ /^(\d+) (hours?) (\d+) (seconds?)/.match(time_as_pretty_string) ||
219
+ /^(\d+)( h| m| s)/.match(time_as_pretty_string) ||
220
+ /^(\d+)( hours?| minutes?| seconds?)/.match(time_as_pretty_string) ||
221
+ /^(\d+)( hrs?| mins?| secs?)/.match(time_as_pretty_string)
222
+ end
223
+
224
+ alias :has_hours? :non_zero?
225
+ alias :has_minutes? :non_zero?
226
+ alias :has_seconds? :non_zero?
227
+
228
+ end
229
+
230
+ end
data/lib/pretty_time.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
2
  $LOAD_PATH.unshift(File.dirname(__FILE__))
3
3
 
4
- require "pretty_time/core"
4
+ require "pretty_time/pretty_time"
data/pretty_time.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{pretty_time}
8
- s.version = "0.1.0"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Anuj Dutta"]
12
- s.date = %q{2011-05-01}
12
+ s.date = %q{2011-05-15}
13
13
  s.description = %q{Serializes time to pretty time string and vica-versa}
14
14
  s.email = %q{anuj@andhapp.com}
15
15
  s.extra_rdoc_files = [
@@ -26,9 +26,9 @@ Gem::Specification.new do |s|
26
26
  "Rakefile",
27
27
  "VERSION",
28
28
  "lib/pretty_time.rb",
29
- "lib/pretty_time/core.rb",
29
+ "lib/pretty_time/pretty_time.rb",
30
30
  "pretty_time.gemspec",
31
- "spec/pretty_time/core_spec.rb",
31
+ "spec/pretty_time/pretty_time_spec.rb",
32
32
  "spec/spec_helper.rb"
33
33
  ]
34
34
  s.homepage = %q{http://github.com/andhapp/pretty_time}
@@ -37,7 +37,7 @@ Gem::Specification.new do |s|
37
37
  s.rubygems_version = %q{1.6.2}
38
38
  s.summary = %q{Serialize time}
39
39
  s.test_files = [
40
- "spec/pretty_time/core_spec.rb",
40
+ "spec/pretty_time/pretty_time_spec.rb",
41
41
  "spec/spec_helper.rb"
42
42
  ]
43
43
 
@@ -0,0 +1,240 @@
1
+ require 'spec_helper'
2
+
3
+ describe "PrettyTime" do
4
+
5
+ context "On request to #dump" do
6
+
7
+ it 'should convert A hours to X seconds' do
8
+ PrettyTime.dump("4 hours").should == 4.hours.to_i
9
+ end
10
+
11
+ it 'should convert B minutes to X seconds' do
12
+ PrettyTime.dump("40 minutes").should == 40.minutes.to_i
13
+ end
14
+
15
+ it 'should return X seconds as X seconds' do
16
+ PrettyTime.dump("40 seconds").should == 40
17
+ end
18
+
19
+ it 'should convert A hours B minutes to X seconds' do
20
+ PrettyTime.dump("4 hours 40 minutes").should == 4.hours.to_i + 40.minutes.to_i
21
+ end
22
+
23
+ it 'should convert B minutes C seconds to X seconds' do
24
+ PrettyTime.dump("40 minutes 30 seconds").should == 40.minutes.to_i + 30
25
+ end
26
+
27
+ it 'should convert A hours C seconds to X seconds' do
28
+ PrettyTime.dump("4 hours 30 seconds").should == 4.hours.to_i + 30
29
+ end
30
+
31
+ it 'should convert A hours B minutes C seconds to X seconds' do
32
+ PrettyTime.dump("4 hours 40 minutes 30 seconds").should == 4.hours.to_i + 40.minutes.to_i + 30
33
+ end
34
+
35
+ it 'should convert A hrs to X seconds' do
36
+ PrettyTime.dump("4 hrs").should == 4.hours.to_i
37
+ end
38
+
39
+ it 'should convert B mins to X seconds' do
40
+ PrettyTime.dump("4 mins").should == 4.minutes.to_i
41
+ end
42
+
43
+ it 'should convert C secs to X seconds' do
44
+ PrettyTime.dump("4 secs").should == 4
45
+ end
46
+
47
+ it 'should convert A h to X seconds' do
48
+ PrettyTime.dump("4 h").should == 4.hours.to_i
49
+ end
50
+
51
+ it 'should convert B m to X seconds' do
52
+ PrettyTime.dump("4 m").should == 4.minutes.to_i
53
+ end
54
+
55
+ it 'should convert C s to X seconds' do
56
+ PrettyTime.dump("4 s").should == 4
57
+ end
58
+
59
+ context "with fence post cases" do
60
+
61
+ it 'should convert 1 hour to 3600 seconds' do
62
+ PrettyTime.dump("1 hour").should == 3600
63
+ end
64
+
65
+ it 'should convert 1 minute to 60 seconds' do
66
+ PrettyTime.dump("1 minute").should == 60
67
+ end
68
+
69
+ it 'should return 1 second as 1 second' do
70
+ PrettyTime.dump("1 second").should == 1
71
+ end
72
+
73
+ it 'should convert 1 hour 1 minute to 3660 seconds' do
74
+ PrettyTime.dump("1 hour 1 minute").should == 3660
75
+ end
76
+
77
+ it 'should convert 1 minute 1 second to 61 seconds' do
78
+ PrettyTime.dump("1 minute 1 second").should == 61
79
+ end
80
+
81
+ it 'should convert 1 hour 1 minute 1 second to 3661 seconds' do
82
+ PrettyTime.dump("1 hour 1 minute 1 second").should == 3661
83
+ end
84
+
85
+ it 'should convert 1 hr to 3600 seconds' do
86
+ PrettyTime.dump("1 hr").should == 1.hours.to_i
87
+ end
88
+
89
+ it 'should convert 1 min to 60 seconds' do
90
+ PrettyTime.dump("1 min").should == 1.minutes.to_i
91
+ end
92
+
93
+ it 'should convert 1 sec to 1 second' do
94
+ PrettyTime.dump("1 sec").should == 1
95
+ end
96
+
97
+ it 'should convert 1 hr to 3600 seconds' do
98
+ PrettyTime.dump("1 h").should == 1.hours.to_i
99
+ end
100
+
101
+ it 'should convert 1 min to 60 seconds' do
102
+ PrettyTime.dump("1 m").should == 1.minutes.to_i
103
+ end
104
+
105
+ it 'should convert 1 sec to 1 second' do
106
+ PrettyTime.dump("1 s").should == 1
107
+ end
108
+
109
+ end
110
+ end
111
+
112
+ context "On request to #load" do
113
+
114
+ it 'should convert 7200 seconds to 2 hours' do
115
+ PrettyTime.load(2.hours).should == "2 hours"
116
+ end
117
+
118
+ it 'should convert 600 seconds to 10 minutes' do
119
+ PrettyTime.load(10.minutes.to_i).should == "10 minutes"
120
+ end
121
+
122
+ it 'should return 59 seconds as 59 seconds' do
123
+ PrettyTime.load(59).should == "59 seconds"
124
+ end
125
+
126
+ it 'should convert 7800 seconds to 2 hours 10 minutes' do
127
+ PrettyTime.load(2.hours.to_i + 10.minutes.to_i).should == "2 hours 10 minutes"
128
+ end
129
+
130
+ it 'should convert 7210 seconds to 2 hours 10 seconds' do
131
+ PrettyTime.load(2.hours.to_i + 10).should == "2 hours 10 seconds"
132
+ end
133
+
134
+ it 'should convert 130 seconds to 2 minutes 10 seconds' do
135
+ PrettyTime.load(2.minutes.to_i + 10).should == "2 minutes 10 seconds"
136
+ end
137
+
138
+ it 'should convert 7810 seconds to 2 hours 10 minutes 10 seconds' do
139
+ PrettyTime.load(2.hours.to_i + 10.minutes.to_i + 10).should == "2 hours 10 minutes 10 seconds"
140
+ end
141
+
142
+ context "with configuration defined" do
143
+
144
+ it 'with hours_suffix as hrs and minutes and seconds as default should convert 7800 seconds to 2 hrs 10 minutes' do
145
+ PrettyTime.configuration do |config|
146
+ config.hours_suffix = "hrs"
147
+ end
148
+ PrettyTime.load(2.hours.to_i + 10.minutes.to_i).should == "2 hrs 10 minutes"
149
+ end
150
+
151
+ it 'with minutes_suffix as mins and hours and seconds as default should convert 7800 seconds to 2 hours 10 mins' do
152
+ PrettyTime.configuration do |config|
153
+ config.hours_suffix = "hours"
154
+ config.minutes_suffix = "mins"
155
+ end
156
+ PrettyTime.load(2.hours.to_i + 10.minutes.to_i).should == "2 hours 10 mins"
157
+ end
158
+
159
+ it 'with seconds_suffix as secs and minutes and hours as default should convert 7805 seconds to 2 hours 10 minutes 5 secs' do
160
+ PrettyTime.configuration do |config|
161
+ config.hours_suffix = "hours"
162
+ config.minutes_suffix = "minutes"
163
+ config.seconds_suffix = "secs"
164
+ end
165
+ PrettyTime.load(2.hours.to_i + 10.minutes.to_i + 5).should == "2 hours 10 minutes 5 secs"
166
+ end
167
+
168
+ end
169
+
170
+ context "with fence post cases" do
171
+
172
+ before(:each) do
173
+ PrettyTime.configuration do |config|
174
+ config.hours_suffix = "hours"
175
+ config.minutes_suffix = "minutes"
176
+ config.seconds_suffix = "seconds"
177
+ end
178
+ end
179
+
180
+ it 'should convert 3600 seconds to 1 hour' do
181
+ PrettyTime.load(1.hours).should == "1 hour"
182
+ end
183
+
184
+ it 'should convert 60 seconds to 1 minute' do
185
+ PrettyTime.load(1.minute.to_i).should == "1 minute"
186
+ end
187
+
188
+ it 'should return 1 second as 1 second' do
189
+ PrettyTime.load(1).should == "1 second"
190
+ end
191
+
192
+ it 'should convert 3660 seconds to 1 hour 1 minute' do
193
+ PrettyTime.load(1.hours.to_i + 1.minute.to_i).should == "1 hour 1 minute"
194
+ end
195
+
196
+ it 'should convert 3601 seconds to 1 hour 1 second' do
197
+ PrettyTime.load(1.hours.to_i + 1).should == "1 hour 1 second"
198
+ end
199
+
200
+ it 'should convert 61 seconds to 1 minute 1 second' do
201
+ PrettyTime.load(1.minutes.to_i + 1).should == "1 minute 1 second"
202
+ end
203
+
204
+ it 'should convert 3661 seconds to 1 hour 1 minute 1 second' do
205
+ PrettyTime.load(1.hours.to_i + 1.minutes.to_i + 1).should == "1 hour 1 minute 1 second"
206
+ end
207
+
208
+ context "with configuration defined" do
209
+
210
+ it 'with hours_suffix as hrs and minutes and seconds as default should convert 3610 seconds to 1 hr 10 minutes' do
211
+ PrettyTime.configuration do |config|
212
+ config.hours_suffix = "hrs"
213
+ end
214
+ PrettyTime.load(1.hours.to_i + 10.minutes.to_i).should == "1 hr 10 minutes"
215
+ end
216
+
217
+ it 'with minutes_suffix as mins and hours and seconds as default should convert 7260 seconds to 2 hours 1 min' do
218
+ PrettyTime.configuration do |config|
219
+ config.hours_suffix = "hours"
220
+ config.minutes_suffix = "mins"
221
+ end
222
+ PrettyTime.load(2.hours.to_i + 1.minutes.to_i).should == "2 hours 1 min"
223
+ end
224
+
225
+ it 'with seconds_suffix as secs and minutes and hours as default should convert 7801 seconds to 2 hours 10 minutes 1 sec' do
226
+ PrettyTime.configuration do |config|
227
+ config.hours_suffix = "hours"
228
+ config.minutes_suffix = "minutes"
229
+ config.seconds_suffix = "secs"
230
+ end
231
+ PrettyTime.load(2.hours.to_i + 10.minutes.to_i + 1).should == "2 hours 10 minutes 1 sec"
232
+ end
233
+
234
+ end
235
+
236
+ end
237
+
238
+ end
239
+
240
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: pretty_time
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.0
5
+ version: 0.2.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Anuj Dutta
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-05-01 00:00:00 +01:00
13
+ date: 2011-05-15 00:00:00 +01:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -98,9 +98,9 @@ files:
98
98
  - Rakefile
99
99
  - VERSION
100
100
  - lib/pretty_time.rb
101
- - lib/pretty_time/core.rb
101
+ - lib/pretty_time/pretty_time.rb
102
102
  - pretty_time.gemspec
103
- - spec/pretty_time/core_spec.rb
103
+ - spec/pretty_time/pretty_time_spec.rb
104
104
  - spec/spec_helper.rb
105
105
  has_rdoc: true
106
106
  homepage: http://github.com/andhapp/pretty_time
@@ -116,7 +116,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
116
116
  requirements:
117
117
  - - ">="
118
118
  - !ruby/object:Gem::Version
119
- hash: 425365761
119
+ hash: 423849249
120
120
  segments:
121
121
  - 0
122
122
  version: "0"
@@ -134,5 +134,5 @@ signing_key:
134
134
  specification_version: 3
135
135
  summary: Serialize time
136
136
  test_files:
137
- - spec/pretty_time/core_spec.rb
137
+ - spec/pretty_time/pretty_time_spec.rb
138
138
  - spec/spec_helper.rb
@@ -1,135 +0,0 @@
1
- #
2
- # Simple time serializer with two main functionalities:
3
- # 1. Takes a time in seconds and converts it into a pretty string
4
- # 2. Takes a pretty string and converts it into time in seconds
5
- #
6
- # Dependencies:
7
- # ActiveSupport
8
- #
9
- module PrettyTime
10
-
11
- #
12
- # Serializes(if you will) time in seconds supplied as integer to a
13
- # pretty time string
14
- # Example:
15
- #
16
- # PrettyTime.load(130) # 2 minutes 10 seconds
17
- #
18
- def self.load(time_in_sec)
19
- pretty_time.load(time_in_sec)
20
- end
21
-
22
- #
23
- # De-serializes(if you will) a pretty time into time in seconds
24
- # Example:
25
- #
26
- # PrettyTime.dump('2 minutes 10 seconds') # 130
27
- #
28
- def self.dump(time_as_pretty_string)
29
- pretty_time.dump(time_as_pretty_string)
30
- end
31
-
32
- #
33
- # Creates an instance of itself if one does not exist
34
- #
35
- def self.pretty_time
36
- @pretty_time ||= Core.new
37
- end
38
-
39
- #
40
- # Core class which provides the entry point to other useful methods
41
- #
42
- class Core
43
-
44
- HOURS = "hours"
45
- MINUTES = "minutes"
46
- SECONDS = "seconds"
47
-
48
- #
49
- # Core method that does all the work
50
- #
51
- def load(time_in_sec)
52
- hours, minutes, seconds = hours_and_minutes_and_seconds(time_in_sec)
53
-
54
- pretty_time_string = ""
55
-
56
- if has_hours?(hours)
57
- pretty_time_string << "#{with_suffix(hours, HOURS)}"
58
- end
59
-
60
- if has_minutes?(minutes)
61
- if has_hours?(hours)
62
- pretty_time_string << " "
63
- end
64
- pretty_time_string << "#{with_suffix(minutes, MINUTES)}"
65
- end
66
-
67
- if has_seconds?(seconds)
68
- if has_hours?(hours) || has_minutes?(minutes)
69
- pretty_time_string << " "
70
- end
71
- pretty_time_string << "#{with_suffix(seconds, SECONDS)}"
72
- end
73
-
74
- pretty_time_string
75
- end
76
-
77
- #
78
- # Core method that does all the work
79
- #
80
- def dump(time_as_pretty_string)
81
- if match = /^(\d+) (hours?) (\d+) (minutes?) (\d+) (seconds?)/.match(time_as_pretty_string)
82
- return match[1].to_i.send(:"#{match[2]}").to_i + match[3].to_i.send("#{match[4]}").to_i + match[5].to_i
83
- elsif match = /^(\d+) (hours?) (\d+) (minutes?)/.match(time_as_pretty_string)
84
- return match[1].to_i.send(:"#{match[2]}").to_i + match[3].to_i.send("#{match[4]}").to_i
85
- elsif match = /^(\d+) (minutes?) (\d+) (seconds?)/.match(time_as_pretty_string)
86
- return match[1].to_i.send(:"#{match[2]}").to_i + match[3].to_i
87
- elsif match = /^(\d+) (hours?) (\d+) (seconds?)/.match(time_as_pretty_string)
88
- return match[1].to_i.send(:"#{match[2]}").to_i + match[3].to_i
89
- end
90
- time_as_pretty_string.gsub(/ hours?| minutes?| seconds?/, '').to_i.send(:"#{$&.strip}")
91
- end
92
-
93
- private
94
-
95
- # Converts time in seconds to an array of hours, minutes and seconds
96
- def hours_and_minutes_and_seconds(time_in_sec)
97
- minutes, seconds = minutes_and_seconds(time_in_sec)
98
- hours = 0
99
- if minutes >= 60
100
- hours = minutes / 60
101
- minutes = minutes % 60
102
- end
103
- [hours, minutes, seconds]
104
- end
105
-
106
- # Converts time in seconds to an array of minutes and seconds
107
- def minutes_and_seconds(time_in_sec)
108
- [time_in_sec / 60, time_in_sec % 60]
109
- end
110
-
111
- # Checks if supplied value is zero
112
- def non_zero?(value)
113
- value != 0
114
- end
115
-
116
- # Adds the correct suffix
117
- # Example:
118
- #
119
- # 1 hour
120
- # 3 hours
121
- def with_suffix(value, type)
122
- if value > 1
123
- return "#{value} #{type}"
124
- end
125
-
126
- return "#{value} #{type.gsub(/s$/, '')}"
127
- end
128
-
129
- alias :has_hours? :non_zero?
130
- alias :has_minutes? :non_zero?
131
- alias :has_seconds? :non_zero?
132
-
133
- end
134
-
135
- end
@@ -1,127 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "PrettyTime" do
4
-
5
- context "On request to #dump" do
6
-
7
- it 'should convert A hours to X seconds' do
8
- PrettyTime.dump("4 hours").should == 4.hours.to_i
9
- end
10
-
11
- it 'should convert B minutes to X seconds' do
12
- PrettyTime.dump("40 minutes").should == 40.minutes.to_i
13
- end
14
-
15
- it 'should return X seconds as X seconds' do
16
- PrettyTime.dump("40 seconds").should == 40
17
- end
18
-
19
- it 'should convert A hours B minutes to X seconds' do
20
- PrettyTime.dump("4 hours 40 minutes").should == 4.hours.to_i + 40.minutes.to_i
21
- end
22
-
23
- it 'should convert B minutes C seconds to X seconds' do
24
- PrettyTime.dump("40 minutes 30 seconds").should == 40.minutes.to_i + 30
25
- end
26
-
27
- it 'should convert A hours C seconds to X seconds' do
28
- PrettyTime.dump("4 hours 30 seconds").should == 4.hours.to_i + 30
29
- end
30
-
31
- it 'should convert A hours B minutes C seconds to X seconds' do
32
- PrettyTime.dump("4 hours 40 minutes 30 seconds").should == 4.hours.to_i + 40.minutes.to_i + 30
33
- end
34
-
35
- context "with fence post cases" do
36
-
37
- it 'should convert 1 hour to 3600 seconds' do
38
- PrettyTime.dump("1 hour").should == 3600
39
- end
40
-
41
- it 'should convert 1 minute to 60 seconds' do
42
- PrettyTime.dump("1 minute").should == 60
43
- end
44
-
45
- it 'should return 1 second as 1 second' do
46
- PrettyTime.dump("1 second").should == 1
47
- end
48
-
49
- it 'should convert 1 hour 1 minute to 3660 seconds' do
50
- PrettyTime.dump("1 hour 1 minute").should == 3660
51
- end
52
-
53
- it 'should convert 1 minute 1 second to 61 seconds' do
54
- PrettyTime.dump("1 minute 1 second").should == 61
55
- end
56
-
57
- it 'should convert 1 hour 1 minute 1 second to 3661 seconds' do
58
- PrettyTime.dump("1 hour 1 minute 1 second").should == 3661
59
- end
60
- end
61
- end
62
-
63
- context "On request to #load" do
64
-
65
- it 'should convert 7200 seconds to 2 hours' do
66
- PrettyTime.load(2.hours).should == "2 hours"
67
- end
68
-
69
- it 'should convert 600 seconds to 10 minutes' do
70
- PrettyTime.load(10.minutes.to_i).should == "10 minutes"
71
- end
72
-
73
- it 'should return 59 seconds as 59 seconds' do
74
- PrettyTime.load(59).should == "59 seconds"
75
- end
76
-
77
- it 'should convert 7800 seconds to 2 hours 10 minutes' do
78
- PrettyTime.load(2.hours.to_i + 10.minutes.to_i).should == "2 hours 10 minutes"
79
- end
80
-
81
- it 'should convert 7210 seconds to 2 hours 10 seconds' do
82
- PrettyTime.load(2.hours.to_i + 10).should == "2 hours 10 seconds"
83
- end
84
-
85
- it 'should convert 130 seconds to 2 minutes 10 seconds' do
86
- PrettyTime.load(2.minutes.to_i + 10).should == "2 minutes 10 seconds"
87
- end
88
-
89
- it 'should convert 7810 seconds to 2 hours 10 minutes 10 seconds' do
90
- PrettyTime.load(2.hours.to_i + 10.minutes.to_i + 10).should == "2 hours 10 minutes 10 seconds"
91
- end
92
-
93
- context "with fence post cases" do
94
-
95
- it 'should convert 3600 seconds to 1 hour' do
96
- PrettyTime.load(1.hours).should == "1 hour"
97
- end
98
-
99
- it 'should convert 60 seconds to 1 minute' do
100
- PrettyTime.load(1.minute.to_i).should == "1 minute"
101
- end
102
-
103
- it 'should return 1 second as 1 second' do
104
- PrettyTime.load(1).should == "1 second"
105
- end
106
-
107
- it 'should convert 3660 seconds to 1 hour 1 minute' do
108
- PrettyTime.load(1.hours.to_i + 1.minute.to_i).should == "1 hour 1 minute"
109
- end
110
-
111
- it 'should convert 3601 seconds to 1 hour 1 second' do
112
- PrettyTime.load(1.hours.to_i + 1).should == "1 hour 1 second"
113
- end
114
-
115
- it 'should convert 61 seconds to 1 minute 1 second' do
116
- PrettyTime.load(1.minutes.to_i + 1).should == "1 minute 1 second"
117
- end
118
-
119
- it 'should convert 3661 seconds to 1 hour 1 minute 1 second' do
120
- PrettyTime.load(1.hours.to_i + 1.minutes.to_i + 1).should == "1 hour 1 minute 1 second"
121
- end
122
-
123
- end
124
-
125
- end
126
-
127
- end