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 +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 [![Build Status](https://
|
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:
|
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
|