class Forward::API::Resource

Constants

DEFAULT_ERROR_MESSAGE

Attributes

http[RW]
uri[RW]

Public Class Methods

new() click to toggle source
# File lib/forward/api/resource.rb, line 26
def initialize
  @http = EM::HttpRequest.new(Forward::API.host)

  @http.use JSONify
end

Public Instance Methods

add_body!() click to toggle source
# File lib/forward/api/resource.rb, line 70
def add_body!
  return unless @options.has_key?(:params)

  logger.debug "[API] request params: #{@options[:params].inspect}"
  @options[:body] = @options.delete(:params).to_json
end
add_head!() click to toggle source
# File lib/forward/api/resource.rb, line 77
def add_head!
  @options[:head] ||= {
    'content-type' => 'application/json',
    'accept'       => 'application/json'
  }
  @options[:head]['authorization'] = "Token token=#{config.api_key}" if @options[:authenticated]
end
delete(options = {}, &block) click to toggle source
# File lib/forward/api/resource.rb, line 66
def delete(options = {}, &block)
  request(:delete, options, &block)
end
get(options = {}, &block) click to toggle source
# File lib/forward/api/resource.rb, line 58
def get(options = {}, &block)
  request(:get, options, &block)
end
post(options = {}, &block) click to toggle source
# File lib/forward/api/resource.rb, line 62
def post(options = {}, &block)
  request(:post, options, &block)
end
request(method = :get, options = {}, &block) click to toggle source
# File lib/forward/api/resource.rb, line 32
def request(method = :get, options = {}, &block)
  logger.debug "[API] request: #{method.to_s.upcase} #{@http.uri}#{options[:path]}"
  @options = options || {}

  add_head!
  add_body!

  @_request = @http.send(method, @options)

  @_request.callback {
    status = @_request.response_header.status

    logger.debug "[API] response: #{status} #{@_request.response}"
    if @_request.response.is_a?(String) && !@_request.response.empty?
      # no JSON response
      exit_with_error DEFAULT_ERROR_MESSAGE
    else
      block.call(@_request.response, status)
    end
  }

  @_request.errback {
    exit_with_error DEFAULT_ERROR_MESSAGE
  }
end