spreedly-core-ruby 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,12 +1,14 @@
1
1
  require 'set'
2
2
 
3
3
  require 'httparty'
4
+ require 'active_support/core_ext/hash/conversions'
4
5
 
5
- require 'spreedly_core/base'
6
- require 'spreedly_core/payment_method'
7
- require 'spreedly_core/gateway'
8
- require 'spreedly_core/test_gateway'
9
- require 'spreedly_core/transactions'
6
+ require 'spreedly-core-ruby/base'
7
+ require 'spreedly-core-ruby/payment_method'
8
+ require 'spreedly-core-ruby/gateway'
9
+ require 'spreedly-core-ruby/test_gateway'
10
+ require 'spreedly-core-ruby/transactions'
11
+ require 'active_support/core_ext/hash/conversions'
10
12
 
11
13
  module SpreedlyCore
12
14
  # Hash of user friendly credit card name to SpreedlyCore API name
@@ -18,6 +20,7 @@ module SpreedlyCore
18
20
  }
19
21
 
20
22
  class Error < RuntimeError; end
23
+
21
24
  # Custom exception which occurs when a request to SpreedlyCore times out
22
25
  # See SpreedlyCore::Base.default_timeout
23
26
  class TimeOutError < Error; end
@@ -27,6 +30,13 @@ module SpreedlyCore
27
30
  end
28
31
  end
29
32
 
33
+ class UnprocessableRequest < Error
34
+ def initialize(errors)
35
+ errors = [errors] unless errors.is_a?(Array)
36
+ super(errors.join("\n"))
37
+ end
38
+ end
39
+
30
40
  # Configure SpreedlyCore with a particular account.
31
41
  # Strongly prefers environment variables for credentials
32
42
  # and will issue a stern warning should they not be present.
@@ -60,6 +70,10 @@ module SpreedlyCore
60
70
  Base.gateway_token = gateway_token
61
71
  end
62
72
 
73
+ def self.gateway_token
74
+ Base.gateway_token
75
+ end
76
+
63
77
  # returns the configured SpreedlyCore login
64
78
  def self.login; Base.login; end
65
79
 
@@ -5,15 +5,16 @@ module SpreedlyCore
5
5
 
6
6
  # Net::HTTP::Options is configured to not have a body.
7
7
  # Lets give it the body it's always dreamed of
8
+ old_verbose, $VERBOSE = $VERBOSE, nil
8
9
  Net::HTTP::Options::RESPONSE_HAS_BODY = true
10
+ $VERBOSE = old_verbose
9
11
 
10
12
  format :xml
11
13
 
12
14
  # timeout requests after 10 seconds
13
15
  default_timeout 10
14
16
 
15
- #base_uri "https://spreedlycore.com/#{API_VERSION}"
16
- base_uri "http://core.spreedly.dev:11001/#{API_VERSION}"
17
+ base_uri "https://www.spreedlycore.com/#{API_VERSION}"
17
18
 
18
19
  def self.configure(login, secret, options = {})
19
20
  @@login = login
@@ -34,7 +35,7 @@ module SpreedlyCore
34
35
  # make a put request to path
35
36
  # If the request succeeds, provide the respones to the &block
36
37
  def self.verify_put(path, options={}, &block)
37
- verify_request(:put, path, options, &block)
38
+ verify_request(:put, path, options, 200, 422, &block)
38
39
  end
39
40
 
40
41
  # make a get request to path
@@ -70,6 +71,10 @@ module SpreedlyCore
70
71
  raise InvalidResponse.new(response, "Expected parsed response to contain key '#{options[:has_key]}'")
71
72
  end
72
73
 
74
+ if (response.code == 422 && !response.parsed_response.nil? && response.parsed_response.has_key?("errors"))
75
+ raise UnprocessableRequest.new(response.parsed_response["errors"]["error"])
76
+ end
77
+
73
78
  block.call(response).tap do |obj|
74
79
  obj.instance_variable_set("@http_code", response.code)
75
80
  end
@@ -0,0 +1,59 @@
1
+ module SpreedlyCore
2
+ class Gateway < Base
3
+ attr_reader(:name, :token, :gateway_type, :auth_modes, :supports_capture,
4
+ :supports_authorize, :supports_purchase, :supports_void,
5
+ :supports_credit, :redacted)
6
+
7
+ # returns an array of Gateway which are supported
8
+ def self.supported_gateways
9
+ verify_options("/gateways.xml") do |response|
10
+ response.parsed_response["gateways"]["gateway"].map{|h| new(h) }
11
+ end
12
+ end
13
+
14
+ # returns an array of all the Gateways owned by the account
15
+ def self.all
16
+ verify_get("/gateways.xml") do |response|
17
+ # will return Hash if only 1 gateways->gateway, Array otherwise
18
+ gateways = begin
19
+ response.parsed_response["gateways"]["gateway"]
20
+ rescue
21
+ nil
22
+ end
23
+ if gateways
24
+ gateways = [gateways] unless gateways.is_a?(Array)
25
+
26
+ return gateways.collect{|gateway_hash| new gateway_hash}
27
+ end
28
+ end
29
+
30
+ return []
31
+ end
32
+
33
+ def self.create(gateway_options)
34
+ raise ArgumentError.new("gateway_options must be a hash") unless gateway_options.is_a?(Hash)
35
+
36
+ opts = {
37
+ :headers => {"Content-Type" => "application/xml"},
38
+ :body => gateway_options.to_xml(:root => :gateway, :dasherize => false),
39
+ }
40
+
41
+ verify_post("/gateways.xml", opts) do |response|
42
+ return new response.parsed_response["gateway"]
43
+ end
44
+ end
45
+
46
+ def initialize(attrs={})
47
+ attrs.merge!(attrs.delete("characteristics") || {})
48
+ super(attrs)
49
+ end
50
+
51
+ def use!
52
+ self.class.gateway_token = self.token
53
+ end
54
+
55
+ def ==(other)
56
+ self.token == other.token
57
+ end
58
+ end
59
+ end
@@ -25,6 +25,12 @@ module SpreedlyCore
25
25
  end
26
26
  end
27
27
 
28
+ def self.create(credit_card)
29
+ verify_post("/payment_methods.xml", :body => {:credit_card => credit_card}) do |response|
30
+ AddPaymentMethodTransaction.new(response.parsed_response["transaction"])
31
+ end
32
+ end
33
+
28
34
  # Create a new PaymentMethod based on the attrs hash and then validate
29
35
  def initialize(attrs={})
30
36
  super(attrs)
@@ -33,14 +39,14 @@ module SpreedlyCore
33
39
 
34
40
  # Retain the payment method
35
41
  def retain
36
- verify_put("/payment_methods/#{token}/retain.xml", :body => {}, :has_key => "transaction") do |response|
42
+ self.class.verify_put("/payment_methods/#{token}/retain.xml", :body => {}, :has_key => "transaction") do |response|
37
43
  RetainTransaction.new(response.parsed_response["transaction"])
38
44
  end
39
45
  end
40
46
 
41
47
  # Redact the payment method
42
48
  def redact
43
- verify_put("/payment_methods/#{token}/redact.xml", :body => {}, :has_key => "transaction") do |response|
49
+ self.class.verify_put("/payment_methods/#{token}/redact.xml", :body => {}, :has_key => "transaction") do |response|
44
50
  RedactTransaction.new(response.parsed_response["transaction"])
45
51
  end
46
52
  end
@@ -55,6 +61,18 @@ module SpreedlyCore
55
61
  purchase_or_authorize(:authorize, amount, currency, _gateway_token, ip_address)
56
62
  end
57
63
 
64
+ # Update the attributes of a payment method
65
+ def update(attributes)
66
+ opts = {
67
+ :headers => {"Content-Type" => "application/xml"},
68
+ :body => attributes.to_xml(:root => "payment_method", :dasherize => false)
69
+ }
70
+
71
+ self.class.verify_put("/payment_methods/#{token}.xml", opts) do |response|
72
+ PaymentMethod.new(response.parsed_response["payment_method"])
73
+ end
74
+ end
75
+
58
76
  # Returns the URL that CC data should be submitted to.
59
77
  def self.submit_url
60
78
  Base.base_uri + '/payment_methods'
@@ -38,24 +38,26 @@ module SpreedlyCore
38
38
  end
39
39
 
40
40
  class PaymentMethod
41
-
42
41
  # Call spreedly core to create a test token.
43
42
  # pass_through_data will be added as the "data" field.
44
43
  #
45
- def self.create_test_token(cc_data={}, pass_through_data=nil)
46
- data = cc_data.merge(:redirect_url => "http://example.com",
47
- :api_login => SpreedlyCore::Base.login,
48
- :data => pass_through_data)
49
-
50
- response = self.post("/payment_methods", :body => data, :no_follow => true)
51
- rescue HTTParty::RedirectionTooDeep => e
52
- if e.response.body =~ /href="(.*?)"/
53
- # rescuing the RedirectionTooDeep exception is apparently the way to
54
- # handle redirect following
55
- token = CGI::parse(URI.parse($1).query)["token"].first
44
+ def self.create_test_token(cc_overrides = {})
45
+ card = {
46
+ :first_name => "John",
47
+ :last_name => "Foo",
48
+ :card_type => :visa,
49
+ :number => '4111111111111111',
50
+ :verification_value => 123,
51
+ :month => 4,
52
+ :year => Time.now.year + 1
53
+ }
54
+ if cc_overrides.is_a?(Hash)
55
+ overrides = cc_overrides[:credit_card] || cc_overrides["credit_card"] || cc_overrides
56
+ card.merge!(overrides)
56
57
  end
57
- raise "Could not find token in body: #{e.response.body}" if token.nil?
58
- return token
58
+
59
+ pm = PaymentMethod.create(card)
60
+ pm.payment_method["token"]
59
61
  end
60
62
  end
61
63
  end
@@ -0,0 +1,16 @@
1
+ module SpreedlyCore
2
+ class TestGateway < Gateway
3
+ # gets a test gateway, creates if necessary
4
+ def self.get_or_create
5
+ # get the list of gateways and return the first test gateway
6
+ # if none exist, create one
7
+ gateways = Gateway.all
8
+ gateways.each do |g|
9
+ return g if g.gateway_type == "test" && g.redacted == false
10
+ end
11
+
12
+ # no test gateway yet, let's create one
13
+ return Gateway.create(:gateway_type => "test")
14
+ end
15
+ end
16
+ end
@@ -138,5 +138,12 @@ module SpreedlyCore
138
138
  handles "Credit"
139
139
  attr_reader :reference_token
140
140
  end
141
+
142
+ class AddPaymentMethodTransaction < Transaction
143
+ include HasIpAddress
144
+
145
+ handles "AddPaymentMethod"
146
+ attr_reader :payment_method
147
+ end
141
148
 
142
149
  end
@@ -1,4 +1,4 @@
1
1
  module SpreedlyCore
2
- Version = VERSION = "0.1.0"
2
+ Version = VERSION = "0.1.2"
3
3
  ApiVersion = API_VERSION = "v1"
4
4
  end
@@ -4,23 +4,31 @@ module SpreedlyCore
4
4
  class ConfigureTest < Test::Unit::TestCase
5
5
 
6
6
  def test_configure
7
- SpreedlyCore.configure :login => "test",
8
- :secret => "secret",
9
- :gateway_token => "token"
10
-
11
- SpreedlyCore.configure 'login' => 'test',
12
- 'secret' => 'secret',
13
- 'gateway_token' => 'token'
14
-
15
- SpreedlyCore.configure 'test', 'secret', 'token'
7
+ old_verbose, $VERBOSE = $VERBOSE, nil
8
+
9
+ old_login = ENV['SPREEDLYCORE_API_LOGIN']
10
+ old_secret = ENV['SPREEDLYCORE_API_SECRET']
11
+ ENV['SPREEDLYCORE_API_LOGIN'] = nil
12
+ ENV['SPREEDLYCORE_API_SECRET'] = nil
13
+
14
+ assert_nothing_raised ArgumentError do
15
+ SpreedlyCore.configure :api_login => "test",
16
+ :api_secret => "secret",
17
+ :gateway_token => "token"
18
+ end
16
19
 
17
20
  assert_raises ArgumentError do
18
21
  SpreedlyCore.configure
19
22
  end
20
23
 
21
- assert_raises ArgumentError do
22
- SpreedlyCore.configure {}
24
+ ENV['SPREEDLYCORE_API_LOGIN'] = old_login
25
+ ENV['SPREEDLYCORE_API_SECRET'] = old_secret
26
+
27
+ assert_nothing_raised ArgumentError do
28
+ SpreedlyCore.configure
23
29
  end
30
+ ensure
31
+ $VERBOSE = old_verbose
24
32
  end
25
33
 
26
34
  end
@@ -0,0 +1,23 @@
1
+ require 'test_common'
2
+
3
+ module SpreedlyCore
4
+ class GatewayTest < Test::Unit::TestCase
5
+ include TestCommon
6
+
7
+ def test_gets_all
8
+ tg1 = TestGateway.get_or_create
9
+ all = Gateway.all
10
+ assert all.include?(tg1)
11
+
12
+ tg2 = Gateway.create(:gateway_type => 'test')
13
+ all = Gateway.all
14
+ [tg1, tg2].each{|g| assert all.include?(g)}
15
+ end
16
+
17
+ def test_create_succeeds_for_test
18
+ assert_nothing_raised InvalidResponse do
19
+ Gateway.create(:gateway_type => 'test')
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,4 +1,4 @@
1
- require 'test_helper'
1
+ require 'test_common'
2
2
 
3
3
 
4
4
  # In order to run tests
@@ -6,14 +6,7 @@ require 'test_helper'
6
6
  # 2. Add your spreedly core credentials to test/config/spreedly_core.yml
7
7
  module SpreedlyCore
8
8
  class SpreedlyCoreTest < Test::Unit::TestCase
9
- include TestHelper
10
- include TestFactory
11
-
12
- def setup
13
- config = YAML.load(File.read(File.dirname(__FILE__) + '/config/spreedly_core.yml'))
14
- SpreedlyCore.configure(config)
15
- PaymentMethod.reset_additional_required_cc_fields
16
- end
9
+ include TestCommon
17
10
 
18
11
  def test_mocked_500_error
19
12
  with_disabled_network do
@@ -0,0 +1,20 @@
1
+ require 'test_helper'
2
+
3
+ module SpreedlyCore
4
+ module TestCommon
5
+ include TestHelper
6
+ include TestFactory
7
+
8
+ def setup
9
+ raise "environment variables for SPREEDLYCORE_API_LOGIN and SPREEDLYCORE_API_SECRET must be set" unless ENV['SPREEDLYCORE_API_LOGIN'] && ENV['SPREEDLYCORE_API_SECRET']
10
+
11
+ SpreedlyCore.configure
12
+ unless SpreedlyCore.gateway_token
13
+ gateway = SpreedlyCore::TestGateway.get_or_create
14
+ gateway.use!
15
+ end
16
+
17
+ PaymentMethod.reset_additional_required_cc_fields
18
+ end
19
+ end
20
+ end
@@ -1,9 +1,8 @@
1
1
  module SpreedlyCore
2
2
  module TestFactory
3
3
  def given_a_payment_method(cc_card=:master, card_options={})
4
- token = PaymentMethod.create_test_token cc_data(cc_card, card_options), "customer-42"
5
- assert payment_method = PaymentMethod.find(token)
6
- assert_equal "customer-42", payment_method.data
4
+ token = PaymentMethod.create_test_token cc_data(cc_card, card_options)
5
+ assert payment_method = PaymentMethod.find(token), "Couldn't find payment method with token(#{token})"
7
6
  assert_equal token, payment_method.token
8
7
  payment_method
9
8
  end
@@ -92,7 +91,7 @@ module SpreedlyCore
92
91
  assert_equal credit_amount, credit.amount
93
92
  assert_equal ip_address, credit.ip
94
93
  assert credit.succeeded?
95
- assert CreditTransaction, credit.class
94
+ assert_equal CreditTransaction, credit.class
96
95
  credit
97
96
  end
98
97
  end
@@ -8,8 +8,8 @@ Bundler.setup(:default, :development)
8
8
  Bundler.require(:default, :development)
9
9
 
10
10
  $LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib'
11
- require 'spreedly_core'
12
- require 'spreedly_core/test_extensions'
11
+ require 'spreedly-core-ruby'
12
+ require 'spreedly-core-ruby/test_extensions'
13
13
  require 'test_factory'
14
14
 
15
15
  require 'webmock/test_unit'
@@ -20,6 +20,7 @@ require 'webmock'
20
20
 
21
21
  class Test::Unit::TestCase
22
22
  def assert_false(test, failure_message=nil)
23
+ failure_message = "" if failure_message.nil?
23
24
  assert(!test, failure_message)
24
25
  end
25
26
 
@@ -1,15 +1,8 @@
1
- require 'test_helper'
1
+ require 'test_common'
2
2
 
3
3
  module SpreedlyCore
4
4
  class TransactionTest < Test::Unit::TestCase
5
- include TestHelper
6
- include TestFactory
7
-
8
- def setup
9
- config = YAML.load(File.read(File.dirname(__FILE__) + '/config/spreedly_core.yml'))
10
- SpreedlyCore.configure(config)
11
- PaymentMethod.reset_additional_required_cc_fields
12
- end
5
+ include TestCommon
13
6
 
14
7
  def test_not_found_transaction
15
8
  assert_raises InvalidResponse do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spreedly-core-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-03-14 00:00:00.000000000Z
13
+ date: 2012-03-20 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: httparty
17
- requirement: &70176154487420 !ruby/object:Gem::Requirement
17
+ requirement: &70142956731160 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - =
@@ -22,10 +22,32 @@ dependencies:
22
22
  version: 0.7.7
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70176154487420
25
+ version_requirements: *70142956731160
26
+ - !ruby/object:Gem::Dependency
27
+ name: activesupport
28
+ requirement: &70142956730560 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 3.0.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: *70142956730560
37
+ - !ruby/object:Gem::Dependency
38
+ name: builder
39
+ requirement: &70142956730120 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ type: :runtime
46
+ prerelease: false
47
+ version_requirements: *70142956730120
26
48
  - !ruby/object:Gem::Dependency
27
49
  name: ruby-debug19
28
- requirement: &70176154486600 !ruby/object:Gem::Requirement
50
+ requirement: &70142956729500 !ruby/object:Gem::Requirement
29
51
  none: false
30
52
  requirements:
31
53
  - - ! '>='
@@ -33,10 +55,10 @@ dependencies:
33
55
  version: '0'
34
56
  type: :development
35
57
  prerelease: false
36
- version_requirements: *70176154486600
58
+ version_requirements: *70142956729500
37
59
  - !ruby/object:Gem::Dependency
38
60
  name: rake
39
- requirement: &70176154411740 !ruby/object:Gem::Requirement
61
+ requirement: &70142956728940 !ruby/object:Gem::Requirement
40
62
  none: false
41
63
  requirements:
42
64
  - - =
@@ -44,10 +66,10 @@ dependencies:
44
66
  version: 0.8.7
45
67
  type: :development
46
68
  prerelease: false
47
- version_requirements: *70176154411740
69
+ version_requirements: *70142956728940
48
70
  - !ruby/object:Gem::Dependency
49
71
  name: webmock
50
- requirement: &70176154410180 !ruby/object:Gem::Requirement
72
+ requirement: &70142956728360 !ruby/object:Gem::Requirement
51
73
  none: false
52
74
  requirements:
53
75
  - - ~>
@@ -55,8 +77,10 @@ dependencies:
55
77
  version: 1.6.2
56
78
  type: :development
57
79
  prerelease: false
58
- version_requirements: *70176154410180
59
- description:
80
+ version_requirements: *70142956728360
81
+ description: Spreedly Core is a cloud service that allows you to store credit cards
82
+ and run transactions against them, enabling you to accept payments on your website
83
+ while avoiding all liability and PCI compliance requirements.
60
84
  email: support@spreedly.com
61
85
  executables: []
62
86
  extensions: []
@@ -65,18 +89,19 @@ files:
65
89
  - README.md
66
90
  - Rakefile
67
91
  - LICENSE
68
- - lib/spreedly_core/base.rb
69
- - lib/spreedly_core/gateway.rb
70
- - lib/spreedly_core/payment_method.rb
71
- - lib/spreedly_core/test_extensions.rb
72
- - lib/spreedly_core/test_gateway.rb
73
- - lib/spreedly_core/transactions.rb
74
- - lib/spreedly_core/version.rb
75
- - lib/spreedly_core.rb
76
- - test/config/spreedly_core.yml.example
92
+ - lib/spreedly-core-ruby/base.rb
93
+ - lib/spreedly-core-ruby/gateway.rb
94
+ - lib/spreedly-core-ruby/payment_method.rb
95
+ - lib/spreedly-core-ruby/test_extensions.rb
96
+ - lib/spreedly-core-ruby/test_gateway.rb
97
+ - lib/spreedly-core-ruby/transactions.rb
98
+ - lib/spreedly-core-ruby/version.rb
99
+ - lib/spreedly-core-ruby.rb
77
100
  - test/configuration_test.rb
78
101
  - test/factories.rb
102
+ - test/gateway_test.rb
79
103
  - test/spreedly_core_test.rb
104
+ - test/test_common.rb
80
105
  - test/test_factory.rb
81
106
  - test/test_helper.rb
82
107
  - test/transaction_test.rb
@@ -92,22 +117,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
92
117
  - - ! '>='
93
118
  - !ruby/object:Gem::Version
94
119
  version: '0'
95
- segments:
96
- - 0
97
- hash: 2785672719963464473
98
120
  required_rubygems_version: !ruby/object:Gem::Requirement
99
121
  none: false
100
122
  requirements:
101
123
  - - ! '>='
102
124
  - !ruby/object:Gem::Version
103
125
  version: '0'
104
- segments:
105
- - 0
106
- hash: 2785672719963464473
107
126
  requirements: []
108
127
  rubyforge_project:
109
128
  rubygems_version: 1.8.17
110
129
  signing_key:
111
130
  specification_version: 3
112
- summary: Ruby API for Spreedly Core
131
+ summary: Ruby interface for Spreedly Core
113
132
  test_files: []
133
+ has_rdoc:
@@ -1,23 +0,0 @@
1
- module SpreedlyCore
2
- class Gateway < Base
3
- attr_reader(:name, :token, :gateway_type, :auth_modes, :supports_capture,
4
- :supports_authorize, :supports_purchase, :supports_void,
5
- :supports_credit, :redacted)
6
-
7
- # returns an array of Gateway which are supported
8
- def self.supported_gateways
9
- verify_options("/gateways.xml") do |response|
10
- response.parsed_response["gateways"]["gateway"].map{|h| new(h) }
11
- end
12
- end
13
-
14
- def initialize(attrs={})
15
- attrs.merge!(attrs.delete("characteristics") || {})
16
- super(attrs)
17
- end
18
-
19
- def use!
20
- self.class.gateway_token = self.token
21
- end
22
- end
23
- end
@@ -1,32 +0,0 @@
1
- module SpreedlyCore
2
- class TestGateway < Gateway
3
- # gets a test gateway, creates if necessary
4
- def self.get_or_create
5
- # get the list of gateways and return the first test gateway
6
- # if none exist, create one
7
- verify_get("/gateways.xml") do |response|
8
- # will return Hash if only 1 gateways->gateway, Array otherwise
9
- gateways = response.parsed_response["gateways"]["gateway"]
10
- gateways = [gateways] unless gateways.is_a?(Array)
11
-
12
- gateways.each do |gateway_hash|
13
- g = new gateway_hash
14
- return g if g.gateway_type == "test" && g.redacted == false
15
- end unless gateways.nil?
16
- end
17
-
18
- # no test gateway yet, let's create one
19
- opts = {
20
- :headers => {"Content-Type" => "application/xml"},
21
- :body => '<gateway><gateway_type>test</gateway_type></gateway>'
22
- }
23
-
24
- verify_post("/gateways.xml", opts) do |response|
25
- return new response.parsed_response["gateway"]
26
- end
27
-
28
- # HTTP 724
29
- return nil
30
- end
31
- end
32
- end
@@ -1,3 +0,0 @@
1
- login: <Login Key>
2
- secret: <Secret Key>
3
- gateway_token: 'JncEWj22g59t3CRB1VnPXmUUgKc' # test gateway