ndr_support 5.9.7 → 5.10.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|