Sha256: 07133571f4ce89f5caaa2df39a2519b9af94a81eb217231ea05069e0470adfe5

Contents?: true

Size: 1.27 KB

Versions: 9

Compression:

Stored size: 1.27 KB

Contents

module StorageRoom
  # The superclass of all the classes that load data from the API
  class Resource
    include HTTParty
    extend Plugins

    include Accessors
    
    plugin IdentityMap
    
    headers 'User-Agent' => "StorageRoom Ruby Gem (#{StorageRoom.version})", 'Accept' => 'application/json', 'Content-Type' => 'application/json'
    format :json

    class << self            
      # Handle known server errors
      def handle_critical_response_errors(httparty) # :nodoc:
        case httparty.response.code
          when '200', '201', '409', '422' then true
          else
            raise StorageRoom::RequestFailedError.new("Invalid HTTP Response: #{httparty.response.code}")
        end
      end
      
      # Find out if a key is user-defined or meta-data (begins with @)      
      def meta_data?(key) 
        key[0...1] == '@'
      end            
    end
    
    # Reload an object from the API. Optionally pass an URL.
    def reload(url = nil, parameters = {})
      httparty = self.class.get(url || self[:@url], parameters)
      hash = httparty.parsed_response.first[1]
      reset!
      set_from_response_data(hash)
      true
    end
    
    # Has the Resource been loaded from the API?
    def loaded?
      self['@url'] ? true : false
    end
       

  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
storage_room-0.3.20 lib/storage_room/resource.rb
storage_room-0.3.19 lib/storage_room/resource.rb
storage_room-0.3.18 lib/storage_room/resource.rb
storage_room-0.3.17 lib/storage_room/resource.rb
storage_room-0.3.16 lib/storage_room/resource.rb
storage_room-0.3.15 lib/storage_room/resource.rb
storage_room-0.3.14 lib/storage_room/resource.rb
storage_room-0.3.13 lib/storage_room/resource.rb
storage_room-0.3.12 lib/storage_room/resource.rb