Sha256: 5bd6307f4a49201d79793654d297b29a546c1efe3f47ea35119fe33397256c97

Contents?: true

Size: 1.28 KB

Versions: 6

Compression:

Stored size: 1.28 KB

Contents

module OM::XML::Container
  
  attr_accessor :ng_xml
  
  # Class Methods -- These methods will be available on classes that include this Module 
  
  module ClassMethods
    
    # @xml String, File or Nokogiri::XML::Node
    # @tmpl ActiveFedora::MetadataDatastream
    # Careful! If you call this from a constructor, be sure to provide something 'ie. self' as the @tmpl. Otherwise, you will get an infinite loop!
    def from_xml(xml, tmpl=self.new) # :nodoc:
      if xml.kind_of? Nokogiri::XML::Node
        tmpl.ng_xml = xml
      else
        tmpl.ng_xml = Nokogiri::XML::Document.parse(xml)
      end
      return tmpl
    end
    
  end
  
  # Instance Methods -- These methods will be available on instances of classes that include this module
  
  def self.included(klass)
    klass.extend(ClassMethods)
  end
    
  def to_xml(xml = ng_xml)
    if xml == ng_xml
      return xml.to_xml
    elsif ng_xml.root.nil?
        return xml.to_xml
    elsif xml.kind_of?(Nokogiri::XML::Document)
        xml.root.add_child(ng_xml.root)
        return xml.to_xml
    elsif xml.kind_of?(Nokogiri::XML::Node)
        xml.add_child(ng_xml.root)
        return xml.to_xml
    else
        raise "You can only pass instances of Nokogiri::XML::Node into this method.  You passed in #{xml}"
    end
  end
  
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
om-0.1.7 lib/om/xml/container.rb
om-0.1.6 lib/om/xml/container.rb
om-0.1.5 lib/om/xml/container.rb
om-0.1.4 lib/om/xml/container.rb
om-0.1.3 lib/om/xml/container.rb
om-0.1.2 lib/om/xml/container.rb