class Docks::Containers::Component

Public: a container for Component symbols.

Public Class Methods

new(component_hash = {}) click to toggle source
Calls superclass method
# File lib/docks/containers/component_container.rb, line 18
def initialize(component_hash = {})
  super

  self[:states] ||= []
  self[:variants] ||= []
  self[:subcomponents] ||= []
  self[:included_symbols] ||= []
end
type() click to toggle source

Public: the type of symbols that should be encapsulated by this container. This is compared against a symbol’s ‘symbol_type` to determine which container to use.

Returns the type String.

# File lib/docks/containers/component_container.rb, line 16
def self.type; Docks::Types::Symbol::COMPONENT end

Public Instance Methods

find(descriptor) click to toggle source
Calls superclass method
# File lib/docks/containers/component_container.rb, line 48
def find(descriptor)
  super || find_in_members(descriptor)
end
has_demo?() click to toggle source
# File lib/docks/containers/component_container.rb, line 39
def has_demo?
  !((markup || "") + (helper || "")).empty?
end
subcomponent(options = {}, &block)
Alias for: subcomponents
subcomponents(options = {}, &block) click to toggle source
# File lib/docks/containers/component_container.rb, line 27
def subcomponents(options = {}, &block)
  subcomponents = if options.fetch(:recursive, false)
    recursive_subcomponents
  else
    self[:subcomponents]
  end

  block_given? ? subcomponents.each(&block) : subcomponents
end
Also aliased as: subcomponent
summary() click to toggle source
Calls superclass method
# File lib/docks/containers/component_container.rb, line 52
def summary
  summary = super

  [:states, :variants, :subcomponents].each do |property|
    summary[property] = fetch(property, []).map(&:summary)
  end

  summary
end
variations(&block) click to toggle source
# File lib/docks/containers/component_container.rb, line 43
def variations(&block)
  variations = states + variants
  block_given? ? variations.each(&block) : variations
end

Protected Instance Methods

find_in_members(descriptor) click to toggle source
# File lib/docks/containers/component_container.rb, line 71
def find_in_members(descriptor)
  descriptor = Descriptor.new(descriptor)

  found = if !(descriptor.member? && descriptor.symbol != fetch(:name, nil))
    possible_variation_name = descriptor.member || descriptor.symbol
    variations.find { |variation| variation.find(descriptor) } || false
  else
    false
  end

  return found if found

  # Can't do a regular #find since each component searches its subcomponents
  subcomponents.each do |subcomponent|
    break if found = subcomponent.find(descriptor)
  end

  found
end
recursive_subcomponents() click to toggle source
# File lib/docks/containers/component_container.rb, line 64
def recursive_subcomponents
  self[:subcomponents].inject([]) do |all_subcomponents, subcomponent|
    all_subcomponents << subcomponent
    all_subcomponents.concat(subcomponent.recursive_subcomponents)
  end
end