super_stack 0.1.0 → 0.2.0

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