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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9a35826dd6aa1c436784d40750be42b5d903a9e8
4
- data.tar.gz: 4036c864e855b5a9f420953ef0d99f4e83acbc36
3
+ metadata.gz: 2d7e71745423eac71f773457ba8d641c694b238b
4
+ data.tar.gz: 545f45196d81921479682642d7c292e283ab83f6
5
5
  SHA512:
6
- metadata.gz: 79a519c5e1a9f202ce7ff2d2be502f94adb204a6b6c9e52775e56d6d0c0dd679add921e772c250bafcbba89c925872bbd7d10dc74964231b1e4af91281968579
7
- data.tar.gz: b0a89dffd813a711c242498bcda46882c1f3b5dd941fe79056aa423cf57c4bed0888e88946b151af11b312bce2430eceeaf6ca75a1ef21a95fb1f3f61ddf4143
6
+ metadata.gz: 721a23e798806a3eada2ab1ca9bb002fb548115e4b47f1ad0c8a0df13a123c5effa13bfbcbd5f3e36c3ec9a0e8fa5ae3006c171f6171dfa48e5e3e4578219487
7
+ data.tar.gz: bc6b2e86889c0524fe31e0e97e7f32521fe9c89dacba1fc8317400b9867d8348f3b1c2e8f244f2af96119255a0c0486d90519cfc9011272398a5f388d29795f8
@@ -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?
@@ -1,3 +1,3 @@
1
1
  module SuperStack
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
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
- 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
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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: super_stack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Laurent B.