ndr_support 5.8.2 → 5.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +17 -2
- data/code_safety.yml +101 -93
- data/gemfiles/Gemfile.rails60 +2 -2
- data/gemfiles/Gemfile.rails61 +6 -0
- data/gemfiles/Gemfile.rails70 +6 -0
- data/lib/ndr_support/concerns/working_days.rb +9 -0
- data/lib/ndr_support/daterange.rb +5 -2
- data/lib/ndr_support/ourdate/build_datetime.rb +36 -0
- data/lib/ndr_support/ourdate.rb +1 -32
- data/lib/ndr_support/safe_path.rb +6 -7
- data/lib/ndr_support/version.rb +1 -1
- data/lib/ndr_support/yaml/serialization_migration.rb +10 -1
- data/ndr_support.gemspec +3 -3
- data/test/regexp_range_test.rb +2 -1
- data/test/yaml/serialization_test.rb +4 -6
- metadata +9 -27
- data/lib/ndr_support/integer/julian_date_conversions.rb +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dc18cac2fe1d6de32316e751a1f4f9cd8050bdb2c3972e14c62a490a5cb10f15
|
4
|
+
data.tar.gz: 627714611718a64058082b873dddd855b6b6434395082d78381e8ad1954f7da6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f2849f48fa7316c6ae326f87b17b95d225a975716d80ad5ae56e4b7a0b01b2f6bf82976c65070b144a5833cb7765516f383c378cccd96a9c60b52daa4e12a31
|
7
|
+
data.tar.gz: 862f14d702ebaccd054860aeaae4b93fac9b724dfeeb99581cd8ff0967169a3c267cd205e0ee1893c8b86d03f834db6d1afd7bed59e17f2881a2e80e75824f3c
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,21 @@
|
|
1
1
|
## [Unreleased]
|
2
|
-
*
|
2
|
+
* No unreleased changes
|
3
|
+
|
4
|
+
## 5.9.0 / 2022-04-26
|
5
|
+
## Fixed
|
6
|
+
* Support Rails 6.1
|
7
|
+
* Support Ruby 3.1
|
8
|
+
|
9
|
+
## Changed
|
10
|
+
* Drop support for Ruby 2.6
|
11
|
+
|
12
|
+
## 5.8.4 / 2021-12-27
|
13
|
+
## Fixed
|
14
|
+
* Support 2023 public holidays
|
15
|
+
|
16
|
+
## 5.8.3 / 2021-11-25
|
17
|
+
## Fixed
|
18
|
+
* remove circular dependencies between Ourdate and Daterange
|
3
19
|
|
4
20
|
## 5.8.2 / 2021-10-11
|
5
21
|
## Fixed
|
@@ -11,7 +27,6 @@
|
|
11
27
|
|
12
28
|
## 5.8.0 / 2021-04-19
|
13
29
|
## Added
|
14
|
-
|
15
30
|
* Add ability to disable date reversing in Daterange
|
16
31
|
|
17
32
|
## Fixed
|
data/code_safety.yml
CHANGED
@@ -1,115 +1,123 @@
|
|
1
1
|
---
|
2
2
|
file safety:
|
3
3
|
".github/CODEOWNERS":
|
4
|
-
comments:
|
4
|
+
comments:
|
5
5
|
reviewed_by: ollietulloch
|
6
6
|
safe_revision: 993f7719b57eb6ddd8dffa7230ed9ffc69f48749
|
7
7
|
".github/workflows/lint.yml":
|
8
|
-
comments:
|
8
|
+
comments:
|
9
9
|
reviewed_by: ollietulloch
|
10
10
|
safe_revision: 993f7719b57eb6ddd8dffa7230ed9ffc69f48749
|
11
11
|
".github/workflows/test.yml":
|
12
|
-
comments:
|
13
|
-
reviewed_by:
|
14
|
-
safe_revision:
|
12
|
+
comments:
|
13
|
+
reviewed_by: brian.shand
|
14
|
+
safe_revision: e91fab5ac8474b001ca3805c6cce8eefa6b49f2d
|
15
15
|
".gitignore":
|
16
|
-
comments:
|
16
|
+
comments:
|
17
17
|
reviewed_by: josh.pencheon
|
18
18
|
safe_revision: a02f14cbf1fc36fbaf820365fdedfdc9af326db1
|
19
19
|
".rubocop.yml":
|
20
|
-
comments:
|
20
|
+
comments:
|
21
21
|
reviewed_by: josh.pencheon
|
22
22
|
safe_revision: a02f14cbf1fc36fbaf820365fdedfdc9af326db1
|
23
23
|
CHANGELOG.md:
|
24
|
-
comments:
|
25
|
-
reviewed_by:
|
26
|
-
safe_revision:
|
24
|
+
comments:
|
25
|
+
reviewed_by: brian.shand
|
26
|
+
safe_revision: '0317988580be42bc3a3b64680e340223268c525f'
|
27
27
|
CODE_OF_CONDUCT.md:
|
28
|
-
comments:
|
28
|
+
comments:
|
29
29
|
reviewed_by: timgentry
|
30
30
|
safe_revision: c752769b91c0e782be0acf44e56bbc066a275365
|
31
31
|
Gemfile:
|
32
|
-
comments:
|
32
|
+
comments:
|
33
33
|
reviewed_by: timgentry
|
34
34
|
safe_revision: 6a7c3764e5315981070eba27b9f0be9d9182476c
|
35
35
|
Guardfile:
|
36
|
-
comments:
|
36
|
+
comments:
|
37
37
|
reviewed_by: timgentry
|
38
38
|
safe_revision: e33e9dae7f38bc449ce9276515a539836dbbbd53
|
39
39
|
LICENSE.txt:
|
40
|
-
comments:
|
40
|
+
comments:
|
41
41
|
reviewed_by: timgentry
|
42
42
|
safe_revision: 90328cca8494539257e192a63b240a91c89f0616
|
43
43
|
README.md:
|
44
|
-
comments:
|
44
|
+
comments:
|
45
45
|
reviewed_by: ollietulloch
|
46
46
|
safe_revision: 993f7719b57eb6ddd8dffa7230ed9ffc69f48749
|
47
47
|
Rakefile:
|
48
|
-
comments:
|
48
|
+
comments:
|
49
49
|
reviewed_by: timgentry
|
50
50
|
safe_revision: e33e9dae7f38bc449ce9276515a539836dbbbd53
|
51
51
|
gemfiles/Gemfile.rails52:
|
52
|
-
comments:
|
52
|
+
comments:
|
53
53
|
reviewed_by: josh.pencheon
|
54
54
|
safe_revision: 8a6bedae77d33d0db1b67eaed7972870b6afc993
|
55
55
|
gemfiles/Gemfile.rails60:
|
56
|
-
comments:
|
57
|
-
reviewed_by:
|
58
|
-
safe_revision:
|
56
|
+
comments:
|
57
|
+
reviewed_by: brian.shand
|
58
|
+
safe_revision: 16254a4332aab074a27c8e13859dc4712e707122
|
59
|
+
gemfiles/Gemfile.rails61:
|
60
|
+
comments:
|
61
|
+
reviewed_by: brian.shand
|
62
|
+
safe_revision: 16254a4332aab074a27c8e13859dc4712e707122
|
63
|
+
gemfiles/Gemfile.rails70:
|
64
|
+
comments:
|
65
|
+
reviewed_by: brian.shand
|
66
|
+
safe_revision: 16254a4332aab074a27c8e13859dc4712e707122
|
59
67
|
lib/ndr_support.rb:
|
60
|
-
comments:
|
68
|
+
comments:
|
61
69
|
reviewed_by: brian.shand
|
62
70
|
safe_revision: 44fbdf72f47f4022c7dc9148150ebc18589dac8f
|
63
71
|
lib/ndr_support/array.rb:
|
64
|
-
comments:
|
72
|
+
comments:
|
65
73
|
reviewed_by: pauleves
|
66
74
|
safe_revision: 4a4ed24d2cfe7e1736baadf4cf6e0fece6823be1
|
67
75
|
lib/ndr_support/concerns/working_days.rb:
|
68
|
-
comments:
|
69
|
-
reviewed_by:
|
70
|
-
safe_revision:
|
76
|
+
comments:
|
77
|
+
reviewed_by: brian.shand
|
78
|
+
safe_revision: 42b82bdc466503800c021263899cdbbe444b78b0
|
71
79
|
lib/ndr_support/date_and_time_extensions.rb:
|
72
|
-
comments:
|
80
|
+
comments:
|
73
81
|
reviewed_by: josh.pencheon
|
74
82
|
safe_revision: c1158eccb843b637b4dd82815dc7c081f12b93e4
|
75
83
|
lib/ndr_support/daterange.rb:
|
76
|
-
comments:
|
77
|
-
reviewed_by:
|
78
|
-
safe_revision:
|
84
|
+
comments:
|
85
|
+
reviewed_by: brian.shand
|
86
|
+
safe_revision: 9d19593cc45a9f1724c4b34a1a05a5ff48003084
|
79
87
|
lib/ndr_support/hash.rb:
|
80
|
-
comments:
|
88
|
+
comments:
|
81
89
|
reviewed_by: pauleves
|
82
90
|
safe_revision: 506a317e59d0ccb5b32d813b74d822f35a55cea9
|
83
91
|
lib/ndr_support/integer/calculations.rb:
|
84
|
-
comments:
|
92
|
+
comments:
|
85
93
|
reviewed_by: josh.pencheon
|
86
94
|
safe_revision: 2685f35c907af6968a69eabb5ab9424b490d0f40
|
87
|
-
lib/ndr_support/integer/julian_date_conversions.rb:
|
88
|
-
comments:
|
89
|
-
reviewed_by: ollietulloch
|
90
|
-
safe_revision: '09b3f97fb4c1afc88d0d070c39796b1f60c39d25'
|
91
95
|
lib/ndr_support/integer/rounding.rb:
|
92
|
-
comments:
|
96
|
+
comments:
|
93
97
|
reviewed_by: josh.pencheon
|
94
98
|
safe_revision: 2685f35c907af6968a69eabb5ab9424b490d0f40
|
95
99
|
lib/ndr_support/integer/working_days.rb:
|
96
|
-
comments:
|
100
|
+
comments:
|
97
101
|
reviewed_by: josh.pencheon
|
98
102
|
safe_revision: c1158eccb843b637b4dd82815dc7c081f12b93e4
|
99
103
|
lib/ndr_support/nil.rb:
|
100
|
-
comments:
|
104
|
+
comments:
|
101
105
|
reviewed_by: pauleves
|
102
106
|
safe_revision: 4a4ed24d2cfe7e1736baadf4cf6e0fece6823be1
|
103
107
|
lib/ndr_support/obfuscator.rb:
|
104
|
-
comments:
|
108
|
+
comments:
|
105
109
|
reviewed_by: brian.shand
|
106
110
|
safe_revision: 50a4293953f9ae227823c390b069a3ed4825074c
|
107
111
|
lib/ndr_support/ourdate.rb:
|
108
|
-
comments:
|
109
|
-
reviewed_by:
|
110
|
-
safe_revision:
|
112
|
+
comments:
|
113
|
+
reviewed_by: brian.shand
|
114
|
+
safe_revision: 9d19593cc45a9f1724c4b34a1a05a5ff48003084
|
115
|
+
lib/ndr_support/ourdate/build_datetime.rb:
|
116
|
+
comments:
|
117
|
+
reviewed_by: brian.shand
|
118
|
+
safe_revision: 9d19593cc45a9f1724c4b34a1a05a5ff48003084
|
111
119
|
lib/ndr_support/ourtime.rb:
|
112
|
-
comments:
|
120
|
+
comments:
|
113
121
|
reviewed_by: ollietulloch
|
114
122
|
safe_revision: '09b3f97fb4c1afc88d0d070c39796b1f60c39d25'
|
115
123
|
lib/ndr_support/password.rb:
|
@@ -121,107 +129,107 @@ file safety:
|
|
121
129
|
reviewed_by: josh.pencheon
|
122
130
|
safe_revision: f5d1ba50d378286c0541f300d73844240e2eb7c1
|
123
131
|
lib/ndr_support/regexp_range.rb:
|
124
|
-
comments:
|
132
|
+
comments:
|
125
133
|
reviewed_by: pauleves
|
126
134
|
safe_revision: f9341d1c7f797f9fe81af937c383d41c23872b2f
|
127
135
|
lib/ndr_support/safe_file.rb:
|
128
|
-
comments:
|
136
|
+
comments:
|
129
137
|
reviewed_by: josh.pencheon
|
130
138
|
safe_revision: 2685f35c907af6968a69eabb5ab9424b490d0f40
|
131
139
|
lib/ndr_support/safe_path.rb:
|
132
|
-
comments:
|
133
|
-
reviewed_by:
|
134
|
-
safe_revision:
|
140
|
+
comments:
|
141
|
+
reviewed_by: brian.shand
|
142
|
+
safe_revision: f4f7cb0803ea34a2f1ba83495d8bcbd942786bce
|
135
143
|
lib/ndr_support/string/cleaning.rb:
|
136
|
-
comments:
|
144
|
+
comments:
|
137
145
|
reviewed_by: brianshand
|
138
146
|
safe_revision: b7b033ad9773cc9037c408a7763b113d31cbf191
|
139
147
|
lib/ndr_support/string/conversions.rb:
|
140
|
-
comments:
|
148
|
+
comments:
|
141
149
|
reviewed_by: ollietulloch
|
142
150
|
safe_revision: '09b3f97fb4c1afc88d0d070c39796b1f60c39d25'
|
143
151
|
lib/ndr_support/tasks.rb:
|
144
|
-
comments:
|
152
|
+
comments:
|
145
153
|
reviewed_by: timgentry
|
146
154
|
safe_revision: 62337584a32e5c30c2e9af7cd998a9df684885cc
|
147
155
|
lib/ndr_support/threat_scanner.rb:
|
148
|
-
comments:
|
156
|
+
comments:
|
149
157
|
reviewed_by: brianshand
|
150
158
|
safe_revision: befa1d4f27448d5be4e133f442c2b5fbac7d8f25
|
151
159
|
lib/ndr_support/utf8_encoding.rb:
|
152
|
-
comments:
|
160
|
+
comments:
|
153
161
|
reviewed_by: josh.pencheon
|
154
162
|
safe_revision: 8e024a4bacfd36e172aad4b800f1960faae0b4b6
|
155
163
|
lib/ndr_support/utf8_encoding/control_characters.rb:
|
156
|
-
comments:
|
164
|
+
comments:
|
157
165
|
reviewed_by: ollietulloch
|
158
166
|
safe_revision: '09b3f97fb4c1afc88d0d070c39796b1f60c39d25'
|
159
167
|
lib/ndr_support/utf8_encoding/force_binary.rb:
|
160
|
-
comments:
|
168
|
+
comments:
|
161
169
|
reviewed_by: ollietulloch
|
162
170
|
safe_revision: '09b3f97fb4c1afc88d0d070c39796b1f60c39d25'
|
163
171
|
lib/ndr_support/utf8_encoding/object_support.rb:
|
164
|
-
comments:
|
172
|
+
comments:
|
165
173
|
reviewed_by: ollietulloch
|
166
174
|
safe_revision: '09b3f97fb4c1afc88d0d070c39796b1f60c39d25'
|
167
175
|
lib/ndr_support/version.rb:
|
168
|
-
comments:
|
169
|
-
reviewed_by:
|
170
|
-
safe_revision:
|
176
|
+
comments:
|
177
|
+
reviewed_by: brian.shand
|
178
|
+
safe_revision: '0317988580be42bc3a3b64680e340223268c525f'
|
171
179
|
lib/ndr_support/working_days.rb:
|
172
|
-
comments:
|
180
|
+
comments:
|
173
181
|
reviewed_by: josh.pencheon
|
174
182
|
safe_revision: c1158eccb843b637b4dd82815dc7c081f12b93e4
|
175
183
|
lib/ndr_support/yaml/serialization_migration.rb:
|
176
|
-
comments:
|
177
|
-
reviewed_by:
|
178
|
-
safe_revision:
|
184
|
+
comments:
|
185
|
+
reviewed_by: brian.shand
|
186
|
+
safe_revision: f4f7cb0803ea34a2f1ba83495d8bcbd942786bce
|
179
187
|
ndr_support.gemspec:
|
180
|
-
comments:
|
181
|
-
reviewed_by:
|
182
|
-
safe_revision:
|
188
|
+
comments:
|
189
|
+
reviewed_by: brian.shand
|
190
|
+
safe_revision: e91fab5ac8474b001ca3805c6cce8eefa6b49f2d
|
183
191
|
test/array_test.rb:
|
184
|
-
comments:
|
192
|
+
comments:
|
185
193
|
reviewed_by: timgentry
|
186
194
|
safe_revision: 2a5d30674dc9dde336e1dbbbf3c8a98905647432
|
187
195
|
test/concerns/working_days_test.rb:
|
188
|
-
comments:
|
196
|
+
comments:
|
189
197
|
reviewed_by: josh.pencheon
|
190
198
|
safe_revision: fe6c3beff445e3c84ed0c89f08e1ab10bfb00587
|
191
199
|
test/daterange_test.rb:
|
192
|
-
comments:
|
200
|
+
comments:
|
193
201
|
reviewed_by: ollietulloch
|
194
202
|
safe_revision: ccca1dc67e3742efb154e01e01243e7b38180936
|
195
203
|
test/hash_test.rb:
|
196
|
-
comments:
|
204
|
+
comments:
|
197
205
|
reviewed_by: timgentry
|
198
206
|
safe_revision: 2a5d30674dc9dde336e1dbbbf3c8a98905647432
|
199
207
|
test/integer/calculations_test.rb:
|
200
|
-
comments:
|
208
|
+
comments:
|
201
209
|
reviewed_by: josh.pencheon
|
202
210
|
safe_revision: 2685f35c907af6968a69eabb5ab9424b490d0f40
|
203
211
|
test/integer/rounding_test.rb:
|
204
|
-
comments:
|
212
|
+
comments:
|
205
213
|
reviewed_by: josh.pencheon
|
206
214
|
safe_revision: 2685f35c907af6968a69eabb5ab9424b490d0f40
|
207
215
|
test/integer/working_days_test.rb:
|
208
|
-
comments:
|
216
|
+
comments:
|
209
217
|
reviewed_by: josh.pencheon
|
210
218
|
safe_revision: c1158eccb843b637b4dd82815dc7c081f12b93e4
|
211
219
|
test/nil_test.rb:
|
212
|
-
comments:
|
220
|
+
comments:
|
213
221
|
reviewed_by: timgentry
|
214
222
|
safe_revision: 2a5d30674dc9dde336e1dbbbf3c8a98905647432
|
215
223
|
test/obfuscator_test.rb:
|
216
|
-
comments:
|
224
|
+
comments:
|
217
225
|
reviewed_by: brian.shand
|
218
226
|
safe_revision: 50a4293953f9ae227823c390b069a3ed4825074c
|
219
227
|
test/ourdate_test.rb:
|
220
|
-
comments:
|
228
|
+
comments:
|
221
229
|
reviewed_by: josh.pencheon
|
222
230
|
safe_revision: 7c32f5a80c1fb7aaf6e850d4b0651a7b47640e15
|
223
231
|
test/ourtime_test.rb:
|
224
|
-
comments:
|
232
|
+
comments:
|
225
233
|
reviewed_by: brian.shand
|
226
234
|
safe_revision: b9bc1e18464a27f84e69ebea083dd6a8d351c8cb
|
227
235
|
test/password_test.rb:
|
@@ -229,50 +237,50 @@ file safety:
|
|
229
237
|
reviewed_by: josh.pencheon
|
230
238
|
safe_revision: f5d1ba50d378286c0541f300d73844240e2eb7c1
|
231
239
|
test/regexp_range_test.rb:
|
232
|
-
comments:
|
233
|
-
reviewed_by:
|
234
|
-
safe_revision:
|
240
|
+
comments:
|
241
|
+
reviewed_by: brian.shand
|
242
|
+
safe_revision: f4f7cb0803ea34a2f1ba83495d8bcbd942786bce
|
235
243
|
test/resources/filesystem_paths.yml:
|
236
|
-
comments:
|
244
|
+
comments:
|
237
245
|
reviewed_by: timgentry
|
238
246
|
safe_revision: 81061f85ccdf8933adc7f104d7eeaef1e2d71e26
|
239
247
|
test/safe_file_test.rb:
|
240
|
-
comments:
|
248
|
+
comments:
|
241
249
|
reviewed_by: josh.pencheon
|
242
250
|
safe_revision: 24ba08d3a8f4b284678244aaffa2aaa347256900
|
243
251
|
test/safe_path_test.rb:
|
244
|
-
comments:
|
252
|
+
comments:
|
245
253
|
reviewed_by: timgentry
|
246
254
|
safe_revision: b562d0c15ff1b1d565522a47e6bae47ea09706f0
|
247
255
|
test/string/cleaning_test.rb:
|
248
|
-
comments:
|
256
|
+
comments:
|
249
257
|
reviewed_by: brianshand
|
250
258
|
safe_revision: b7b033ad9773cc9037c408a7763b113d31cbf191
|
251
259
|
test/string/conversions_test.rb:
|
252
|
-
comments:
|
260
|
+
comments:
|
253
261
|
reviewed_by: ollietulloch
|
254
262
|
safe_revision: '09b3f97fb4c1afc88d0d070c39796b1f60c39d25'
|
255
263
|
test/test_helper.rb:
|
256
|
-
comments:
|
264
|
+
comments:
|
257
265
|
reviewed_by: josh.pencheon
|
258
266
|
safe_revision: 34ae80f2952f0bfd18688541862774cbaaa6c5f5
|
259
267
|
test/threat_scanner_test.rb:
|
260
|
-
comments:
|
268
|
+
comments:
|
261
269
|
reviewed_by: ollietulloch
|
262
270
|
safe_revision: fbb6ef9804040aa2e38257d9f5c487bde18a490d
|
263
271
|
test/utf8_encoding/control_characters_test.rb:
|
264
|
-
comments:
|
272
|
+
comments:
|
265
273
|
reviewed_by: timgentry
|
266
274
|
safe_revision: d210b982841611381a0df02d8f2db9c13e41e42f
|
267
275
|
test/utf8_encoding/force_binary_test.rb:
|
268
|
-
comments:
|
276
|
+
comments:
|
269
277
|
reviewed_by: timgentry
|
270
278
|
safe_revision: 29595e6431587ff9b7db6e3ad3abbb3577bff99c
|
271
279
|
test/utf8_encoding_test.rb:
|
272
|
-
comments:
|
280
|
+
comments:
|
273
281
|
reviewed_by: timgentry
|
274
282
|
safe_revision: 2a5d30674dc9dde336e1dbbbf3c8a98905647432
|
275
283
|
test/yaml/serialization_test.rb:
|
276
|
-
comments:
|
277
|
-
reviewed_by:
|
278
|
-
safe_revision:
|
284
|
+
comments:
|
285
|
+
reviewed_by: brian.shand
|
286
|
+
safe_revision: f4f7cb0803ea34a2f1ba83495d8bcbd942786bce
|
data/gemfiles/Gemfile.rails60
CHANGED
@@ -107,6 +107,15 @@ module WorkingDays
|
|
107
107
|
'2022-08-29', # Monday - Summer bank holiday
|
108
108
|
'2022-12-26', # Monday - Boxing Day
|
109
109
|
'2022-12-27', # Tuesday - Christmas Day (substitute day)
|
110
|
+
# 2023
|
111
|
+
'2023-01-02', # Monday - New Year’s Day (substitute day)
|
112
|
+
'2023-04-07', # Friday - Good Friday
|
113
|
+
'2023-04-10', # Monday - Easter Monday
|
114
|
+
'2023-05-01', # Monday - Early May bank holiday
|
115
|
+
'2023-05-29', # Monday - Spring bank holiday
|
116
|
+
'2023-08-28', # Monday - Summer bank holiday
|
117
|
+
'2023-12-25', # Monday - Boxing Day
|
118
|
+
'2023-12-26', # Tuesday - Christmas Day (substitute day)
|
110
119
|
].map { |str| Date.parse(str) }
|
111
120
|
|
112
121
|
def self.check_lookup
|
@@ -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
|
@@ -188,7 +188,10 @@ class Daterange
|
|
188
188
|
j1 = j2 = Date.new(parts[0], parts[1], parts[2]).jd
|
189
189
|
end
|
190
190
|
|
191
|
-
[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
|
192
195
|
rescue
|
193
196
|
nil
|
194
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,38 +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
|
-
return nil if year.nil?
|
35
|
-
|
36
|
-
if ActiveRecord::Base.default_timezone == :local
|
37
|
-
# Time.local_time(year, month, day, hour, min, sec, usec).to_datetime
|
38
|
-
# Behave like oracle_adapter.rb
|
39
|
-
seconds = sec + Rational(usec, 10**6)
|
40
|
-
time_array = [year, month, day, hour, min, seconds]
|
41
|
-
begin
|
42
|
-
#--
|
43
|
-
# TODO: Fails unit tests unless we .to_datetime here
|
44
|
-
# but the risk is we lose the usec component unnecesssarily.
|
45
|
-
# Investigate removing .to_datetime below.
|
46
|
-
#++
|
47
|
-
Time.send(ActiveRecord::Base.default_timezone, *time_array).to_datetime
|
48
|
-
rescue
|
49
|
-
zone_offset = ActiveRecord::Base.default_timezone == :local ? DateTime.now.offset : 0
|
50
|
-
# Append zero calendar reform start to account for dates skipped by calendar reform
|
51
|
-
DateTime.new(*time_array[0..5] << zone_offset << 0) rescue nil
|
52
|
-
end
|
53
|
-
else
|
54
|
-
# Only supports fake GMT time -- needs improvement
|
55
|
-
# Maybe use Time.zone.local or Time.local_time(year, month, day)
|
56
|
-
Time.utc(year, month, day, hour, min, sec, usec).to_datetime
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
29
|
def initialize(x = nil)
|
61
30
|
if x.is_a?(Date)
|
62
31
|
@thedate = x
|
@@ -64,13 +64,12 @@ class SafePath
|
|
64
64
|
# should be used. Attempting to reconfigure with
|
65
65
|
# new settings will raise a security error.
|
66
66
|
def self.configure!(filepath)
|
67
|
-
if defined?(@@fs_paths)
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
end
|
67
|
+
raise SecurityError, 'Attempt to re-assign SafePath config!' if defined?(@@fs_paths)
|
68
|
+
|
69
|
+
File.open(filepath, 'r') do |file|
|
70
|
+
@@fs_paths = YAML.safe_load(ERB.new(file.read).result,
|
71
|
+
permitted_classes: [Regexp], aliases: true)
|
72
|
+
@@fs_paths.freeze
|
74
73
|
end
|
75
74
|
end
|
76
75
|
|
data/lib/ndr_support/version.rb
CHANGED
@@ -8,6 +8,10 @@ module NdrSupport
|
|
8
8
|
module SerializationMigration
|
9
9
|
include UTF8Encoding
|
10
10
|
|
11
|
+
# Classes we routinely allow to be included in our YAML serialisations, automatically
|
12
|
+
# accepted by load_yaml
|
13
|
+
YAML_SAFE_CLASSES = [Date, DateTime, Time, Symbol].freeze
|
14
|
+
|
11
15
|
# Wrapper around: YAML.load(string)
|
12
16
|
def load_yaml(string, coerce_invalid_chars = false)
|
13
17
|
fix_encoding!(string, coerce_invalid_chars)
|
@@ -16,7 +20,12 @@ module NdrSupport
|
|
16
20
|
handle_special_characters!(string, coerce_invalid_chars)
|
17
21
|
fix_encoding!(string, coerce_invalid_chars)
|
18
22
|
|
19
|
-
|
23
|
+
# TODO: Bump NdrSupport major version, and switch to safe_load by default
|
24
|
+
object = if Psych::VERSION.start_with?('3.')
|
25
|
+
Psych.load(string)
|
26
|
+
else
|
27
|
+
Psych.safe_load(string, permitted_classes: YAML_SAFE_CLASSES)
|
28
|
+
end
|
20
29
|
|
21
30
|
# Ensure that any string related to the object
|
22
31
|
# we've loaded is also valid UTF-8.
|
data/ndr_support.gemspec
CHANGED
@@ -24,15 +24,15 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_development_dependency 'bundler'
|
25
25
|
spec.add_development_dependency 'rake', '>= 12.3.3'
|
26
26
|
|
27
|
-
spec.required_ruby_version = '>= 2.
|
27
|
+
spec.required_ruby_version = '>= 2.7'
|
28
28
|
|
29
29
|
# Avoid std-lib minitest (which has different namespace)
|
30
30
|
spec.add_development_dependency 'minitest', '>= 5.0.0'
|
31
31
|
spec.add_development_dependency 'mocha', '~> 1.1'
|
32
32
|
|
33
|
-
spec.add_development_dependency 'ndr_dev_support', '~>
|
33
|
+
spec.add_development_dependency 'ndr_dev_support', '~> 6.0.2'
|
34
|
+
|
34
35
|
spec.add_development_dependency 'guard'
|
35
|
-
spec.add_development_dependency 'listen', '< 3.1' # Bundle 1.12 should be (but isn't) resolving Ruby 2.1 issue
|
36
36
|
spec.add_development_dependency 'guard-rubocop'
|
37
37
|
spec.add_development_dependency 'guard-shell'
|
38
38
|
spec.add_development_dependency 'guard-minitest'
|
data/test/regexp_range_test.rb
CHANGED
@@ -16,7 +16,8 @@ class RegexpRangeTest < Minitest::Test
|
|
16
16
|
regexp_range = RegexpRange.new(0, /^3Ut/)
|
17
17
|
|
18
18
|
# Don't test YAML serialisation directly, but make it can be loaded:
|
19
|
-
deserialized_regexp_range = YAML.
|
19
|
+
deserialized_regexp_range = YAML.safe_load(regexp_range.to_yaml,
|
20
|
+
permitted_classes: [RegexpRange, Regexp])
|
20
21
|
assert_instance_of RegexpRange, deserialized_regexp_range
|
21
22
|
assert_equal regexp_range.begin, deserialized_regexp_range.begin
|
22
23
|
assert_equal regexp_range.end, deserialized_regexp_range.end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
1
|
require 'test_helper'
|
4
2
|
|
5
3
|
class SerializationTest < Minitest::Test
|
@@ -70,7 +68,7 @@ class SerializationTest < Minitest::Test
|
|
70
68
|
|
71
69
|
def assert_times
|
72
70
|
# Dumped by 1.9.3 syck, within era.
|
73
|
-
loaded = YAML.
|
71
|
+
loaded = YAML.safe_load("--- !timestamp 2014-03-01\n", permitted_classes: YAML_SAFE_CLASSES)
|
74
72
|
assert [Date, Time].include?(loaded.class), '1.9.3 era timestamp class'
|
75
73
|
assert_equal 2014, loaded.year, '1.9.3 era timestamp year'
|
76
74
|
assert_equal 3, loaded.month, '1.9.3 era timestamp month'
|
@@ -81,17 +79,17 @@ class SerializationTest < Minitest::Test
|
|
81
79
|
date = Date.new(2014, 3, 1)
|
82
80
|
|
83
81
|
# Dumped by 1.8.7 syck, within era.
|
84
|
-
loaded = YAML.
|
82
|
+
loaded = YAML.safe_load("--- 2014-03-01\n", permitted_classes: YAML_SAFE_CLASSES)
|
85
83
|
assert_equal date, loaded, '1.8.7 era date'
|
86
84
|
|
87
85
|
# Check default formatting does not affect serialisation:
|
88
86
|
assert_equal '01.03.2014', date.to_s
|
89
|
-
assert_equal date, YAML.
|
87
|
+
assert_equal date, YAML.safe_load(date.to_yaml, permitted_classes: YAML_SAFE_CLASSES)
|
90
88
|
end
|
91
89
|
|
92
90
|
def assert_datetimes
|
93
91
|
datetime = DateTime.new(2014, 3, 1, 12, 45, 15)
|
94
|
-
loaded = YAML.
|
92
|
+
loaded = YAML.safe_load(datetime.to_yaml, permitted_classes: YAML_SAFE_CLASSES)
|
95
93
|
|
96
94
|
assert [DateTime, Time].include?(loaded.class), 'datetime class'
|
97
95
|
assert_equal datetime, loaded.to_datetime
|
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.9.0
|
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:
|
11
|
+
date: 2022-04-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -112,20 +112,14 @@ dependencies:
|
|
112
112
|
requirements:
|
113
113
|
- - "~>"
|
114
114
|
- !ruby/object:Gem::Version
|
115
|
-
version:
|
116
|
-
- - ">="
|
117
|
-
- !ruby/object:Gem::Version
|
118
|
-
version: 5.4.5
|
115
|
+
version: 6.0.2
|
119
116
|
type: :development
|
120
117
|
prerelease: false
|
121
118
|
version_requirements: !ruby/object:Gem::Requirement
|
122
119
|
requirements:
|
123
120
|
- - "~>"
|
124
121
|
- !ruby/object:Gem::Version
|
125
|
-
version:
|
126
|
-
- - ">="
|
127
|
-
- !ruby/object:Gem::Version
|
128
|
-
version: 5.4.5
|
122
|
+
version: 6.0.2
|
129
123
|
- !ruby/object:Gem::Dependency
|
130
124
|
name: guard
|
131
125
|
requirement: !ruby/object:Gem::Requirement
|
@@ -140,20 +134,6 @@ dependencies:
|
|
140
134
|
- - ">="
|
141
135
|
- !ruby/object:Gem::Version
|
142
136
|
version: '0'
|
143
|
-
- !ruby/object:Gem::Dependency
|
144
|
-
name: listen
|
145
|
-
requirement: !ruby/object:Gem::Requirement
|
146
|
-
requirements:
|
147
|
-
- - "<"
|
148
|
-
- !ruby/object:Gem::Version
|
149
|
-
version: '3.1'
|
150
|
-
type: :development
|
151
|
-
prerelease: false
|
152
|
-
version_requirements: !ruby/object:Gem::Requirement
|
153
|
-
requirements:
|
154
|
-
- - "<"
|
155
|
-
- !ruby/object:Gem::Version
|
156
|
-
version: '3.1'
|
157
137
|
- !ruby/object:Gem::Dependency
|
158
138
|
name: guard-rubocop
|
159
139
|
requirement: !ruby/object:Gem::Requirement
|
@@ -242,6 +222,8 @@ files:
|
|
242
222
|
- code_safety.yml
|
243
223
|
- gemfiles/Gemfile.rails52
|
244
224
|
- gemfiles/Gemfile.rails60
|
225
|
+
- gemfiles/Gemfile.rails61
|
226
|
+
- gemfiles/Gemfile.rails70
|
245
227
|
- lib/ndr_support.rb
|
246
228
|
- lib/ndr_support/array.rb
|
247
229
|
- lib/ndr_support/concerns/working_days.rb
|
@@ -249,12 +231,12 @@ files:
|
|
249
231
|
- lib/ndr_support/daterange.rb
|
250
232
|
- lib/ndr_support/hash.rb
|
251
233
|
- lib/ndr_support/integer/calculations.rb
|
252
|
-
- lib/ndr_support/integer/julian_date_conversions.rb
|
253
234
|
- lib/ndr_support/integer/rounding.rb
|
254
235
|
- lib/ndr_support/integer/working_days.rb
|
255
236
|
- lib/ndr_support/nil.rb
|
256
237
|
- lib/ndr_support/obfuscator.rb
|
257
238
|
- lib/ndr_support/ourdate.rb
|
239
|
+
- lib/ndr_support/ourdate/build_datetime.rb
|
258
240
|
- lib/ndr_support/ourtime.rb
|
259
241
|
- lib/ndr_support/password.rb
|
260
242
|
- lib/ndr_support/password/constants.rb
|
@@ -309,14 +291,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
309
291
|
requirements:
|
310
292
|
- - ">="
|
311
293
|
- !ruby/object:Gem::Version
|
312
|
-
version: 2.
|
294
|
+
version: '2.7'
|
313
295
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
314
296
|
requirements:
|
315
297
|
- - ">="
|
316
298
|
- !ruby/object:Gem::Version
|
317
299
|
version: '0'
|
318
300
|
requirements: []
|
319
|
-
rubygems_version: 3.
|
301
|
+
rubygems_version: 3.1.6
|
320
302
|
signing_key:
|
321
303
|
specification_version: 4
|
322
304
|
summary: NDR Support library
|