ndr_support 5.5.1 → 5.6.0

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