class Answers::BaseModel

Public Class Methods

all() click to toggle source
# File lib/answers/base_model.rb, line 39
def self.all
  response = Answers.client.get(Protocol.uri(resource_name))
  items = response[hash_key]
  
  items.map {|i| new(i)}
end
find(id) click to toggle source
# File lib/answers/base_model.rb, line 24
def self.find(id)
  response = Answers.client.get(Protocol.uri(resource_name, id))
  
  if response.has_key?('status')
    if response['status']
      return nil
    end
  end
  
  item_hash = response[hash_key].first
  item = new(item_hash)
      
  item
end
hash_key() click to toggle source
# File lib/answers/base_model.rb, line 16
def self.hash_key
  self.resource_name.to_s.pluralize
end
resource_name() click to toggle source
# File lib/answers/base_model.rb, line 8
def self.resource_name
  to_s.demodulize.downcase.to_sym
end

Public Instance Methods

delete() click to toggle source
# File lib/answers/base_model.rb, line 59
def delete
  raise Answers::Error.new("Cannot delete unsaved object.") if new?
  response = Answers.client.delete(Protocol.uri(resource_name, @id))

  response
end
hash_key() click to toggle source
# File lib/answers/base_model.rb, line 20
def hash_key
  self.class.hash_key
end
new?() click to toggle source
# File lib/answers/base_model.rb, line 4
def new?
  @id.nil?
end
resource_name() click to toggle source
# File lib/answers/base_model.rb, line 12
def resource_name
  self.class.resource_name
end
save() click to toggle source
# File lib/answers/base_model.rb, line 46
def save
  body   = attributes.delete_if {|k,v| v.nil?} 
  path   = new? ? Protocol.uri(resource_name) : Protocol.uri(resource_name, @id)
  method = new? ? :post : :put

  response = Answers.client.send(method, path, body)
  item_hash = response[hash_key].first

  update_attributes!(item_hash)

  self
end

Private Instance Methods

update_attribute!(attribute_name, attribute_value) click to toggle source
# File lib/answers/base_model.rb, line 74
def update_attribute!(attribute_name, attribute_value)
  instance_variable_set("@#{attribute_name}", attribute_value)
end
update_attributes!(attributes) click to toggle source
# File lib/answers/base_model.rb, line 68
def update_attributes!(attributes)
  attributes.each_pair do |key, value|
    update_attribute!(key.to_sym, value)
  end
end