ndr_support 5.7.1 → 5.8.3

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: 8e95a05bf2c1dd28e2bfe10716b35e761c5db50ac58947f168585692b588c499
4
- data.tar.gz: 49ed22feef4c4a22ea2094883263eaf81d24a497cff6d0977fa23c6889518e77
3
+ metadata.gz: 528b4fe69aceac0e252cab457de3d2b01436ef6f188308858e014a4ceee43299
4
+ data.tar.gz: c15d6e7487920ccf74d4ff1711cbc062346de5c6457c7d9552b216536428e5e3
5
5
  SHA512:
6
- metadata.gz: aaa5b6b7e04962f01738e60815f338c3c54ca38c5862ab5b5a373a9f9628712670d75db1f7bae9e2e2830e6cf511a36b9bc0ec304822352e0e64b94caa375160
7
- data.tar.gz: e204589b6cd0951139bea6d2d96d23d4ec0bfe7d0c2be501bdd0ed1668802d4dbb3a7866e73242d004bce25cfc9d8407b934051a3c5afe29b101fe813cee49d5
6
+ metadata.gz: 5759f651f4ddea307afb890f7163972da66d3704b8d904b77ff60a88ffd77704419a1347ee96425c3fe5a60f1c4e558cc69c9411630d6e6121e54ad03148b842
7
+ data.tar.gz: 5837a1948066929be0486edc36f3571bffefb7b086f88a7d2f9c1bb047a3df1970221d97e683a3dcb89517f17822d60967f2f25381b85a18384e09d444860b7f
data/CHANGELOG.md CHANGED
@@ -1,6 +1,27 @@
1
1
  ## [Unreleased]
2
2
  *no unreleased changes*
3
3
 
4
+ ## 5.8.3 / 2021-11-25
5
+ ## Fixed
6
+ * remove circular dependencies between Ourdate and Daterange
7
+
8
+ ## 5.8.2 / 2021-10-11
9
+ ## Fixed
10
+ * fix issue with blank date causing error for dateranges
11
+
12
+ ## 5.8.1 / 2021-10-11
13
+ ### Patched
14
+ * Added fix for failing threat scanner tests (#22)
15
+
16
+ ## 5.8.0 / 2021-04-19
17
+ ## Added
18
+
19
+ * Add ability to disable date reversing in Daterange
20
+
21
+ ## Fixed
22
+ * Support Ruby 2.6-3.0.
23
+ * Fix ruby warnings
24
+
4
25
  ## 5.7.1 / 2021-01-03
5
26
  ## Fixed
6
27
  * Postcodeize old Newport postcodes
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: brian.shand
20
- safe_revision: f7cfb534917c991a6e1811f1eb4cff2083c141d2
26
+ safe_revision: efa8b316f7ee8169baf8b74b4d8e9d3bf02499d5
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
@@ -68,8 +74,8 @@ file safety:
68
74
  safe_revision: c1158eccb843b637b4dd82815dc7c081f12b93e4
69
75
  lib/ndr_support/daterange.rb:
70
76
  comments:
71
- reviewed_by: ollietulloch
72
- safe_revision: 9a4b8e53f477725c2c2be5000b3c9e66f07d7389
77
+ reviewed_by: brian.shand
78
+ safe_revision: 9d19593cc45a9f1724c4b34a1a05a5ff48003084
73
79
  lib/ndr_support/hash.rb:
74
80
  comments:
75
81
  reviewed_by: pauleves
@@ -78,10 +84,6 @@ file safety:
78
84
  comments:
79
85
  reviewed_by: josh.pencheon
80
86
  safe_revision: 2685f35c907af6968a69eabb5ab9424b490d0f40
81
- lib/ndr_support/integer/julian_date_conversions.rb:
82
- comments:
83
- reviewed_by: josh.pencheon
84
- safe_revision: 2685f35c907af6968a69eabb5ab9424b490d0f40
85
87
  lib/ndr_support/integer/rounding.rb:
86
88
  comments:
87
89
  reviewed_by: josh.pencheon
@@ -100,12 +102,16 @@ file safety:
100
102
  safe_revision: 50a4293953f9ae227823c390b069a3ed4825074c
101
103
  lib/ndr_support/ourdate.rb:
102
104
  comments:
103
- reviewed_by: pauleves
104
- safe_revision: a18fb5c6c360806a177a9c5584458586e90b3530
105
- lib/ndr_support/ourtime.rb:
105
+ reviewed_by: brian.shand
106
+ safe_revision: 9d19593cc45a9f1724c4b34a1a05a5ff48003084
107
+ lib/ndr_support/ourdate/build_datetime.rb:
106
108
  comments:
107
109
  reviewed_by: brian.shand
108
- safe_revision: 73527378c53b7ac00d1037155572fe3f01324992
110
+ safe_revision: 9d19593cc45a9f1724c4b34a1a05a5ff48003084
111
+ lib/ndr_support/ourtime.rb:
112
+ comments:
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,8 +130,8 @@ 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
137
  reviewed_by: brianshand
@@ -133,7 +139,7 @@ file safety:
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
@@ -148,20 +154,20 @@ file safety:
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: brian.shand
164
- safe_revision: f7cfb534917c991a6e1811f1eb4cff2083c141d2
170
+ safe_revision: efa8b316f7ee8169baf8b74b4d8e9d3bf02499d5
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: brianshand
176
- safe_revision: befa1d4f27448d5be4e133f442c2b5fbac7d8f25
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
@@ -245,15 +251,15 @@ file safety:
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
@@ -1,6 +1,6 @@
1
1
  require 'active_support/core_ext/enumerable'
2
2
  require 'active_support/time'
3
- require 'ndr_support/integer/julian_date_conversions'
3
+ require 'ndr_support/ourdate/build_datetime'
4
4
 
5
5
  # Our "vague date" class, which can represent a single date or a date range.
6
6
  class Daterange
@@ -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
@@ -175,7 +188,10 @@ class Daterange
175
188
  j1 = j2 = Date.new(parts[0], parts[1], parts[2]).jd
176
189
  end
177
190
 
178
- [j1.jd_to_datetime, j2.jd_to_datetime]
191
+ [j1, j2].collect do |jd|
192
+ date = Date.jd(jd) # Julian date number to Ruby Date
193
+ Ourdate.build_datetime(date.year, date.month, date.day)
194
+ end
179
195
  rescue
180
196
  nil
181
197
  end
@@ -0,0 +1,36 @@
1
+ require 'active_record'
2
+ require 'active_support/time'
3
+
4
+ class Ourdate
5
+ # Construct a daylight saving time safe datetime, with arguments
6
+ #--
7
+ # FIXME: Note that the arguments should be numbers, not strings -- it works
8
+ # with strings arguments only after the 1970 epoch; before, it returns nil.
9
+ #++
10
+ def self.build_datetime(year, month = 1, day = 1, hour = 0, min = 0, sec = 0, usec = 0)
11
+ return nil if year.nil?
12
+
13
+ if ActiveRecord::Base.default_timezone == :local
14
+ # Time.local_time(year, month, day, hour, min, sec, usec).to_datetime
15
+ # Behave like oracle_adapter.rb
16
+ seconds = sec + Rational(usec, 10**6)
17
+ time_array = [year, month, day, hour, min, seconds]
18
+ begin
19
+ #--
20
+ # TODO: Fails unit tests unless we .to_datetime here
21
+ # but the risk is we lose the usec component unnecesssarily.
22
+ # Investigate removing .to_datetime below.
23
+ #++
24
+ Time.send(ActiveRecord::Base.default_timezone, *time_array).to_datetime
25
+ rescue
26
+ zone_offset = ActiveRecord::Base.default_timezone == :local ? DateTime.now.offset : 0
27
+ # Append zero calendar reform start to account for dates skipped by calendar reform
28
+ DateTime.new(*time_array[0..5] << zone_offset << 0) rescue nil
29
+ end
30
+ else
31
+ # Only supports fake GMT time -- needs improvement
32
+ # Maybe use Time.zone.local or Time.local_time(year, month, day)
33
+ Time.utc(year, month, day, hour, min, sec, usec).to_datetime
34
+ end
35
+ end
36
+ end
@@ -1,5 +1,6 @@
1
1
  require 'active_record'
2
2
  require 'active_support/time'
3
+ require 'ndr_support/ourdate/build_datetime'
3
4
  require 'ndr_support/date_and_time_extensions'
4
5
  require 'ndr_support/daterange'
5
6
 
@@ -25,36 +26,6 @@ class Ourdate
25
26
  end
26
27
  end
27
28
 
28
- # Construct a daylight saving time safe datetime, with arguments
29
- #--
30
- # FIXME: Note that the arguments should be numbers, not strings -- it works
31
- # with strings arguments only after the 1970 epoch; before, it returns nil.
32
- #++
33
- def self.build_datetime(year, month = 1, day = 1, hour = 0, min = 0, sec = 0, usec = 0)
34
- if ActiveRecord::Base.default_timezone == :local
35
- # Time.local_time(year, month, day, hour, min, sec, usec).to_datetime
36
- # Behave like oracle_adapter.rb
37
- seconds = sec + Rational(usec, 10**6)
38
- time_array = [year, month, day, hour, min, seconds]
39
- begin
40
- #--
41
- # TODO: Fails unit tests unless we .to_datetime here
42
- # but the risk is we lose the usec component unnecesssarily.
43
- # Investigate removing .to_datetime below.
44
- #++
45
- Time.send(ActiveRecord::Base.default_timezone, *time_array).to_datetime
46
- rescue
47
- zone_offset = ActiveRecord::Base.default_timezone == :local ? DateTime.now.offset : 0
48
- # Append zero calendar reform start to account for dates skipped by calendar reform
49
- DateTime.new(*time_array[0..5] << zone_offset << 0) rescue nil
50
- end
51
- else
52
- # Only supports fake GMT time -- needs improvement
53
- # Maybe use Time.zone.local or Time.local_time(year, month, day)
54
- Time.utc(year, month, day, hour, min, sec, usec).to_datetime
55
- end
56
- end
57
-
58
29
  def initialize(x = nil)
59
30
  if x.is_a?(Date)
60
31
  @thedate = x
@@ -72,8 +43,8 @@ class Ourdate
72
43
  end
73
44
 
74
45
  def empty?
75
- # An unspecified date will be empty. A valid or invalid date will not.
76
- @thedate.nil? && @source.blank?
46
+ # An unspecified date will be empty. A valid date will not.
47
+ @thedate.nil?
77
48
  end
78
49
 
79
50
  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
@@ -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,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.1'
6
+ VERSION = '5.8.3'
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']
@@ -26,7 +24,7 @@ Gem::Specification.new do |spec|
26
24
  spec.add_development_dependency 'bundler'
27
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
 
@@ -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.1
4
+ version: 5.8.3
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: 2021-01-03 00:00:00.000000000 Z
11
+ date: 2021-11-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -249,12 +249,12 @@ files:
249
249
  - lib/ndr_support/daterange.rb
250
250
  - lib/ndr_support/hash.rb
251
251
  - lib/ndr_support/integer/calculations.rb
252
- - lib/ndr_support/integer/julian_date_conversions.rb
253
252
  - lib/ndr_support/integer/rounding.rb
254
253
  - lib/ndr_support/integer/working_days.rb
255
254
  - lib/ndr_support/nil.rb
256
255
  - lib/ndr_support/obfuscator.rb
257
256
  - lib/ndr_support/ourdate.rb
257
+ - lib/ndr_support/ourdate/build_datetime.rb
258
258
  - lib/ndr_support/ourtime.rb
259
259
  - lib/ndr_support/password.rb
260
260
  - lib/ndr_support/password/constants.rb
@@ -309,14 +309,14 @@ 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
  - - ">="
316
316
  - !ruby/object:Gem::Version
317
317
  version: '0'
318
318
  requirements: []
319
- rubygems_version: 3.0.3
319
+ rubygems_version: 3.1.6
320
320
  signing_key:
321
321
  specification_version: 4
322
322
  summary: NDR Support library
@@ -1,14 +0,0 @@
1
- require 'ndr_support/ourdate'
2
-
3
- # Extend Integer for use in our Daterange class
4
- class Integer
5
- # Julian date number to Ruby Date
6
- def jd_to_date
7
- Date.jd(self)
8
- end
9
-
10
- def jd_to_datetime
11
- date = jd_to_date
12
- Ourdate.build_datetime(date.year, date.month, date.day)
13
- end
14
- end