class Workarea::Klarna::Gateway

Public Instance Methods

authorize(tender, amount) click to toggle source
# File lib/workarea/klarna/gateway.rb, line 16
def authorize(tender, amount)
  request = PlaceOrderRequest.new(tender, amount)
  send_transaction_request(request)
end
cancel(tender) click to toggle source
# File lib/workarea/klarna/gateway.rb, line 36
def cancel(tender)
  request = CancelRequest.new(tender)
  send_transaction_request(request)
end
capture(tender, amount) click to toggle source
# File lib/workarea/klarna/gateway.rb, line 26
def capture(tender, amount)
  request = CaptureRequest.new(tender, amount)
  send_transaction_request(request)
end
create_session(order) click to toggle source
# File lib/workarea/klarna/gateway.rb, line 6
def create_session(order)
  request = CreateSessionRequest.new(order)
  send_request(request)
end
purchase(tender, amount) click to toggle source
# File lib/workarea/klarna/gateway.rb, line 21
def purchase(tender, amount)
  request = PlaceOrderRequest.new(order, amount, auto_capture: true)
  send_transaction_request(request)
end
refund(tender, amount) click to toggle source
# File lib/workarea/klarna/gateway.rb, line 31
def refund(tender, amount)
  request = RefundRequest.new(tender, amount)
  send_transaction_request(request)
end
release_authorization(tender) click to toggle source
# File lib/workarea/klarna/gateway.rb, line 41
def release_authorization(tender)
  request = ReleaseRequest.new(tender)
  send_transaction_request(request)
end
send_request(request) click to toggle source
# File lib/workarea/klarna/gateway.rb, line 46
def send_request(request)
  request.validate!

  raw_response = Faraday.send(request.method, request.url) do |req|
    req.headers['Authorization'] = auth_header(request)
    req.headers['User-Agent'] = "Workarea/#{Workarea::VERSION::STRING}"

    if request.body.present?
      req.headers['Content-Type'] = 'application/json'
      req.body = request.body.to_json
    end
  end

  Response.new(request, raw_response)
rescue ContinentNotSupported
  unsupported_continent_response(request)
end
send_transaction_request(request) click to toggle source
# File lib/workarea/klarna/gateway.rb, line 64
def send_transaction_request(request)
  response = send_request(request)

  ActiveMerchant::Billing::Response.new(
    response.success?,
    response.message,
    response.params
  )
end
update_session(order, session_id = nil) click to toggle source
# File lib/workarea/klarna/gateway.rb, line 11
def update_session(order, session_id = nil)
  request = UpdateSessionRequest.new(order, session_id)
  send_request(request)
end

Private Instance Methods

auth_header(request) click to toggle source
# File lib/workarea/klarna/gateway.rb, line 76
def auth_header(request)
  "Basic #{Base64.encode64([request.username, request.password].join(':'))}"
end
unsupported_continent_response(request) click to toggle source
# File lib/workarea/klarna/gateway.rb, line 80
def unsupported_continent_response(request)
  OpenStruct.new(
    success?: false,
    message: I18n.t(
      'workarea.klarna.gateway.unsupported_continent',
      continent: request.continent
    ),
    params: {}
  )
end