business_time 0.6.1 → 0.6.2

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 85605515b3dfca0f7d48ed3ff03cabe4d0265930
4
+ data.tar.gz: f8637bacc2e3c19665a87484ad48c03056ec4a2e
5
+ SHA512:
6
+ metadata.gz: 73a15a3b9fef741d3e095c451871ff3ca51287499a46518bc01c7a4536db5347c9a919c0c4c4bf12b5f98381e1efb8ee675ef3be3e61be9fe44dc68935a47df1
7
+ data.tar.gz: 2c3c0fb687cf7545e16d8315ed1d10dfe29c2bd3625b99f8c9226108bb22c5b9d693490089a4462b9cee839f28d0484c0e5989250245166e28370ae6352faddf
data/README.rdoc CHANGED
@@ -78,6 +78,16 @@ I needed this, but taking into account business hours/days and holidays.
78
78
  thursday_afternoon = Time.parse("July 8th, 2010, 4:50 pm")
79
79
  sunday_morning = 1.business_hour.after(thursday_afternoon)
80
80
 
81
+ # as alternative we also can change the business hours for each work day:
82
+ BusinessTime::Config.work_hours = {
83
+ :mon=>["9:00","17:00"],
84
+ :fri=>["9:00","17:00"],
85
+ :sat=>["10:00","15:00"]
86
+ }
87
+ friday = Time.parse("December 24, 2010 15:00")
88
+ monday = Time.parse("December 27, 2010 11:00")
89
+ working_hours = friday.business_time_until(monday) # 9.hours
90
+
81
91
  # you can also calculate business duration between two dates
82
92
  friday = Date.parse("December 24, 2010")
83
93
  monday = Date.parse("December 27, 2010")
@@ -133,10 +143,12 @@ This can lead to some wierd looking effects if, say, you are in the Eastern time
133
143
 
134
144
  == Integration with the Holidays gem
135
145
 
136
- Chris Wise wrote up a great article[http://murmurinfo.wordpress.com/2012/01/11/handling-holidays-and-business-hours/] on using the business_time gem with the holidays[https://github.com/HealthyWeb/holidays] gem. It boils down to this:
146
+ Chris Wise wrote up a great article[http://murmurinfo.wordpress.com/2012/01/11/handling-holidays-and-business-hours/] on using the business_time gem with the holidays[https://github.com/alexdunae/holidays] gem. It boils down to this:
137
147
 
138
148
  Holidays.between(Date.civil(2011, 1, 1), 2.years.from_now, :ca_on, :o bserved).map{|holiday| BusinessTime::Config.holidays << holiday[:date]}
139
149
 
150
+ == Releases
151
+ 0.6.2 - rchady pointed out that issue #14 didn't appear to be released. This fixes that, as well as confirms that all tests run as expected on Ruby 2.0.0p195
140
152
 
141
153
  == Contributors
142
154
  * David Bock http://github.com/bokmann
@@ -160,7 +172,7 @@ This can lead to some wierd looking effects if, say, you are in the Eastern time
160
172
  == TODO
161
173
 
162
174
  * Arild has pointed out that there may be some logical inconsistencies
163
- regaring the beginning_of_workday and end_of workday times not actually
175
+ regarding the beginning_of_workday and end_of workday times not actually
164
176
  being considered inside of the workday. I'd like to make sure that they
165
177
  work as if the beginning_of_workday is included and the end_of_workday is
166
178
  not included, just like the '...' range operator in Ruby.
@@ -177,4 +189,4 @@ This can lead to some wierd looking effects if, say, you are in the Eastern time
177
189
 
178
190
  == Copyright
179
191
 
180
- Copyright (c) 2010,2011,2012 bokmann. See LICENSE for details.
192
+ Copyright (c) 2010,2011,2012,2013 bokmann. See LICENSE for details.
@@ -9,10 +9,10 @@ module BusinessTime
9
9
 
10
10
  def after(time = Time.now)
11
11
  time = Time.zone ? Time.zone.parse(time.to_s) : Time.parse(time.to_s)
12
- @days.times do
13
- begin
14
- time = time + 1.day
15
- end until Time.workday?(time)
12
+ days = @days
13
+ while days > 0 || !Time.workday?(time)
14
+ days -= 1 if Time.workday?(time)
15
+ time = time + 1.day
16
16
  end
17
17
  time
18
18
  end
@@ -22,10 +22,10 @@ module BusinessTime
22
22
 
23
23
  def before(time = Time.now)
24
24
  time = Time.zone ? Time.zone.parse(time.to_s) : Time.parse(time.to_s)
25
- @days.times do
26
- begin
27
- time = time - 1.day
28
- end until Time.workday?(time)
25
+ days = @days
26
+ while days > 0 || !Time.workday?(time)
27
+ days -= 1 if Time.workday?(time)
28
+ time = time - 1.day
29
29
  end
30
30
  time
31
31
  end
@@ -1,7 +1,7 @@
1
1
  require 'active_support/core_ext'
2
2
 
3
3
  module BusinessTime
4
-
4
+
5
5
  # controls the behavior of this gem. You can change
6
6
  # the beginning_of_workday, end_of_workday, and the list of holidays
7
7
  # manually, or with a yaml file and the load method.
@@ -12,51 +12,83 @@ module BusinessTime
12
12
  # BusinessTime::Config.beginning_of_workday = "8:30 am"
13
13
  # someplace in the initializers of your application.
14
14
  attr_accessor :beginning_of_workday
15
-
15
+
16
16
  # You can set this yourself, either by the load method below, or
17
17
  # by saying
18
18
  # BusinessTime::Config.end_of_workday = "5:30 pm"
19
19
  # someplace in the initializers of your application.
20
20
  attr_accessor :end_of_workday
21
-
21
+
22
22
  # You can set this yourself, either by the load method below, or
23
23
  # by saying
24
24
  # BusinessTime::Config.work_week = [:sun, :mon, :tue, :wed, :thu]
25
25
  # someplace in the initializers of your application.
26
26
  attr_accessor :work_week
27
-
27
+
28
28
  # You can set this yourself, either by the load method below, or
29
29
  # by saying
30
30
  # BusinessTime::Config.holidays << my_holiday_date_object
31
31
  # someplace in the initializers of your application.
32
32
  attr_accessor :holidays
33
33
 
34
+ # working hours for each day - if not set using global variables :beginning_of_workday
35
+ # and end_of_workday. Keys will be added ad weekdays.
36
+ # Example:
37
+ # {:mon => ["9:00","17:00"],:tue => ["9:00","17:00"].....}
38
+ attr_accessor :work_hours
39
+
40
+ end
41
+
42
+ def self.end_of_workday(day=nil)
43
+ if day
44
+ wday = @work_hours[self.int_to_wday(day.wday)]
45
+ wday ? (wday.last =~ /0{1,2}\:0{1,2}/ ? "23:59:59" : wday.last) : @end_of_workday
46
+ else
47
+ @end_of_workday
48
+ end
49
+ end
50
+
51
+ def self.beginning_of_workday(day=nil)
52
+ if day
53
+ wday = @work_hours[self.int_to_wday(day.wday)]
54
+ wday ? wday.first : @beginning_of_workday
55
+ else
56
+ @beginning_of_workday
57
+ end
34
58
  end
35
-
59
+
36
60
  def self.work_week=(days)
37
61
  @work_week = days
38
62
  @weekdays = nil
39
63
  end
40
-
64
+
41
65
  def self.weekdays
42
66
  return @weekdays unless @weekdays.nil?
43
-
44
- lowercase_day_names = ::Time::RFC2822_DAY_NAME.map(&:downcase)
45
-
46
- @weekdays = work_week.each_with_object([]) do |day_name, days|
47
- day_num = lowercase_day_names.find_index(day_name.to_s.downcase)
67
+
68
+ @weekdays = (!work_hours.empty? ? work_hours.keys : work_week).each_with_object([]) do |day_name, days|
69
+ day_num = self.wday_to_int(day_name)
48
70
  days << day_num unless day_num.nil?
49
71
  end
50
72
  end
51
-
73
+
74
+ def self.wday_to_int day_name
75
+ lowercase_day_names = ::Time::RFC2822_DAY_NAME.map(&:downcase)
76
+ lowercase_day_names.find_index(day_name.to_s.downcase)
77
+ end
78
+
79
+ def self.int_to_wday num
80
+ ::Time::RFC2822_DAY_NAME.map(&:downcase).map(&:to_sym)[num]
81
+ end
82
+
52
83
  def self.reset
53
84
  self.holidays = []
54
85
  self.beginning_of_workday = "9:00 am"
55
86
  self.end_of_workday = "5:00 pm"
56
87
  self.work_week = %w[mon tue wed thu fri]
88
+ self.work_hours = {}
57
89
  @weekdays = nil
58
90
  end
59
-
91
+
60
92
  # loads the config data from a yaml file written as:
61
93
  #
62
94
  # business_time:
@@ -66,20 +98,24 @@ module BusinessTime
66
98
  # - Jan 1st, 2010
67
99
  # - July 4th, 2010
68
100
  # - Dec 25th, 2010
69
- def self.load(filename)
101
+ def self.load(file)
70
102
  self.reset
71
- data = YAML::load(File.open(filename))
72
- self.beginning_of_workday = data["business_time"]["beginning_of_workday"]
73
- self.end_of_workday = data["business_time"]["end_of_workday"]
74
- self.work_week = data["business_time"]["work_week"]
75
- data["business_time"]["holidays"].each do |holiday|
76
- self.holidays << (Time.zone ? Time.zone.parse(holiday) : Time.parse(holiday))
103
+ data = YAML::load(file.respond_to?(:read) ? file : File.open(file))
104
+ config = (data["business_time"] || {})
105
+
106
+ # load each config variable from the file, if it's present and valid
107
+ config_vars = %w(beginning_of_workday end_of_workday work_week work_hours)
108
+ config_vars.each do |var|
109
+ send("#{var}=", config[var]) if config[var] && respond_to?("#{var}=")
110
+ end
111
+
112
+ (config["holidays"] || []).each do |holiday|
113
+ self.holidays << Date.parse(holiday)
77
114
  end
78
-
79
115
  end
80
-
116
+
81
117
  #reset the first time we are loaded.
82
118
  self.reset
83
119
  end
84
-
120
+
85
121
  end
File without changes
@@ -7,9 +7,8 @@ class Time
7
7
  # Note: It pretends that this day is a workday whether or not it really is a
8
8
  # workday.
9
9
  def end_of_workday(day)
10
- format = "%B %d %Y #{BusinessTime::Config.end_of_workday}"
11
- Time.zone ? Time.zone.parse(day.strftime(format)) :
12
- Time.parse(day.strftime(format))
10
+ end_of_workday = Time.parse(BusinessTime::Config.end_of_workday(day))
11
+ change_time(day,end_of_workday.hour,end_of_workday.min,end_of_workday.sec)
13
12
  end
14
13
 
15
14
  # Gives the time at the beginning of the workday, assuming that this time
@@ -17,9 +16,8 @@ class Time
17
16
  # Note: It pretends that this day is a workday whether or not it really is a
18
17
  # workday.
19
18
  def beginning_of_workday(day)
20
- format = "%B %d %Y #{BusinessTime::Config.beginning_of_workday}"
21
- Time.zone ? Time.zone.parse(day.strftime(format)) :
22
- Time.parse(day.strftime(format))
19
+ beginning_of_workday = Time.parse(BusinessTime::Config.beginning_of_workday(day))
20
+ change_time(day,beginning_of_workday.hour,beginning_of_workday.min,beginning_of_workday.sec)
23
21
  end
24
22
 
25
23
  # True if this time is on a workday (between 00:00:00 and 23:59:59), even if
@@ -35,11 +33,11 @@ class Time
35
33
  end
36
34
 
37
35
  def before_business_hours?(time)
38
- time < beginning_of_workday(time)
36
+ time.to_i < beginning_of_workday(time).to_i
39
37
  end
40
38
 
41
39
  def after_business_hours?(time)
42
- time > end_of_workday(time)
40
+ time.to_i > end_of_workday(time).to_i
43
41
  end
44
42
 
45
43
  # Rolls forward to the next beginning_of_workday
@@ -48,19 +46,48 @@ class Time
48
46
 
49
47
  if (Time.before_business_hours?(time) || !Time.workday?(time))
50
48
  next_business_time = Time.beginning_of_workday(time)
51
- elsif Time.after_business_hours?(time)
52
- next_business_time = Time.beginning_of_workday(time) + 1.day
49
+ elsif Time.after_business_hours?(time) || Time.end_of_workday(time) == time
50
+ next_business_time = Time.beginning_of_workday(time + 1.day)
53
51
  else
54
52
  next_business_time = time.clone
55
53
  end
56
54
 
57
55
  while !Time.workday?(next_business_time)
58
- next_business_time += 1.day
56
+ next_business_time = Time.beginning_of_workday(next_business_time + 1.day)
59
57
  end
60
58
 
61
59
  next_business_time
62
60
  end
63
61
 
62
+ # Rolls backwards to the previous end_of_workday when the time is outside
63
+ # of business hours
64
+ def roll_backward(time)
65
+ if (Time.before_business_hours?(time) || !Time.workday?(time))
66
+ prev_business_time = Time.end_of_workday(time) - 1.day
67
+ elsif Time.after_business_hours?(time)
68
+ prev_business_time = Time.end_of_workday(time)
69
+ else
70
+ prev_business_time = time.clone
71
+ end
72
+
73
+ while !Time.workday?(prev_business_time)
74
+ prev_business_time -= 1.day
75
+ end
76
+
77
+ prev_business_time
78
+ end
79
+
80
+ private
81
+
82
+ def change_time time, hour, min=0, sec=0
83
+ if Time.zone
84
+ time.in_time_zone(Time.zone).change(:hour => hour, :min => min, :sec => sec)
85
+ else
86
+ time.change(:hour => hour, :min => min, :sec => sec)
87
+ end
88
+ end
89
+
90
+
64
91
  end
65
92
  end
66
93
 
@@ -78,27 +105,44 @@ class Time
78
105
  time_b = self
79
106
  direction = -1
80
107
  end
81
-
108
+
82
109
  # Align both times to the closest business hours
83
110
  time_a = Time::roll_forward(time_a)
84
111
  time_b = Time::roll_forward(time_b)
85
-
112
+
86
113
  # If same date, then calculate difference straight forward
87
114
  if time_a.to_date == time_b.to_date
88
115
  result = time_b - time_a
89
116
  return result *= direction
90
117
  end
91
-
118
+
92
119
  # Both times are in different dates
93
- result = Time.parse(time_a.strftime('%Y-%m-%d ') + BusinessTime::Config.end_of_workday) - time_a # First day
94
- result += time_b - Time.parse(time_b.strftime('%Y-%m-%d ') + BusinessTime::Config.beginning_of_workday) # Last day
95
-
120
+ #result = Time.parse(time_a.strftime('%Y-%m-%d ') + BusinessTime::Config.end_of_workday) - time_a # First day
121
+ #result += time_b - Time.parse(time_b.strftime('%Y-%m-%d ') + BusinessTime::Config.beginning_of_workday) # Last day
122
+
123
+ result = 0
124
+
96
125
  # All days in between
97
- duration_of_working_day = Time.parse(BusinessTime::Config.end_of_workday) - Time.parse(BusinessTime::Config.beginning_of_workday)
98
- result += (time_a.to_date.business_days_until(time_b.to_date) - 1) * duration_of_working_day
99
-
126
+ time_c = time_a
127
+ while time_c.to_i < time_b.to_i do
128
+ end_of_workday = Time.end_of_workday(time_c)
129
+ if time_c.to_date == time_b.to_date
130
+ if end_of_workday < time_b
131
+ result += end_of_workday - time_c
132
+ break
133
+ else
134
+ result += time_b - time_c
135
+ break
136
+ end
137
+ else
138
+ result += end_of_workday - time_c
139
+ time_c = Time::roll_forward(end_of_workday)
140
+ end
141
+ result += 1 if end_of_workday.to_s =~ /23:59:59/
142
+ end
143
+
100
144
  # Make sure that sign is correct
101
145
  result *= direction
102
146
  end
103
147
 
104
- end
148
+ end
@@ -1,3 +1,3 @@
1
1
  module BusinessTime
2
- VERSION = "0.6.1"
2
+ VERSION = "0.6.2"
3
3
  end
data/lib/business_time.rb CHANGED
@@ -1,10 +1,12 @@
1
1
  require 'thread'
2
- require "active_support"
2
+ require 'active_support'
3
3
  require 'active_support/time'
4
- require "time"
5
- require "business_time/config"
6
- require "business_time/business_hours"
7
- require "business_time/business_days"
8
- require "extensions/date"
9
- require "extensions/time"
10
- require "extensions/fixnum"
4
+ require 'time'
5
+
6
+ require 'business_time/config'
7
+ require 'business_time/business_hours'
8
+ require 'business_time/business_days'
9
+ require 'business_time/core_ext/date'
10
+ require 'business_time/core_ext/time'
11
+ require 'business_time/core_ext/fixnum'
12
+
@@ -1,6 +1,7 @@
1
1
  BusinessTime::Config.load("#{Rails.root}/config/business_time.yml")
2
2
 
3
- # or you can configure it manually: look at me! I'm Tim Ferris!
3
+ # or you can configure it manually: look at me! I'm Tim Ferriss!
4
4
  # BusinessTime.Config.beginning_of_workday = "10:00 am"
5
- # BusinessTime.Comfig.end_of_workday = "11:30 am"
6
- # BusinessTime.config.holidays << Date.parse("August 4th, 2010")
5
+ # BusinessTime.Config.end_of_workday = "11:30 am"
6
+ # BusinessTime.Config.holidays << Date.parse("August 4th, 2010")
7
+
metadata CHANGED
@@ -1,155 +1,127 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: business_time
3
- version: !ruby/object:Gem::Version
4
- hash: 5
5
- prerelease:
6
- segments:
7
- - 0
8
- - 6
9
- - 1
10
- version: 0.6.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.6.2
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - bokmann
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2012-04-12 00:00:00 -04:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
11
+ date: 2013-08-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
22
14
  name: activesupport
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 3
30
- segments:
31
- - 3
32
- - 1
33
- - 0
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
34
19
  version: 3.1.0
35
20
  type: :runtime
36
- version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- name: tzinfo
39
21
  prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: 3.1.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: tzinfo
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
43
31
  - - ~>
44
- - !ruby/object:Gem::Version
45
- hash: 45
46
- segments:
47
- - 0
48
- - 3
49
- - 31
32
+ - !ruby/object:Gem::Version
50
33
  version: 0.3.31
51
34
  type: :runtime
52
- version_requirements: *id002
53
- - !ruby/object:Gem::Dependency
54
- name: rake
55
35
  prerelease: false
56
- requirement: &id003 !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- hash: 63
62
- segments:
63
- - 0
64
- - 9
65
- - 2
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 0.3.31
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
66
47
  version: 0.9.2
67
48
  type: :development
68
- version_requirements: *id003
69
- - !ruby/object:Gem::Dependency
70
- name: shoulda
71
49
  prerelease: false
72
- requirement: &id004 !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ">="
76
- - !ruby/object:Gem::Version
77
- hash: 3
78
- segments:
79
- - 0
80
- version: "0"
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 0.9.2
55
+ - !ruby/object:Gem::Dependency
56
+ name: shoulda
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
81
62
  type: :development
82
- version_requirements: *id004
83
- - !ruby/object:Gem::Dependency
84
- name: rdoc
85
63
  prerelease: false
86
- requirement: &id005 !ruby/object:Gem::Requirement
87
- none: false
88
- requirements:
89
- - - ">="
90
- - !ruby/object:Gem::Version
91
- hash: 3
92
- segments:
93
- - 0
94
- version: "0"
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rdoc
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
95
76
  type: :development
96
- version_requirements: *id005
97
- description: Have you ever wanted to do things like "6.business_days.from_now" and have weekends and holidays taken into account? Now you can.
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: Have you ever wanted to do things like "6.business_days.from_now" and
84
+ have weekends and holidays taken into account? Now you can.
98
85
  email: dbock@codesherpas.com
99
86
  executables: []
100
-
101
87
  extensions: []
102
-
103
88
  extra_rdoc_files: []
104
-
105
- files:
89
+ files:
106
90
  - LICENSE
107
91
  - README.rdoc
108
92
  - lib/business_time.rb
109
93
  - lib/business_time/business_days.rb
110
94
  - lib/business_time/business_hours.rb
111
95
  - lib/business_time/config.rb
96
+ - lib/business_time/core_ext/date.rb
97
+ - lib/business_time/core_ext/fixnum.rb
98
+ - lib/business_time/core_ext/time.rb
112
99
  - lib/business_time/version.rb
113
- - lib/extensions/date.rb
114
- - lib/extensions/fixnum.rb
115
- - lib/extensions/time.rb
116
100
  - lib/generators/business_time/config_generator.rb
117
101
  - rails_generators/business_time_config/business_time_config_generator.rb
118
102
  - rails_generators/business_time_config/templates/business_time.rb
119
103
  - rails_generators/business_time_config/templates/business_time.yml
120
- has_rdoc: true
121
104
  homepage: http://github.com/bokmann/business_time
122
105
  licenses: []
123
-
106
+ metadata: {}
124
107
  post_install_message:
125
108
  rdoc_options: []
126
-
127
- require_paths:
109
+ require_paths:
128
110
  - lib
129
- required_ruby_version: !ruby/object:Gem::Requirement
130
- none: false
131
- requirements:
132
- - - ">="
133
- - !ruby/object:Gem::Version
134
- hash: 3
135
- segments:
136
- - 0
137
- version: "0"
138
- required_rubygems_version: !ruby/object:Gem::Requirement
139
- none: false
140
- requirements:
141
- - - ">="
142
- - !ruby/object:Gem::Version
143
- hash: 3
144
- segments:
145
- - 0
146
- version: "0"
111
+ required_ruby_version: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - '>='
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ required_rubygems_version: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
147
121
  requirements: []
148
-
149
122
  rubyforge_project:
150
- rubygems_version: 1.6.2
123
+ rubygems_version: 2.0.2
151
124
  signing_key:
152
- specification_version: 3
125
+ specification_version: 4
153
126
  summary: Support for doing time math in business hours and days
154
127
  test_files: []
155
-