Module: ApRubySdk

Defined in:
lib/ap_ruby_sdk.rb,
lib/ap_ruby_sdk/plan.rb,
lib/ap_ruby_sdk/util.rb,
lib/ap_ruby_sdk/void.rb,
lib/ap_ruby_sdk/period.rb,
lib/ap_ruby_sdk/refund.rb,
lib/ap_ruby_sdk/payment.rb,
lib/ap_ruby_sdk/version.rb,
lib/ap_ruby_sdk/customer.rb,
lib/ap_ruby_sdk/base_model.rb,
lib/ap_ruby_sdk/collection.rb,
lib/ap_ruby_sdk/pagination.rb,
lib/ap_ruby_sdk/transaction.rb,
lib/ap_ruby_sdk/api_resource.rb,
lib/ap_ruby_sdk/subscription.rb,
lib/ap_ruby_sdk/redirect_urls.rb,
lib/ap_ruby_sdk/refund_reason.rb,
lib/ap_ruby_sdk/errors/ap_error.rb,
lib/ap_ruby_sdk/errors/api_error.rb,
lib/ap_ruby_sdk/preauthorization.rb,
lib/ap_ruby_sdk/phone_verification.rb,
lib/ap_ruby_sdk/api_operations/list.rb,
lib/ap_ruby_sdk/errors/payment_error.rb,
lib/ap_ruby_sdk/api_operations/create.rb,
lib/ap_ruby_sdk/api_operations/retrieve.rb,
lib/ap_ruby_sdk/errors/authentication_error.rb,
lib/ap_ruby_sdk/errors/invalid_parameter_error.rb

Defined Under Namespace

Modules: ApiOperations, Period, RefundReason, Util Classes: APIError, ApError, ApiResource, AuthenticationError, BaseModel, Collection, Customer, InvalidParameterError, Pagination, Payment, PaymentError, PhoneVerification, Plan, Preauthorization, RedirectUrls, Refund, Subscription, Transaction, Void

Constant Summary collapse

VERSION =
'0.1.1'

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.api_baseObject

Returns the value of attribute api_base.



44
45
46
# File 'lib/ap_ruby_sdk.rb', line 44

def api_base
  @api_base
end

.api_keyObject

Returns the value of attribute api_key.



44
45
46
# File 'lib/ap_ruby_sdk.rb', line 44

def api_key
  @api_key
end

Class Method Details

.api_url(url = '') ⇒ Object



88
89
90
# File 'lib/ap_ruby_sdk.rb', line 88

def self.api_url(url='')
  @api_base + url
end

.execute_request(opts) ⇒ Object



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

def self.execute_request(opts)
  RestClient::Request.execute(opts)
end

.parse(response) ⇒ Object



111
112
113
114
115
116
117
118
119
# File 'lib/ap_ruby_sdk.rb', line 111

def self.parse(response)
  begin
    response = MultiJson.load(response.body)
  rescue MultiJson::DecodeError
    raise_general_error(response.code, response.body)
  end

  Util.symbolize_names(response)
end

.parse_api_error(response_code, response_body) ⇒ Object



126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# File 'lib/ap_ruby_sdk.rb', line 126

def self.parse_api_error(response_code, response_body)
  begin
    error = MultiJson.load(response_body)
    error = Util.symbolize_names(error)

    raise ApError.new if error[:Type].nil? # if there is no type

  rescue MultiJson::DecodeError, ApError
    raise_general_error(response_code, response_body)
  end

  case error[:Type]
    when 'payment_error'
      raise PaymentError.new(error[:Message], response_code, error[:Code])
    when 'api_error'
      raise APIError.new(error[:Message], response_code, error[:Code])
    when 'invalid_parameter_error'
      raise InvalidParameterError.new(error[:Message], response_code, error[:Code], error[:Param])
    else
      raise APIError.new(error[:Message], response_code, error[:Code]);
  end
end

.raise_general_error(response_code, response_body) ⇒ Object

Raises:



121
122
123
124
# File 'lib/ap_ruby_sdk.rb', line 121

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

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



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/ap_ruby_sdk.rb', line 47

def self.request(method, url, api_key, params={}, headers={})
  unless api_key ||= @api_key
    raise AuthenticationError.new('No API key provided.')
  end

  url = api_url(url)

  if method.to_s.downcase.to_sym == :get
    # Make params into GET params
    url += "#{URI.parse(url).query ? '&' : '?'}#{uri_encode(params)}" if params && params.any?
    payload = nil
  elsif method.to_s.downcase.to_sym == :delete
    # Make params into expected DELETE params
  elsif method.to_s.downcase.to_sym == :put
    # Make params into expected PUT params
  else
    # Make params into POST params
    payload = MultiJson.dump(params, mode: :compat)
  end

  request_opts = {
      :headers => request_headers(api_key).update(headers),
      :open_timeout => 30,
      :timeout => 80,
      :method => method,
      :payload => payload,
      :url => url
  }
  begin
    response = execute_request(request_opts)
  rescue RestClient::ExceptionWithResponse => e
    if e.http_code and e.http_body
      parse_api_error(e.http_code, e.http_body)
    else
      raise APIError.new(message + "\n\n(Network error: #{e.message})")
    end
  end

  parse(response)
end

.request_headers(api_key) ⇒ Object



99
100
101
102
103
104
105
# File 'lib/ap_ruby_sdk.rb', line 99

def self.request_headers(api_key)
  {
      :user_agent => "AlternativePayments Ruby SDK v#{ApRubySdk::VERSION}",
      :authorization => "Basic #{Base64.strict_encode64(api_key)}",
      :content_type => :json
  }
end

.uri_encode(params) ⇒ Object



94
95
96
97
# File 'lib/ap_ruby_sdk.rb', line 94

def self.uri_encode(params)
  Util.flatten_params(params).
      map { |k, v| "#{k}=#{Util.url_encode(v)}" }.join('&')
end