class Forecast::API::Base

Attributes

credentials[R]

Public Class Methods

api_model(klass) click to toggle source
# File lib/forecast/api/base.rb, line 11
        def api_model(klass)
          class_eval <<-END
            def api_model
              #{klass}
            end
          END
        end
new(credentials) click to toggle source
# File lib/forecast/api/base.rb, line 6
def initialize(credentials)
  @credentials = credentials
end

Protected Instance Methods

of_user_query(user) click to toggle source
# File lib/forecast/api/base.rb, line 63
def of_user_query(user)
  query = user.nil? ? {} : {"of_user" => user.to_i}
end
request(method, credentials, path, options = {}) click to toggle source
# File lib/forecast/api/base.rb, line 21
def request(method, credentials, path, options = {})
  params = {
    path:    path,
    options: options,
    method:  method
  }

  httparty_options = {
    query:  options[:query],
    body:   options[:body],
    format: :plain,
    headers: {
      "Accept"       => "application/json",
      "Content-Type" => "application/json; charset=utf-8",
      "User-Agent"   => "Forecasted/#{Forecast::VERSION}"
    }.update(options[:headers] || {})
  }

  credentials.set_authentication(httparty_options)
  response = HTTParty.send(method, "#{credentials.host}#{path}", httparty_options)
  params[:response] = response.inspect.to_s

  case response.code
  when 200..201
    response
  when 400
    raise Forecast::BadRequest.new(response, params)
  when 401
    raise Forecast::AuthenticationFailed.new(response, params)
  when 404
    raise Forecast::NotFound.new(response, params, "Do you have sufficient privileges?")
  when 500
    raise Forecast::ServerError.new(response, params)
  when 502
    raise Forecast::Unavailable.new(response, params)
  when 503
    raise Forecast::RateLimited.new(response, params)
  else
    raise Forecast::InformHarvest.new(response, params)
  end
end