module Giftbit::Base

Public Class Methods

extended(klass) click to toggle source
# File lib/giftbit/base.rb, line 7
def self.extended(klass)
  klass.send :cattr_accessor, :endpoint, :auth, :auths
  klass.endpoint = 'https://testbedapp.giftbit.com/papi/v1/'
end
included(klass) click to toggle source
# File lib/giftbit/base.rb, line 12
def self.included(klass)
  klass.send :attr_accessor, :auth
end

Public Instance Methods

auths?() click to toggle source
# File lib/giftbit/base.rb, line 36
def auths?
  auths = instance? ? self.class.auths : self.auths
  auths && auths.any?
end
get_auth() click to toggle source
# File lib/giftbit/base.rb, line 16
def get_auth
  fail "auth and auths can't both be set" if inherited_auth && auths?

  if auth = instance? ? self.auth : inherited_auth
    auth
  elsif auths?
    fail 'you must init a new API instance with the auth you want to use'
  else
    fail 'you must set an auth token at application boot'
  end
end
inherited_auth() click to toggle source
# File lib/giftbit/base.rb, line 28
def inherited_auth
  instance? ? self.class.auth : auth
end
inherited_endpoint() click to toggle source
# File lib/giftbit/base.rb, line 32
def inherited_endpoint
  instance? ? self.class.endpoint : endpoint
end
instance?() click to toggle source
# File lib/giftbit/base.rb, line 41
def instance?
  self.class == Giftbit
end

Private Instance Methods

default_resource_options() click to toggle source
# File lib/giftbit/base.rb, line 47
def default_resource_options
  {
    headers: {
      "Authorization" => "Bearer #{get_auth}",
      "Accept"        => "application/json",
      "Content-Type"  => "json"
    }
  }
end
delete(path, request_options = {}, resource_options = {}) click to toggle source
# File lib/giftbit/base.rb, line 87
def delete(path, request_options = {}, resource_options = {})
  response :delete, resource(resource_options)[path], request_options
end
get(path, request_options = {}, resource_options = {}) click to toggle source
# File lib/giftbit/base.rb, line 83
def get(path, request_options = {}, resource_options = {})
  response :get, resource(resource_options)[path], request_options
end
post(path, request_options = {}, resource_options = {}) click to toggle source
# File lib/giftbit/base.rb, line 91
def post(path, request_options = {}, resource_options = {})
  response :post, resource(resource_options)[path], request_options
end
put(path, request_options = {}, resource_options = {}) click to toggle source
# File lib/giftbit/base.rb, line 95
def put(path, request_options = {}, resource_options = {})
  response :put, resource(resource_options)[path], request_options
end
resource(options = {}) click to toggle source
# File lib/giftbit/base.rb, line 57
def resource(options = {})
  RestClient::Resource.new inherited_endpoint, default_resource_options.deep_merge(options)
end
response(method, resource, options = {}) click to toggle source
# File lib/giftbit/base.rb, line 61
def response(method, resource, options = {})
  if body = options.delete(:body)
    json = resource.send(method, JSON.generate(body), options)
  else
    json = resource.send(method, options)
  end

  JSON.parse json
rescue RestClient::ExceptionWithResponse => e
  case e.http_code
  when 400..499
    JSON.parse e.response
  when 500..599
    {
      'status' => e.http_code,
      'error' => { 'message' => e.response }
    }
  else
    raise
  end
end