business_time 0.3.1 → 0.4.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/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2009 bokmann
1
+ Copyright (c) 2009,2010,2011,2012 bokmann
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -69,11 +69,17 @@ I needed this, but taking into account business hours/days and holidays.
69
69
  BusinessTime::Config.holidays << three_day_weekend
70
70
  friday_afternoon = Time.parse("July 2nd, 2010, 4:50 pm")
71
71
  tuesday_morning = 1.business_hour.after(friday_afternoon)
72
-
73
- # you can also calculate business duration between two dates
74
- friday = Date.parse("December 24, 2010")
72
+
73
+ # plus, we can change the work week:
74
+ # July 9th in 2010 is a Friday.
75
+ BusinessTime::Config.work_week = [:sun, :mon, :tue, :wed, :thu]
76
+ thursday_afternoon = Time.parse("July 8th, 2010, 4:50 pm")
77
+ sunday_morning = 1.business_hour.after(thursday_afternoon)
78
+
79
+ # you can also calculate business duration between two dates
80
+ friday = Date.parse("December 24, 2010")
75
81
  monday = Date.parse("December 27, 2010")
76
- friday.business_days_until(monday) #=> 1
82
+ friday.business_days_until(monday) #=> 1
77
83
 
78
84
  == Usage in Rails
79
85
  The code above should work on a rails console without any issue. You will want to add a line something like:
@@ -112,7 +118,8 @@ This can lead to some wierd looking effects if, say, you are in the Eastern time
112
118
  * David Bock http://github.com/bokmann
113
119
  * Enrico Bianco http://github.com/enricob
114
120
  * Arild Shirazi http://github.com/ashirazi
115
- * Piotr Jakubowski https://github.com/piotrj
121
+ * Piotr Jakubowski http://github.com/piotrj
122
+ * Glenn Vanderburg http://github.com/glv
116
123
 
117
124
  (Special thanks for Arild on the complexities of dealing with TimeWithZone)
118
125
 
@@ -128,11 +135,6 @@ This can lead to some wierd looking effects if, say, you are in the Eastern time
128
135
 
129
136
  == TODO
130
137
 
131
- * if it doesn't pollute the logic too much, I'd like to vary the days counted as 'business days'. Bakers often
132
- don't work on Mondays, for instance. I'd do it in something like this:
133
-
134
- BusinessTime::Config.work_week = [:tue, :wed, :thur, :fri, :sat]
135
-
136
138
  * Arild has pointed out that there may be some logical inconsistencies
137
139
  regaring the beginning_of_workday and end_of workday times not actually
138
140
  being considered inside of the workday. I'd like to make sure that they
@@ -155,4 +157,4 @@ This can lead to some wierd looking effects if, say, you are in the Eastern time
155
157
 
156
158
  == Copyright
157
159
 
158
- Copyright (c) 2010 bokmann. See LICENSE for details.
160
+ Copyright (c) 2010,2011,2012 bokmann. See LICENSE for details.
@@ -1,3 +1,5 @@
1
+ require "active_support"
2
+ require "time"
1
3
  require "business_time/config"
2
4
  require "business_time/business_hours"
3
5
  require "business_time/business_days"
@@ -17,6 +17,12 @@ module BusinessTime
17
17
  # someplace in the initializers of your application.
18
18
  attr_accessor :end_of_workday
19
19
 
20
+ # You can set this yourself, either by the load method below, or
21
+ # by saying
22
+ # BusinessTime::Config.work_week = [:sun, :mon, :tue, :wed, :thu]
23
+ # someplace in the initializers of your application.
24
+ attr_accessor :work_week
25
+
20
26
  # You can set this yourself, either by the load method below, or
21
27
  # by saying
22
28
  # BusinessTime::Config.holidays << my_holiday_date_object
@@ -25,10 +31,28 @@ module BusinessTime
25
31
 
26
32
  end
27
33
 
34
+ def self.work_week=(days)
35
+ @work_week = days
36
+ @weekdays = nil
37
+ end
38
+
39
+ def self.weekdays
40
+ return @weekdays unless @weekdays.nil?
41
+
42
+ lowercase_day_names = ::Time::RFC2822_DAY_NAME.map(&:downcase)
43
+
44
+ @weekdays = work_week.each_with_object([]) do |day_name, days|
45
+ day_num = lowercase_day_names.find_index(day_name.to_s.downcase)
46
+ days << day_num unless day_num.nil?
47
+ end
48
+ end
49
+
28
50
  def self.reset
29
51
  self.holidays = []
30
52
  self.beginning_of_workday = "9:00 am"
31
53
  self.end_of_workday = "5:00 pm"
54
+ self.work_week = %w[mon tue wed thu fri]
55
+ @weekdays = nil
32
56
  end
33
57
 
34
58
  # loads the config data from a yaml file written as:
@@ -45,6 +69,7 @@ module BusinessTime
45
69
  data = YAML::load(File.open(filename))
46
70
  self.beginning_of_workday = data["business_time"]["beginning_of_workday"]
47
71
  self.end_of_workday = data["business_time"]["end_of_workday"]
72
+ self.work_week = data["business_time"]["work_week"]
48
73
  data["business_time"]["holidays"].each do |holiday|
49
74
  self.holidays <<
50
75
  Time.zone ? Time.zone.parse(holiday) : Time.parse(holiday)
@@ -0,0 +1,3 @@
1
+ module BusinessTime
2
+ VERSION = "0.4.0"
3
+ end
@@ -5,7 +5,7 @@ class Date
5
5
  end
6
6
 
7
7
  def weekday?
8
- [1,2,3,4,5].include? self.wday
8
+ BusinessTime::Config.weekdays.include? self.wday
9
9
  end
10
10
 
11
11
  def business_days_until(to_date)
@@ -31,8 +31,7 @@ class Time
31
31
 
32
32
  # True if this time falls on a weekday.
33
33
  def weekday?(day)
34
- # TODO AS: Internationalize this!
35
- [1,2,3,4,5].include? day.wday
34
+ BusinessTime::Config.weekdays.include? day.wday
36
35
  end
37
36
 
38
37
  def before_business_hours?(time)
@@ -1,4 +1,4 @@
1
- BusinessTime::Config.load("#{RAILS_ROOT}/config/business_time.yml")
1
+ BusinessTime::Config.load("#{Rails.root}/config/business_time.yml")
2
2
 
3
3
  # or you can configure it manually: look at me! I'm Tim Ferris!
4
4
  # BusinessTime.Config.beginning_of_workday = "10:00 am"
@@ -4,4 +4,10 @@ business_time:
4
4
  holidays:
5
5
  - Jan 01, 2010
6
6
  - July 4th, 2010
7
- - December 25th, 2010
7
+ - December 25th, 2010
8
+ work_week:
9
+ - mon
10
+ - tue
11
+ - wed
12
+ - thu
13
+ - fri
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: business_time
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
4
+ hash: 15
5
+ prerelease:
5
6
  segments:
6
7
  - 0
7
- - 3
8
- - 1
9
- version: 0.3.1
8
+ - 4
9
+ - 0
10
+ version: 0.4.0
10
11
  platform: ruby
11
12
  authors:
12
13
  - bokmann
@@ -14,55 +15,68 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-12-22 00:00:00 -05:00
18
- default_executable:
18
+ date: 2012-01-25 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
- name: shoulda
21
+ name: activesupport
22
22
  prerelease: false
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
24
25
  requirements:
25
26
  - - ">="
26
27
  - !ruby/object:Gem::Version
28
+ hash: 15
27
29
  segments:
30
+ - 2
28
31
  - 0
29
- version: "0"
30
- type: :development
32
+ - 0
33
+ version: 2.0.0
34
+ type: :runtime
31
35
  version_requirements: *id001
32
36
  - !ruby/object:Gem::Dependency
33
- name: activesupport
37
+ name: rake
34
38
  prerelease: false
35
39
  requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
36
41
  requirements:
37
42
  - - ">="
38
43
  - !ruby/object:Gem::Version
44
+ hash: 3
39
45
  segments:
40
- - 2
41
46
  - 0
42
- - 0
43
- version: 2.0.0
44
- type: :runtime
47
+ version: "0"
48
+ type: :development
45
49
  version_requirements: *id002
50
+ - !ruby/object:Gem::Dependency
51
+ name: shoulda
52
+ prerelease: false
53
+ requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ hash: 3
59
+ segments:
60
+ - 0
61
+ version: "0"
62
+ type: :development
63
+ version_requirements: *id003
46
64
  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.
47
65
  email: dbock@codesherpas.com
48
66
  executables: []
49
67
 
50
68
  extensions: []
51
69
 
52
- extra_rdoc_files:
53
- - LICENSE
54
- - README.rdoc
70
+ extra_rdoc_files: []
71
+
55
72
  files:
56
- - .document
57
- - .gitignore
58
73
  - LICENSE
59
74
  - README.rdoc
60
- - Rakefile
61
- - VERSION
62
75
  - lib/business_time.rb
63
76
  - lib/business_time/business_days.rb
64
77
  - lib/business_time/business_hours.rb
65
78
  - lib/business_time/config.rb
79
+ - lib/business_time/version.rb
66
80
  - lib/extensions/date.rb
67
81
  - lib/extensions/fixnum.rb
68
82
  - lib/extensions/time.rb
@@ -70,60 +84,38 @@ files:
70
84
  - rails_generators/business_time_config/business_time_config_generator.rb
71
85
  - rails_generators/business_time_config/templates/business_time.rb
72
86
  - rails_generators/business_time_config/templates/business_time.yml
73
- - test/helper.rb
74
- - test/test_business_days.rb
75
- - test/test_business_days_eastern.rb
76
- - test/test_business_days_utc.rb
77
- - test/test_business_hours.rb
78
- - test/test_business_hours_eastern.rb
79
- - test/test_business_hours_utc.rb
80
- - test/test_calculating_business_duration.rb
81
- - test/test_config.rb
82
- - test/test_date_extensions.rb
83
- - test/test_fixnum_extensions.rb
84
- - test/test_time_extensions.rb
85
- - test/test_time_with_zone_extensions.rb
86
- has_rdoc: true
87
87
  homepage: http://github.com/bokmann/business_time
88
88
  licenses: []
89
89
 
90
90
  post_install_message:
91
- rdoc_options:
92
- - --charset=UTF-8
91
+ rdoc_options: []
92
+
93
93
  require_paths:
94
94
  - lib
95
95
  required_ruby_version: !ruby/object:Gem::Requirement
96
+ none: false
96
97
  requirements:
97
98
  - - ">="
98
99
  - !ruby/object:Gem::Version
100
+ hash: 3
99
101
  segments:
100
102
  - 0
101
103
  version: "0"
102
104
  required_rubygems_version: !ruby/object:Gem::Requirement
105
+ none: false
103
106
  requirements:
104
107
  - - ">="
105
108
  - !ruby/object:Gem::Version
109
+ hash: 3
106
110
  segments:
107
111
  - 0
108
112
  version: "0"
109
113
  requirements: []
110
114
 
111
115
  rubyforge_project:
112
- rubygems_version: 1.3.6
116
+ rubygems_version: 1.8.10
113
117
  signing_key:
114
118
  specification_version: 3
115
119
  summary: Support for doing time math in business hours and days
116
- test_files:
117
- - test/helper.rb
118
- - test/test_business_days.rb
119
- - test/test_business_days_eastern.rb
120
- - test/test_business_days_utc.rb
121
- - test/test_business_hours.rb
122
- - test/test_business_hours_eastern.rb
123
- - test/test_business_hours_utc.rb
124
- - test/test_calculating_business_duration.rb
125
- - test/test_config.rb
126
- - test/test_date_extensions.rb
127
- - test/test_fixnum_extensions.rb
128
- - test/test_time_extensions.rb
129
- - test/test_time_with_zone_extensions.rb
120
+ test_files: []
121
+
data/.document DELETED
@@ -1,5 +0,0 @@
1
- README.rdoc
2
- lib/**/*.rb
3
- bin/*
4
- features/**/*.feature
5
- LICENSE
data/.gitignore DELETED
@@ -1,21 +0,0 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- pkg
20
-
21
- ## PROJECT::SPECIFIC
data/Rakefile DELETED
@@ -1,55 +0,0 @@
1
- require 'rubygems'
2
- require 'rake'
3
-
4
- begin
5
- require 'jeweler'
6
- Jeweler::Tasks.new do |gem|
7
- gem.name = "business_time"
8
- gem.summary = %Q{Support for doing time math in business hours and days}
9
- gem.description = %Q{Have you ever wanted to do things like "6.business_days.from_now" and have weekends and holidays taken into account? Now you can.}
10
- gem.email = "dbock@codesherpas.com"
11
- gem.homepage = "http://github.com/bokmann/business_time"
12
- gem.authors = ["bokmann"]
13
- gem.add_development_dependency "shoulda", ">= 0"
14
- gem.add_dependency('activesupport','>= 2.0.0')
15
- gem.files += FileList['lib/generators/**/*.rb']
16
- # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
17
- end
18
- Jeweler::GemcutterTasks.new
19
- rescue LoadError
20
- puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
21
- end
22
-
23
- require 'rake/testtask'
24
- Rake::TestTask.new(:test) do |test|
25
- test.libs << 'lib' << 'test'
26
- test.pattern = 'test/**/test_*.rb'
27
- test.verbose = true
28
- end
29
-
30
- begin
31
- require 'rcov/rcovtask'
32
- Rcov::RcovTask.new do |test|
33
- test.libs << 'test'
34
- test.pattern = 'test/**/test_*.rb'
35
- test.verbose = true
36
- end
37
- rescue LoadError
38
- task :rcov do
39
- abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
40
- end
41
- end
42
-
43
- task :test => :check_dependencies
44
-
45
- task :default => :test
46
-
47
- require 'rake/rdoctask'
48
- Rake::RDocTask.new do |rdoc|
49
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
50
-
51
- rdoc.rdoc_dir = 'rdoc'
52
- rdoc.title = "business_time #{version}"
53
- rdoc.rdoc_files.include('README*')
54
- rdoc.rdoc_files.include('lib/**/*.rb')
55
- end
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.3.1
@@ -1,20 +0,0 @@
1
- require 'rubygems'
2
-
3
- if RUBY_VERSION >= '1.9'
4
- require 'time'
5
- require 'date'
6
- require 'active_support/time'
7
- else
8
- require 'active_support'
9
- require 'active_support/core_ext'
10
- end
11
-
12
- require 'test/unit'
13
- require 'shoulda'
14
-
15
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
16
- $LOAD_PATH.unshift(File.dirname(__FILE__))
17
- require 'business_time'
18
-
19
- class Test::Unit::TestCase
20
- end
@@ -1,69 +0,0 @@
1
- require 'helper'
2
-
3
- class TestBusinessDays < Test::Unit::TestCase
4
-
5
- context "with a standard Time object" do
6
-
7
- should "move to tomorrow if we add a business day" do
8
- first = Time.parse("April 13th, 2010, 11:00 am")
9
- later = 1.business_day.after(first)
10
- expected = Time.parse("April 14th, 2010, 11:00 am")
11
- assert_equal expected, later
12
- end
13
-
14
- should "move to yesterday is we subtract a business day" do
15
- first = Time.parse("April 13th, 2010, 11:00 am")
16
- before = 1.business_day.before(first)
17
- expected = Time.parse("April 12th, 2010, 11:00 am")
18
- assert_equal expected, before
19
- end
20
-
21
- should "take into account the weekend when adding a day" do
22
- first = Time.parse("April 9th, 2010, 12:33 pm")
23
- after = 1.business_day.after(first)
24
- expected = Time.parse("April 12th, 2010, 12:33 pm")
25
- assert_equal expected, after
26
- end
27
-
28
- should "take into account the weekend when subtracting a day" do
29
- first = Time.parse("April 12th, 2010, 12:33 pm")
30
- before = 1.business_day.before(first)
31
- expected = Time.parse("April 9th, 2010, 12:33 pm")
32
- assert_equal expected, before
33
- end
34
-
35
- should "move forward one week when adding 5 business days" do
36
- first = Time.parse("April 9th, 2010, 12:33 pm")
37
- after = 5.business_days.after(first)
38
- expected = Time.parse("April 16th, 2010, 12:33 pm")
39
- assert_equal expected, after
40
- end
41
-
42
- should "move backward one week when subtracting 5 business days" do
43
- first = Time.parse("April 16th, 2010, 12:33 pm")
44
- before = 5.business_days.before(first)
45
- expected = Time.parse("April 9th, 2010, 12:33 pm")
46
- assert_equal expected, before
47
- end
48
-
49
- should "take into account a holiday when adding a day" do
50
- three_day_weekend = Date.parse("July 5th, 2010")
51
- BusinessTime::Config.holidays << three_day_weekend
52
- friday_afternoon = Time.parse("July 2nd, 2010, 4:50 pm")
53
- tuesday_afternoon = 1.business_day.after(friday_afternoon)
54
- expected = Time.parse("July 6th, 2010, 4:50 pm")
55
- assert_equal expected, tuesday_afternoon
56
- end
57
-
58
- should "take into account a holiday on a weekend" do
59
- BusinessTime::Config.reset
60
- july_4 = Date.parse("July 4th, 2010")
61
- BusinessTime::Config.holidays << july_4
62
- friday_afternoon = Time.parse("July 2nd, 2010, 4:50 pm")
63
- monday_afternoon = 1.business_day.after(friday_afternoon)
64
- expected = Time.parse("July 5th, 2010, 4:50 pm")
65
- assert_equal expected, monday_afternoon
66
- end
67
- end
68
-
69
- end
@@ -1,75 +0,0 @@
1
- require 'helper'
2
-
3
- class TestBusinessDays < Test::Unit::TestCase
4
-
5
- context "with a TimeWithZone object set to the Eastern timezone" do
6
- setup do
7
- Time.zone = 'Eastern Time (US & Canada)'
8
- end
9
- teardown do
10
- Time.zone = nil
11
- end
12
-
13
- should "move to tomorrow if we add a business day" do
14
- first = Time.zone.parse("April 13th, 2010, 11:00 am")
15
- later = 1.business_day.after(first)
16
- expected = Time.zone.parse("April 14th, 2010, 11:00 am")
17
- assert_equal expected, later
18
- end
19
-
20
- should "move to yesterday is we subtract a business day" do
21
- first = Time.zone.parse("April 13th, 2010, 11:00 am")
22
- before = 1.business_day.before(first)
23
- expected = Time.zone.parse("April 12th, 2010, 11:00 am")
24
- assert_equal expected, before
25
- end
26
-
27
- should "take into account the weekend when adding a day" do
28
- first = Time.zone.parse("April 9th, 2010, 12:33 pm")
29
- after = 1.business_day.after(first)
30
- expected = Time.zone.parse("April 12th, 2010, 12:33 pm")
31
- assert_equal expected, after
32
- end
33
-
34
- should "take into account the weekend when subtracting a day" do
35
- first = Time.zone.parse("April 12th, 2010, 12:33 pm")
36
- before = 1.business_day.before(first)
37
- expected = Time.zone.parse("April 9th, 2010, 12:33 pm")
38
- assert_equal expected, before
39
- end
40
-
41
- should "move forward one week when adding 5 business days" do
42
- first = Time.zone.parse("April 9th, 2010, 12:33 pm")
43
- after = 5.business_days.after(first)
44
- expected = Time.zone.parse("April 16th, 2010, 12:33 pm")
45
- assert_equal expected, after
46
- end
47
-
48
- should "move backward one week when subtracting 5 business days" do
49
- first = Time.zone.parse("April 16th, 2010, 12:33 pm")
50
- before = 5.business_days.before(first)
51
- expected = Time.zone.parse("April 9th, 2010, 12:33 pm")
52
- assert_equal expected, before
53
- end
54
-
55
- should "take into account a holiday when adding a day" do
56
- three_day_weekend = Date.parse("July 5th, 2010")
57
- BusinessTime::Config.holidays << three_day_weekend
58
- friday_afternoon = Time.zone.parse("July 2nd, 2010, 4:50 pm")
59
- tuesday_afternoon = 1.business_day.after(friday_afternoon)
60
- expected = Time.zone.parse("July 6th, 2010, 4:50 pm")
61
- assert_equal expected, tuesday_afternoon
62
- end
63
-
64
- should "take into account a holiday on a weekend" do
65
- BusinessTime::Config.reset
66
- july_4 = Date.parse("July 4th, 2010")
67
- BusinessTime::Config.holidays << july_4
68
- friday_afternoon = Time.zone.parse("July 2nd, 2010, 4:50 pm")
69
- monday_afternoon = 1.business_day.after(friday_afternoon)
70
- expected = Time.zone.parse("July 5th, 2010, 4:50 pm")
71
- assert_equal expected, monday_afternoon
72
- end
73
- end
74
-
75
- end
@@ -1,75 +0,0 @@
1
- require 'helper'
2
-
3
- class TestBusinessDays < Test::Unit::TestCase
4
-
5
- context "with a TimeWithZone object set to UTC" do
6
- setup do
7
- Time.zone = 'UTC'
8
- end
9
- teardown do
10
- Time.zone = nil
11
- end
12
-
13
- should "move to tomorrow if we add a business day" do
14
- first = Time.zone.parse("April 13th, 2010, 11:00 am")
15
- later = 1.business_day.after(first)
16
- expected = Time.zone.parse("April 14th, 2010, 11:00 am")
17
- assert_equal expected, later
18
- end
19
-
20
- should "move to yesterday is we subtract a business day" do
21
- first = Time.zone.parse("April 13th, 2010, 11:00 am")
22
- before = 1.business_day.before(first)
23
- expected = Time.zone.parse("April 12th, 2010, 11:00 am")
24
- assert_equal expected, before
25
- end
26
-
27
- should "take into account the weekend when adding a day" do
28
- first = Time.zone.parse("April 9th, 2010, 12:33 pm")
29
- after = 1.business_day.after(first)
30
- expected = Time.zone.parse("April 12th, 2010, 12:33 pm")
31
- assert_equal expected, after
32
- end
33
-
34
- should "take into account the weekend when subtracting a day" do
35
- first = Time.zone.parse("April 12th, 2010, 12:33 pm")
36
- before = 1.business_day.before(first)
37
- expected = Time.zone.parse("April 9th, 2010, 12:33 pm")
38
- assert_equal expected, before
39
- end
40
-
41
- should "move forward one week when adding 5 business days" do
42
- first = Time.zone.parse("April 9th, 2010, 12:33 pm")
43
- after = 5.business_days.after(first)
44
- expected = Time.zone.parse("April 16th, 2010, 12:33 pm")
45
- assert_equal expected, after
46
- end
47
-
48
- should "move backward one week when subtracting 5 business days" do
49
- first = Time.zone.parse("April 16th, 2010, 12:33 pm")
50
- before = 5.business_days.before(first)
51
- expected = Time.zone.parse("April 9th, 2010, 12:33 pm")
52
- assert_equal expected, before
53
- end
54
-
55
- should "take into account a holiday when adding a day" do
56
- three_day_weekend = Date.parse("July 5th, 2010")
57
- BusinessTime::Config.holidays << three_day_weekend
58
- friday_afternoon = Time.zone.parse("July 2nd, 2010, 4:50 pm")
59
- tuesday_afternoon = 1.business_day.after(friday_afternoon)
60
- expected = Time.zone.parse("July 6th, 2010, 4:50 pm")
61
- assert_equal expected, tuesday_afternoon
62
- end
63
-
64
- should "take into account a holiday on a weekend" do
65
- BusinessTime::Config.reset
66
- july_4 = Date.parse("July 4th, 2010")
67
- BusinessTime::Config.holidays << july_4
68
- friday_afternoon = Time.zone.parse("July 2nd, 2010, 4:50 pm")
69
- monday_afternoon = 1.business_day.after(friday_afternoon)
70
- expected = Time.zone.parse("July 5th, 2010, 4:50 pm")
71
- assert_equal expected, monday_afternoon
72
- end
73
- end
74
-
75
- end
@@ -1,69 +0,0 @@
1
- require 'helper'
2
-
3
- class TestBusinessHours < Test::Unit::TestCase
4
-
5
- context "with a standard Time object" do
6
-
7
- should "move to tomorrow if we add 8 business hours" do
8
- first = Time.parse("Aug 4 2010, 9:35 am")
9
- later = 8.business_hours.after(first)
10
- expected = Time.parse("Aug 5 2010, 9:35 am")
11
- assert_equal expected, later
12
- end
13
-
14
- should "move to yesterday if we subtract 8 business hours" do
15
- first = Time.parse("Aug 4 2010, 9:35 am")
16
- later = 8.business_hours.before(first)
17
- expected = Time.parse("Aug 3 2010, 9:35 am")
18
- assert_equal expected, later
19
- end
20
-
21
- should "take into account a weekend when adding an hour" do
22
- friday_afternoon = Time.parse("April 9th, 4:50 pm")
23
- monday_morning = 1.business_hour.after(friday_afternoon)
24
- expected = Time.parse("April 12th 2010, 9:50 am")
25
- assert_equal expected, monday_morning
26
- end
27
-
28
- should "take into account a weekend when subtracting an hour" do
29
- monday_morning = Time.parse("April 12th 2010, 9:50 am")
30
- friday_afternoon = 1.business_hour.before(monday_morning)
31
- expected = Time.parse("April 9th 2010, 4:50 pm")
32
- assert_equal expected, friday_afternoon
33
- end
34
-
35
- should "take into account a holiday" do
36
- BusinessTime::Config.holidays << Date.parse("July 5th, 2010")
37
- friday_afternoon = Time.parse("July 2nd 2010, 4:50pm")
38
- tuesday_morning = 1.business_hour.after(friday_afternoon)
39
- expected = Time.parse("July 6th 2010, 9:50 am")
40
- assert_equal expected, tuesday_morning
41
- end
42
-
43
- should "add hours in the middle of the workday" do
44
- monday_morning = Time.parse("April 12th 2010, 9:50 am")
45
- later = 3.business_hours.after(monday_morning)
46
- expected = Time.parse("April 12th 2010, 12:50 pm")
47
- assert_equal expected, later
48
- end
49
-
50
- should "roll forward to 9 am if asked in the early morning" do
51
- crack_of_dawn_monday = Time.parse("Mon Apr 26, 04:30:00, 2010")
52
- monday_morning = Time.parse("Mon Apr 26, 09:00:00, 2010")
53
- assert_equal monday_morning, Time.roll_forward(crack_of_dawn_monday)
54
- end
55
-
56
- should "roll forward to the next morning if aftern business hours" do
57
- monday_evening = Time.parse("Mon Apr 26, 18:00:00, 2010")
58
- tuesday_morning = Time.parse("Tue Apr 27, 09:00:00, 2010")
59
- assert_equal tuesday_morning, Time.roll_forward(monday_evening)
60
- end
61
-
62
- should "consider any time on a weekend as equivalent to monday morning" do
63
- sunday = Time.parse("Sun Apr 25 12:06:56, 2010")
64
- monday = Time.parse("Mon Apr 26, 09:00:00, 2010")
65
- assert_equal 1.business_hour.before(monday), 1.business_hour.before(sunday)
66
- end
67
- end
68
-
69
- end
@@ -1,75 +0,0 @@
1
- require 'helper'
2
-
3
- class TestBusinessHours < Test::Unit::TestCase
4
-
5
- context "with a TimeWithZone object in US Eastern" do
6
- setup do
7
- Time.zone = 'Eastern Time (US & Canada)'
8
- end
9
- teardown do
10
- Time.zone = nil
11
- end
12
-
13
- should "move to tomorrow if we add 8 business hours" do
14
- first = Time.zone.parse("Aug 4 2010, 9:35 am")
15
- later = 8.business_hours.after(first)
16
- expected = Time.zone.parse("Aug 5 2010, 9:35 am")
17
- assert_equal expected, later
18
- end
19
-
20
- should "move to yesterday if we subtract 8 business hours" do
21
- first = Time.zone.parse("Aug 4 2010, 9:35 am")
22
- later = 8.business_hours.before(first)
23
- expected = Time.zone.parse("Aug 3 2010, 9:35 am")
24
- assert_equal expected, later
25
- end
26
-
27
- should "take into account a weekend when adding an hour" do
28
- friday_afternoon = Time.zone.parse("April 9th, 4:50 pm")
29
- monday_morning = 1.business_hour.after(friday_afternoon)
30
- expected = Time.zone.parse("April 12th 2010, 9:50 am")
31
- assert_equal expected, monday_morning
32
- end
33
-
34
- should "take into account a weekend when subtracting an hour" do
35
- monday_morning = Time.zone.parse("April 12th 2010, 9:50 am")
36
- friday_afternoon = 1.business_hour.before(monday_morning)
37
- expected = Time.zone.parse("April 9th 2010, 4:50 pm")
38
- assert_equal expected, friday_afternoon
39
- end
40
-
41
- should "take into account a holiday" do
42
- BusinessTime::Config.holidays << Date.parse("July 5th, 2010")
43
- friday_afternoon = Time.zone.parse("July 2nd 2010, 4:50pm")
44
- tuesday_morning = 1.business_hour.after(friday_afternoon)
45
- expected = Time.zone.parse("July 6th 2010, 9:50 am")
46
- assert_equal expected, tuesday_morning
47
- end
48
-
49
- should "add hours in the middle of the workday" do
50
- monday_morning = Time.zone.parse("April 12th 2010, 9:50 am")
51
- later = 3.business_hours.after(monday_morning)
52
- expected = Time.zone.parse("April 12th 2010, 12:50 pm")
53
- assert_equal expected, later
54
- end
55
-
56
- should "roll forward to 9 am if asked in the early morning" do
57
- crack_of_dawn_monday = Time.zone.parse("Mon Apr 26, 04:30:00, 2010")
58
- monday_morning = Time.zone.parse("Mon Apr 26, 09:00:00, 2010")
59
- assert_equal monday_morning, Time.roll_forward(crack_of_dawn_monday)
60
- end
61
-
62
- should "roll forward to the next morning if aftern business hours" do
63
- monday_evening = Time.zone.parse("Mon Apr 26, 18:00:00, 2010")
64
- tuesday_morning = Time.zone.parse("Tue Apr 27, 09:00:00, 2010")
65
- assert_equal tuesday_morning, Time.roll_forward(monday_evening)
66
- end
67
-
68
- should "consider any time on a weekend as equivalent to monday morning" do
69
- sunday = Time.zone.parse("Sun Apr 25 12:06:56, 2010")
70
- monday = Time.zone.parse("Mon Apr 26, 09:00:00, 2010")
71
- assert_equal 1.business_hour.before(monday), 1.business_hour.before(sunday)
72
- end
73
-
74
- end
75
- end
@@ -1,75 +0,0 @@
1
- require 'helper'
2
-
3
- class TestBusinessHours < Test::Unit::TestCase
4
-
5
- context "with a TimeWithZone object in UTC" do
6
- setup do
7
- Time.zone = 'UTC'
8
- end
9
- teardown do
10
- Time.zone = nil
11
- end
12
-
13
- should "move to tomorrow if we add 8 business hours" do
14
- first = Time.zone.parse("Aug 4 2010, 9:35 am")
15
- later = 8.business_hours.after(first)
16
- expected = Time.zone.parse("Aug 5 2010, 9:35 am")
17
- assert_equal expected, later
18
- end
19
-
20
- should "move to yesterday if we subtract 8 business hours" do
21
- first = Time.zone.parse("Aug 4 2010, 9:35 am")
22
- later = 8.business_hours.before(first)
23
- expected = Time.zone.parse("Aug 3 2010, 9:35 am")
24
- assert_equal expected, later
25
- end
26
-
27
- should "take into account a weekend when adding an hour" do
28
- friday_afternoon = Time.zone.parse("April 9th, 4:50 pm")
29
- monday_morning = 1.business_hour.after(friday_afternoon)
30
- expected = Time.zone.parse("April 12th 2010, 9:50 am")
31
- assert_equal expected, monday_morning
32
- end
33
-
34
- should "take into account a weekend when subtracting an hour" do
35
- monday_morning = Time.zone.parse("April 12th 2010, 9:50 am")
36
- friday_afternoon = 1.business_hour.before(monday_morning)
37
- expected = Time.zone.parse("April 9th 2010, 4:50 pm")
38
- assert_equal expected, friday_afternoon, "Expected #{expected} but received #{friday_afternoon}"
39
- end
40
-
41
- should "take into account a holiday" do
42
- BusinessTime::Config.holidays << Date.parse("July 5th, 2010")
43
- friday_afternoon = Time.zone.parse("July 2nd 2010, 4:50pm")
44
- tuesday_morning = 1.business_hour.after(friday_afternoon)
45
- expected = Time.zone.parse("July 6th 2010, 9:50 am")
46
- assert_equal expected, tuesday_morning
47
- end
48
-
49
- should "add hours in the middle of the workday" do
50
- monday_morning = Time.zone.parse("April 12th 2010, 9:50 am")
51
- later = 3.business_hours.after(monday_morning)
52
- expected = Time.zone.parse("April 12th 2010, 12:50 pm")
53
- assert_equal expected, later
54
- end
55
-
56
- should "roll forward to 9 am if asked in the early morning" do
57
- crack_of_dawn_monday = Time.zone.parse("Mon Apr 26, 04:30:00, 2010")
58
- monday_morning = Time.zone.parse("Mon Apr 26, 09:00:00, 2010")
59
- assert_equal monday_morning, Time.roll_forward(crack_of_dawn_monday)
60
- end
61
-
62
- should "roll forward to the next morning if aftern business hours" do
63
- monday_evening = Time.zone.parse("Mon Apr 26, 18:00:00, 2010")
64
- tuesday_morning = Time.zone.parse("Tue Apr 27, 09:00:00, 2010")
65
- assert_equal tuesday_morning, Time.roll_forward(monday_evening)
66
- end
67
-
68
- should "consider any time on a weekend as equivalent to monday morning" do
69
- sunday = Time.zone.parse("Sun Apr 25 12:06:56, 2010")
70
- monday = Time.zone.parse("Mon Apr 26, 09:00:00, 2010")
71
- assert_equal 1.business_hour.before(monday), 1.business_hour.before(sunday)
72
- end
73
- end
74
-
75
- end
@@ -1,24 +0,0 @@
1
- require 'helper'
2
-
3
- class TestCalculatingBusinessDuration < Test::Unit::TestCase
4
- should "properly calculate business duration over weekends" do
5
- friday = Date.parse("December 24, 2010")
6
- monday = Date.parse("December 27, 2010")
7
- assert_equal friday.business_days_until(monday), 1
8
- end
9
-
10
- should "properly calculate business duration without weekends" do
11
- monday = Date.parse("December 20, 2010")
12
- wednesday = Date.parse("December 22, 2010")
13
- assert_equal monday.business_days_until(wednesday), 2
14
- end
15
-
16
- should "properly calculate business duration with respect to holidays" do
17
- free_friday = Date.parse("December 17, 2010")
18
- wednesday = Date.parse("December 15,2010")
19
- monday = Date.parse("December 20, 2010")
20
- BusinessTime::Config.holidays << free_friday
21
- assert_equal wednesday.business_days_until(monday), 2
22
- end
23
-
24
- end
@@ -1,25 +0,0 @@
1
- require 'helper'
2
-
3
- class TestConfig < Test::Unit::TestCase
4
-
5
- should "keep track of the start of the day" do
6
- assert_equal BusinessTime::Config.beginning_of_workday, "9:00 am"
7
- BusinessTime::Config.beginning_of_workday = "8:30 am"
8
- assert_equal BusinessTime::Config.beginning_of_workday, "8:30 am"
9
- end
10
-
11
- should "keep track of the end of the day" do
12
- assert_equal BusinessTime::Config.end_of_workday, "5:00 pm"
13
- BusinessTime::Config.end_of_workday = "5:30 pm"
14
- assert_equal BusinessTime::Config.end_of_workday, "5:30 pm"
15
- end
16
-
17
- should "keep track of holidays" do
18
- BusinessTime::Config.reset
19
- assert BusinessTime::Config.holidays.empty?
20
- daves_birthday = Date.parse("August 4th, 1969")
21
- BusinessTime::Config.holidays << daves_birthday
22
- assert BusinessTime::Config.holidays.include?(daves_birthday)
23
- end
24
-
25
- end
@@ -1,33 +0,0 @@
1
- require 'helper'
2
-
3
- class TestDateExtensions < Test::Unit::TestCase
4
-
5
- should "know what a weekend day is" do
6
- assert(Date.parse("April 9, 2010").weekday?)
7
- assert(!Date.parse("April 10, 2010").weekday?)
8
- assert(!Date.parse("April 11, 2010").weekday?)
9
- assert(Date.parse("April 12, 2010").weekday?)
10
- end
11
-
12
- should "know a weekend day is not a workday" do
13
- assert(Date.parse("April 9, 2010").workday?)
14
- assert(!Date.parse("April 10, 2010").workday?)
15
- assert(!Date.parse("April 11, 2010").workday?)
16
- assert(Date.parse("April 12, 2010").workday?)
17
- end
18
-
19
- should "know a holiday is not a workday" do
20
- july_4 = Date.parse("July 4, 2010")
21
- july_5 = Date.parse("July 5, 2010")
22
-
23
- assert(!july_4.workday?)
24
- assert(july_5.workday?)
25
-
26
- BusinessTime::Config.holidays << july_4
27
- BusinessTime::Config.holidays << july_5
28
-
29
- assert(!july_4.workday?)
30
- assert(!july_5.workday?)
31
- end
32
-
33
- end
@@ -1,17 +0,0 @@
1
- require 'helper'
2
-
3
- class TestFixnumExtensions < Test::Unit::TestCase
4
-
5
- should "respond to business_hours by returning an instance of BusinessHours" do
6
- assert(1.respond_to?(:business_hour))
7
- assert(1.respond_to?(:business_hours))
8
- assert 1.business_hour.instance_of?(BusinessTime::BusinessHours)
9
- end
10
-
11
- should "respond to business_days by returning an instance of BusinessDays" do
12
- assert(1.respond_to?(:business_day))
13
- assert(1.respond_to?(:business_days))
14
- assert 1.business_day.instance_of?(BusinessTime::BusinessDays)
15
- end
16
-
17
- end
@@ -1,42 +0,0 @@
1
- require 'helper'
2
-
3
- class TestTimeExtensions < Test::Unit::TestCase
4
-
5
- should "know what a weekend day is" do
6
- assert( Time.weekday?(Time.parse("April 9, 2010 10:30am")))
7
- assert(!Time.weekday?(Time.parse("April 10, 2010 10:30am")))
8
- assert(!Time.weekday?(Time.parse("April 11, 2010 10:30am")))
9
- assert( Time.weekday?(Time.parse("April 12, 2010 10:30am")))
10
- end
11
-
12
- should "know a weekend day is not a workday" do
13
- assert( Time.workday?(Time.parse("April 9, 2010 10:45 am")))
14
- assert(!Time.workday?(Time.parse("April 10, 2010 10:45 am")))
15
- assert(!Time.workday?(Time.parse("April 11, 2010 10:45 am")))
16
- assert( Time.workday?(Time.parse("April 12, 2010 10:45 am")))
17
- end
18
-
19
- should "know a holiday is not a workday" do
20
- BusinessTime::Config.reset
21
-
22
- BusinessTime::Config.holidays << Date.parse("July 4, 2010")
23
- BusinessTime::Config.holidays << Date.parse("July 5, 2010")
24
-
25
- assert(!Time.workday?(Time.parse("July 4th, 2010 1:15 pm")))
26
- assert(!Time.workday?(Time.parse("July 5th, 2010 2:37 pm")))
27
- end
28
-
29
-
30
- should "know the beginning of the day for an instance" do
31
- first = Time.parse("August 17th, 2010, 11:50 am")
32
- expecting = Time.parse("August 17th, 2010, 9:00 am")
33
- assert_equal expecting, Time.beginning_of_workday(first)
34
- end
35
-
36
- should "know the end of the day for an instance" do
37
- first = Time.parse("August 17th, 2010, 11:50 am")
38
- expecting = Time.parse("August 17th, 2010, 5:00 pm")
39
- assert_equal expecting, Time.end_of_workday(first)
40
- end
41
-
42
- end
@@ -1,92 +0,0 @@
1
- require 'helper'
2
-
3
- class TestTimeWithZoneExtensions < Test::Unit::TestCase
4
-
5
- context "With Eastern Standard Time" do
6
- setup do
7
- Time.zone = 'Eastern Time (US & Canada)'
8
- end
9
-
10
- should "know what a weekend day is" do
11
- assert( Time.weekday?(Time.zone.parse("April 9, 2010 10:30am")))
12
- assert(!Time.weekday?(Time.zone.parse("April 10, 2010 10:30am")))
13
- assert(!Time.weekday?(Time.zone.parse("April 11, 2010 10:30am")))
14
- assert( Time.weekday?(Time.zone.parse("April 12, 2010 10:30am")))
15
- end
16
-
17
- should "know a weekend day is not a workday" do
18
- assert( Time.workday?(Time.zone.parse("April 9, 2010 10:45 am")))
19
- assert(!Time.workday?(Time.zone.parse("April 10, 2010 10:45 am")))
20
- assert(!Time.workday?(Time.zone.parse("April 11, 2010 10:45 am")))
21
- assert( Time.workday?(Time.zone.parse("April 12, 2010 10:45 am")))
22
- end
23
-
24
- should "know a holiday is not a workday" do
25
- BusinessTime::Config.reset
26
-
27
- BusinessTime::Config.holidays << Date.parse("July 4, 2010")
28
- BusinessTime::Config.holidays << Date.parse("July 5, 2010")
29
-
30
- assert(!Time.workday?(Time.zone.parse("July 4th, 2010 1:15 pm")))
31
- assert(!Time.workday?(Time.zone.parse("July 5th, 2010 2:37 pm")))
32
- end
33
-
34
-
35
- should "know the beginning of the day for an instance" do
36
- first = Time.zone.parse("August 17th, 2010, 11:50 am")
37
- expecting = Time.zone.parse("August 17th, 2010, 9:00 am")
38
- assert_equal expecting, Time.beginning_of_workday(first)
39
- end
40
-
41
- should "know the end of the day for an instance" do
42
- first = Time.zone.parse("August 17th, 2010, 11:50 am")
43
- expecting = Time.zone.parse("August 17th, 2010, 5:00 pm")
44
- assert_equal expecting, Time.end_of_workday(first)
45
- end
46
- end
47
-
48
-
49
- context "With UTC Timezone" do
50
- setup do
51
- Time.zone = 'UTC'
52
- end
53
-
54
- should "know what a weekend day is" do
55
- assert( Time.weekday?(Time.zone.parse("April 9, 2010 10:30am")))
56
- assert(!Time.weekday?(Time.zone.parse("April 10, 2010 10:30am")))
57
- assert(!Time.weekday?(Time.zone.parse("April 11, 2010 10:30am")))
58
- assert( Time.weekday?(Time.zone.parse("April 12, 2010 10:30am")))
59
- end
60
-
61
- should "know a weekend day is not a workday" do
62
- assert( Time.workday?(Time.zone.parse("April 9, 2010 10:45 am")))
63
- assert(!Time.workday?(Time.zone.parse("April 10, 2010 10:45 am")))
64
- assert(!Time.workday?(Time.zone.parse("April 11, 2010 10:45 am")))
65
- assert( Time.workday?(Time.zone.parse("April 12, 2010 10:45 am")))
66
- end
67
-
68
- should "know a holiday is not a workday" do
69
- BusinessTime::Config.reset
70
-
71
- BusinessTime::Config.holidays << Date.parse("July 4, 2010")
72
- BusinessTime::Config.holidays << Date.parse("July 5, 2010")
73
-
74
- assert(!Time.workday?(Time.zone.parse("July 4th, 2010 1:15 pm")))
75
- assert(!Time.workday?(Time.zone.parse("July 5th, 2010 2:37 pm")))
76
- end
77
-
78
-
79
- should "know the beginning of the day for an instance" do
80
- first = Time.zone.parse("August 17th, 2010, 11:50 am")
81
- expecting = Time.zone.parse("August 17th, 2010, 9:00 am")
82
- assert_equal expecting, Time.beginning_of_workday(first)
83
- end
84
-
85
- should "know the end of the day for an instance" do
86
- first = Time.zone.parse("August 17th, 2010, 11:50 am")
87
- expecting = Time.zone.parse("August 17th, 2010, 5:00 pm")
88
- assert_equal expecting, Time.end_of_workday(first)
89
- end
90
- end
91
-
92
- end