ndr_support 5.7.1 → 5.8.3

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