ndr_support 5.5.1 → 5.6.0

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
  SHA256:
3
- metadata.gz: 3f5d3aeeaaa13e7221012d0c20948ce96257b4ebb2824e765d0570bc10cec75c
4
- data.tar.gz: 57dc19084dc7ebe85fce29dcd5db48372febf8ee58c9cdd8a2ae275c81d1037c
3
+ metadata.gz: d599151cea4c34a89c568436565e71f11e34d489ed9b6e29aacc009dda5095a4
4
+ data.tar.gz: 47bc41f2159defce848c6150b4c72032252d6b88088ae38ac354abcf71b9f6e6
5
5
  SHA512:
6
- metadata.gz: e9b013478c6a967e6dc2293de8c7bae820382fdb6dc0c8b0bb5aae82da064969620fb8143a6ee9013166f0d652c7ce64a7187279ca5b571c718cd74de5d075b5
7
- data.tar.gz: c4a0b7c8c41c93aacbf53351d7ef517593e7f0612c6b6cb750ab218223e2d494dc9c746c9005c1bf003d2ed9c9e6ed4887813688f79f7eb22cb25e0bec6cff5b
6
+ metadata.gz: a7d2e904ba474818b94832adc0d2d5eb0844c1dc4d34cb31f2e8f7c717bd183069c8b014227c809f069960d974245cfd511ea0674b07b55f29645e4a2a592b90
7
+ data.tar.gz: '08f269ba7631cea9a4257a72bad295d8539c0ff6055ab96fcca6a3734d55b7a132213a39e3048cdd81ee437ce6e470b4f79967e84279da782f7eee8c461ef540'
@@ -1,6 +1,10 @@
1
1
  ## [Unreleased]
2
2
  *no unreleased changes*
3
3
 
4
+ ## 5.6.0 / 2019-08-29
5
+ ### Added
6
+ * Add `Integer#working_days_since`. (#11)
7
+
4
8
  ## 5.5.1 / 2019-05-15
5
9
  ### Fixed
6
10
  * Support Ruby 2.6, Rails 6.0. Minimum Ruby/Rails versions are now 2.5/5.2
@@ -17,7 +17,7 @@ file safety:
17
17
  CHANGELOG.md:
18
18
  comments:
19
19
  reviewed_by: josh.pencheon
20
- safe_revision: 1a3b9f3403a81404b0165c0d4ff7dd9a728eb0b5
20
+ safe_revision: 1f67d8d27b697d51069ea9d3df27ae44db86c694
21
21
  CODE_OF_CONDUCT.md:
22
22
  comments:
23
23
  reviewed_by: timgentry
@@ -60,12 +60,12 @@ file safety:
60
60
  safe_revision: 4a4ed24d2cfe7e1736baadf4cf6e0fece6823be1
61
61
  lib/ndr_support/concerns/working_days.rb:
62
62
  comments:
63
- reviewed_by: brian.shand
64
- safe_revision: a64c2c4616317240faec2db7a84761947ae844a3
63
+ reviewed_by: josh.pencheon
64
+ safe_revision: a5afad784e1e28a76e3907f5d742dc221ce8a235
65
65
  lib/ndr_support/date_and_time_extensions.rb:
66
66
  comments:
67
67
  reviewed_by: josh.pencheon
68
- safe_revision: 3553509e52b3697d361cfa4c6f8a67754ed942d3
68
+ safe_revision: c1158eccb843b637b4dd82815dc7c081f12b93e4
69
69
  lib/ndr_support/daterange.rb:
70
70
  comments:
71
71
  reviewed_by: brian.shand
@@ -86,6 +86,10 @@ file safety:
86
86
  comments:
87
87
  reviewed_by: josh.pencheon
88
88
  safe_revision: 2685f35c907af6968a69eabb5ab9424b490d0f40
89
+ lib/ndr_support/integer/working_days.rb:
90
+ comments:
91
+ reviewed_by: josh.pencheon
92
+ safe_revision: c1158eccb843b637b4dd82815dc7c081f12b93e4
89
93
  lib/ndr_support/nil.rb:
90
94
  comments:
91
95
  reviewed_by: pauleves
@@ -157,7 +161,11 @@ file safety:
157
161
  lib/ndr_support/version.rb:
158
162
  comments:
159
163
  reviewed_by: josh.pencheon
160
- safe_revision: 1a3b9f3403a81404b0165c0d4ff7dd9a728eb0b5
164
+ safe_revision: 1f67d8d27b697d51069ea9d3df27ae44db86c694
165
+ lib/ndr_support/working_days.rb:
166
+ comments:
167
+ reviewed_by: josh.pencheon
168
+ safe_revision: c1158eccb843b637b4dd82815dc7c081f12b93e4
161
169
  lib/ndr_support/yaml/serialization_migration.rb:
162
170
  comments:
163
171
  reviewed_by: timgentry
@@ -165,7 +173,7 @@ file safety:
165
173
  ndr_support.gemspec:
166
174
  comments:
167
175
  reviewed_by: josh.pencheon
168
- safe_revision: 0cfcfac5ddcd721a67dcd23f04cbf6bc2278b922
176
+ safe_revision: c685e94ddb1cf2814eb145e87a4c8bc6bced59fb
169
177
  test/array_test.rb:
170
178
  comments:
171
179
  reviewed_by: timgentry
@@ -190,6 +198,10 @@ file safety:
190
198
  comments:
191
199
  reviewed_by: josh.pencheon
192
200
  safe_revision: 2685f35c907af6968a69eabb5ab9424b490d0f40
201
+ test/integer/working_days_test.rb:
202
+ comments:
203
+ reviewed_by: josh.pencheon
204
+ safe_revision: c1158eccb843b637b4dd82815dc7c081f12b93e4
193
205
  test/nil_test.rb:
194
206
  comments:
195
207
  reviewed_by: timgentry
@@ -3,6 +3,8 @@ require 'active_support/time'
3
3
  # This module contains logic for #working_days_until, #weekday?, and #public_holiday?.
4
4
  module WorkingDays
5
5
  WEEK_DAYS = 1..5
6
+
7
+ # TODO: could we use https://github.com/alphagov/gds-api-adapters ?
6
8
  HOLIDAYS = [ # Sourced from https://www.gov.uk/bank-holidays
7
9
  # 2012
8
10
  '2012-01-02', # Monday - New Year's Day (substitute day)
@@ -100,7 +102,7 @@ module WorkingDays
100
102
  def working_days_until(other)
101
103
  return -other.working_days_until(self) if other < self
102
104
 
103
- whole_days_to(other).count do |day|
105
+ count_whole_days_to(other) do |day|
104
106
  day.weekday? && !day.public_holiday?
105
107
  end
106
108
  end
@@ -109,7 +111,7 @@ module WorkingDays
109
111
  # `other`. Returns negative number if `other` is earlier.
110
112
  def weekdays_until(other)
111
113
  return -other.weekdays_until(self) if other < self
112
- whole_days_to(other).count(&:weekday?)
114
+ count_whole_days_to(other, &:weekday?)
113
115
  end
114
116
 
115
117
  # Is this a weekday?
@@ -124,14 +126,15 @@ module WorkingDays
124
126
 
125
127
  private
126
128
 
127
- def whole_days_to(other)
128
- [self].tap do |days|
129
- loop do
130
- next_day = days.last + 1.day
131
- next_day <= other ? days.push(next_day) : break
132
- end
129
+ def count_whole_days_to(other, &block)
130
+ day = self + 1.day
131
+ count = 0
133
132
 
134
- days.shift # Drop `self` off the front
133
+ while day <= other
134
+ count += 1 if block.call(day)
135
+ day += 1.day
135
136
  end
137
+
138
+ count
136
139
  end
137
140
  end
@@ -1,8 +1,6 @@
1
1
  require 'yaml'
2
2
  require 'date'
3
-
4
- require 'ndr_support/concerns/working_days'
5
- [Time, Date, DateTime].each { |klass| klass.send(:include, WorkingDays) }
3
+ require 'ndr_support/working_days'
6
4
 
7
5
  class Date
8
6
  # to_iso output must be SQL safe for security reasons
@@ -0,0 +1,11 @@
1
+ # Mixin for working_days
2
+ class Integer
3
+ # Returns a date of the number of working days since a given date
4
+ def working_days_since(date)
5
+ times do
6
+ date = date.next
7
+ date = date.next while date.public_holiday? || !date.weekday?
8
+ end
9
+ date
10
+ end
11
+ end
@@ -3,5 +3,5 @@
3
3
  # This defines the NdrSupport version. If you change it, rebuild and commit the gem.
4
4
  # Use "rake build" to build the gem, see rake -T for all bundler rake tasks.
5
5
  module NdrSupport
6
- VERSION = '5.5.1'
6
+ VERSION = '5.6.0'
7
7
  end
@@ -0,0 +1,5 @@
1
+ require 'date'
2
+ require 'ndr_support/concerns/working_days'
3
+ require 'ndr_support/integer/working_days'
4
+
5
+ [Time, Date, DateTime].each { |klass| klass.send(:include, WorkingDays) }
@@ -32,7 +32,7 @@ Gem::Specification.new do |spec|
32
32
  spec.add_development_dependency 'minitest', '>= 5.0.0'
33
33
  spec.add_development_dependency 'mocha', '~> 1.1'
34
34
 
35
- spec.add_development_dependency 'ndr_dev_support', '~> 3.1', '>= 3.1.3'
35
+ spec.add_development_dependency 'ndr_dev_support', '~> 5.4', '>= 5.4.5'
36
36
  spec.add_development_dependency 'guard'
37
37
  spec.add_development_dependency 'listen', '< 3.1' # Bundle 1.12 should be (but isn't) resolving Ruby 2.1 issue
38
38
  spec.add_development_dependency 'guard-rubocop'
@@ -0,0 +1,14 @@
1
+ require 'test_helper'
2
+
3
+ # This tests our Integer working days extension
4
+ class Integer::WorkingDaysTest < Minitest::Test
5
+ test 'Integer should be extended with #working_days_since' do
6
+ assert 1.respond_to?(:working_days_since)
7
+ end
8
+
9
+ test 'Integer#working_days_since should behave correctly' do
10
+ assert_equal Date.new(2019, 12, 23), 1.working_days_since(Date.new(2019, 12, 20))
11
+ assert_equal Date.new(2019, 12, 27), 3.working_days_since(Date.new(2019, 12, 20))
12
+ assert_equal Date.new(2019, 12, 30), 4.working_days_since(Date.new(2019, 12, 20))
13
+ end
14
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ndr_support
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.5.1
4
+ version: 5.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - NCRS Development Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-15 00:00:00.000000000 Z
11
+ date: 2019-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -112,20 +112,20 @@ dependencies:
112
112
  requirements:
113
113
  - - "~>"
114
114
  - !ruby/object:Gem::Version
115
- version: '3.1'
115
+ version: '5.4'
116
116
  - - ">="
117
117
  - !ruby/object:Gem::Version
118
- version: 3.1.3
118
+ version: 5.4.5
119
119
  type: :development
120
120
  prerelease: false
121
121
  version_requirements: !ruby/object:Gem::Requirement
122
122
  requirements:
123
123
  - - "~>"
124
124
  - !ruby/object:Gem::Version
125
- version: '3.1'
125
+ version: '5.4'
126
126
  - - ">="
127
127
  - !ruby/object:Gem::Version
128
- version: 3.1.3
128
+ version: 5.4.5
129
129
  - !ruby/object:Gem::Dependency
130
130
  name: guard
131
131
  requirement: !ruby/object:Gem::Requirement
@@ -251,6 +251,7 @@ files:
251
251
  - lib/ndr_support/integer/calculations.rb
252
252
  - lib/ndr_support/integer/julian_date_conversions.rb
253
253
  - lib/ndr_support/integer/rounding.rb
254
+ - lib/ndr_support/integer/working_days.rb
254
255
  - lib/ndr_support/nil.rb
255
256
  - lib/ndr_support/obfuscator.rb
256
257
  - lib/ndr_support/ourdate.rb
@@ -269,6 +270,7 @@ files:
269
270
  - lib/ndr_support/utf8_encoding/force_binary.rb
270
271
  - lib/ndr_support/utf8_encoding/object_support.rb
271
272
  - lib/ndr_support/version.rb
273
+ - lib/ndr_support/working_days.rb
272
274
  - lib/ndr_support/yaml/serialization_migration.rb
273
275
  - ndr_support.gemspec
274
276
  - test/array_test.rb
@@ -277,6 +279,7 @@ files:
277
279
  - test/hash_test.rb
278
280
  - test/integer/calculations_test.rb
279
281
  - test/integer/rounding_test.rb
282
+ - test/integer/working_days_test.rb
280
283
  - test/nil_test.rb
281
284
  - test/obfuscator_test.rb
282
285
  - test/ourdate_test.rb
@@ -324,6 +327,7 @@ test_files:
324
327
  - test/hash_test.rb
325
328
  - test/integer/calculations_test.rb
326
329
  - test/integer/rounding_test.rb
330
+ - test/integer/working_days_test.rb
327
331
  - test/nil_test.rb
328
332
  - test/obfuscator_test.rb
329
333
  - test/ourdate_test.rb