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 +4 -4
- data/CHANGELOG.md +21 -0
- data/README.md +1 -1
- data/code_safety.yml +41 -35
- data/lib/ndr_support/daterange.rb +29 -13
- data/lib/ndr_support/ourdate/build_datetime.rb +36 -0
- data/lib/ndr_support/ourdate.rb +3 -32
- data/lib/ndr_support/ourtime.rb +2 -2
- data/lib/ndr_support/safe_path.rb +1 -0
- data/lib/ndr_support/string/conversions.rb +1 -1
- data/lib/ndr_support/utf8_encoding/control_characters.rb +0 -2
- data/lib/ndr_support/utf8_encoding/force_binary.rb +0 -2
- data/lib/ndr_support/utf8_encoding/object_support.rb +0 -2
- data/lib/ndr_support/version.rb +1 -1
- data/ndr_support.gemspec +3 -5
- data/test/daterange_test.rb +39 -5
- data/test/string/conversions_test.rb +3 -3
- data/test/threat_scanner_test.rb +2 -0
- metadata +5 -5
- data/lib/ndr_support/integer/julian_date_conversions.rb +0 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 528b4fe69aceac0e252cab457de3d2b01436ef6f188308858e014a4ceee43299
|
4
|
+
data.tar.gz: c15d6e7487920ccf74d4ff1711cbc062346de5c6457c7d9552b216536428e5e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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 [](https://github.com/publichealthengland/ndr_support/actions?query=workflow%3Atest) [](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:
|
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:
|
40
|
-
safe_revision:
|
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:
|
72
|
-
safe_revision:
|
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:
|
104
|
-
safe_revision:
|
105
|
-
lib/ndr_support/
|
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:
|
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:
|
128
|
-
safe_revision:
|
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:
|
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:
|
152
|
-
safe_revision:
|
157
|
+
reviewed_by: ollietulloch
|
158
|
+
safe_revision: '09b3f97fb4c1afc88d0d070c39796b1f60c39d25'
|
153
159
|
lib/ndr_support/utf8_encoding/force_binary.rb:
|
154
160
|
comments:
|
155
|
-
reviewed_by:
|
156
|
-
safe_revision:
|
161
|
+
reviewed_by: ollietulloch
|
162
|
+
safe_revision: '09b3f97fb4c1afc88d0d070c39796b1f60c39d25'
|
157
163
|
lib/ndr_support/utf8_encoding/object_support.rb:
|
158
164
|
comments:
|
159
|
-
reviewed_by:
|
160
|
-
safe_revision:
|
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:
|
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:
|
176
|
-
safe_revision:
|
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:
|
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:
|
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:
|
256
|
-
safe_revision:
|
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/
|
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?
|
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
|
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 =~
|
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
|
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 =
|
164
|
+
@date1 = @date2 = nil
|
153
165
|
else
|
154
|
-
da.sort!
|
155
|
-
@date1
|
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
|
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
|
data/lib/ndr_support/ourdate.rb
CHANGED
@@ -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
|
76
|
-
@thedate.nil?
|
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)
|
data/lib/ndr_support/ourtime.rb
CHANGED
@@ -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
|
-
|
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
|
data/lib/ndr_support/version.rb
CHANGED
data/ndr_support.gemspec
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
lib = File.expand_path('
|
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 =~
|
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.
|
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'
|
data/test/daterange_test.rb
CHANGED
@@ -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
|
28
|
-
d =
|
29
|
-
dr = Daterange.new
|
30
|
-
dr2 = Daterange.new
|
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?
|
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
|
361
|
-
assert_equal ymd
|
362
|
-
assert_equal ymd
|
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)
|
data/test/threat_scanner_test.rb
CHANGED
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.
|
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-
|
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.
|
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.
|
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
|