Sha256: 425f4d1782b96224f04b43fd6c7a6f618452d1b61ce8d48d62cdd8491ae3c73e

Contents?: true

Size: 1.64 KB

Versions: 1

Compression:

Stored size: 1.64 KB

Contents

module Restfulie
  module Client
    module Base

      SELF_RETRIEVAL = [:latest, :refresh, :reload]
      
      class UnsupportedContentType < Exception
        attr_reader :msg
        def initialize(msg)
          @msg = msg
        end
        def to_s
          @msg
        end
      end

      # translates a response to an object
      def from_response(res, invoking_object)
        
        return invoking_object if res.code=="304"
        
        raise UnsupportedContentType.new("unsupported content type '#{res.content_type}' '#{res.code}'") unless res.content_type=="application/xml"

        body = res.body
        return {} if body.empty?
        
        hash = Hash.from_xml body
        return hash if hash.keys.length == 0
        
        raise "unable to parse an xml with more than one root element" if hash.keys.length>1
      
        type = hash.keys[0].camelize.constantize
        type.from_xml(body)
      
      end
    
      def requisition_method_for(overriden_option,name)
        basic_mapping = { :delete => Net::HTTP::Delete, :put => Net::HTTP::Put, :get => Net::HTTP::Get, :post => Net::HTTP::Post}
        defaults = {:destroy => Net::HTTP::Delete, :delete => Net::HTTP::Delete, :cancel => Net::HTTP::Delete,
                    :refresh => Net::HTTP::Get, :reload => Net::HTTP::Get, :show => Net::HTTP::Get, :latest => Net::HTTP::Get}

        return basic_mapping[overriden_option.to_sym] if overriden_option
        defaults[name.to_sym] || Net::HTTP::Post
      end
      
      def is_self_retrieval?(name)
        name = name.to_sym if name.kind_of? String
        SELF_RETRIEVAL.include? name
      end
      
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
restfulie-0.4.0 lib/restfulie/client/base.rb