super_stack 0.1.0 → 0.2.0
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/lib/super_stack/manager.rb +17 -1
- data/lib/super_stack/version.rb +1 -1
- data/spec/manager_spec.rb +39 -11
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2d7e71745423eac71f773457ba8d641c694b238b
|
4
|
+
data.tar.gz: 545f45196d81921479682642d7c292e283ab83f6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 721a23e798806a3eada2ab1ca9bb002fb548115e4b47f1ad0c8a0df13a123c5effa13bfbcbd5f3e36c3ec9a0e8fa5ae3006c171f6171dfa48e5e3e4578219487
|
7
|
+
data.tar.gz: bc6b2e86889c0524fe31e0e97e7f32521fe9c89dacba1fc8317400b9867d8348f3b1c2e8f244f2af96119255a0c0486d90519cfc9011272398a5f388d29795f8
|
data/lib/super_stack/manager.rb
CHANGED
@@ -8,13 +8,29 @@ module SuperStack
|
|
8
8
|
DEFAULT_PRIORITY_INTERVAL = 10
|
9
9
|
DEFAULT_MERGE_POLICY = SuperStack::MergePolicies::StandardMergePolicy
|
10
10
|
|
11
|
-
attr_reader :layers
|
11
|
+
attr_reader :layers, :write_layer
|
12
12
|
|
13
13
|
def initialize
|
14
14
|
@layers = {}
|
15
15
|
self.default_merge_policy = DEFAULT_MERGE_POLICY
|
16
16
|
end
|
17
17
|
|
18
|
+
def write_layer=(layer_or_layer_name)
|
19
|
+
if layer_or_layer_name.is_a?(String) || layer_or_layer_name.is_a?(Symbol)
|
20
|
+
layer_name = layer_or_layer_name.to_s
|
21
|
+
raise 'Invalid write layer' unless layers.keys.include? layer_name
|
22
|
+
layer_or_layer_name = layers[layer_name]
|
23
|
+
end
|
24
|
+
# At that point layer_or_layer_name can only contain a layer object
|
25
|
+
raise 'Invalid write layer' unless layers.values.include? layer_or_layer_name
|
26
|
+
@write_layer = layer_or_layer_name
|
27
|
+
end
|
28
|
+
|
29
|
+
def []=(key,value)
|
30
|
+
raise 'No write layer specified' if write_layer.nil?
|
31
|
+
write_layer[key] = value
|
32
|
+
end
|
33
|
+
|
18
34
|
def [](filter=nil)
|
19
35
|
layers = to_a
|
20
36
|
return [] if layers.empty?
|
data/lib/super_stack/version.rb
CHANGED
data/spec/manager_spec.rb
CHANGED
@@ -68,19 +68,47 @@ describe SuperStack::Manager do
|
|
68
68
|
end
|
69
69
|
|
70
70
|
it 'should allow to reload all layers at once' do
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
71
|
+
subject.add_layer layer1
|
72
|
+
subject << {bar: :foo}
|
73
|
+
subject.add_layer layer3
|
74
|
+
subject.add_layer layer4
|
75
|
+
expect(subject[:foo] == :bar).to be_falsey
|
76
|
+
subject.layers['layer3'][:foo] = :bar
|
77
|
+
expect(subject[:foo] == :bar).to be_truthy
|
78
|
+
expect(subject[:bar] == :foo).to be_truthy
|
79
|
+
expect {subject.reload_layers}.not_to raise_error
|
80
|
+
expect(subject[:foo] == :bar).to be_falsey
|
81
|
+
expect(subject[:bar] == :foo).to be_truthy
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'should be possible to specify a write layer using its name or itself' do
|
85
|
+
override = SuperStack::Layer.new
|
86
|
+
override.name = :override
|
87
|
+
subject << override
|
88
|
+
subject << layer1
|
89
|
+
expect {subject.write_layer = :override}.not_to raise_error
|
90
|
+
expect {subject.write_layer = 'override'}.not_to raise_error
|
91
|
+
expect {subject.write_layer = override}.not_to raise_error
|
82
92
|
end
|
83
93
|
|
94
|
+
it 'should not be possible to modify if no write layer has been specified' do
|
95
|
+
subject << layer1
|
96
|
+
subject << layer2
|
97
|
+
expect {subject[:foo] = :bar}.to raise_error
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'should push all modifications to the write layer' do
|
101
|
+
override = SuperStack::Layer.new
|
102
|
+
override.name = :override
|
103
|
+
subject << override
|
104
|
+
subject << layer1
|
105
|
+
subject.write_layer = override
|
106
|
+
expect {subject[:foo] = :bar}.not_to raise_error
|
107
|
+
expect(subject.layers['override'][:foo] == :bar).to be_truthy
|
108
|
+
expect(subject[:foo] == :bar).to be_truthy
|
109
|
+
end
|
110
|
+
|
111
|
+
|
84
112
|
|
85
113
|
SuperStack::MergePolicies.list.each do |policy|
|
86
114
|
it "should provide a merged view of the layers according to the merge policy: #{policy}" do
|