working_hours 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2195f888fd66910d51526ea5b6a25af72ec6d1a2
4
- data.tar.gz: 7177da2b9c2c3601a33246337890a43ce97587fa
3
+ metadata.gz: 44ded3c576ee838fd8e2a6160499e60f2c7e585e
4
+ data.tar.gz: 2f1bab0453dd93d3b3cd70d72a829ea8eac82ac4
5
5
  SHA512:
6
- metadata.gz: 2cb8260c4fec9542faf69153ff77ad91c960dbba662a3ce86d97ca359db66c22b001254f2f17a22ef526f93d990c71f57fe4ef820d8ac2cc3954f20162307197
7
- data.tar.gz: bbd6f896e77168371168e96a3f6c298f37011a67e1e348de274fe343c6a480a45a29f81d2170737e7eef05990e4a6b70889e907855b3e4f8a223e1bdb1a092ce
6
+ metadata.gz: c0b37d42c5460735f2b80e2e92e34d74b1fb0355ad87e0c2ff34d1149418d20e92572a3ec867f4513b2cb486bc0918d40fbf242ab2e398b6f8ef7ed5bcfcc6a3
7
+ data.tar.gz: 512fdd659f82340e7b1d5b88a564032e27a61f739cd2c5b70947947a78b0cab09201e5492c29455ef2bb7501a0fe04c9595003edc67955aeb3cccff18e9c0107
@@ -1,6 +1,13 @@
1
1
  # Unreleased
2
2
 
3
- [Compare master with v1.0.2](https://github.com/intrepidd/working_hours/compare/v1.0.2...master)
3
+ [Compare master with v1.0.3](https://github.com/intrepidd/working_hours/compare/v1.0.3...master)
4
+
5
+ # v1.0.3
6
+
7
+ * Relax configuration input formats - [#10](https://github.com/Intrepidd/working_hours/pull/10)
8
+ * Small improvements to the Readme
9
+
10
+ _08/11/2014_
4
11
 
5
12
  # v1.0.2
6
13
 
data/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  A modern ruby gem allowing to do time calculation with working hours.
6
6
 
7
7
  Compatible and tested with:
8
- - Ruby `2.0`, `2.1`
8
+ - Ruby `2.0`, `2.1`, JRuby `1.7`
9
9
  - ActiveSupport `3.2.x`, `4.0.x` and `4.1.x`
10
10
 
11
11
  ## Installation
@@ -36,6 +36,8 @@ Date.new(2014, 12, 31) + 8.working.days # => Mon, 12 Jan 2015
36
36
  Time.utc(2014, 8, 4, 8, 32) - 4.working.hours # => 2014-08-01 13:00:00
37
37
 
38
38
  # Compute working days between two dates
39
+ friday = Date.new(2014, 10, 17)
40
+ monday = Date.new(2014, 10, 20)
39
41
  friday.working_days_until(monday) # => 1
40
42
  # Time is considered at end of day, so:
41
43
  # - friday to saturday = 0 working days
@@ -51,6 +53,12 @@ Date.new(2014, 12, 28).working_day? # => false
51
53
 
52
54
  # Know if a time is worked
53
55
  Time.utc(2014, 8, 4, 7, 16).in_working_hours? # => false
56
+
57
+ # Advance to next working time
58
+ WorkingHours.advance_to_working_time(Time.utc(2014, 8, 4, 7, 16)) # => Mon, 04 Aug 2014 09:00:00 UTC +00:00
59
+
60
+ # Return to previous working time
61
+ WorkingHours.return_to_working_time(Time.utc(2014, 8, 4, 7, 16)) # => Fri, 01 Aug 2014 17:00:00 UTC +00:00
54
62
  ```
55
63
 
56
64
  ## Configuration
@@ -96,6 +104,8 @@ WorkingHours::Duration.new(8, :days).since(Date.new(2014, 12, 31)) # => Mon, 12
96
104
  WorkingHours::Duration.new(4, :hours).until(Time.utc(2014, 8, 4, 8, 32)) # => 2014-08-01 13:00:00
97
105
 
98
106
  # Compute working days between two dates
107
+ friday = Date.new(2014, 10, 17)
108
+ monday = Date.new(2014, 10, 20)
99
109
  WorkingHours.working_days_between(friday, monday) # => 1
100
110
  # Time is considered at end of day, so:
101
111
  # - friday to saturday = 0 working days
@@ -123,12 +133,12 @@ require 'working_hours/module'
123
133
  class Order
124
134
  include WorkingHours
125
135
 
126
- def shipping_date_estimate
127
- Duration.new(2, :days).since(paiement_received_at)
136
+ def shipping_date_estibmate
137
+ Duration.new(2, :days).since(payment_received_at)
128
138
  end
129
139
 
130
- def paiement_delay
131
- working_days_between(created_at, paiement_received_at)
140
+ def payment_delay
141
+ working_days_between(created_at, payment_received_at)
132
142
  end
133
143
  end
134
144
  ```
@@ -106,7 +106,7 @@ module WorkingHours
106
106
  raise InvalidConfiguration.new "No working hours given for day `#{day}`"
107
107
  end
108
108
  last_time = nil
109
- hours.each do |start, finish|
109
+ hours.sort.each do |start, finish|
110
110
  if not start =~ TIME_FORMAT
111
111
  raise InvalidConfiguration.new "Invalid time: #{start} - must be 'HH:MM'"
112
112
  elsif not finish =~ TIME_FORMAT
@@ -122,10 +122,10 @@ module WorkingHours
122
122
  end
123
123
 
124
124
  def validate_holidays! holidays
125
- if not holidays.is_a? Array
126
- raise InvalidConfiguration.new "Invalid type for holidays: #{holidays.class} - must be Array"
125
+ if not holidays.respond_to?(:to_a)
126
+ raise InvalidConfiguration.new "Invalid type for holidays: #{holidays.class} - must act like an array"
127
127
  end
128
- holidays.each do |day|
128
+ holidays.to_a.each do |day|
129
129
  if not day.is_a? Date
130
130
  raise InvalidConfiguration.new "Invalid holiday: #{day} - must be Date"
131
131
  end
@@ -3,7 +3,6 @@ require 'working_hours/computation'
3
3
 
4
4
  module WorkingHours
5
5
  class Duration
6
- include Computation
7
6
 
8
7
  attr_accessor :value, :kind
9
8
 
@@ -17,12 +16,12 @@ module WorkingHours
17
16
 
18
17
  # Computation methods
19
18
  def until(time = ::Time.current)
20
- send("add_#{@kind}", time, -@value)
19
+ ::WorkingHours.send("add_#{@kind}", time, -@value)
21
20
  end
22
21
  alias :ago :until
23
22
 
24
23
  def since(time = ::Time.current)
25
- send("add_#{@kind}", time, @value)
24
+ ::WorkingHours.send("add_#{@kind}", time, @value)
26
25
  end
27
26
  alias :from_now :since
28
27
 
@@ -1,3 +1,3 @@
1
1
  module WorkingHours
2
- VERSION = "1.0.2"
2
+ VERSION = "1.0.3"
3
3
  end
@@ -101,6 +101,12 @@ describe WorkingHours::Config do
101
101
  WorkingHours::Config.working_hours = {:mon => {'08:00' => '13:00', '12:00' => '18:00'}}
102
102
  }.to raise_error(WorkingHours::InvalidConfiguration, "Invalid range: 12:00 => 18:00 - overlaps previous range")
103
103
  end
104
+
105
+ it 'does not reject out-of-order, non-overlapping ranges' do
106
+ expect {
107
+ WorkingHours::Config.working_hours = {:mon => {'10:00' => '11:00', '08:00' => '09:00'}}
108
+ }.not_to raise_error
109
+ end
104
110
  end
105
111
  end
106
112
 
@@ -123,10 +129,10 @@ describe WorkingHours::Config do
123
129
  end
124
130
 
125
131
  describe 'validation' do
126
- it 'rejects other type than array' do
132
+ it 'rejects types that cannot be converted into an array' do
127
133
  expect {
128
- WorkingHours::Config.holidays = {}
129
- }.to raise_error(WorkingHours::InvalidConfiguration, "Invalid type for holidays: Hash - must be Array")
134
+ WorkingHours::Config.holidays = Object.new
135
+ }.to raise_error(WorkingHours::InvalidConfiguration, "Invalid type for holidays: Object - must act like an array")
130
136
  end
131
137
 
132
138
  it 'rejects invalid day' do
@@ -6,31 +6,31 @@ describe WorkingHours::CoreExt::DateAndTime do
6
6
  describe 'operator +' do
7
7
  it 'works with Time objects' do
8
8
  time = Time.now
9
- expect(duration).to receive(:add_days).with(time, 5)
9
+ expect(WorkingHours).to receive(:add_days).with(time, 5)
10
10
  time + duration
11
11
  end
12
12
 
13
13
  it 'works with Date objects' do
14
14
  date = Date.today
15
- expect(duration).to receive(:add_days).with(date, 5)
15
+ expect(WorkingHours).to receive(:add_days).with(date, 5)
16
16
  date + duration
17
17
  end
18
18
 
19
19
  it 'works with DateTime objects' do
20
20
  date_time = DateTime.now
21
- expect(duration).to receive(:add_days).with(date_time, 5)
21
+ expect(WorkingHours).to receive(:add_days).with(date_time, 5)
22
22
  date_time + duration
23
23
  end
24
24
 
25
25
  it 'works with ActiveSupport::TimeWithZone' do
26
26
  time = Time.now.in_time_zone('Tokyo')
27
- expect(duration).to receive(:add_days).with(time, 5)
27
+ expect(WorkingHours).to receive(:add_days).with(time, 5)
28
28
  time + duration
29
29
  end
30
30
 
31
31
  it "doesn't break original operator" do
32
32
  time = Time.now
33
- expect(duration).not_to receive(:add_days)
33
+ expect(WorkingHours).not_to receive(:add_days)
34
34
  expect(time + 3600).to eq(time + 1.hour)
35
35
  end
36
36
  end
@@ -38,31 +38,31 @@ describe WorkingHours::CoreExt::DateAndTime do
38
38
  describe 'operator -' do
39
39
  it 'works with Time objects' do
40
40
  time = Time.now
41
- expect(duration).to receive(:add_days).with(time, -5)
41
+ expect(WorkingHours).to receive(:add_days).with(time, -5)
42
42
  time - duration
43
43
  end
44
44
 
45
45
  it 'works with Date objects' do
46
46
  date = Date.today
47
- expect(duration).to receive(:add_days).with(date, -5)
47
+ expect(WorkingHours).to receive(:add_days).with(date, -5)
48
48
  date - duration
49
49
  end
50
50
 
51
51
  it 'works with DateTime objects' do
52
52
  date_time = DateTime.now
53
- expect(duration).to receive(:add_days).with(date_time, -5)
53
+ expect(WorkingHours).to receive(:add_days).with(date_time, -5)
54
54
  date_time - duration
55
55
  end
56
56
 
57
57
  it 'works with ActiveSupport::TimeWithZone' do
58
58
  time = Time.now.in_time_zone('Tokyo')
59
- expect(duration).to receive(:add_days).with(time, -5)
59
+ expect(WorkingHours).to receive(:add_days).with(time, -5)
60
60
  time - duration
61
61
  end
62
62
 
63
63
  it "doesn't break original operator" do
64
64
  time = Time.now
65
- expect(duration).not_to receive(:add_days)
65
+ expect(WorkingHours).not_to receive(:add_days)
66
66
  expect(time - 3600).to eq(time - 1.hour)
67
67
  end
68
68
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: working_hours
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adrien Jarthon
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-10-15 00:00:00.000000000 Z
12
+ date: 2014-11-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport