spreedly-core-ruby 0.1.0 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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