module Barzahlen

Constants

IDEMPOTENCY_ENABLED
VERSION

Attributes

configuration[RW]

Public Class Methods

configure() { |configuration| ... } click to toggle source
# File lib/barzahlen/configuration.rb, line 28
def configure
  yield(configuration)
end
invalidate_slip(slip_id) click to toggle source
# File lib/barzahlen/slip.rb, line 52
def self.invalidate_slip(slip_id)
  self.execute_with_error_handling do
    self.get_grac_client.path("/slips/{id}/invalidate", id: slip_id.to_s).post
  end
end
resend_email(slip_id) click to toggle source
# File lib/barzahlen/slip.rb, line 40
def self.resend_email(slip_id)
  self.execute_with_error_handling do
    self.get_grac_client.path("/slips/{id}/resend/email", id: slip_id.to_s).post
  end
end
resend_text_message(slip_id) click to toggle source
# File lib/barzahlen/slip.rb, line 46
def self.resend_text_message(slip_id)
  self.execute_with_error_handling do
    self.get_grac_client.path("/slips/{id}/resend/text_message", id: slip_id.to_s).post
  end
end
reset() click to toggle source
# File lib/barzahlen/configuration.rb, line 24
def reset
  @configuration = Configuration.new
end
retrieve_slip(slip_id) click to toggle source

If idempotency is not important a simple request is more than enough

# File lib/barzahlen/slip.rb, line 28
def self.retrieve_slip(slip_id)
  self.execute_with_error_handling do
    self.get_grac_client.path("/slips/{id}", id: slip_id.to_s).get
  end
end
update_slip(slip_id, opts = {}) click to toggle source
# File lib/barzahlen/slip.rb, line 34
def self.update_slip(slip_id, opts = {})
  self.execute_with_error_handling do
    self.get_grac_client.path("/slips/{id}", id: slip_id.to_s).patch(opts)
  end
end
webhook_request(request) click to toggle source

Handle a webhook request

# File lib/barzahlen/slip.rb, line 60
def self.webhook_request(request)
  bz_hook_format = request["Bz-Hook-Format"]

  #stop processing when bz-hook-format = v1 because it will be or was send as v2
  if bz_hook_format.include? "v1"
    return nil
  end

  signature = Barzahlen::Middleware.generate_bz_signature(
    Barzahlen.configuration.payment_key,
    request["Host"] + ":" + (request["Port"] || "443"),
    request["Method"] ? request["Method"].upcase : "POST",
    request["Date"],
    request["Path"].split("?")[0] || request["Path"],
    request["Path"].split("?")[1] || "",
    request["Body"]
  )

  if request["Bz-Signature"].include? signature
    return JSON.parse(request["Body"])
  else
    raise Barzahlen::Error::SignatureError.new("Signature not valid")
  end
end

Private Class Methods

execute_with_error_handling() { || ... } click to toggle source
# File lib/barzahlen/slip.rb, line 104
def self.execute_with_error_handling
  begin
    yield
  rescue Grac::Exception::RequestFailed => e
    raise Barzahlen::Error.generate_error_from_response("")
  rescue  Grac::Exception::ClientException => e
    raise Barzahlen::Error.generate_error_from_response(e.body)
  end
end
get_grac_client(idempotency = false) click to toggle source
# File lib/barzahlen/slip.rb, line 90
def self.get_grac_client(idempotency = false)
  @@grac_client ||= Grac::Client.new(
      Barzahlen.configuration.sandbox ?
        Barzahlen::Configuration::API_HOST_SANDBOX : Barzahlen::Configuration::API_HOST,
      middleware: [ [ Barzahlen::Middleware::Signature, Barzahlen.configuration ] ]
      )

  if idempotency
    return @@grac_client.set( headers: { "Idempotency-Key" => SecureRandom.uuid} )
  else
    return @@grac_client
  end
end