envylabs/vaulted_billing

View on GitHub
lib/vaulted_billing/configuration.rb

Summary

Maintainability
A
25 mins
Test Coverage

module VaultedBilling
  ##
  # This configuration holds the default values to use when instantiating
  # VaultedBilling gateways.  This configuration is accessed via
  # VaultedBilling.config, or set en mass via a Hash with
  # VaultedBilling.set_config(...).
  #
  class Configuration
    ##
    # This class holds default configuration options for a specific
    # gateway in the library.
    #
    class GatewayConfiguration
      attr_accessor :username, :password, :test_mode, :raw_options

      ##
      # Possible options are:
      #
      # * password - The default password for the gateway.
      # * test_mode - A boolean indicating whether or not to use the test mode of the gateway (sandbox server, test API, etc.)
      # * username - The default username for the gateway.
      #
      # Unless otherwise defined, test_mode will default to being true.
      #
      def initialize(options = {}, &block)
        options = options.with_indifferent_access
        self.username = options[:username]
        self.password = options[:password]
        self.raw_options = options[:raw_options]
        self.test_mode = options.has_key?(:test_mode) ?
          options[:test_mode] : true
        yield(self) if block_given?
      end
    end

    attr_accessor :logger
    alias :logger? :logger

    attr_accessor :ca_file

    attr_accessor :test_mode

    ##
    # Possible options are as follows:
    #
    # * authorize_net_cim - A hash of GatewayConfiguration options for the Authorize.net CIM
    # * bogus - A hash of GatewayConfiguration options for the Bogus gateway
    # * nmi_customer_vault - A hash of GatewayConfiguration options for the NMI Customer Vault
    # * test_mode - A boolean indicating whether or not the system defaults to using the test end points on the gateways.
    #
    def initialize(options = {})
      options = options.with_indifferent_access
      self.test_mode = options.has_key?(:test_mode) ? options[:test_mode] : true
      @_authorize_net_cim = GatewayConfiguration.new(options[:authorize_net_cim]) if options[:authorize_net_cim]
      @_ipcommerce = GatewayConfiguration.new(options[:ipcommerce]) if options[:ipcommerce]
      @_nmi_customer_vault = GatewayConfiguration.new(options[:nmi_customer_vault]) if options[:nmi_customer_vault]
      @_bogus = GatewayConfiguration.new(options[:bogus]) if options[:bogus]
      @ca_file = File.expand_path('../../ext/cacert.pem', __FILE__)
    end

    ##
    # Returns a VaultedBilling::Configuration::GatewayConfiguration
    # instance to be used for defining default settings for the
    # Authorize.net CIM gateway.
    #
    def authorize_net_cim
      @_authorize_net_cim ||= GatewayConfiguration.new
    end

    ##
    # Returns a VaultedBilling::Configuration::GatewayConfiguration
    # instance to be used for defining default settings for the
    # IP Commerce gateway.
    #
    def ipcommerce
      @_ipcommerce ||= GatewayConfiguration.new
    end

    ##
    # Returns a VaultedBilling::Configuration::GatewayConfiguration
    # instance to be used for defining default settings for the
    # NMI Customer Vault gateway.
    #
    def nmi_customer_vault
      @_nmi_customer_vault ||= GatewayConfiguration.new
    end

    ##
    # Returns a VaultedBilling::Configuration::GatewayConfiguration
    # instance to be used for defining default settings for the
    # Bogus gateway.
    #
    def bogus
      @_bogus ||= GatewayConfiguration.new
    end
  end
end