class SpikePay

Constants

VERSION

Attributes

charge[RW]
conn[R]
token[RW]

Public Class Methods

new(auth_token, options = {}) click to toggle source

Initialize client

@param options [Hash] options

# File lib/spike_pay.rb, line 18
def initialize(auth_token, options = {})
  options = options.each_with_object({}) { |kv, obj| k,v = kv; obj[k.to_s] = v }

  connection_options = options['faraday_options'] || {}
  connection_options['headers'] = {
    "Content-Type" => "application/x-www-form-urlencoded",
    "Accept" => "application/json",
    "User-Agent" => "Apipa-spike/1.0.0",
    "Accept-Language" => "ja",
  }
  connection_options['url'] = options['api_base'] || 'https://api.spike.cc/v1'
  @conn = Faraday.new(connection_options) do |builder|
    builder.request :url_encoded
    builder.adapter Faraday.default_adapter
  end


  @conn.basic_auth(auth_token, '')
  @charge = SpikePay::Charge.new(self)
end

Public Instance Methods

handle_response(response) click to toggle source

Convert faraday response to a hash by decoding JSON. This raises error if the response indicates error status.

@api private @param response [Faraday::Response] @return [Hash] Raw object @raise [SpikePay::SpikeError] For invalid requests (4xx) or internal server error (5xx)

# File lib/spike_pay.rb, line 51
def handle_response(response)
  data =
    begin
      JSON_CLASS.load(response.body.force_encoding(infer_encoding(response)))
    rescue JSON_CLASS::ParserError => e
      raise SpikePay::ApiConnectionError.invalid_json(e)
    end
  status = response.status
  case status
  when 200..299
    data
  else
    if  status == 400
      raise SpikePay::ErrorResponse::InvalidRequestError.new(status, data)
    end
    if  status == 401
      raise SpikePay::ErrorResponse::AuthenticationError.new(status, data)
    end
    if  status == 402
      raise SpikePay::ErrorResponse::CardError.new(status, data)
    end
    if  status == 404
      raise SpikePay::ErrorResponse::InvalidRequestError.new(status, data)
    end
    if  true
      raise SpikePay::ErrorResponse::ApiError.new(status, data)
    end
    raise "Unknown error is returned"
  end
end
request(method, url_pattern ,params) click to toggle source
# File lib/spike_pay.rb, line 82
def request(method, url_pattern ,params)
  url = url_pattern.gsub(/:([[:alnum:]]+)/) { |name| params.__send__(name[1..-1]) }
  begin
    response = @conn.__send__(method, url, [:get, :delete].include?(method) ? params.to_h : params.to_h.collect do |k,v| 
      if k != "products"
        "#{k}=#{v}"
      else
        "#{k}=[#{JSON.dump(v[0])}]"
      end
    end.join('&'))
  rescue Faraday::Error::ClientError, URI::InvalidURIError => e
    raise SpikePay::ApiConnectionError.in_request(e)
  end
  handle_response(response)
end
set_accept_language(value) click to toggle source
# File lib/spike_pay.rb, line 39
def set_accept_language(value)
  @conn.headers['Accept-Language'] = value
end

Private Instance Methods

infer_encoding(response) click to toggle source

Infer encoding from response

@param response [Faraday::Response] @return [Encoding]

# File lib/spike_pay.rb, line 104
def infer_encoding(response)
  unless (type = response.headers['content-type']) &&
      (charset = type.split(';').find { |field| field.include?('charset=') })
    return Encoding.default_external
  end

  encoding_string = charset.split('=', 2).last.strip
  Encoding.find(encoding_string)
rescue
  Encoding.default_external
end