Class: SuperStack::Manager
- Inherits:
-
Object
- Object
- SuperStack::Manager
- Includes:
- SuperStack::MergePolicies::PolicyHandler
- Defined in:
- lib/super_stack/manager.rb
Constant Summary collapse
- DEFAULT_PRIORITY_INTERVAL =
10
- DEFAULT_MERGE_POLICY =
SuperStack::MergePolicies::StandardMergePolicy
Instance Attribute Summary collapse
-
#layers ⇒ Object
readonly
Returns the value of attribute layers.
-
#write_layer ⇒ Object
Returns the value of attribute write_layer.
Attributes included from SuperStack::MergePolicies::PolicyHandler
Instance Method Summary collapse
- #<<(layer) ⇒ Object
- #[](filter = nil) ⇒ Object
- #[]=(key, value) ⇒ Object
- #add_layer(layer) ⇒ Object
- #clear_layers ⇒ Object
- #disable_layer(layer_or_layer_name) ⇒ Object
- #enable_layer(layer_or_layer_name) ⇒ Object
-
#initialize ⇒ Manager
constructor
A new instance of Manager.
- #reload_layers ⇒ Object
- #remove_layer(layer_or_layer_name) ⇒ Object
- #reset ⇒ Object
- #to_a ⇒ Object
Constructor Details
#initialize ⇒ Manager
Returns a new instance of Manager.
13 14 15 16 17 |
# File 'lib/super_stack/manager.rb', line 13 def initialize self.extend SuperStack::Compatibility::Manager if SuperStack.compatibility_mode @layers = {} self.default_merge_policy = DEFAULT_MERGE_POLICY end |
Instance Attribute Details
#layers ⇒ Object (readonly)
Returns the value of attribute layers.
11 12 13 |
# File 'lib/super_stack/manager.rb', line 11 def layers @layers end |
#write_layer ⇒ Object
Returns the value of attribute write_layer.
11 12 13 |
# File 'lib/super_stack/manager.rb', line 11 def write_layer @write_layer end |
Instance Method Details
#<<(layer) ⇒ Object
104 105 106 |
# File 'lib/super_stack/manager.rb', line 104 def <<(layer) add_layer layer end |
#[](filter = nil) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/super_stack/manager.rb', line 31 def [](filter=nil) layers = to_a return [] if layers.empty? layers.each { |layer| layer.reload if layer.source_auto_reload?} first_layer = layers.shift first_layer = first_layer.disabled? ? SuperStack::Layer.new : first_layer res = layers.inject(first_layer) do |stack, layer| if layer.disabled? stack else policy_to_apply = layer.merge_policy.nil? ? default_merge_policy : layer.merge_policy policy_to_apply.merge stack, layer end end if filter.nil? res.to_hash else res[filter] end end |
#[]=(key, value) ⇒ Object
26 27 28 29 |
# File 'lib/super_stack/manager.rb', line 26 def []=(key,value) raise 'No write layer specified' if write_layer.nil? write_layer[key] = value end |
#add_layer(layer) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/super_stack/manager.rb', line 60 def add_layer(layer) if layer.is_a? Hash and not layer.class.included_modules.include? SuperStack::LayerWrapper SuperStack::LayerWrapper.from_hash layer end set_valid_name_for layer if layers.keys.include? layer.name layer.priority = get_unused_priority if layer.priority.nil? raise 'This layer already belongs to a manager' unless layer.manager.nil? layers[layer.name] = layer layer.instance_variable_set :@manager, self layer.managed if layer.respond_to? :managed end |
#clear_layers ⇒ Object
80 81 82 83 84 85 86 87 |
# File 'lib/super_stack/manager.rb', line 80 def clear_layers layers.values.each do |layer| layer_name = layer.name @write_layer = nil if layer == write_layer layer.instance_variable_set :@manager, nil end layers.clear end |
#disable_layer(layer_or_layer_name) ⇒ Object
89 90 91 92 93 94 95 96 |
# File 'lib/super_stack/manager.rb', line 89 def disable_layer(layer_or_layer_name) layer = get_existing_layer layer_or_layer_name, 'Cannot disable unmanaged layer' if layer == write_layer @previous_write_layer = write_layer @write_layer = nil end layer.instance_variable_set :@disabled, true end |
#enable_layer(layer_or_layer_name) ⇒ Object
98 99 100 101 102 |
# File 'lib/super_stack/manager.rb', line 98 def enable_layer(layer_or_layer_name) layer = get_existing_layer layer_or_layer_name, 'Cannot enable unmanaged layer' layer.instance_variable_set :@disabled, false @write_layer = @previous_write_layer if layer == @previous_write_layer end |
#reload_layers ⇒ Object
108 109 110 |
# File 'lib/super_stack/manager.rb', line 108 def reload_layers layers.values.each &:reload end |
#remove_layer(layer_or_layer_name) ⇒ Object
72 73 74 75 76 77 78 |
# File 'lib/super_stack/manager.rb', line 72 def remove_layer(layer_or_layer_name) layer = get_existing_layer layer_or_layer_name, 'Cannot remove unmanaged layer' layer_name = layer.name @write_layer = nil if layer == write_layer layer.instance_variable_set :@manager, nil layers.delete layer_name end |
#reset ⇒ Object
56 57 58 |
# File 'lib/super_stack/manager.rb', line 56 def reset write_layer.clear unless write_layer.nil? end |
#to_a ⇒ Object
52 53 54 |
# File 'lib/super_stack/manager.rb', line 52 def to_a layers.values.sort end |