class AwesomeXmlDsl::OptionsParser

Attributes

options[RW]

Public Class Methods

new(original_options, parent_options = {}) click to toggle source
# File lib/awesome_xml_dsl/options_parser.rb, line 7
def initialize(original_options, parent_options = {})
  self.options = original_options.clone
  options[:locals] ||= {}

  return unless parent_options.key?(:locals)

  options[:locals] = parent_options[:locals].deep_merge(options[:locals])
end
parse(options, parent_options = {}) click to toggle source
# File lib/awesome_xml_dsl/options_parser.rb, line 16
def self.parse(options, parent_options = {})
  new options, parent_options
end

Public Instance Methods

can_read?(object, key) click to toggle source
# File lib/awesome_xml_dsl/options_parser.rb, line 61
def can_read?(object, key)
  return object.key?(key) if object.respond_to?(:key?)

  object.respond_to?(key)
end
delete_options(*keys) click to toggle source
# File lib/awesome_xml_dsl/options_parser.rb, line 55
def delete_options(*keys)
  keys.each do |key|
    options.delete key
  end
end
each() { |options| ... } click to toggle source
# File lib/awesome_xml_dsl/options_parser.rb, line 20
def each
  return if options.key?(:if) && !options[:if]

  if options.key?(:collection) && options.key?(:as)
    return unless options[:collection].respond_to? :each

    as = options[:as]
    collection = options[:collection]
    delete_options :collection, :as

    collection.each do |element|
      options[:locals][as] = element

      yield options
    end
  elsif (options.key?(:if) || options.key?(:require)) && options.key?(:of)
    return if options.key?(:if) && !(can_read? options[:of], options[:if])

    if options.key?(:require) && !can_read?(options[:of], options[:require])
      raise RequiredValueNotPresent, "Can't read required key #{options[:require]} of #{options[:of]}"
    end

    accessor = options[:require] || options[:if]
    of = options[:of]
    as = options[:as] || accessor

    delete_options :if, :of, :as, :require

    options[:locals][as] = read of, accessor
    yield options
  else
    yield options
  end
end
read(object, key) click to toggle source
# File lib/awesome_xml_dsl/options_parser.rb, line 67
def read(object, key)
  return object[key] if object.is_a? Hash

  object.send key
end