module Braintree # The following configuration attributes need to be set to use the gem: # * merchant_id # * public_key # * private_key # * environment # # By default, the logger will log to +STDOUT+. The log level is set to info. # The logger can be set to any Logger object. module Configuration API_VERSION = "1" # :nodoc: class << self attr_accessor :logger attr_writer :merchant_id, :public_key, :private_key end def self.expectant_reader(*attributes) # :nodoc: attributes.each do |attribute| (class << self; self; end).send(:define_method, attribute) do attribute_value = instance_variable_get("@#{attribute}") raise ConfigurationError.new(attribute.to_s, "needs to be set") unless attribute_value attribute_value end end end expectant_reader :environment, :merchant_id, :public_key, :private_key def self.base_merchant_url # :nodoc: "#{protocol}://#{server}:#{port}#{base_merchant_path}" end def self.base_merchant_path # :nodoc: "/merchants/#{Braintree::Configuration.merchant_id}" end def self.ca_file # :nodoc: case environment when :qa, :sandbox File.expand_path(File.join(File.dirname(__FILE__), "..", "ssl", "valicert_ca.crt")) when :production File.expand_path(File.join(File.dirname(__FILE__), "..", "ssl", "securetrust_ca.crt")) end end # Sets the Braintree environment to use. Valid values are :sandbox and :production def self.environment=(env) unless [:development, :qa, :sandbox, :production].include?(env) raise ArgumentError, "#{env.inspect} is not a valid environment" end @environment = env end def self.logger # :nodoc: @logger ||= _default_logger end def self.port # :nodoc: case environment when :development ENV['GATEWAY_PORT'] || 3000 when :production, :qa, :sandbox 443 end end def self.protocol # :nodoc: ssl? ? "https" : "http" end def self.server # :nodoc: case environment when :development "localhost" when :production "www.braintreegateway.com" when :qa "qa-master.braintreegateway.com" when :sandbox "sandbox.braintreegateway.com" end end def self.ssl? # :nodoc: case environment when :development false when :production, :qa, :sandbox true end end def self._default_logger # :nodoc: logger = Logger.new(STDOUT) logger.level = Logger::INFO logger end end end