Skip to content

Commit 1e8183f

Browse files
Merge remote-tracking branch 'origin/yaml_remove' into 250-use-$mref-to-inherit-from-one-profile-to-another-or-one-profile-to-a-certificate
2 parents 077034d + 9db188b commit 1e8183f

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed

lib/test/test_yaml_loader.rb

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,49 @@
77

88
class TestYamlLoader < Minitest::Test
99

10+
def test_remove
11+
yaml = <<~YAML
12+
base:
13+
key1: value1
14+
key2: value2
15+
16+
child:
17+
$mref: "#/base"
18+
$remove: key2
19+
key3: value3
20+
YAML
21+
22+
f = Tempfile.new("yml")
23+
f.write(yaml)
24+
f.flush
25+
26+
doc = YamlLoader.load(f.path)
27+
assert_equal({ "key1" => "value1", "key3" => "value3" }, doc["child"])
28+
end
29+
30+
def test_multiple_remove
31+
yaml = <<~YAML
32+
base:
33+
key1: value1
34+
key2: value2
35+
key3: value3
36+
37+
child:
38+
$mref: "#/base"
39+
$remove:
40+
- key2
41+
- key3
42+
key4: value4
43+
YAML
44+
45+
f = Tempfile.new("yml")
46+
f.write(yaml)
47+
f.flush
48+
49+
doc = YamlLoader.load(f.path)
50+
assert_equal({ "key1" => "value1", "key4" => "value4" }, doc["child"])
51+
end
52+
1053
def test_that_mref_with_nested_replace_works
1154
yaml = <<~YAML
1255
base:

lib/yaml_loader.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ def self.expand(filename, obj, yaml_opts = {})
1414

1515
return obj.map { |v| expand(filename, v, yaml_opts) } if obj.is_a?(Array)
1616

17+
new_obj =
1718
if obj.keys.include?("$ref")
1819
# according JSON Reference, all keys except $ref are ignored
1920
relative_path = obj["$ref"].split("#")[0]
@@ -102,6 +103,7 @@ def self.expand(filename, obj, yaml_opts = {})
102103
new_obj[key] = expanded
103104
end
104105
end
106+
105107
new_obj
106108
else
107109
obj_keys = obj.keys
@@ -112,6 +114,16 @@ def self.expand(filename, obj, yaml_opts = {})
112114
end
113115
obj
114116
end
117+
118+
obj_keys = new_obj.keys
119+
if obj_keys.include? "$remove"
120+
remove_keys = obj["$remove"].is_a?(Array) ? obj["$remove"] : [obj["$remove"]]
121+
remove_keys.each do |key|
122+
new_obj.delete(key)
123+
end
124+
end
125+
new_obj.delete("$remove")
126+
new_obj
115127
end
116128

117129
# load a YAML file and expand any $ref/$mref references

0 commit comments

Comments
 (0)