Skip to content

Commit 984e027

Browse files
committed
Add support module for plugin authors
1 parent 40bffa1 commit 984e027

File tree

3 files changed

+92
-0
lines changed

3 files changed

+92
-0
lines changed

lib/lint_roller.rb

+2
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,7 @@
77
require_relative "lint_roller/plugin"
88
require_relative "lint_roller/error"
99

10+
require_relative "lint_roller/support/merges_upstream_metadata"
11+
1012
module LintRoller
1113
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
module LintRoller
2+
module Support
3+
class MergesUpstreamMetadata
4+
def merge(plugin_yaml, upstream_yaml)
5+
common_upstream_values = upstream_yaml.select { |key| plugin_yaml.key?(key) }
6+
7+
plugin_yaml.merge(common_upstream_values) { |key, plugin_value, upstream_value|
8+
if plugin_value.is_a?(Hash) && upstream_value.is_a?(Hash)
9+
plugin_value.merge(upstream_value) { |sub_key, plugin_sub_value, upstream_sub_value|
10+
if plugin_value.key?(sub_key)
11+
plugin_sub_value
12+
else
13+
upstream_sub_value
14+
end
15+
}
16+
else
17+
plugin_value
18+
end
19+
}
20+
end
21+
end
22+
end
23+
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
require "test_helper"
2+
3+
module LintRoller
4+
module Support
5+
class MergesUpstreamMetadataTest < Minitest::Test
6+
def setup
7+
@subject = MergesUpstreamMetadata.new
8+
end
9+
10+
def test_no_op
11+
assert_equal({}, @subject.merge({}, {}))
12+
assert_equal({}, @subject.merge({}, {:junk => {}, "Some/Rule" => {}}))
13+
assert_equal({foo: "berry"}, @subject.merge({foo: "berry"}, {:junk => {}, "Some/Rule" => {}}))
14+
end
15+
16+
def test_merges_undefined_sub_keys
17+
assert_equal(
18+
{"Some/Rule" => {"Enabled" => true, "Description" => "foo"}},
19+
@subject.merge(
20+
{"Some/Rule" => {"Enabled" => true}},
21+
{"Some/Rule" => {"Description" => "foo"}}
22+
)
23+
)
24+
end
25+
26+
def test_doesnt_merge_nil_values
27+
assert_equal(
28+
{"Some/Rule" => {"Description" => nil}},
29+
@subject.merge(
30+
{"Some/Rule" => {"Description" => nil}},
31+
{"Some/Rule" => {"Description" => "foo"}}
32+
)
33+
)
34+
end
35+
36+
def test_doesnt_override_defined_values
37+
assert_equal(
38+
{"Some/Rule" => {"Enabled" => false}},
39+
@subject.merge(
40+
{"Some/Rule" => {"Enabled" => false}},
41+
{"Some/Rule" => {"Enabled" => true}}
42+
)
43+
)
44+
end
45+
46+
def test_doesnt_munge_arrays
47+
assert_equal(
48+
{"Some/Rule" => {"Included" => ["lol"]}},
49+
@subject.merge(
50+
{"Some/Rule" => {"Included" => ["lol"]}},
51+
{"Some/Rule" => {"Included" => ["kek"]}}
52+
)
53+
)
54+
end
55+
56+
def test_doesnt_munge_hashes
57+
assert_equal(
58+
{"Some/Rule" => {"Conf" => {a: 1}}},
59+
@subject.merge(
60+
{"Some/Rule" => {"Conf" => {a: 1}}},
61+
{"Some/Rule" => {"Conf" => {a: 2, b: 3}}}
62+
)
63+
)
64+
end
65+
end
66+
end
67+
end

0 commit comments

Comments
 (0)