class PostyClient::Resources::Base

Attributes

attributes[R]
errors[R]
name[R]
new_resource[RW]

Public Class Methods

base_uri() click to toggle source
# File lib/posty_client/resources/base.rb, line 14
def self.base_uri
  URI.join(Settings.api_url, Settings.api_version)
end
resource_name() click to toggle source
# File lib/posty_client/resources/base.rb, line 127
def self.resource_name
  self.name.demodulize.tableize
end

Public Instance Methods

attributes=(attributes) click to toggle source
# File lib/posty_client/resources/base.rb, line 35
def attributes=(attributes)
  @attributes = attributes.reject {|k,v| rejected_attributes.include?(k.to_sym)} # we only want the value
  @name ||= @attributes[primary_key]
  @attributes
end
base_uri() click to toggle source
# File lib/posty_client/resources/base.rb, line 18
def base_uri
  self.class.base_uri
end
create() click to toggle source
# File lib/posty_client/resources/base.rb, line 91
def create
  logger.debug("create #{self.class.name} : #{name}")
  request_with_error_handling do
    RestClient.post(resource_slug, attributes, :content_type => :json, :accept => :json)
  end
end
delete() click to toggle source
# File lib/posty_client/resources/base.rb, line 98
def delete
  logger.debug("delete #{self.class.name} : #{name}")
  request_with_error_handling do
    RestClient.delete(slug)
  end
end
load() click to toggle source
# File lib/posty_client/resources/base.rb, line 41
def load
  @new_resource = true
  @attributes = {}

  response = begin
    RestClient.get(slug)
  rescue RestClient::Exception => e
    e.response
  end

  if response.code == 404
    logger.debug("#{self.class.name} :: load non existing object (#{response.code}) '#{response}'")
    return
  elsif response.code != 200
    logger.error("#{self.class.name} :: load failed with (#{response.code}) '#{response}'")
    return
  end

  @new_resource = false
  self.attributes = JSON.parse(response).flatten.last

  @name = attributes[primary_key]

  self
end
new_resource?() click to toggle source
# File lib/posty_client/resources/base.rb, line 31
def new_resource?
  @new_resource
end
request_with_error_handling(&block) click to toggle source
# File lib/posty_client/resources/base.rb, line 105
def request_with_error_handling(&block)
  response = begin
    block.call
  rescue RestClient::Exception => e
    e.response
  end

  case response.code
  when 200..299
    true
  else
    @errors = begin
      JSON.parse(response)['error']
    rescue => e
      logger.error(e)
      {'base' => "Unrecoverable error: #{response.code} (#{response})"}
    end

    false
  end
end
resource_name() click to toggle source
# File lib/posty_client/resources/base.rb, line 131
def resource_name
  self.class.resource_name
end
resource_slug() click to toggle source
# File lib/posty_client/resources/base.rb, line 135
def resource_slug
  raise NotImplementedError        
end
save() click to toggle source
# File lib/posty_client/resources/base.rb, line 67
def save
  if new_resource?
    self.attributes[primary_key] = @name
    if create
      @new_resource = false
      return true
    end
  else
    if update
      load
      return true
    end
  end

  return false
end
slug() click to toggle source
# File lib/posty_client/resources/base.rb, line 139
def slug
  raise NotImplementedError
end
update() click to toggle source
# File lib/posty_client/resources/base.rb, line 84
def update
  logger.debug("update #{self.class.name} : #{name}")
  request_with_error_handling do
    RestClient.put(slug, attributes)
  end
end