Sha256: 7d93d6304f58060bcfcd0259b077bd67caeb5e5eb48af097505528ff6cd0a770

Contents?: true

Size: 1.42 KB

Versions: 2

Compression:

Stored size: 1.42 KB

Contents

# frozen_string_literal: true

require 'faraday'

module Mpesa
  class Client
    attr_reader :key, :secret, :env, :adapter, :shortcode, :pass_key, :raise_errors

    def initialize(key:, secret:, shortcode: nil, pass_key: nil, env: 'production', adapter: Faraday.default_adapter, raise_errors: true)
      @key = key
      @secret = secret
      @env = env
      @adapter = adapter
      @pass_key = pass_key
      @shortcode = shortcode
      @raise_errors = raise_errors
    end

    def auth
      Token.new(self).token
    end

    def register(**args)
      Register.new(self, args).call
    end

    def stk(**args)
      Stk.new(self, args).call
    end

    def payout(**args)
      Payout.new(self, args).call
    end

    def status(**args)
      Status.new(self, args).call
    end

    def balance(**args)
      Balance.new(self, args).call
    end

    def reversal(**args)
      Reversal.new(self, args).call
    end

    def connection(basic_auth: false)
      @connection ||= Faraday.new do |conn|
        conn.url_prefix = "https://#{subdomain}.safaricom.co.ke"
        conn.request :json
        conn.response :json, content_type: 'application/json'
        conn.adapter adapter
        conn.request :authorization, :basic, key, secret if basic_auth
        conn.request :authorization, 'Bearer', auth.access_token unless basic_auth
      end
    end

    def subdomain
      env == 'production' ? 'api' : 'sandbox'
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
mpesarb-0.3.5 lib/mpesa/client.rb
mpesarb-0.3.4 lib/mpesa/client.rb