Sha256: 6af803b65907a9e05f0d35fb37ce62cf593d81d9971ec1b20dc33269f2ca2431

Contents?: true

Size: 1.63 KB

Versions: 3

Compression:

Stored size: 1.63 KB

Contents

module CurrencyCloud
  class Session
    ENVIRONMENTS = {
      production: 'https://api.currencycloud.com',
      demonstration: 'https://devapi.currencycloud.com',
      uat: 'https://api-uat1.ccycloud.com'
    }.freeze

    attr_reader :environment, :login_id, :api_key
    attr_accessor :token, :on_behalf_of

    def self.validate_environment(environment)
      unless ENVIRONMENTS.keys.include?(environment)
        raise CurrencyCloud::GeneralError, "'#{environment}' is not a valid environment, must be one of: #{ENVIRONMENTS.keys.join(', ')}"
      end
    end

    def initialize(environment, login_id, api_key, token)
      @environment = environment
      @login_id = login_id
      @api_key = api_key

      if token
        self.class.validate_environment(environment)
        @token = token
      else
        authenticate
      end
    end

    def environment_url
      ENVIRONMENTS[environment]
    end

    def close
      request.post('authenticate/close_session')
    end

    def authenticate
      validate
      params = { login_id: login_id, api_key: api_key }
      CurrencyCloud.token = @token = request.post('authenticate/api', params, should_retry: false)['auth_token']
    end

    def reauthenticate
      CurrencyCloud.token = @token = nil
      authenticate
    end

    private

    def validate
      self.class.validate_environment(environment)
      raise CurrencyCloud::GeneralError, 'login_id must be set using CurrencyCloud.login_id=' unless login_id
      raise CurrencyCloud::GeneralError, 'api_key must be set using CurrencyCloud.api_key=' unless api_key
    end

    def request
      RequestHandler.new(self)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
currency_cloud-0.9.0 lib/currency_cloud/session.rb
currency_cloud-0.8.2 lib/currency_cloud/session.rb
currency_cloud-0.8.0 lib/currency_cloud/session.rb