Sha256: c18a27cbf52184d9f9d45d5bbab7a6e9d07ed2591752fa91fa99cf13bd889899

Contents?: true

Size: 1.29 KB

Versions: 1

Compression:

Stored size: 1.29 KB

Contents

# frozen_string_literal: true

module FinAppsCore
  module REST
    # Represents the client configuration options
    class Configuration # :nodoc:
      using ObjectExtensions

      attr_accessor :tenant_token, :user_identifier, :user_token,
                    :host, :proxy, :timeout, :retry_limit, :rashify,
                    :log_level, :request_id, :consumer_id, :tenant_id

      def initialize(options = {})
        FinAppsCore::REST::Defaults::DEFAULTS.merge(remove_empty_options(options))
                                             .each {|key, value| public_send("#{key}=", value) }
        fail_invalid_host
        fail_invalid_timeout
      end

      def valid_user_credentials?
        FinAppsCore::REST::Credentials.new(user_identifier, user_token).valid?
      end

      private

      def fail_invalid_host
        return if valid_host?

        fail FinAppsCore::InvalidArgumentsError,
             "Invalid argument. {host: #{host}}"
      end

      def fail_invalid_timeout
        return if timeout.integer?

        fail FinAppsCore::InvalidArgumentsError,
             "Invalid argument. {timeout: #{timeout}}"
      end

      def valid_host?
        host.start_with?('http://', 'https://')
      end

      def remove_empty_options(hash)
        hash.compact
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
finapps_core-5.0.13 lib/finapps_core/rest/configuration.rb