business-hours 0.0.4 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
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