class Muxml::Base

Attributes

xml[R]

Public Class Methods

has_many(relation, options) click to toggle source
# File lib/muxml/base.rb, line 51
def has_many(relation, options)
  @@relations[self] ||= {many: {}, one: {} }
  @@relations[self][:many][relation] = options
end
has_one(relation, options) click to toggle source
# File lib/muxml/base.rb, line 56
def has_one(relation, options)
  @@relations[self] ||= {many: {}, one: {} }
  @@relations[self][:one][relation] = options
end
new(document = nil, element = nil) click to toggle source
# File lib/muxml/base.rb, line 9
def initialize(document = nil, element = nil)
  if @@xml_files.has_key?(self.class)
    document = @@xml_files[self.class][:file].to_s
    element = @@xml_files[self.class][:root]
  end

  case document
  when String
    xml = REXML::Document.new File.new(document)
  when REXML::Element
    xml = document
  else
    raise ArgumentError, 'invalid element'
  end

  unless element.nil?
    @xml = xml.elements[element]
  else
    @xml = xml
  end
end
xml_document(file, root) click to toggle source
# File lib/muxml/base.rb, line 47
def xml_document(file, root)
  @@xml_files[self] = {file: file, root: root}
end

Public Instance Methods

method_missing(sym, *args, &block) click to toggle source

for call attributes of xml just prefix with attribute_

# File lib/muxml/base.rb, line 32
def method_missing(sym, *args, &block)
  if sym.to_s.start_with?('attribute_')
    attribute = sym.to_s.sub(/^attribute_/, '')
    return @xml.attributes[attribute]
  elsif @@relations.has_key?(self.class)
    if @@relations[self.class][:many].has_key?(sym)
      return Relation::Many.new(self, sym, @@relations[self.class][:many][sym].dup)
    elsif @@relations[self.class][:one].has_key?(sym)
      return Relation::One.new(self, sym, @@relations[self.class][:one][sym].dup)
    end
  end
  raise NoMethodError, "undefined method `#{sym}' for #{self}"
end