class Felis::API

Attributes

account_id[RW]
base_uri[RW]
debug[RW]
private_key[RW]
public_key[RW]
timeout[RW]

Public Class Methods

new(options = {}) click to toggle source
# File lib/felis/api.rb, line 9
def initialize(options = {})
  @base_uri = options.fetch(:base_uri, "https://api.e2ma.net")
  @account_id = options.fetch(:account_id, ENV['EMMA_ACCOUNT_ID'] || nil)
  @private_key = options.fetch(:private_key, ENV['EMMA_PRIVATE_KEY'] || nil)
  @public_key = options.fetch(:public_key, ENV['EMMA_PUBLIC_KEY'] || nil)
  @debug = options.fetch(:debug, false)
  @timeout = options.fetch(:timeout, 30)
  
  @defaults = { basic_auth: { username: @public_key, password: @private_key } }
  
  setup_base_uri
end

Public Instance Methods

delete(path, query = {}) click to toggle source

HTTP DELETE Request

# File lib/felis/api.rb, line 38
def delete(path, query = {})
  request(:delete, path, query)
end
get(path, query = {}) click to toggle source

HTTP GET Request

# File lib/felis/api.rb, line 23
def get(path, query = {})
  request(:get, path, query)
end
post(path, params = {}) click to toggle source

HTTP POST Request

# File lib/felis/api.rb, line 28
def post(path, params = {})
  request(:post, path, params)
end
put(path, params = {}) click to toggle source

HTTP PUT Request

# File lib/felis/api.rb, line 33
def put(path, params = {})
  request(:put, path, params)
end

Private Instance Methods

request(method, path, params = {}) click to toggle source
# File lib/felis/api.rb, line 44
def request(method, path, params = {})
  self.class.debug_output($stderr) if @debug
  uri = "#{self.class.base_uri}#{path}"
  
  setup_http_body(method, params)
  
  begin
    response = self.class.send(method.to_sym, uri, @defaults)
  
    @parsed_response = nil
  
    if response.body
      @parsed_response = MultiJson.load(response.body)
    
      if should_raise_error?
        error = EmmaError.new(@parsed_response["error"])
        raise error
      end
    end 
  
    @parsed_response
  rescue MultiJson::LoadError => e
    error = EmmaError.new(e)
    raise error
  end
end
setup_base_uri() click to toggle source
# File lib/felis/api.rb, line 81
def setup_base_uri
  self.class.base_uri "#{@base_uri}/#{@account_id}"
end
setup_http_body(method, params) click to toggle source
# File lib/felis/api.rb, line 71
def setup_http_body(method, params)
  @defaults.reject! { |k, v| [:query, :body].include? k }
  
  unless params.empty?
    @defaults.merge!({query: params}).tap { |h| h.delete(:body) } if [:get, :delete].include? method.to_sym
    @defaults.merge!({body: MultiJson.dump(params)}).tap { |h| h.delete(:query) } if [:put, :post].include? method.to_sym
  end
  @defaults.merge!({timeout: @timeout})
end
should_raise_error?() click to toggle source
# File lib/felis/api.rb, line 85
def should_raise_error?
  @parsed_response.is_a?(Hash) && @parsed_response['error']
end