Module: Moonclerk

Defined in:
lib/moonclerk.rb,
lib/moonclerk/form.rb,
lib/moonclerk/util.rb,
lib/moonclerk/payment.rb,
lib/moonclerk/version.rb,
lib/moonclerk/customer.rb,
lib/moonclerk/list_object.rb,
lib/moonclerk/api_resource.rb,
lib/moonclerk/errors/api_error.rb,
lib/moonclerk/moonclerk_object.rb,
lib/moonclerk/api_operations/list.rb,
lib/moonclerk/api_operations/request.rb,
lib/moonclerk/errors/moonclerk_error.rb,
lib/moonclerk/errors/authentication_error.rb,
lib/moonclerk/errors/invalid_request_error.rb

Defined Under Namespace

Modules: APIOperations, Util Classes: APIError, APIResource, AuthenticationError, Customer, Form, InvalidRequestError, ListObject, MoonclerkError, MoonclerkObject, Payment

Constant Summary collapse

API_BASE =
"https://api.moonclerk.com"
API_VERSION =
1
VERSION =
"1.0.1"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.api_keyObject

Returns the value of attribute api_key.



31
32
33
# File 'lib/moonclerk.rb', line 31

def api_key
  @api_key
end

Class Method Details

.api_error(error, response, error_obj) ⇒ Object



107
108
109
# File 'lib/moonclerk.rb', line 107

def self.api_error(error, response, error_obj)
  APIError.new(error[:message], response.status, response.body, error_obj, response.headers)
end

.authentication_error(error, response, error_obj) ⇒ Object



102
103
104
105
# File 'lib/moonclerk.rb', line 102

def self.authentication_error(error, response, error_obj)
  AuthenticationError.new(error[:message], response.status, response.body, error_obj,
                          response.headers)
end

.default_param_keysObject



67
68
69
# File 'lib/moonclerk.rb', line 67

def self.default_param_keys
  [:count, :offset]
end

.general_api_error(status, response_body) ⇒ Object



71
72
73
74
# File 'lib/moonclerk.rb', line 71

def self.general_api_error(status, response_body)
  APIError.new("Invalid response object from API: #{response_body.inspect} " +
               "(HTTP response code was #{status})", status, response_body)
end

.handle_api_error(response) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/moonclerk.rb', line 76

def self.handle_api_error(response)
  begin
    error_obj = JSON.parse(response.body)
    error_obj = Util.symbolize_names(error_obj)
    error = error_obj[:error]
    raise MoonclerkError.new unless error && error.is_a?(Hash)

  rescue JSON::ParserError, StripeError
    raise general_api_error(response.status, response.body)
  end

  case response.status
  when 400, 404
    raise invalid_request_error(error, response, error_obj)
  when 401
    raise authentication_error(error, response, error_obj)
  else
    raise api_error(error, response, error_obj)
  end
end

.headersObject



60
61
62
63
64
65
# File 'lib/moonclerk.rb', line 60

def self.headers
  {
    "Authorization" => "Token token=#{api_key}",
    "Accept" => "application/vnd.moonclerk+json;version=#{API_VERSION}"
  }
end

.invalid_request_error(error, response, error_obj) ⇒ Object



97
98
99
100
# File 'lib/moonclerk.rb', line 97

def self.invalid_request_error(error, response, error_obj)
  InvalidRequestError.new(error[:message], response.status, response.body, error_obj, 
                          response.headers)
end

.request(method, url, params = {}) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/moonclerk.rb', line 34

def self.request(method, url, params = {})
  unless api_key
    raise AuthenticationError.new('No API key provided. ' \
      'Set your API key using "Moonclerk.api_key = <API-KEY>". ' \
      'You can generate API keys from the Moonclerk web interface' \
      'by logging in at moonclerk.com.')
  end

  if api_key =~ /\s/
    raise AuthenticationError.new('Your API key is invalid, as it contains ' \
      'whitespace. (HINT: You can double-check your API key from the ' \
      'MoonClerk web interface by logging in at moonclerk.com.)')
  end

  connection = Faraday.new
  response = connection.send(method, url, params, headers)
  parsed_response = JSON.parse(response.body)
  symbolized_response = Util.symbolize_names(parsed_response)

  if symbolized_response[:error]
    handle_api_error(response)
  else
    symbolized_response[symbolized_response.keys.first]
  end
end