Sha256: 60a18f6c73f99006c467f29787cc771310b745970a41a74933e7f73040b4ca4d

Contents?: true

Size: 1.37 KB

Versions: 1

Compression:

Stored size: 1.37 KB

Contents

module StorageRoom
  class Base
    include Attributes
    include HTTParty
    
    headers 'User-Agent' => 'StorageRoom Ruby Gem', 'Accept' => 'application/json', 'Content-Type' => 'application/json'
    format :json

    
    class << self
      def load(url, parameters = {})
        httparty = get(url, parameters)
        
        handle_critical_response_errors(httparty)
        create_from_api(httparty.parsed_response.first[1])
      end
      
      def handle_critical_response_errors(httparty)
        case httparty.response.code
          when '200', '201', '422' then true
          else
            raise StorageRoom::RequestFailed.new("Invalid HTTP Response: #{httparty.response.code}")
        end
      end
      
      def create_from_api(hash) 
        type = hash['@type']
        
        object = case type
          when 'Array' then Array.new
          when 'Collection' then Collection.new
          else
            StorageRoom.class_for_name(type).new
        end
        
        object.set_from_api(hash)
        object
      end
            
      def meta_data?(key)
        key[0...1] == '@'
      end            
    end
    
    def reload(url = nil, parameters = {})
      httparty = self.class.get(url || self[:@url], parameters)
      set_from_api(httparty.parsed_response.first[1])
      true
    end
            
    def url
      self[:@url]
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
storage_room-0.1.0 lib/storage_room/base.rb