ndr_support 5.9.7 → 5.10.1
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 +12 -0
- data/code_safety.yml +5 -5
- data/lib/ndr_support/concerns/working_days.rb +9 -0
- data/lib/ndr_support/version.rb +1 -1
- data/lib/ndr_support/yaml/serialization_migration.rb +30 -5
- data/test/yaml/serialization_test.rb +47 -5
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '096f063918140b27d2136df336b1ce9cc749236002d62c0c3ac6ac383b5f2295'
|
4
|
+
data.tar.gz: eeb407d4d7fa47c7d803b03383da810fe7ba914569923e6f8888e580f492c208
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7dfffec2a85e3692e25b464ca232d1e42e4a783b5f23a6f08a3fcc0dc566ab8687b746b4fde6c206fc6f30b9e7ca674d8097b7e4b4def9928d174a19ff7fc760
|
7
|
+
data.tar.gz: 995d2de405da83acc432b42f3f551057537c648f3aded0d2f2625962a36069a9a37019c5fc6031880495a649389410534e30cc501a9b88df4cfd847001405e37
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,18 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
* No unreleased changes
|
3
3
|
|
4
|
+
## 5.10.1 / 2024-01-04
|
5
|
+
## Fixed
|
6
|
+
* Add 2026 bank holidays
|
7
|
+
* Allow YAML aliases when using `yaml_safe_classes`
|
8
|
+
|
9
|
+
## 5.10.0 / 2023-11-17
|
10
|
+
## Changed
|
11
|
+
* Generate UTF-8 encoded YAML by default. Disable with `utf8_storage = false`
|
12
|
+
* Use `YAML.safe_load` by default. Override with
|
13
|
+
`self.yaml_safe_classes = yaml_safe_classes + [Klass1, Klass2]` and revert to
|
14
|
+
unsafe loading with `yaml_safe_classes = :unsafe` and `gem 'psych', '< 4'`
|
15
|
+
|
4
16
|
## 5.9.7 / 2023-11-16
|
5
17
|
## Fixed
|
6
18
|
* YAMLSupport should preserve escaped backslashes in YAML text
|
data/code_safety.yml
CHANGED
@@ -23,7 +23,7 @@ file safety:
|
|
23
23
|
CHANGELOG.md:
|
24
24
|
comments:
|
25
25
|
reviewed_by: brian.shand
|
26
|
-
safe_revision:
|
26
|
+
safe_revision: c764a4d8c251b5076ed3d60391c8271bb5a099bc
|
27
27
|
CODE_OF_CONDUCT.md:
|
28
28
|
comments:
|
29
29
|
reviewed_by: timgentry
|
@@ -71,7 +71,7 @@ file safety:
|
|
71
71
|
lib/ndr_support/concerns/working_days.rb:
|
72
72
|
comments:
|
73
73
|
reviewed_by: brian.shand
|
74
|
-
safe_revision:
|
74
|
+
safe_revision: 6fb8c080befbb9c741c2bc3a2fadb29fe1c3d0aa
|
75
75
|
lib/ndr_support/date_and_time_extensions.rb:
|
76
76
|
comments:
|
77
77
|
reviewed_by: brian.shand
|
@@ -171,7 +171,7 @@ file safety:
|
|
171
171
|
lib/ndr_support/version.rb:
|
172
172
|
comments:
|
173
173
|
reviewed_by: brian.shand
|
174
|
-
safe_revision:
|
174
|
+
safe_revision: 3a4b0a4acb1d6dfbfc79b17ee11577cb22ab8923
|
175
175
|
lib/ndr_support/working_days.rb:
|
176
176
|
comments:
|
177
177
|
reviewed_by: josh.pencheon
|
@@ -179,7 +179,7 @@ file safety:
|
|
179
179
|
lib/ndr_support/yaml/serialization_migration.rb:
|
180
180
|
comments:
|
181
181
|
reviewed_by: brian.shand
|
182
|
-
safe_revision:
|
182
|
+
safe_revision: c764a4d8c251b5076ed3d60391c8271bb5a099bc
|
183
183
|
ndr_support.gemspec:
|
184
184
|
comments:
|
185
185
|
reviewed_by: brian.shand
|
@@ -283,4 +283,4 @@ file safety:
|
|
283
283
|
test/yaml/serialization_test.rb:
|
284
284
|
comments:
|
285
285
|
reviewed_by: brian.shand
|
286
|
-
safe_revision:
|
286
|
+
safe_revision: c764a4d8c251b5076ed3d60391c8271bb5a099bc
|
@@ -136,6 +136,15 @@ module WorkingDays
|
|
136
136
|
'2025-08-25', # Monday - Summer bank holiday
|
137
137
|
'2025-12-25', # Thursday - Christmas Day
|
138
138
|
'2025-12-26', # Friday - Boxing Day
|
139
|
+
# 2026
|
140
|
+
'2026-01-01', # Thursday - New Year’s Day
|
141
|
+
'2026-04-03', # Friday - Good Friday
|
142
|
+
'2026-04-06', # Monday - Easter Monday
|
143
|
+
'2026-05-04', # Monday - Early May bank holiday
|
144
|
+
'2026-05-25', # Monday - Spring bank holiday
|
145
|
+
'2026-08-31', # Monday - Summer bank holiday
|
146
|
+
'2026-12-25', # Friday - Christmas Day
|
147
|
+
'2026-12-28', # Monday - Boxing Day
|
139
148
|
].map { |str| Date.parse(str) }
|
140
149
|
|
141
150
|
def self.check_lookup
|
data/lib/ndr_support/version.rb
CHANGED
@@ -12,8 +12,29 @@ module NdrSupport
|
|
12
12
|
# accepted by load_yaml
|
13
13
|
YAML_SAFE_CLASSES = [Date, DateTime, Time, Symbol].freeze
|
14
14
|
|
15
|
+
# Set list of YAML safe classes, or :unsafe to use unsafe load
|
16
|
+
def yaml_safe_classes=(yaml_safe_classes)
|
17
|
+
@yaml_safe_classes = yaml_safe_classes
|
18
|
+
end
|
19
|
+
|
20
|
+
def yaml_safe_classes
|
21
|
+
@yaml_safe_classes || YAML_SAFE_CLASSES
|
22
|
+
end
|
23
|
+
|
24
|
+
# Allow emitted YAML to contain UTF-8 characters
|
25
|
+
# Defaults to true. (Defaulted to false in ndr_support versions < 6)
|
26
|
+
def utf8_storage=(utf8_storage)
|
27
|
+
@utf8_storage = utf8_storage
|
28
|
+
end
|
29
|
+
|
30
|
+
def utf8_storage
|
31
|
+
return @utf8_storage if @utf8_storage == false
|
32
|
+
|
33
|
+
true # New ndr_support default for versions >= 6, previously false
|
34
|
+
end
|
35
|
+
|
15
36
|
# Wrapper around: YAML.load(string)
|
16
|
-
def load_yaml(string, coerce_invalid_chars = false)
|
37
|
+
def load_yaml(string, coerce_invalid_chars = false) # rubocop:disable Style/OptionalBooleanParameter
|
17
38
|
fix_encoding!(string, coerce_invalid_chars)
|
18
39
|
|
19
40
|
# Achieve same behaviour using `syck` and `psych`:
|
@@ -21,10 +42,12 @@ module NdrSupport
|
|
21
42
|
fix_encoding!(string, coerce_invalid_chars)
|
22
43
|
|
23
44
|
# TODO: Bump NdrSupport major version, and switch to safe_load by default
|
24
|
-
object = if
|
45
|
+
object = if yaml_safe_classes == :unsafe
|
46
|
+
raise(SecurityError, 'Unsafe YAML no longer supported') unless Psych::VERSION.start_with?('3.')
|
47
|
+
|
25
48
|
Psych.load(string)
|
26
49
|
else
|
27
|
-
Psych.safe_load(string, permitted_classes:
|
50
|
+
Psych.safe_load(string, permitted_classes: yaml_safe_classes, aliases: true)
|
28
51
|
end
|
29
52
|
|
30
53
|
# Ensure that any string related to the object
|
@@ -37,8 +60,10 @@ module NdrSupport
|
|
37
60
|
|
38
61
|
# Wrapper around: YAML.dump(object)
|
39
62
|
def dump_yaml(object)
|
40
|
-
|
41
|
-
|
63
|
+
return Psych.dump(object) if utf8_storage
|
64
|
+
|
65
|
+
# Psych produces UTF-8 encoded output; historically we
|
66
|
+
# preferred YAML that can be safely stored in stores with
|
42
67
|
# other encodings. If #load_yaml is used, the binary
|
43
68
|
# encoding of the object will be reversed on load.
|
44
69
|
Psych.dump binary_encode_any_high_ascii(object)
|
@@ -8,6 +8,14 @@ class SerializationTest < Minitest::Test
|
|
8
8
|
assert_equal hash, load_yaml(dump_yaml(hash))
|
9
9
|
end
|
10
10
|
|
11
|
+
test 'should support aliases correctly' do
|
12
|
+
x = { 'c' => 5 }
|
13
|
+
hash = { 'a' => x, 'b' => x }
|
14
|
+
hash_yaml = "---\na: &1\n c: 5\nb: *1\n"
|
15
|
+
assert_equal hash, load_yaml(hash_yaml), 'Deserialising known YAML with an alias'
|
16
|
+
assert_equal hash, load_yaml(dump_yaml(hash)), 'Deserialising a structure with repeated objects'
|
17
|
+
end
|
18
|
+
|
11
19
|
test 'should handle syck-encoded characters' do
|
12
20
|
assert_syck_1_8_yaml_loads_correctly
|
13
21
|
end
|
@@ -44,26 +52,60 @@ class SerializationTest < Minitest::Test
|
|
44
52
|
assert_yaml_coercion_behaviour
|
45
53
|
end
|
46
54
|
|
47
|
-
test 'dump_yaml should produce encoding-portable YAML' do
|
48
|
-
|
55
|
+
test 'dump_yaml with utf8_storage = false should produce encoding-portable YAML' do
|
56
|
+
self.utf8_storage = false
|
57
|
+
original_object = { basic: 'manana', complex: 'mañana' }
|
49
58
|
yaml_produced = dump_yaml(original_object)
|
50
59
|
reloaded_object = load_yaml(yaml_produced)
|
51
60
|
|
52
|
-
|
61
|
+
assert_match(/basic: manana/, yaml_produced, 'binary-encoded more than was necessary')
|
53
62
|
|
54
63
|
refute yaml_produced.bytes.detect { |byte| byte > 127 }, 'yaml has high-ascii'
|
55
64
|
assert reloaded_object.inspect.bytes.detect { |byte| byte > 127 }
|
56
65
|
assert_equal original_object, reloaded_object
|
57
66
|
end
|
58
67
|
|
59
|
-
test 'encoding-portable YAML should be loadable' do
|
60
|
-
|
68
|
+
test 'encoding-portable YAML with utf8_storage = false should be loadable' do
|
69
|
+
self.utf8_storage = false
|
70
|
+
original_object = { basic: 'manana', complex: 'mañana' }
|
71
|
+
yaml_produced = dump_yaml(original_object)
|
72
|
+
|
73
|
+
assert_equal("---\n:basic: manana\n:complex: !binary |-\n bWHDsWFuYQ==\n", yaml_produced)
|
74
|
+
|
75
|
+
reloaded_object = load_yaml(yaml_produced)
|
76
|
+
assert_equal original_object, reloaded_object
|
77
|
+
end
|
78
|
+
|
79
|
+
test 'non-encoding-portable YAML with utf8_storage = true should be loadable' do
|
80
|
+
self.utf8_storage = true
|
81
|
+
original_object = { basic: 'manana', complex: 'mañana' }
|
61
82
|
yaml_produced = dump_yaml(original_object)
|
83
|
+
assert_equal("---\n:basic: manana\n:complex: mañana\n", yaml_produced)
|
62
84
|
|
63
85
|
reloaded_object = load_yaml(yaml_produced)
|
64
86
|
assert_equal original_object, reloaded_object
|
65
87
|
end
|
66
88
|
|
89
|
+
test 'yaml_safe_classes should filter which classes can be loaded' do
|
90
|
+
original_object = { basic: 'manana', complex: 'mañana' }
|
91
|
+
yaml_produced = dump_yaml(original_object)
|
92
|
+
self.yaml_safe_classes = []
|
93
|
+
assert_raises Psych::DisallowedClass, 'Load should fail without Symbol in yaml_safe_classes' do
|
94
|
+
load_yaml(yaml_produced)
|
95
|
+
end
|
96
|
+
|
97
|
+
self.yaml_safe_classes = [Symbol]
|
98
|
+
reloaded_object = load_yaml(yaml_produced)
|
99
|
+
assert_equal original_object, reloaded_object, 'Safe reload with Symbol class specified'
|
100
|
+
|
101
|
+
if Psych::VERSION.start_with?('3.')
|
102
|
+
# Not supported with Ruby >= 3.1 unless you force psych version < 4
|
103
|
+
self.yaml_safe_classes = :unsafe
|
104
|
+
reloaded_object = load_yaml(yaml_produced)
|
105
|
+
assert_equal original_object, reloaded_object, 'Unsafe reload with Symbol class'
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
67
109
|
test 'time-like objects should serialise correctly with psych' do
|
68
110
|
assert_timey_wimey_stuff
|
69
111
|
end
|
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.10.1
|
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: 2024-01-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|