module Dustbag::Parser::Node::ClassMethods

Public Instance Methods

child(name) click to toggle source
# File lib/dustbag/parser/node.rb, line 91
def child(name)
  if name.is_a? Hash
    define_method(name[:name]) do
      (name[:class] || Dustbag.const_get(name[:node])).new(subnode(name[:node]))
    end
  else
    node_name = xml_node_name(attr)
    define_method(name) do
      Dustbag.const_get(node_name).new(subnode(node_name))
    end
  end
end
children(*attrs) click to toggle source
# File lib/dustbag/parser/node.rb, line 72
def children(*attrs)
  attrs.each do |attr|

    if attr.is_a?(Hash)
      attr.each do |key, value|
        node_name = xml_node_name(key)
        define_method(key) do
          value.new(subnode(node_name))
        end
      end
    else
      node_name = xml_node_name(attr)
      define_method(attr) do
        Dustbag.const_get(node_name).new(subnode(node_name))
      end
    end
  end
end
numeric_attributes(*attrs) click to toggle source
# File lib/dustbag/parser/node.rb, line 54
def numeric_attributes(*attrs)
  attrs.each do |attr|
    node_name = xml_node_name(attr)

    if attr.is_a?(Hash)
      attr.each do |key, value|
        define_method(key) do
          subnode_text(value).to_i
        end
      end
    else
      define_method(attr) do
        subnode_text(node_name).to_i
      end
    end
  end
end
text_attributes(*attrs) click to toggle source
# File lib/dustbag/parser/node.rb, line 36
def text_attributes(*attrs)
  attrs.each do |attr|
    node_name = xml_node_name(attr)

    if attr.is_a?(Hash)
      attr.each do |key, value|
        define_method(key) do
          subnode_text(value)
        end
      end
    else
      define_method(attr) do
        subnode_text(node_name)
      end
    end
  end
end

Private Instance Methods

xml_node_name(attr) click to toggle source
# File lib/dustbag/parser/node.rb, line 106
def xml_node_name(attr)
  attr.to_s.split('_').map(&:capitalize).join('')
end