roxbury 0.1.0 → 0.1.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 +4 -4
- data/Gemfile.lock +4 -2
- data/README.md +2 -0
- data/bin/benchmark.rb +5 -0
- data/lib/roxbury/business_calendar.rb +18 -5
- data/lib/roxbury/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 95a78111c7254e8b3e5f35c69e781f16f971ad839c0e7c76c42b4f41ea681bd7
|
4
|
+
data.tar.gz: 9d76e376abecaa9796dd40f532b66d69e623876a0efc9360cf70976d4a4a9359
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: db1b169f1db6ce10e4a9831a2400a3ff914f0bb5c7ba31d0bca9527fa144ded503200b78e2583bc1d619337862aa7126134f8cd852a54566c8efaef1f455fc32
|
7
|
+
data.tar.gz: 12b76c182370f9b382cdb15f73c7eb3afebdf1300c94973fc0bec8d1a56178a280323ac0bd3b2d3ff9ed6908ec6b9d4e13dcf4c59e04759f9f75fb502951a10b
|
data/Gemfile.lock
CHANGED
@@ -1,17 +1,18 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
roxbury (0.1.
|
4
|
+
roxbury (0.1.1)
|
5
5
|
activesupport (>= 4.2)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
activesupport (
|
10
|
+
activesupport (6.0.0)
|
11
11
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
12
12
|
i18n (>= 0.7, < 2)
|
13
13
|
minitest (~> 5.1)
|
14
14
|
tzinfo (~> 1.1)
|
15
|
+
zeitwerk (~> 2.1, >= 2.1.8)
|
15
16
|
byebug (11.0.1)
|
16
17
|
coderay (1.1.2)
|
17
18
|
concurrent-ruby (1.1.5)
|
@@ -74,6 +75,7 @@ GEM
|
|
74
75
|
thread_safe (0.3.6)
|
75
76
|
tzinfo (1.2.5)
|
76
77
|
thread_safe (~> 0.1)
|
78
|
+
zeitwerk (2.1.9)
|
77
79
|
|
78
80
|
PLATFORMS
|
79
81
|
ruby
|
data/README.md
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
A Ruby library for handling business days calculations, e.g., working days/hours between two dates, add working days/hours to a date, etc.
|
4
4
|
|
5
|
+
It was extracted from a production application that's been running for many years.
|
6
|
+
|
5
7
|
[](https://travis-ci.org/eeng/roxbury)
|
6
8
|
|
7
9
|
## Installation
|
data/bin/benchmark.rb
ADDED
@@ -55,11 +55,24 @@ module Roxbury
|
|
55
55
|
# @param number_of_days [Integer, Float]
|
56
56
|
# @return [Date, Time] The result of adding the number_of_days to the given date. If a Date is given returns a Date, otherwise if a Time is given returns a Time.
|
57
57
|
def add_working_days to, number_of_days
|
58
|
-
|
59
|
-
|
58
|
+
raise ArgumentError, 'number_of_days must not be negative' if number_of_days < 0
|
59
|
+
|
60
|
+
if to.is_a?(Time)
|
61
|
+
# this implementation would work for Date instances as well, but is around 10 times slower than the other in my machine
|
62
|
+
add_working_hours(to, number_of_days * max_working_hours_in_a_day)
|
63
|
+
else
|
64
|
+
remaining_days = number_of_days
|
65
|
+
rolling_date = to
|
66
|
+
loop do
|
67
|
+
remaining_days -= business_day(rolling_date).number_of_working_hours * 1.0 / max_working_hours_in_a_day
|
68
|
+
break if remaining_days < 0
|
69
|
+
rolling_date = roll_forward rolling_date.next
|
70
|
+
end
|
71
|
+
rolling_date
|
72
|
+
end
|
60
73
|
end
|
61
74
|
|
62
|
-
# Snaps the date to the beginning of the next business day, unless it is already within the working hours.
|
75
|
+
# Snaps the date to the beginning of the next business day, unless it is already within the working hours of a business day.
|
63
76
|
#
|
64
77
|
# @param date [Date, Time]
|
65
78
|
def roll_forward date
|
@@ -69,7 +82,7 @@ module Roxbury
|
|
69
82
|
elsif bday.starts_after?(date)
|
70
83
|
bday.at_beginning
|
71
84
|
else
|
72
|
-
roll_forward date.tomorrow.beginning_of_day
|
85
|
+
roll_forward(date.is_a?(Date) ? date.tomorrow : date.tomorrow.beginning_of_day)
|
73
86
|
end
|
74
87
|
end
|
75
88
|
|
@@ -111,7 +124,7 @@ module Roxbury
|
|
111
124
|
end
|
112
125
|
|
113
126
|
def max_working_hours_in_a_day
|
114
|
-
@working_hours.values.map(&:quantity).max
|
127
|
+
@max_working_hours_in_a_day ||= @working_hours.values.map(&:quantity).max
|
115
128
|
end
|
116
129
|
end
|
117
130
|
end
|
data/lib/roxbury/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: roxbury
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Emmanuel Nicolau
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-08-
|
11
|
+
date: 2019-08-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -142,6 +142,7 @@ files:
|
|
142
142
|
- LICENSE.txt
|
143
143
|
- README.md
|
144
144
|
- Rakefile
|
145
|
+
- bin/benchmark.rb
|
145
146
|
- bin/console
|
146
147
|
- bin/setup
|
147
148
|
- lib/roxbury.rb
|