Class: SparkleFormation::Composition
- Inherits:
-
Object
- Object
- SparkleFormation::Composition
- Defined in:
- lib/sparkle_formation/composition.rb
Overview
Internal template composition
Defined Under Namespace
Instance Attribute Summary collapse
-
#origin ⇒ SparkleFormation
readonly
Owner of composition.
Instance Method Summary collapse
-
#add_component(item, location = :append) ⇒ self
Add an existing component.
-
#add_override(item, location = :append) ⇒ self
Add an existing override.
- #components ⇒ Array<Component, Override>
-
#composite ⇒ Array<Component, Override>
Provides the full list of items in order.
-
#each {|| ... } ⇒ self
Iterate full composition.
-
#initialize(origin, args = {}) ⇒ self
constructor
Create a new composition.
-
#new_component(key, location = :append) { ... } ⇒ self
Add a new component.
-
#new_override(args = {}, location = :append) { ... } ⇒ self
Add a new override.
- #overrides ⇒ Array<Override>
Constructor Details
#initialize(origin, args = {}) ⇒ self
Create a new composition
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/sparkle_formation/composition.rb', line 27 def initialize(origin, args={}) unless(origin.is_a?(SparkleFormation)) raise TypeError.new 'Composition requires `SparkleFormation` instance as origin. ' \ "Received origin type `#{origin.class}`." end @origin = origin @components_list = [] @overrides_list = [] seed_value(args[:overrides], Override).each do |item| add_override(item) end seed_value(args[:components], [Component, Override]).each do |item| add_component(item) end end |
Instance Attribute Details
#origin ⇒ SparkleFormation (readonly)
Returns owner of composition.
18 19 20 |
# File 'lib/sparkle_formation/composition.rb', line 18 def origin @origin end |
Instance Method Details
#add_component(item, location = :append) ⇒ self
Add an existing component
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/sparkle_formation/composition.rb', line 65 def add_component(item, location=:append) if(item.respond_to?(:key) && component_keys.include?(item.key)) # do nothing else case location when :append components_list.push(item) when :prepend components_list.unshift(item) else raise ArgumentError.new 'Unknown addition location provided. Valid: `:append, :prepend`. ' \ "Received: `#{location.inspect}`" end end self end |
#add_override(item, location = :append) ⇒ self
Add an existing override
87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/sparkle_formation/composition.rb', line 87 def add_override(item, location=:append) case location when :append overrides_list.push(item) when :prepend overrides_list.unshift(item) else raise ArgumentError.new 'Unknown addition location provided. Valid: ' \ "`:append, :prepend`. Received: `#{location.inspect}`" end self end |
#components ⇒ Array<Component, Override>
44 45 46 |
# File 'lib/sparkle_formation/composition.rb', line 44 def components @components_list.dup.freeze end |
#composite ⇒ Array<Component, Override>
Provides the full list of items in order
56 57 58 |
# File 'lib/sparkle_formation/composition.rb', line 56 def composite [components + overrides].flatten.freeze end |
#each {|| ... } ⇒ self
Iterate full composition
133 134 135 136 137 138 139 140 |
# File 'lib/sparkle_formation/composition.rb', line 133 def each if(block_given?) composite.each do |item| yield item end end self end |
#new_component(key, location = :append) { ... } ⇒ self
Add a new component
106 107 108 109 110 |
# File 'lib/sparkle_formation/composition.rb', line 106 def new_component(key, location=:append, &block) comp = Component.new(origin, key, block) add_component(comp, location) self end |
#new_override(args = {}, location = :append) { ... } ⇒ self
Add a new override
118 119 120 121 122 123 124 125 126 |
# File 'lib/sparkle_formation/composition.rb', line 118 def new_override(args={}, location=:append, &block) if(args.is_a?(Symbol)) location = args args = {} end ovr = Override.new(origin, args, block) add_override(ovr, location) self end |
#overrides ⇒ Array<Override>
49 50 51 |
# File 'lib/sparkle_formation/composition.rb', line 49 def overrides @overrides_list.dup.freeze end |