business-hours 0.0.4 → 0.0.6

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/Gemfile CHANGED
@@ -2,3 +2,8 @@ source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in business-hours.gemspec
4
4
  gemspec
5
+
6
+ group :test do
7
+ gem 'timecop', '~> 0.3.5'
8
+ gem 'rspec'
9
+ end
@@ -6,7 +6,7 @@ Gem::Specification.new do |s|
6
6
  s.name = "business-hours"
7
7
  s.version = BusinessHours::VERSION
8
8
  s.authors = ["Scenetap"]
9
- s.email = ["shea@scenetap.com"]
9
+ s.email = ["shea@scenetap.com","ethan@scenetap.com"]
10
10
  s.homepage = "https://github.com/scenetap/business-hours"
11
11
  s.summary = %q{Defines business hours for bars}
12
12
  s.description = %q{Defines close and open time for business which are open later then 12am}
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
20
20
 
21
21
  # specify any dependencies here; for example:
22
22
  s.add_development_dependency "rspec"
23
- s.add_runtime_dependency "chronic"
24
23
  s.add_runtime_dependency "tzinfo"
25
- s.add_runtime_dependency "active_support"
24
+ s.add_runtime_dependency "i18n"
25
+ s.add_runtime_dependency "activesupport"
26
26
  end
@@ -1,9 +1,11 @@
1
+ require 'active_support/core_ext/date/zones'
1
2
  require 'active_support/core_ext/time/zones'
3
+ require 'active_support/core_ext/date/calculations'
2
4
  require 'active_support/core_ext/time/calculations'
5
+ require 'active_support/time_with_zone'
3
6
  require "business-hours/version"
4
7
 
5
8
  class BusinessHours
6
- require 'chronic'
7
9
 
8
10
  attr_accessor :times, :time_zone, :business_date, :business_day_start
9
11
  DAYS = %w(sunday monday tuesday wednesday thursday friday saturday)
@@ -45,13 +47,25 @@ class BusinessHours
45
47
  end
46
48
 
47
49
  open_day = date
48
-
49
- [parse("#{open_day} #{times[0]}").utc, parse("#{close_day} #{times[1]}").utc]
50
+ open_time = nil
51
+ close_time = nil
52
+ if times
53
+ open_time = parse("#{open_day} #{times[0]}").utc if times[0].present?
54
+ close_time = parse("#{close_day} #{times[1]}").utc if times[1].present?
55
+ end
56
+ [open_time, close_time]
50
57
  end
51
58
 
52
59
  def open_and_close_times(time)
53
60
  for_day((time.in_time_zone(time_zone) - business_day_start * 60 * 60).to_date)
54
61
  end
62
+
63
+ def business_day
64
+ Time.zone = time_zone
65
+ @start_time = Time.zone.parse("#{business_date.to_s} #{business_day_start}:00")
66
+ @end_time = Time.zone.parse("#{(business_date+1).to_s} #{business_day_start}:00")
67
+ [@start_time, @end_time]
68
+ end
55
69
 
56
70
  def self.business_date(options = {})
57
71
  business_day_start = options[:business_day_start] || 6
@@ -68,10 +82,12 @@ class BusinessHours
68
82
 
69
83
  def open_past_midnight(day, times)
70
84
  day = get_day(day)
71
- open = parse("#{day} #{times[0]}")
72
- close = parse("#{day} #{times[1]}")
85
+ if times && times[0].present? && times[1].present?
86
+ open = parse("#{day} #{times[0]}")
87
+ close = parse("#{day} #{times[1]}")
73
88
 
74
- open > close
89
+ open > close
90
+ end
75
91
  end
76
92
 
77
93
  def get_day(day_int = 0)
@@ -79,7 +95,6 @@ class BusinessHours
79
95
  end
80
96
 
81
97
  def parse(string)
82
- Chronic.time_class = Time.zone
83
- Chronic.parse(string)
98
+ Time.zone.parse(string)
84
99
  end
85
100
  end
@@ -1,3 +1,3 @@
1
1
  class BusinessHours
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -0,0 +1,91 @@
1
+ require 'spec_helper'
2
+
3
+ describe BusinessHours do
4
+
5
+ before(:each) do
6
+ @business_day_start = 6
7
+ @time_zone = "Central Time (US & Canada)"
8
+ end
9
+
10
+ it "is within valid business hours .open? should return true" do
11
+ @times = {:sunday => ["6:00am","6:00am"]}
12
+ Timecop.freeze(Time.local(2011, 11, 06, 13, 0, 0)) do # Sunday, November 6, 2011 at 1pm
13
+ BusinessHours.new({:times => @times, :time_zone => @time_zone, :business_day_start => @business_day_start}).open?.should_not be_true
14
+ end
15
+
16
+ @times = {:sunday => ["11:00am","2:00am"]}
17
+ Timecop.freeze(Time.local(2011, 11, 06, 13, 0, 0)) do # Sunday, November 6, 2011 at 1pm
18
+ BusinessHours.new({:times => @times, :time_zone => @time_zone, :business_day_start => @business_day_start}).open?.should be_true
19
+ end
20
+
21
+ @times = {:sunday => ["11:00am","12:00am"]}
22
+ Timecop.freeze(Time.local(2011, 11, 06, 13, 0, 0)) do # Sunday, November 6, 2011 at 1pm
23
+ BusinessHours.new({:times => @times, :time_zone => @time_zone, :business_day_start => @business_day_start}).open?.should be_true
24
+ end
25
+
26
+ @times = {:sunday => ["8:00am","6:00am"]}
27
+ Timecop.freeze(Time.local(2011, 11, 06, 13, 0, 0)) do # Sunday, November 6, 2011 at 1pm
28
+ BusinessHours.new({:times => @times, :time_zone => @time_zone, :business_day_start => @business_day_start}).open?.should be_true
29
+ end
30
+
31
+ @times = {:sunday => ["6:00am","5:59am"]}
32
+ Timecop.freeze(Time.local(2011, 11, 06, 13, 0, 0)) do # Sunday, November 6, 2011 at 1pm
33
+ BusinessHours.new({:times => @times, :time_zone => @time_zone, :business_day_start => @business_day_start}).open?.should be_true
34
+ end
35
+
36
+ @times = {
37
+ :sunday => ["11:00am","12:59am"],
38
+ :monday=>["5:00pm", "2:00am"],
39
+ :tuesday=>["5:00pm", "2:00am"],
40
+ :wednesday=>["", ""],
41
+ :thursday=>["5:00pm", "2:00am"],
42
+ :friday=>["5:00pm", "2:00am"],
43
+ :saturday=>["11:00am", "3:00am"]
44
+ }
45
+ Timecop.freeze(Time.local(2012, 03, 04, 13, 0, 0)) do # Sunday, March 4, 2012 at 1pm
46
+ BusinessHours.new({:times => @times, :time_zone => @time_zone, :business_day_start => @business_day_start}).open?.should be_true
47
+ end
48
+ end
49
+
50
+ it "returns the correct start and end times for the business day" do
51
+ Time.zone = @time_zone
52
+ Timecop.freeze(Time.local(2011, 11, 05, 13, 0, 0)) do # Sunday, November 5, 2011 at 1pm
53
+ @business_time = BusinessHours.new({:times => @times, :time_zone => @time_zone, :business_day_start => @business_day_start})
54
+ end
55
+ @business_time.business_day.collect{|date| date.to_s}.should == ["2011-11-05 06:00:00 -0500","2011-11-06 06:00:00 -0600"]
56
+
57
+ Timecop.freeze(Time.local(2011, 11, 06, 13, 0, 0)) do # Sunday, November 6, 2011 at 1pm
58
+ @business_time = BusinessHours.new({:times => @times, :time_zone => @time_zone, :business_day_start => @business_day_start})
59
+ end
60
+ @business_time.business_day.collect{|date| date.to_s}.should == ["2011-11-06 06:00:00 -0600","2011-11-07 06:00:00 -0600"]
61
+
62
+ Timecop.freeze(Time.local(2012, 03, 10, 13, 0, 0)) do # Saturday, March 10, 2012 at 1pm
63
+ @business_time = BusinessHours.new({:times => @times, :time_zone => @time_zone, :business_day_start => 2})
64
+ end
65
+ @business_time.business_day.collect{|date| date.to_s}.should == ["2012-03-10 02:00:00 -0600","2012-03-11 03:00:00 -0500"]
66
+
67
+ Timecop.freeze(Time.local(2012, 03, 11, 13, 0, 0)) do # Sunday, March 11, 2012 at 1pm
68
+ @business_time = BusinessHours.new({:times => @times, :time_zone => @time_zone, :business_day_start => 2})
69
+ end
70
+ @business_time.business_day.collect{|date| date.to_s}.should == ["2012-03-11 03:00:00 -0500","2012-03-12 02:00:00 -0500"]
71
+
72
+ Timecop.freeze(Time.local(2012, 03, 11, 13, 0, 0)) do # Sunday, March 11, 2012 at 1pm
73
+ @business_time = BusinessHours.new({:times => @times, :time_zone => "Hawaii", :business_day_start => 2})
74
+ end
75
+ @business_time.business_day.collect{|date| date.to_s}.should == ["2012-03-11 03:00:00 -1000","2012-03-12 02:00:00 -1000"]
76
+ end
77
+
78
+ describe 'for_day' do
79
+ it 'should return nil as an element of the return when the provided open_time or close_time was nil or emptystring' do
80
+ business_hours = BusinessHours.new(:times => {:friday => ['',nil], :tuesday => ['9am', '']})
81
+ business_hours.for_day(Date.parse('2012-03-19')).should == [nil,nil] #monday march 19th
82
+ business_hours.for_day(Date.parse('2012-03-20')).should == [Time.parse('2012-03-20 9am'),nil] #tuesday march 20th
83
+ end
84
+ end
85
+ describe 'open_past_midnight' do
86
+ it 'should return nil when times is blank' do
87
+ business_hours = BusinessHours.new
88
+ business_hours.send(:open_past_midnight,1,'').should == nil
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,15 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require "tzinfo"
5
+ require "i18n"
6
+ require 'active_support/core_ext/date/zones'
7
+ require 'active_support/core_ext/time/zones'
8
+ require 'active_support/core_ext/date/calculations'
9
+ require 'active_support/core_ext/time/calculations'
10
+ require 'business-hours'
11
+ require 'timecop'
12
+
13
+ RSpec.configure do |config|
14
+ config.color_enabled = true
15
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: business-hours
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-03 00:00:00.000000000Z
12
+ date: 2012-03-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70119403343680 !ruby/object:Gem::Requirement
16
+ requirement: &2164349720 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70119403343680
24
+ version_requirements: *2164349720
25
25
  - !ruby/object:Gem::Dependency
26
- name: chronic
27
- requirement: &70119403343260 !ruby/object:Gem::Requirement
26
+ name: tzinfo
27
+ requirement: &2164378120 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70119403343260
35
+ version_requirements: *2164378120
36
36
  - !ruby/object:Gem::Dependency
37
- name: tzinfo
38
- requirement: &70119403342840 !ruby/object:Gem::Requirement
37
+ name: i18n
38
+ requirement: &2164377100 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70119403342840
46
+ version_requirements: *2164377100
47
47
  - !ruby/object:Gem::Dependency
48
- name: active_support
49
- requirement: &70119403342380 !ruby/object:Gem::Requirement
48
+ name: activesupport
49
+ requirement: &2164375860 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,11 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70119403342380
57
+ version_requirements: *2164375860
58
58
  description: Defines close and open time for business which are open later then 12am
59
59
  email:
60
60
  - shea@scenetap.com
61
+ - ethan@scenetap.com
61
62
  executables: []
62
63
  extensions: []
63
64
  extra_rdoc_files: []
@@ -68,6 +69,8 @@ files:
68
69
  - business-hours.gemspec
69
70
  - lib/business-hours.rb
70
71
  - lib/business-hours/version.rb
72
+ - spec/business_hours_spec.rb
73
+ - spec/spec_helper.rb
71
74
  homepage: https://github.com/scenetap/business-hours
72
75
  licenses: []
73
76
  post_install_message:
@@ -88,8 +91,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
88
91
  version: '0'
89
92
  requirements: []
90
93
  rubyforge_project: business-hours
91
- rubygems_version: 1.8.6
94
+ rubygems_version: 1.8.10
92
95
  signing_key:
93
96
  specification_version: 3
94
97
  summary: Defines business hours for bars
95
- test_files: []
98
+ test_files:
99
+ - spec/business_hours_spec.rb
100
+ - spec/spec_helper.rb