Sha256: 22ccb3f1e94424961bc70f01e13bbf5f1972fe0b28fd02fa68b85397724ab5d6

Contents?: true

Size: 988 Bytes

Versions: 3

Compression:

Stored size: 988 Bytes

Contents

module Medie
  module Xml
    class Driver
      def marshal(obj, options = {})
        if(obj.kind_of?(String))
          obj
        elsif obj.kind_of?(Hash) && obj.size==1
          root = obj.values.first
          if !root.respond_to?(:to_xml)
            raise "Trying to marshal a string into xml does not make sense: '#{obj}'"
          end
          root.to_xml(:root => obj.keys.first)
        else
          obj.to_xml
        end
      end

      def unmarshal(content)
        if content
          hash = Hash.from_xml(content)
        else
          hash = {}
        end
        hash.extend(Methodize).extend(Medie::Linked).use_link_type(Medie::Xml::Links)
      end

      def can_handle?(content_type)
        !(content_type.nil? ||
          (content_type.split(";")[0]!="application/xml" &&
          content_type.split(";")[0]!="application/atom+xml" &&
          content_type.split(";")[0]!="text/xml"))
      end

      Medie.registry << Driver.new
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
medie-1.0.0 lib/medie/xml/driver.rb
medie-1.0.0.beta4 lib/medie/xml/driver.rb
medie-1.0.0.beta3 lib/medie/xml/driver.rb