Class: Braintree::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/braintree/configuration.rb

Constant Summary collapse

API_VERSION =

:nodoc:

"4"
DEFAULT_ENDPOINT =

:nodoc:

"api"
READABLE_ATTRIBUTES =
[
  :merchant_id,
  :public_key,
  :private_key,
  :client_id,
  :client_secret,
  :access_token,
  :environment,
]
WRITABLE_ATTRIBUTES =
[
  :custom_user_agent,
  :endpoint,
  :http_open_timeout,
  :http_read_timeout,
  :logger,
  :merchant_id,
  :public_key,
  :private_key,
  :environment,
]

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Configuration

Returns a new instance of Configuration.



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/braintree/configuration.rb', line 90

def initialize(options = {})
  WRITABLE_ATTRIBUTES.each do |attr|
    instance_variable_set "@#{attr}", options[attr]
  end

  _check_for_mixed_credentials(options)

  parser = Braintree::CredentialsParser.new
  if options[:client_id] || options[:client_secret]
    parser.parse_client_credentials(options[:client_id], options[:client_secret])
    @client_id = parser.client_id
    @client_secret = parser.client_secret
    @environment = parser.environment
  elsif options[:access_token]
    parser.parse_access_token(options[:access_token])
    @access_token = parser.access_token
    @environment = parser.environment
    @merchant_id = parser.merchant_id
  else
    @merchant_id = options[:merchant_id] || options[:partner_id]
  end
end

Class Method Details

._default_loggerObject

:nodoc:



220
221
222
223
224
# File 'lib/braintree/configuration.rb', line 220

def self._default_logger # :nodoc:
  logger = Logger.new(STDOUT)
  logger.level = Logger::INFO
  logger
end

.environment=(env) ⇒ Object

Sets the Braintree environment to use. Valid values are :sandbox and :production



45
46
47
48
49
50
# File 'lib/braintree/configuration.rb', line 45

def self.environment=(env)
  unless [:development, :qa, :sandbox, :production].include?(env)
    raise ArgumentError, "#{env.inspect} is not a valid environment"
  end
  @environment = env
end

.expectant_reader(*attributes) ⇒ Object

:nodoc:



33
34
35
36
37
38
39
40
41
# File 'lib/braintree/configuration.rb', line 33

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("Braintree::Configuration.#{attribute.to_s} needs to be set") unless attribute_value
      attribute_value
    end
  end
end

.gatewayObject

:nodoc:



52
53
54
# File 'lib/braintree/configuration.rb', line 52

def self.gateway # :nodoc:
  Braintree::Gateway.new(instantiate)
end

.http_open_timeoutObject



70
71
72
# File 'lib/braintree/configuration.rb', line 70

def self.http_open_timeout
  @http_open_timeout ||= 60
end

.http_read_timeoutObject



74
75
76
# File 'lib/braintree/configuration.rb', line 74

def self.http_read_timeout
  @http_read_timeout ||= 60
end

.instantiateObject

:nodoc:



56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/braintree/configuration.rb', line 56

def self.instantiate # :nodoc:
  config = new(
    :custom_user_agent => @custom_user_agent,
    :endpoint => @endpoint,
    :environment => environment,
    :http_open_timeout => http_open_timeout,
    :http_read_timeout => http_read_timeout,
    :logger => logger,
    :merchant_id => merchant_id,
    :private_key => private_key,
    :public_key => public_key
  )
end

.loggerObject



78
79
80
# File 'lib/braintree/configuration.rb', line 78

def self.logger
  @logger ||= _default_logger
end

.sha256_signature_serviceObject



86
87
88
# File 'lib/braintree/configuration.rb', line 86

def self.sha256_signature_service
  instantiate.sha256_signature_service
end

.signature_serviceObject



82
83
84
# File 'lib/braintree/configuration.rb', line 82

def self.signature_service
  instantiate.signature_service
end

Instance Method Details

#_check_for_mixed_credentials(options) ⇒ Object



113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'lib/braintree/configuration.rb', line 113

def _check_for_mixed_credentials(options)
  if (options[:client_id] || options[:client_secret]) && (options[:public_key] || options[:private_key])
    raise ConfigurationError.new("Braintree::Gateway cannot be initialized with mixed credential types: client_id and client_secret mixed with public_key and private_key.")
  end

  if (options[:client_id] || options[:client_secret]) && (options[:access_token])
    raise ConfigurationError.new("Braintree::Gateway cannot be initialized with mixed credential types: client_id and client_secret mixed with access_token.")
  end

  if (options[:public_key] || options[:private_key]) && (options[:access_token])
    raise ConfigurationError.new("Braintree::Gateway cannot be initialized with mixed credential types: public_key and private_key mixed with access_token.")
  end
end

#api_versionObject

:nodoc:



127
128
129
# File 'lib/braintree/configuration.rb', line 127

def api_version # :nodoc:
  API_VERSION
end

#assert_has_access_token_or_keysObject



240
241
242
243
244
# File 'lib/braintree/configuration.rb', line 240

def assert_has_access_token_or_keys
  if (public_key.nil? || private_key.nil?) && access_token.nil?
    raise ConfigurationError.new("Braintree::Gateway public_key and private_key are required.")
  end
end

#assert_has_client_credentialsObject



234
235
236
237
238
# File 'lib/braintree/configuration.rb', line 234

def assert_has_client_credentials
  if client_id.nil? || client_secret.nil?
    raise ConfigurationError.new("Braintree::Gateway client_id and client_secret are required.")
  end
end

#auth_urlObject



193
194
195
196
197
198
199
200
201
202
203
204
# File 'lib/braintree/configuration.rb', line 193

def auth_url
  case @environment
  when :development, :integration
    "http://auth.venmo.dev:9292"
  when :production
    "https://auth.venmo.com"
  when :qa
    "https://auth.venmo.qa2.braintreegateway.com"
  when :sandbox
    "https://auth.venmo.sandbox.braintreegateway.com"
  end
end

#base_merchant_pathObject

:nodoc:



131
132
133
# File 'lib/braintree/configuration.rb', line 131

def base_merchant_path # :nodoc:
  "/merchants/#{merchant_id}"
end

#base_merchant_urlObject

:nodoc:



139
140
141
# File 'lib/braintree/configuration.rb', line 139

def base_merchant_url # :nodoc:
  "#{base_url}#{base_merchant_path}"
end

#base_urlObject



135
136
137
# File 'lib/braintree/configuration.rb', line 135

def base_url
  "#{protocol}://#{server}:#{port}"
end

#ca_fileObject

:nodoc:



143
144
145
# File 'lib/braintree/configuration.rb', line 143

def ca_file # :nodoc:
  File.expand_path(File.join(File.dirname(__FILE__), "..", "ssl", "api_braintreegateway_com.ca.crt"))
end

#client_credentials?Boolean

Returns:

  • (Boolean)


230
231
232
# File 'lib/braintree/configuration.rb', line 230

def client_credentials?
  !client_id.nil?
end

#endpointObject



147
148
149
# File 'lib/braintree/configuration.rb', line 147

def endpoint
  @endpoint || DEFAULT_ENDPOINT
end

#httpObject

:nodoc:



151
152
153
# File 'lib/braintree/configuration.rb', line 151

def http # :nodoc:
  Http.new(self)
end

#http_open_timeoutObject



172
173
174
# File 'lib/braintree/configuration.rb', line 172

def http_open_timeout
  @http_open_timeout
end

#http_read_timeoutObject



176
177
178
# File 'lib/braintree/configuration.rb', line 176

def http_read_timeout
  @http_read_timeout
end

#inspectObject



226
227
228
# File 'lib/braintree/configuration.rb', line 226

def inspect
  super.gsub(/@private_key=\".*\"/, '@private_key="[FILTERED]"')
end

#loggerObject



155
156
157
# File 'lib/braintree/configuration.rb', line 155

def logger
  @logger ||= self.class._default_logger
end

#portObject

:nodoc:



159
160
161
162
163
164
165
166
# File 'lib/braintree/configuration.rb', line 159

def port # :nodoc:
  case @environment
  when :development, :integration
    ENV['GATEWAY_PORT'] || 3000
  when :production, :qa, :sandbox
    443
  end
end

#protocolObject

:nodoc:



168
169
170
# File 'lib/braintree/configuration.rb', line 168

def protocol # :nodoc:
  ssl? ? "https" : "http"
end

#serverObject

:nodoc:



180
181
182
183
184
185
186
187
188
189
190
191
# File 'lib/braintree/configuration.rb', line 180

def server # :nodoc:
  case @environment
  when :development, :integration
    "localhost"
  when :production
    "#{endpoint}.braintreegateway.com"
  when :qa
    "gateway.qa.braintreepayments.com"
  when :sandbox
    "api.sandbox.braintreegateway.com"
  end
end

#sha256_signature_serviceObject



250
251
252
# File 'lib/braintree/configuration.rb', line 250

def sha256_signature_service
  @sha256_signature_service ||= SignatureService.new(@private_key, SHA256Digest)
end

#signature_serviceObject



246
247
248
# File 'lib/braintree/configuration.rb', line 246

def signature_service
  @signature_service ||= SignatureService.new(@private_key)
end

#ssl?Boolean

:nodoc:

Returns:

  • (Boolean)


206
207
208
209
210
211
212
213
# File 'lib/braintree/configuration.rb', line 206

def ssl? # :nodoc:
  case @environment
  when :development, :integration
    false
  when :production, :qa, :sandbox
    true
  end
end

#user_agentObject

:nodoc:



215
216
217
218
# File 'lib/braintree/configuration.rb', line 215

def user_agent # :nodoc:
  base_user_agent = "Braintree Ruby Gem #{Braintree::Version::String}"
  @custom_user_agent ? "#{base_user_agent} (#{@custom_user_agent})" : base_user_agent
end