biz 1.6.0 → 1.6.1

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: e3d348e477f526c87601d6b59362fbb9e17b2dba
4
- data.tar.gz: 83019f10ea87e74a41f317dd388dbe9d7ee204b6
3
+ metadata.gz: b83065efe295ea89da135b593191120dc58bcf6d
4
+ data.tar.gz: 97b8e746410d76e35145b0e41920a0ba04801e9d
5
5
  SHA512:
6
- metadata.gz: c1c66c64493a052cc7d99aef3268cedb1691bbacde44f7cc731345a397e61627a7d589c789b071b7696add9585392ddbbe449cb61a185247e97a14bf6b8e055f
7
- data.tar.gz: 523a4308dbda6e8e37d24d62474f70ed783b2d10ef65caabbb0047b0e21d3283d53d6b9678dff21ea46879968fd31d938aa74a272276c764b4dc6d2eb686421a
6
+ metadata.gz: 5e8f3d0ae0c724ade11514895b7ce160d6303b76679bafb38d2ff6daf03b469f0dd47789696a4e58009f1ef2608d96f63af5abeee888b7fe5954d305927e4e58
7
+ data.tar.gz: 63c26133dd00077646bf011d34e22f5b869498c30ba13327e224bf2023c23e3d332e3a59ccd0424b39ea2be1256fda39ab347358a1681fd4c7d9441601759eaa
data/README.md CHANGED
@@ -138,7 +138,21 @@ Biz.periods
138
138
  # #<Biz::TimeSegment start_time=2015-04-27 20:36:57 UTC end_time=2015-04-28 00:00:00 UTC>]
139
139
  ```
140
140
 
141
- ## Schedule Intersection
141
+ #### Day calculation semantics
142
+
143
+ Unlike seconds, minutes, or hours, a "day" is an ambiguous concept, particularly
144
+ in relation to the vast number of potential schedule configurations. Because of
145
+ that, day calculations are implemented with the principle of making the logic as
146
+ straightforward as possible while knowing not all use cases will be satisfied
147
+ out of the box.
148
+
149
+ Here's the logic that's followed:
150
+
151
+ > Find the next day that contains business hours. Starting from the same minute
152
+ > on that day as the specified time, look forward (or back) to find the next
153
+ > moment in time that is in business hours.
154
+
155
+ ## Schedule intersection
142
156
 
143
157
  An intersection of two schedules can be found using `&`:
144
158
 
@@ -222,10 +236,10 @@ Biz::Schedule.new do |config|
222
236
  end
223
237
  ```
224
238
 
225
- ## Core Extensions
239
+ ## Core extensions
226
240
 
227
- Optional extensions to core classes (`Date`, `Fixnum`, and `Time`) are available
228
- for additional expressiveness:
241
+ Optional extensions to core classes (`Date`, `Integer`, and `Time`) are
242
+ available for additional expressiveness:
229
243
 
230
244
  ```ruby
231
245
  require 'biz/core_ext'
@@ -8,9 +8,9 @@ module Biz
8
8
  end
9
9
 
10
10
  def result
11
- schedule.intervals.any? { |interval| interval.contains?(time) } &&
12
- schedule.breaks.none? { |break_| break_.contains?(time) } &&
13
- schedule.holidays.none? { |holiday| holiday.contains?(time) }
11
+ schedule.intervals.any? { |interval| interval.contains?(time) } \
12
+ && schedule.breaks.none? { |brake| brake.contains?(time) } \
13
+ && schedule.holidays.none? { |holiday| holiday.contains?(time) }
14
14
  end
15
15
 
16
16
  protected
@@ -8,7 +8,7 @@ module Biz
8
8
  end
9
9
 
10
10
  def result
11
- schedule.breaks.any? { |break_| break_.contains?(time) }
11
+ schedule.breaks.any? { |brake| brake.contains?(time) }
12
12
  end
13
13
 
14
14
  protected
@@ -4,9 +4,9 @@ module Biz
4
4
  end
5
5
 
6
6
  require 'biz/core_ext/date'
7
- require 'biz/core_ext/fixnum'
7
+ require 'biz/core_ext/integer'
8
8
  require 'biz/core_ext/time'
9
9
 
10
- Date.class_eval do include Biz::CoreExt::Date end
11
- Fixnum.class_eval do include Biz::CoreExt::Fixnum end
12
- Time.class_eval do include Biz::CoreExt::Time end
10
+ Date.class_eval do include Biz::CoreExt::Date end
11
+ Integer.class_eval do include Biz::CoreExt::Integer end
12
+ Time.class_eval do include Biz::CoreExt::Time end
@@ -1,6 +1,6 @@
1
1
  module Biz
2
2
  module CoreExt
3
- module Fixnum
3
+ module Integer
4
4
  Calculation::ForDuration.units.each do |unit|
5
5
  define_method("business_#{unit}") { Biz.time(self, unit) }
6
6
  end
@@ -13,6 +13,8 @@ module Biz
13
13
  ALL.fetch(SYMBOLS.index(symbol))
14
14
  end
15
15
 
16
+ attr_reader :wday
17
+
16
18
  def initialize(wday)
17
19
  @wday = Integer(wday)
18
20
  end
@@ -55,10 +57,6 @@ module Biz
55
57
  wday <=> other.wday
56
58
  end
57
59
 
58
- protected
59
-
60
- attr_reader :wday
61
-
62
60
  ALL = (0..6).map(&method(:new)).freeze
63
61
 
64
62
  private_constant :SYMBOLS,
@@ -51,9 +51,7 @@ module Biz
51
51
  def initialize(day_second)
52
52
  @day_second = Integer(day_second)
53
53
 
54
- unless VALID_SECONDS.cover?(@day_second)
55
- fail ArgumentError, 'second not within a day'
56
- end
54
+ fail ArgumentError, 'second not within a day' unless valid_second?
57
55
  end
58
56
 
59
57
  attr_reader :day_second
@@ -88,6 +86,12 @@ module Biz
88
86
  day_second <=> other.day_second
89
87
  end
90
88
 
89
+ private
90
+
91
+ def valid_second?
92
+ VALID_SECONDS.cover?(day_second)
93
+ end
94
+
91
95
  MIDNIGHT = from_hour(0)
92
96
  ENDNIGHT = from_hour(24)
93
97
 
@@ -1,14 +1,12 @@
1
1
  module Biz
2
2
  module Periods
3
- class Abstract < Enumerator::Lazy
4
-
5
- extend Forwardable
3
+ class Abstract < SimpleDelegator
6
4
 
7
5
  def initialize(schedule, origin)
8
6
  @schedule = schedule
9
7
  @origin = origin
10
8
 
11
- super(periods) do |yielder, period| yielder << period end
9
+ super(periods)
12
10
  end
13
11
 
14
12
  def timeline
@@ -1,3 +1,3 @@
1
1
  module Biz
2
- VERSION = '1.6.0'.freeze
2
+ VERSION = '1.6.1'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: biz
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 1.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Craig Little
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-06-13 00:00:00.000000000 Z
12
+ date: 2017-01-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: clavius
@@ -45,14 +45,14 @@ dependencies:
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: '11.0'
48
+ version: '12.0'
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: '11.0'
55
+ version: '12.0'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: rspec
58
58
  requirement: !ruby/object:Gem::Requirement
@@ -86,7 +86,7 @@ files:
86
86
  - lib/biz/configuration.rb
87
87
  - lib/biz/core_ext.rb
88
88
  - lib/biz/core_ext/date.rb
89
- - lib/biz/core_ext/fixnum.rb
89
+ - lib/biz/core_ext/integer.rb
90
90
  - lib/biz/core_ext/time.rb
91
91
  - lib/biz/date.rb
92
92
  - lib/biz/dates.rb
@@ -128,7 +128,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - ">="
130
130
  - !ruby/object:Gem::Version
131
- version: '2.0'
131
+ version: '2.1'
132
132
  required_rubygems_version: !ruby/object:Gem::Requirement
133
133
  requirements:
134
134
  - - ">="
@@ -136,7 +136,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
136
136
  version: '0'
137
137
  requirements: []
138
138
  rubyforge_project:
139
- rubygems_version: 2.5.1
139
+ rubygems_version: 2.6.8
140
140
  signing_key:
141
141
  specification_version: 4
142
142
  summary: Business hours calculations