module WrapIt::Sections::ClassMethods

{Sections} class methods

Public Instance Methods

place(src, at, dst = nil) click to toggle source

Places specific section in specified place

@overload place(src, to)

@param  src [Symbol] section name to place
@param  to [Hash] single key-value hash. Key can be `:before` or
  `after`, value can be `:begin`, `:end` or section name

@overload place(src, at, dst)

@param  src [Symbol] section name to place
@param  at [Symbol] can be `:before` or `:after`
@param  dst [Symbol] can be `:begin`, `:end` or section name

@return [void]

# File lib/wrap_it/sections.rb, line 150
def place(src, at, dst = nil)
  if dst == nil && at.is_a?(Hash) && at.keys.size == 1
    dst = at.values[0]
    at = at.keys[0]
  end
  return unless placement.include?(src) &&
    (dst == :begin || dst == :end || placement.include?(dst)) &&
    (at == :before || at == :after)
  item = placement.delete_at(placement.index(src))
  case dst
  when :begin then placement.unshift(item)
  when :end then placement.push(item)
  else
    x = at == :before ? 0 : 1
    placement.insert(placement.index(dst) + x, item)
  end
end
placement() click to toggle source

Retrieves section names in current order

@return [Array<Symbol>] ordered sections array

# File lib/wrap_it/sections.rb, line 126
def placement
  @placement ||=
    if self == Base
      sections.clone
    else
      parent = ancestors[1..-1].find { |a| a.respond_to?(:placement) }
      parent.nil? ? sections.clone : parent.placement.clone
    end
end
section(*args) click to toggle source

Defines new section or sections. Places its to end of section list

@overload section([name, …])

@param name [Symbol, String] section name

@return [void]

# File lib/wrap_it/sections.rb, line 110
def section(*args)
  @sections ||= []
  args.flatten.each do |name|
    name.is_a?(String) && name = name.to_sym
    next unless name.is_a?(Symbol)
    next if (sections + [:begin, :end]).include?(name)
    @sections << name
    placement << name unless placement.include?(name)
    place name, before: :end
  end
end
sections() click to toggle source

Retrieves all sections, including ancestors

@return [Array<Symbol>] array of sections

# File lib/wrap_it/sections.rb, line 99
def sections
  collect_derived(:@sections)
end