ndr_support 5.7.0 → 5.8.2

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: e06c6fad074bb00f7ba16334d194b9fcf369147688dbd1f22dcd1cca86e71073
4
- data.tar.gz: 7ede15deb1aec6e6ee02d627437eb7c94810755dbcb717db9212c17c2f09ca3e
3
+ metadata.gz: b3f90df368cddc8835eb228b45b2e03088caf7ff494c6dd71538a255ed81ee17
4
+ data.tar.gz: b7efe09d5283db3ee78934b727893817c772bb1564c02eaa453e216d562e23b1
5
5
  SHA512:
6
- metadata.gz: f3b03a27b86891d3cb52dcf3fab222cf3bd42b05cb859918142dd6791a6dc18e5ebba0075911d9d177e7451a5b447b0cf6324455641f913ebb86c78808cf5843
7
- data.tar.gz: e5d89586818d5a50a1c3211086ce812d485e90b3080c46986be570ec32e7c740f6d5c312a8580ef727243c5910b60d5acd13f8e94276e0fa07dbf922879a9a85
6
+ metadata.gz: 3b5dd0eeb3aec3bf88b4bc71620a661f3fe8a76eb9deef2c6dd8ec8e4d42faf9328f4934531fc0b36e65947f62d7163e4d0165324c8f17df8a1dfa042d942dc1
7
+ data.tar.gz: ba3cad435e924c140fd528a1cee8bd2e1aa8ccc2431f852d093e01bf7d16e8db21ceecdde3bd3cc53aed7465ffcaa0568f67b0226cbce1f957ced9d35a221ba8
data/CHANGELOG.md CHANGED
@@ -1,6 +1,29 @@
1
1
  ## [Unreleased]
2
2
  *no unreleased changes*
3
3
 
4
+ ## 5.8.2 / 2021-10-11
5
+ ## Fixed
6
+ * fix issue with blank date causing error for dateranges
7
+
8
+ ## 5.8.1 / 2021-10-11
9
+ ### Patched
10
+ * Added fix for failing threat scanner tests (#22)
11
+
12
+ ## 5.8.0 / 2021-04-19
13
+ ## Added
14
+
15
+ * Add ability to disable date reversing in Daterange
16
+
17
+ ## Fixed
18
+ * Support Ruby 2.6-3.0.
19
+ * Fix ruby warnings
20
+
21
+ ## 5.7.1 / 2021-01-03
22
+ ## Fixed
23
+ * Postcodeize old Newport postcodes
24
+ * Bump rake version
25
+ * Support 2022 public holidays
26
+
4
27
  ## 5.7.0 / 2020-06-30
5
28
  ## Added
6
29
  * Handle three char months in Daterange
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # NdrSupport [![Build Status](https://travis-ci.org/PublicHealthEngland/ndr_support.svg?branch=master)](https://travis-ci.org/PublicHealthEngland/ndr_support) [![Gem Version](https://badge.fury.io/rb/ndr_support.svg)](https://badge.fury.io/rb/ndr_support)
1
+ # NdrSupport [![Build Status](https://github.com/publichealthengland/ndr_support/workflows/Test/badge.svg)](https://github.com/publichealthengland/ndr_support/actions?query=workflow%3Atest) [![Gem Version](https://badge.fury.io/rb/ndr_support.svg)](https://rubygems.org/gems/ndr_support)
2
2
 
3
3
  This is the Public Health England (PHE) National Disease Registers (NDR) Support ruby gem, providing:
4
4
 
data/code_safety.yml CHANGED
@@ -1,5 +1,17 @@
1
1
  ---
2
2
  file safety:
3
+ ".github/CODEOWNERS":
4
+ comments:
5
+ reviewed_by: ollietulloch
6
+ safe_revision: 993f7719b57eb6ddd8dffa7230ed9ffc69f48749
7
+ ".github/workflows/lint.yml":
8
+ comments:
9
+ reviewed_by: ollietulloch
10
+ safe_revision: 993f7719b57eb6ddd8dffa7230ed9ffc69f48749
11
+ ".github/workflows/test.yml":
12
+ comments:
13
+ reviewed_by: ollietulloch
14
+ safe_revision: 993f7719b57eb6ddd8dffa7230ed9ffc69f48749
3
15
  ".gitignore":
4
16
  comments:
5
17
  reviewed_by: josh.pencheon
@@ -8,16 +20,10 @@ file safety:
8
20
  comments:
9
21
  reviewed_by: josh.pencheon
10
22
  safe_revision: a02f14cbf1fc36fbaf820365fdedfdc9af326db1
11
- ".travis.yml":
12
- comments: 'diff failed; reviewed whole file. Revision c88f5ac8c12fd657bb142144e0d3afaa7f9bc361:
13
- Slack notification secret is public/private key encrypted, so not a disclosure
14
- risk. As a secondary protection, it''s excluded from the .gem file by ndr_support.gemspec'
15
- reviewed_by: josh.pencheon
16
- safe_revision: 0cfcfac5ddcd721a67dcd23f04cbf6bc2278b922
17
23
  CHANGELOG.md:
18
24
  comments:
19
25
  reviewed_by: ollietulloch
20
- safe_revision: ce582c10aa4ddddcd22f907d6228cc7bb324a280
26
+ safe_revision: de292b8dd286a0164a67cda49bbbbc8ba75409cc
21
27
  CODE_OF_CONDUCT.md:
22
28
  comments:
23
29
  reviewed_by: timgentry
@@ -36,8 +42,8 @@ file safety:
36
42
  safe_revision: 90328cca8494539257e192a63b240a91c89f0616
37
43
  README.md:
38
44
  comments:
39
- reviewed_by: josh.pencheon
40
- safe_revision: 2685f35c907af6968a69eabb5ab9424b490d0f40
45
+ reviewed_by: ollietulloch
46
+ safe_revision: 993f7719b57eb6ddd8dffa7230ed9ffc69f48749
41
47
  Rakefile:
42
48
  comments:
43
49
  reviewed_by: timgentry
@@ -60,8 +66,8 @@ file safety:
60
66
  safe_revision: 4a4ed24d2cfe7e1736baadf4cf6e0fece6823be1
61
67
  lib/ndr_support/concerns/working_days.rb:
62
68
  comments:
63
- reviewed_by: josh.pencheon
64
- safe_revision: fe6c3beff445e3c84ed0c89f08e1ab10bfb00587
69
+ reviewed_by: brianshand
70
+ safe_revision: b72baa322dc58820ccd615a178371c2e5dab113c
65
71
  lib/ndr_support/date_and_time_extensions.rb:
66
72
  comments:
67
73
  reviewed_by: josh.pencheon
@@ -69,7 +75,7 @@ file safety:
69
75
  lib/ndr_support/daterange.rb:
70
76
  comments:
71
77
  reviewed_by: ollietulloch
72
- safe_revision: 9a4b8e53f477725c2c2be5000b3c9e66f07d7389
78
+ safe_revision: fc52184297e0a3bcd52b119e2e0add952c8ab7f1
73
79
  lib/ndr_support/hash.rb:
74
80
  comments:
75
81
  reviewed_by: pauleves
@@ -80,8 +86,8 @@ file safety:
80
86
  safe_revision: 2685f35c907af6968a69eabb5ab9424b490d0f40
81
87
  lib/ndr_support/integer/julian_date_conversions.rb:
82
88
  comments:
83
- reviewed_by: josh.pencheon
84
- safe_revision: 2685f35c907af6968a69eabb5ab9424b490d0f40
89
+ reviewed_by: ollietulloch
90
+ safe_revision: '09b3f97fb4c1afc88d0d070c39796b1f60c39d25'
85
91
  lib/ndr_support/integer/rounding.rb:
86
92
  comments:
87
93
  reviewed_by: josh.pencheon
@@ -100,12 +106,12 @@ file safety:
100
106
  safe_revision: 50a4293953f9ae227823c390b069a3ed4825074c
101
107
  lib/ndr_support/ourdate.rb:
102
108
  comments:
103
- reviewed_by: pauleves
104
- safe_revision: a18fb5c6c360806a177a9c5584458586e90b3530
109
+ reviewed_by: ollietulloch
110
+ safe_revision: '09b3f97fb4c1afc88d0d070c39796b1f60c39d25'
105
111
  lib/ndr_support/ourtime.rb:
106
112
  comments:
107
- reviewed_by: brian.shand
108
- safe_revision: 73527378c53b7ac00d1037155572fe3f01324992
113
+ reviewed_by: ollietulloch
114
+ safe_revision: '09b3f97fb4c1afc88d0d070c39796b1f60c39d25'
109
115
  lib/ndr_support/password.rb:
110
116
  comments: with input from brian.shand
111
117
  reviewed_by: josh.pencheon
@@ -124,44 +130,44 @@ file safety:
124
130
  safe_revision: 2685f35c907af6968a69eabb5ab9424b490d0f40
125
131
  lib/ndr_support/safe_path.rb:
126
132
  comments:
127
- reviewed_by: timgentry
128
- safe_revision: 4492da77f6a8b678c40dd571fdd46fd936052cca
133
+ reviewed_by: ollietulloch
134
+ safe_revision: '09b3f97fb4c1afc88d0d070c39796b1f60c39d25'
129
135
  lib/ndr_support/string/cleaning.rb:
130
136
  comments:
131
- reviewed_by: brian.shand
132
- safe_revision: 60cc69774d5aff92252558feae9604544def7583
137
+ reviewed_by: brianshand
138
+ safe_revision: b7b033ad9773cc9037c408a7763b113d31cbf191
133
139
  lib/ndr_support/string/conversions.rb:
134
140
  comments:
135
141
  reviewed_by: ollietulloch
136
- safe_revision: 9a4b8e53f477725c2c2be5000b3c9e66f07d7389
142
+ safe_revision: '09b3f97fb4c1afc88d0d070c39796b1f60c39d25'
137
143
  lib/ndr_support/tasks.rb:
138
144
  comments:
139
145
  reviewed_by: timgentry
140
146
  safe_revision: 62337584a32e5c30c2e9af7cd998a9df684885cc
141
147
  lib/ndr_support/threat_scanner.rb:
142
148
  comments:
143
- reviewed_by: josh.pencheon
144
- safe_revision: ed8ff421cc9353456af13a37049a07ce2545aac1
149
+ reviewed_by: brianshand
150
+ safe_revision: befa1d4f27448d5be4e133f442c2b5fbac7d8f25
145
151
  lib/ndr_support/utf8_encoding.rb:
146
152
  comments:
147
153
  reviewed_by: josh.pencheon
148
154
  safe_revision: 8e024a4bacfd36e172aad4b800f1960faae0b4b6
149
155
  lib/ndr_support/utf8_encoding/control_characters.rb:
150
156
  comments:
151
- reviewed_by: josh.pencheon
152
- safe_revision: 8e024a4bacfd36e172aad4b800f1960faae0b4b6
157
+ reviewed_by: ollietulloch
158
+ safe_revision: '09b3f97fb4c1afc88d0d070c39796b1f60c39d25'
153
159
  lib/ndr_support/utf8_encoding/force_binary.rb:
154
160
  comments:
155
- reviewed_by: timgentry
156
- safe_revision: 29595e6431587ff9b7db6e3ad3abbb3577bff99c
161
+ reviewed_by: ollietulloch
162
+ safe_revision: '09b3f97fb4c1afc88d0d070c39796b1f60c39d25'
157
163
  lib/ndr_support/utf8_encoding/object_support.rb:
158
164
  comments:
159
- reviewed_by: timgentry
160
- safe_revision: f7adf44fc2772e1926df37abfd9041d41c303328
165
+ reviewed_by: ollietulloch
166
+ safe_revision: '09b3f97fb4c1afc88d0d070c39796b1f60c39d25'
161
167
  lib/ndr_support/version.rb:
162
168
  comments:
163
169
  reviewed_by: ollietulloch
164
- safe_revision: ce582c10aa4ddddcd22f907d6228cc7bb324a280
170
+ safe_revision: de292b8dd286a0164a67cda49bbbbc8ba75409cc
165
171
  lib/ndr_support/working_days.rb:
166
172
  comments:
167
173
  reviewed_by: josh.pencheon
@@ -172,8 +178,8 @@ file safety:
172
178
  safe_revision: 29595e6431587ff9b7db6e3ad3abbb3577bff99c
173
179
  ndr_support.gemspec:
174
180
  comments:
175
- reviewed_by: josh.pencheon
176
- safe_revision: c685e94ddb1cf2814eb145e87a4c8bc6bced59fb
181
+ reviewed_by: ollietulloch
182
+ safe_revision: 993f7719b57eb6ddd8dffa7230ed9ffc69f48749
177
183
  test/array_test.rb:
178
184
  comments:
179
185
  reviewed_by: timgentry
@@ -185,7 +191,7 @@ file safety:
185
191
  test/daterange_test.rb:
186
192
  comments:
187
193
  reviewed_by: ollietulloch
188
- safe_revision: 9a4b8e53f477725c2c2be5000b3c9e66f07d7389
194
+ safe_revision: ccca1dc67e3742efb154e01e01243e7b38180936
189
195
  test/hash_test.rb:
190
196
  comments:
191
197
  reviewed_by: timgentry
@@ -240,20 +246,20 @@ file safety:
240
246
  safe_revision: b562d0c15ff1b1d565522a47e6bae47ea09706f0
241
247
  test/string/cleaning_test.rb:
242
248
  comments:
243
- reviewed_by: brian.shand
244
- safe_revision: 60cc69774d5aff92252558feae9604544def7583
249
+ reviewed_by: brianshand
250
+ safe_revision: b7b033ad9773cc9037c408a7763b113d31cbf191
245
251
  test/string/conversions_test.rb:
246
252
  comments:
247
253
  reviewed_by: ollietulloch
248
- safe_revision: 9a4b8e53f477725c2c2be5000b3c9e66f07d7389
254
+ safe_revision: '09b3f97fb4c1afc88d0d070c39796b1f60c39d25'
249
255
  test/test_helper.rb:
250
256
  comments:
251
257
  reviewed_by: josh.pencheon
252
258
  safe_revision: 34ae80f2952f0bfd18688541862774cbaaa6c5f5
253
259
  test/threat_scanner_test.rb:
254
260
  comments:
255
- reviewed_by: josh.pencheon
256
- safe_revision: ed8ff421cc9353456af13a37049a07ce2545aac1
261
+ reviewed_by: ollietulloch
262
+ safe_revision: fbb6ef9804040aa2e38257d9f5c487bde18a490d
257
263
  test/utf8_encoding/control_characters_test.rb:
258
264
  comments:
259
265
  reviewed_by: timgentry
@@ -97,6 +97,16 @@ module WorkingDays
97
97
  '2021-08-30', # Monday - Summer bank holiday
98
98
  '2021-12-27', # Monday - Christmas Day
99
99
  '2021-12-28', # Tuesday - Boxing Day
100
+ # 2022
101
+ '2022-01-03', # Monday - New Year’s Day (substitute day)
102
+ '2022-04-15', # Friday - Good Friday
103
+ '2022-04-18', # Monday - Easter Monday
104
+ '2022-05-02', # Monday - Early May bank holiday
105
+ '2022-06-02', # Thursday - Spring bank holiday
106
+ '2022-06-03', # Friday - Platinum Jubilee bank holiday
107
+ '2022-08-29', # Monday - Summer bank holiday
108
+ '2022-12-26', # Monday - Boxing Day
109
+ '2022-12-27', # Tuesday - Christmas Day (substitute day)
100
110
  ].map { |str| Date.parse(str) }
101
111
 
102
112
  def self.check_lookup
@@ -8,6 +8,9 @@ class Daterange
8
8
 
9
9
  OKYEARS = 1880..2030
10
10
 
11
+ # Raised when dates are not supplied in the correct order if do_not_flip_dates is passed as true:
12
+ class WrongDateOrderError < StandardError; end
13
+
11
14
  def self.extract(dates_string)
12
15
  dates_string.to_s.split(',').map { |str| new(str) }
13
16
  end
@@ -17,15 +20,15 @@ class Daterange
17
20
  new(ranges.map(&:date1).compact.min, ranges.map(&:date2).compact.max)
18
21
  end
19
22
 
20
- def initialize(x1 = nil, x2 = nil)
23
+ def initialize(x1 = nil, x2 = nil, do_not_sort_dates: false)
21
24
  x1 = x1.to_datetime if x1.is_a?(Date) || x1.is_a?(Time)
22
25
  x2 = x2.to_datetime if x2.is_a?(Date) || x2.is_a?(Time)
23
26
 
24
27
  if x1.is_a?(DateTime) && x2.is_a?(DateTime)
25
- @date1 = [x1, x2].min
26
- @date2 = [x1, x2].max
28
+ @date1 = do_not_sort_dates ? x1 : [x1, x2].min
29
+ @date2 = do_not_sort_dates ? x2 : [x1, x2].max
27
30
  @source = nil
28
- elsif x1.is_a?(Daterange) && x2.nil? # Patient model line 645
31
+ elsif x1.is_a?(Daterange) && x2.nil? # Patient model line 645
29
32
  @date1 = x1.date1
30
33
  @date2 = x1.date2
31
34
  @source = x1.source
@@ -34,15 +37,24 @@ class Daterange
34
37
  @date2 = x1
35
38
  @source = nil
36
39
  elsif x1.is_a?(String) && x2.nil?
37
- self.source = (x1)
40
+ self.send(:source=, x1, do_not_sort_dates)
38
41
  else
39
42
  @date1 = nil
40
43
  @date2 = nil
41
44
  @source = nil
42
45
  end
46
+ raise WrongDateOrderError, 'Invalid date range order' if wrong_date_order?(do_not_sort_dates)
47
+
43
48
  self.freeze
44
49
  end
45
50
 
51
+ def wrong_date_order?(do_not_sort_dates)
52
+ return false unless do_not_sort_dates
53
+ return false unless @date1.present? && @date2.present?
54
+
55
+ @date1 > @date2
56
+ end
57
+
46
58
  # If we have a valid date range, return a string representation of it
47
59
  # TODO: possibly add support for to_s(format) e.g. to_s(:short)
48
60
  def to_s
@@ -137,22 +149,23 @@ class Daterange
137
149
  # +s+ consists of one or more dates separated with spaces.
138
150
  # Each date can be in various formats, e.g. d/m/yyyy, ddmmyyyy, yyyy-mm-dd, dd-mon-yyyy
139
151
  # Each date can omit days or months, e.g. yyyy, dd/yyyy, yyyy-mm, mon-yyyy
140
- def source=(s)
152
+ def source=(s, do_not_sort_dates)
141
153
  @source = s
142
154
  ss = s.upcase.sub(/TO/, ' ') # accept default _to_s format
143
- if ss =~ /[^\w0-9\-\/\. ]/i # only allow letters, digits, hyphen, slash, dot, space
155
+ if ss =~ %r{[^A-Z0-9\-/\. ]}i # only allow letters, digits, hyphen, slash, dot, space
144
156
  @date1 = @date2 = nil
145
157
  else
146
158
  da = [] # temporary array of arrays of dates
147
- ss.split(' ').each do |vaguedate|
159
+ ss.split.each do |vaguedate|
148
160
  da << str_to_date_array(vaguedate)
149
161
  end
150
162
  da.flatten!
151
163
  if da.include?(nil)
152
- @date1 = @date2 = nil
164
+ @date1 = @date2 = nil
153
165
  else
154
- da.sort!
155
- @date1, @date2 = da.first, da.last
166
+ da.sort! unless do_not_sort_dates
167
+ @date1 = da.first
168
+ @date2 = da.last
156
169
  end
157
170
  end
158
171
  end
@@ -1,5 +1,3 @@
1
- require 'ndr_support/ourdate'
2
-
3
1
  # Extend Integer for use in our Daterange class
4
2
  class Integer
5
3
  # Julian date number to Ruby Date
@@ -31,6 +31,8 @@ class Ourdate
31
31
  # with strings arguments only after the 1970 epoch; before, it returns nil.
32
32
  #++
33
33
  def self.build_datetime(year, month = 1, day = 1, hour = 0, min = 0, sec = 0, usec = 0)
34
+ return nil if year.nil?
35
+
34
36
  if ActiveRecord::Base.default_timezone == :local
35
37
  # Time.local_time(year, month, day, hour, min, sec, usec).to_datetime
36
38
  # Behave like oracle_adapter.rb
@@ -72,8 +74,8 @@ class Ourdate
72
74
  end
73
75
 
74
76
  def empty?
75
- # An unspecified date will be empty. A valid or invalid date will not.
76
- @thedate.nil? && @source.blank?
77
+ # An unspecified date will be empty. A valid date will not.
78
+ @thedate.nil?
77
79
  end
78
80
 
79
81
  def source=(s)
@@ -28,8 +28,8 @@ class Ourtime
28
28
  end
29
29
 
30
30
  def empty?
31
- # An unspecified time will be empty. A valid or invalid time will not.
32
- @thetime.nil? && @source.blank?
31
+ # An unspecified time will be empty. A valid time will not.
32
+ @thetime.nil?
33
33
  end
34
34
 
35
35
  private
@@ -118,6 +118,7 @@ class SafePath
118
118
 
119
119
  @path_space = path_space
120
120
  @maximum_prms = fs_paths[platform][path_space]['prms']
121
+ @prm = nil
121
122
 
122
123
  self.path = @root
123
124
  end
@@ -10,6 +10,7 @@ class String
10
10
  [A-Z][0-9][0-9] |
11
11
  [A-Z][0-9][A-Z] |
12
12
  [A-Z][A-Z][0-9] |
13
+ NPT |
13
14
  [A-Z][A-Z][0-9][0-9] |
14
15
  [A-Z][A-Z][0-9][A-Z]
15
16
  )
@@ -84,7 +84,7 @@ class String
84
84
 
85
85
  # Try to convert the string value into a date.
86
86
  # If given a pattern, use it to parse date, otherwise use default setting to parse it
87
- def to_date(pattern = nil)
87
+ redefine_method :to_date do |pattern = nil|
88
88
  return nil if blank?
89
89
 
90
90
  pattern = '%d%m%Y' if 'ddmmyyyy' == pattern
@@ -1,4 +1,5 @@
1
1
  require 'English'
2
+ require 'shellwords'
2
3
 
3
4
  # Runs a virus/malware check against the given path, using ClamAV.
4
5
  #
@@ -1,5 +1,3 @@
1
- require 'ndr_support/utf8_encoding'
2
-
3
1
  module UTF8Encoding
4
2
  # Allows any supported object to have control characters
5
3
  # escaped, using standard replacement scheme.
@@ -1,5 +1,3 @@
1
- require 'ndr_support/utf8_encoding'
2
-
3
1
  module UTF8Encoding
4
2
  # Allows any supported object to have any high-ascii string
5
3
  # content to be force-encoded from UTF-8 to BINARY (/ASCII-8BIT).
@@ -1,5 +1,3 @@
1
- require 'ndr_support/utf8_encoding'
2
-
3
1
  # Allows any object (if supported) to have all related
4
2
  # strings encoded in place to UTF-8.
5
3
  module UTF8Encoding
@@ -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.7.0'
6
+ VERSION = '5.8.2'
7
7
  end
data/ndr_support.gemspec CHANGED
@@ -1,4 +1,4 @@
1
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
  require 'ndr_support/version'
4
4
 
@@ -13,9 +13,7 @@ Gem::Specification.new do |spec|
13
13
  spec.license = 'MIT'
14
14
 
15
15
  # Exclude older versions of this gem from the package.
16
- spec.files = `git ls-files -z`.split("\x0").reject { |s| s =~ /^pkg\// }
17
- # SECURE BNS 2018-08-06: Minimise sharing of (public-key encrypted) slack secrets in .travis.yml
18
- spec.files -= %w[.travis.yml] # Not needed in the gem
16
+ spec.files = `git ls-files -z`.split("\x0").reject { |s| s =~ %r{^(\.github|pkg/)} }
19
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
19
  spec.require_paths = ['lib']
@@ -24,9 +22,9 @@ Gem::Specification.new do |spec|
24
22
  spec.add_dependency 'activesupport', '>= 5.2.0', '< 7'
25
23
 
26
24
  spec.add_development_dependency 'bundler'
27
- spec.add_development_dependency 'rake', '~> 10.0'
25
+ spec.add_development_dependency 'rake', '>= 12.3.3'
28
26
 
29
- spec.required_ruby_version = '>= 2.5.0'
27
+ spec.required_ruby_version = '>= 2.6.0'
30
28
 
31
29
  # Avoid std-lib minitest (which has different namespace)
32
30
  spec.add_development_dependency 'minitest', '>= 5.0.0'
@@ -24,19 +24,53 @@ class DaterangeTest < Minitest::Test
24
24
  # assert_match(/\d\d\.\d\d\.\d\d\d\d to \d\d.\d\d.\d\d\d\d/, dr.to_s)
25
25
  end
26
26
 
27
- def test_dates_in_reverse_order
28
- d = Date.today
29
- dr = Daterange.new d, d + 1
30
- dr2 = Daterange.new d + 1, d
27
+ def test_date_time_dates_in_reverse_order_with_do_not_sort_dates_false
28
+ d = Time.zone.today
29
+ dr = Daterange.new(d, d + 1)
30
+ dr2 = Daterange.new(d + 1, d)
31
31
  assert_equal(dr.to_s, dr2.to_s)
32
32
  end
33
33
 
34
+ def test_blank_does_not_trigger_error_and_returns_nil_in_dates
35
+ dr = Daterange.new('', do_not_sort_dates: true)
36
+ assert_nil dr.date1
37
+ assert_nil dr.date2
38
+ end
39
+
40
+ def test_date_time_dates_in_reverse_order_with_do_not_sort_dates_true
41
+ d = Time.zone.today
42
+ Daterange.new(d, d + 1, do_not_sort_dates: true)
43
+ assert_raises(Daterange::WrongDateOrderError) do
44
+ Daterange.new(d + 1, d, do_not_sort_dates: true)
45
+ end
46
+ end
47
+
48
+ def test_string_dates_in_reverse_order_with_do_not_sort_dates_false
49
+ dr = Daterange.new('01/01/2019 to 01/01/2020')
50
+ dr2 = Daterange.new('01/01/2020 to 01/01/2019')
51
+ assert_equal(dr.to_s, dr2.to_s)
52
+ end
53
+
54
+ def test_string_dates_in_reverse_order_with_do_not_sort_dates_true
55
+ Daterange.new('01/01/2019 to 01/01/2020', do_not_sort_dates: true)
56
+ assert_raises(Daterange::WrongDateOrderError) do
57
+ Daterange.new('01/01/2020 to 01/01/2019', do_not_sort_dates: true)
58
+ end
59
+ end
60
+
34
61
  def test_illegal_strings
35
62
  dr = Daterange.new('01/o1/2000')
36
63
  assert_equal '', dr.to_s
37
64
  assert_nil dr.date1
38
65
  assert_nil dr.date2
39
- refute dr.empty? # Illegal dates do not count as empty / blank,
66
+ refute dr.empty? # Illegal dates do not count as empty / blank,
67
+ refute_nil dr.source # but the illegal string is preserved
68
+
69
+ dr = Daterange.new('01_01_2000')
70
+ assert_equal '', dr.to_s
71
+ assert_nil dr.date1
72
+ assert_nil dr.date2
73
+ refute dr.empty? # Illegal dates do not count as empty / blank,
40
74
  refute_nil dr.source # but the illegal string is preserved
41
75
  end
42
76
 
@@ -23,6 +23,9 @@ class String
23
23
  assert_equal 'AA9 9AA', 'AA9 9AA'.postcodeize(:db)
24
24
  assert_equal 'AA999AA', 'AA99 9AA'.postcodeize(:db)
25
25
  assert_equal 'AA9A9AA', 'AA9A 9AA'.postcodeize(:db)
26
+ # Old Newport postcodes until end 1984
27
+ assert_equal 'NPT 1AA' , 'NPT 1AA'.postcodeize(:db)
28
+ assert_equal 'NPT 1AA' , 'NPT 1AA'.postcodeize(:db)
26
29
  # Examples of legacy postcodes, that should be unchanged
27
30
  assert_equal 'IP222', 'IP222'.postcodeize(:db)
28
31
  assert_equal 'IP222E', 'IP222E'.postcodeize(:db)
@@ -357,9 +357,9 @@ class String::ConversionsTest < Minitest::Test
357
357
  end
358
358
 
359
359
  def assert_ymd(ymd, date)
360
- assert_equal ymd.first, date.year, 'years were not equal'
361
- assert_equal ymd.second, date.month, 'months were not equal'
362
- assert_equal ymd.third, date.day, 'days were not equal'
360
+ assert_equal ymd[0], date.year, 'years were not equal'
361
+ assert_equal ymd[1], date.month, 'months were not equal'
362
+ assert_equal ymd[2], date.day, 'days were not equal'
363
363
  end
364
364
 
365
365
  def assert_ymd_parsed(ymd, parse_results)
@@ -8,6 +8,8 @@ class ThreatScannerTest < Minitest::Test
8
8
 
9
9
  ThreatScanner.stubs(installed?: true)
10
10
  ThreatScanner.any_instance.stubs(:`)
11
+
12
+ `pwd` # Ensure that $CHILD_STATUS is not nil, even if we never run any child processes
11
13
  end
12
14
 
13
15
  def teardown
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.7.0
4
+ version: 5.8.2
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: 2020-06-30 00:00:00.000000000 Z
11
+ date: 2021-10-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -68,16 +68,16 @@ dependencies:
68
68
  name: rake
69
69
  requirement: !ruby/object:Gem::Requirement
70
70
  requirements:
71
- - - "~>"
71
+ - - ">="
72
72
  - !ruby/object:Gem::Version
73
- version: '10.0'
73
+ version: 12.3.3
74
74
  type: :development
75
75
  prerelease: false
76
76
  version_requirements: !ruby/object:Gem::Requirement
77
77
  requirements:
78
- - - "~>"
78
+ - - ">="
79
79
  - !ruby/object:Gem::Version
80
- version: '10.0'
80
+ version: 12.3.3
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: minitest
83
83
  requirement: !ruby/object:Gem::Requirement
@@ -309,7 +309,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
309
309
  requirements:
310
310
  - - ">="
311
311
  - !ruby/object:Gem::Version
312
- version: 2.5.0
312
+ version: 2.6.0
313
313
  required_rubygems_version: !ruby/object:Gem::Requirement
314
314
  requirements:
315
315
  - - ">="