biz 1.6.0 → 1.6.1

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.
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