spreedly 2.0.18 → 2.0.19

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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/CHANGELOG.md +18 -0
  4. data/README.md +6 -2
  5. data/Rakefile +2 -14
  6. data/lib/spreedly/environment.rb +21 -1
  7. data/lib/spreedly/gateway_class.rb +1 -1
  8. data/lib/spreedly/payment_methods/payment_method.rb +1 -1
  9. data/lib/spreedly/receiver.rb +1 -1
  10. data/lib/spreedly/transactions/auth_purchase.rb +2 -5
  11. data/lib/spreedly/transactions/gateway_transaction.rb +6 -5
  12. data/lib/spreedly/transactions/purchase.rb +0 -3
  13. data/lib/spreedly/urls.rb +8 -0
  14. data/lib/spreedly/version.rb +1 -1
  15. data/spreedly.gemspec +14 -17
  16. data/test/credentials/credentials.yml.example +5 -0
  17. data/test/credentials/test_credentials.rb +1 -1
  18. data/test/helpers/creation_helper.rb +1 -1
  19. data/test/remote/remote_add_credit_card_test.rb +2 -2
  20. data/test/remote/remote_add_receiver_test.rb +2 -2
  21. data/test/remote/remote_deliver_payment_method_test.rb +3 -3
  22. data/test/remote/remote_gateway_options_test.rb +1 -1
  23. data/test/remote/remote_purchase_test.rb +24 -0
  24. data/test/remote/remote_recache_payment_method_test.rb +30 -0
  25. data/test/remote/remote_redact_receiver_test.rb +16 -0
  26. data/test/remote/remote_update_credit_card_test.rb +1 -1
  27. data/test/unit/add_credit_card_test.rb +1 -2
  28. data/test/unit/authorize_test.rb +7 -2
  29. data/test/unit/capture_test.rb +2 -0
  30. data/test/unit/find_payment_method_test.rb +1 -0
  31. data/test/unit/list_payment_methods_test.rb +1 -0
  32. data/test/unit/purchase_test.rb +58 -2
  33. data/test/unit/recache_payment_method_test.rb +34 -0
  34. data/test/unit/refund_test.rb +1 -0
  35. data/test/unit/response_stubs/authorization_stubs.rb +5 -2
  36. data/test/unit/response_stubs/capture_stubs.rb +5 -1
  37. data/test/unit/response_stubs/purchase_stubs.rb +105 -0
  38. data/test/unit/response_stubs/recache_payment_method_stubs.rb +53 -0
  39. data/test/unit/verify_test.rb +5 -2
  40. data/test/unit/void_test.rb +1 -0
  41. metadata +25 -14
  42. data/test/credentials/credentials.yml +0 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fee7ae1d3bf0eaf6126ead42e28a16367920632f
4
- data.tar.gz: b38482be678195d537c456b845fa6f1c33dcf7c7
3
+ metadata.gz: 0110d918dc588bb377b7d8cfb5071e438cb74103
4
+ data.tar.gz: 8afcecf45db7a9e8fc7da38d9fdffc7fa8566b8a
5
5
  SHA512:
6
- metadata.gz: e8637191e25984c4fa21fb0afe9ef517fbfc68c4bd714f9ffb000ace8348d9d91980aded43f8ae30311990791055ac769ff3c1217bc53e0606fd59b9ddc5a626
7
- data.tar.gz: ca75c0e0a89f28e5f19c87bea810e0939ae58e6d7d1e921ea0a7ee8e99bcd8dd1596f858032c2f740458c086cbf5035e90930742f738e8d56c2d51b3112728db
6
+ metadata.gz: 66bbfc2431d1aee375fffda01c43d1dba5b4c3c0440f3b5c24d8ba587bb5ad1521287f6afee507a1f39db8f3baddc615d71c229b6ededf8f0592df42cb6ff300
7
+ data.tar.gz: 2c3862d8c1eac3d9d5a1c53142210530b11302c70d79f510b51524e746f7368c7f8c606a492e7649f2216af3c51a579f3b10c3a5187b4181a823f7e86cf9bdc6
data/.gitignore CHANGED
@@ -5,5 +5,6 @@ pkg
5
5
  .bundle
6
6
  tmp
7
7
  vendor/ruby
8
- test/credentials/personal_credentials.yml
8
+ test/credentials/*.yml
9
9
  .ruby-version
10
+ .idea
data/CHANGELOG.md ADDED
@@ -0,0 +1,18 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ ## [Unreleased]
6
+
7
+ ## [2.0.19] - 2019-06-07
8
+ ### Added
9
+ - Lori Holden - Receiver redaction
10
+ - Lancelot Carlson - Recached payment method support
11
+ - @pawel-krysiak and @jeremywrowe - Support 3D-Secure transactions
12
+
13
+ ### Changed
14
+ - @therufs - Expose `display_api_url` on gateway
15
+ - @ZeusPerez - Expose `continue_caching` on transactions
16
+ - @adamcohen - Expose `transaction_type` on transaction
17
+ - @adamcohen - Expose `gateway_specific_response_fields` on transaction
18
+ - @adamcohen - Expose `payment_method_type` on transaction
data/README.md CHANGED
@@ -273,7 +273,7 @@ Here's how you can do it:
273
273
 
274
274
  ``` ruby
275
275
  options = {
276
- email: 'perrin@wot.com', number: '5555555555554444', month: 1, year: 2019, last_name: 'Aybara', first_name: 'Perrin', data: "occupation: Blacksmith"
276
+ email: 'perrin@wot.com', number: '5555555555554444', month: 1, year: 2023, last_name: 'Aybara', first_name: 'Perrin', data: "occupation: Blacksmith"
277
277
  }
278
278
  transaction = env.add_credit_card(options)
279
279
 
@@ -286,7 +286,7 @@ You can also retain the card immediately like so:
286
286
 
287
287
  ``` ruby
288
288
  options = {
289
- email: 'perrin@wot.com', number: '5555555555554444', month: 1, year: 2019, last_name: 'Aybara', first_name: 'Perrin', data: "occupation: Blacksmith", retained: true
289
+ email: 'perrin@wot.com', number: '5555555555554444', month: 1, year: 2023, last_name: 'Aybara', first_name: 'Perrin', data: "occupation: Blacksmith", retained: true
290
290
  }
291
291
  transaction = env.add_credit_card(options)
292
292
 
@@ -409,3 +409,7 @@ There are two rake tasks to help run the tests:
409
409
  rake test:remote # Run remote tests that actually hit the Spreedly site
410
410
  rake test:units # Run unit tests
411
411
  ```
412
+
413
+ To run remote tests you'll need to copy `test/credentials/credentials.yml.example` to `test/credentials/credentials.yml` and update the values of `environment_key` and `access_secret`.
414
+
415
+ When you're happy with your change, don't forget to add your contributions to CHANGELOG.md. We follow the changelog format found [here](https://keepachangelog.com/en/1.0.0/).
data/Rakefile CHANGED
@@ -2,20 +2,10 @@ require "bundler/gem_tasks"
2
2
 
3
3
  require 'rake/testtask'
4
4
 
5
- # Rake::TestTask.new do |t|
6
- # t.libs << 'test'
7
- # end
8
-
9
- # desc "Run tests"
10
- # task :default => :test
11
-
12
-
13
-
14
- desc "Run the unit test suite"
15
- task :default => 'test:units'
5
+ desc 'Run the unit test suite'
6
+ task default: 'test:units'
16
7
 
17
8
  namespace :test do
18
-
19
9
  Rake::TestTask.new(:units) do |t|
20
10
  t.pattern = 'test/unit/**/*_test.rb'
21
11
  t.libs << 'test'
@@ -27,6 +17,4 @@ namespace :test do
27
17
  t.libs << 'test'
28
18
  t.verbose = true
29
19
  end
30
-
31
20
  end
32
-
@@ -76,11 +76,22 @@ module Spreedly
76
76
  Transaction.new_from(xml_doc)
77
77
  end
78
78
 
79
+ def recache_payment_method(payment_method_token, options = {})
80
+ body = recache_payment_method_body(options)
81
+ xml_doc = ssl_put(recache_payment_method_url(payment_method_token), body, headers)
82
+ RecacheSensitiveData.new_from(xml_doc)
83
+ end
84
+
79
85
  def redact_gateway(gateway_token, options = {})
80
86
  xml_doc = ssl_put(redact_gateway_url(gateway_token), '', headers)
81
87
  Transaction.new_from(xml_doc)
82
88
  end
83
89
 
90
+ def redact_receiver(receiver_token, options = {})
91
+ xml_doc = ssl_put(redact_receiver_url(receiver_token), '', headers)
92
+ Transaction.new_from(xml_doc)
93
+ end
94
+
84
95
  def list_transactions(since_token = nil, payment_method_token = nil)
85
96
  xml_doc = ssl_get(list_transactions_url(since_token, payment_method_token), headers)
86
97
  Transaction.new_list_from(xml_doc)
@@ -205,6 +216,14 @@ module Spreedly
205
216
  end
206
217
  end
207
218
 
219
+ def recache_payment_method_body(options)
220
+ build_xml_request('payment_method') do |doc|
221
+ doc.credit_card do
222
+ add_to_doc(doc, options, :verification_value)
223
+ end
224
+ end
225
+ end
226
+
208
227
  def add_gateway_body(gateway_type, credentials)
209
228
  build_xml_request('gateway') do |doc|
210
229
  doc.gateway_type gateway_type
@@ -279,7 +298,8 @@ module Spreedly
279
298
  add_gateway_specific_fields(doc, options)
280
299
  add_shipping_address_override(doc, options)
281
300
  add_to_doc(doc, options, :order_id, :description, :ip, :email, :merchant_name_descriptor,
282
- :merchant_location_descriptor, :redirect_url, :callback_url)
301
+ :merchant_location_descriptor, :redirect_url, :callback_url,
302
+ :continue_caching, :attempt_3dsecure, :browser_info)
283
303
  end
284
304
 
285
305
  def add_gateway_specific_fields(doc, options)
@@ -3,7 +3,7 @@ module Spreedly
3
3
  class GatewayClass
4
4
  include Fields
5
5
 
6
- field :gateway_type, :name, :homepage, :company_name
6
+ field :gateway_type, :name, :homepage, :company_name, :display_api_url
7
7
  field :supports_purchase, :supports_authorize, :supports_capture, :supports_credit,
8
8
  :supports_void, :supports_verify, :supports_reference_purchase,
9
9
  :supports_purchase_via_preauthorization, :supports_offsite_purchase,
@@ -6,7 +6,7 @@ module Spreedly
6
6
 
7
7
  include ErrorsParser
8
8
 
9
- field :email, :storage_state, :data
9
+ field :email, :storage_state, :data, :payment_method_type
10
10
  attr_reader :errors
11
11
 
12
12
  def initialize(xml_doc)
@@ -3,7 +3,7 @@ module Spreedly
3
3
 
4
4
  class Receiver < Model
5
5
 
6
- field :receiver_type, :hostnames
6
+ field :receiver_type, :hostnames, :state, :company_name
7
7
  attr_reader :credentials
8
8
 
9
9
  def initialize(xml_doc)
@@ -1,8 +1,7 @@
1
1
  module Spreedly
2
-
3
2
  class AuthPurchase < GatewayTransaction
4
-
5
- field :currency_code
3
+ field :currency_code, :checkout_url, :checkout_form, :redirect_url, :callback_url
4
+ field :required_action, :challenge_form, :challenge_url, :device_fingerprint_form
6
5
  field :amount, type: :integer
7
6
 
8
7
  attr_reader :payment_method
@@ -11,7 +10,5 @@ module Spreedly
11
10
  super
12
11
  @payment_method = PaymentMethod.new_from(xml_doc.at_xpath('.//payment_method'))
13
12
  end
14
-
15
13
  end
16
-
17
14
  end
@@ -2,11 +2,11 @@ module Spreedly
2
2
 
3
3
  class GatewayTransaction < Transaction
4
4
 
5
- field :order_id, :ip, :description, :gateway_token, :gateway_transaction_id, :email
5
+ field :order_id, :ip, :description, :gateway_token, :gateway_transaction_id, :email, :transaction_type
6
6
  field :merchant_name_descriptor, :merchant_location_descriptor
7
7
  field :on_test_gateway, type: :boolean
8
8
 
9
- attr_reader :response, :gateway_specific_fields, :shipping_address
9
+ attr_reader :response, :gateway_specific_fields, :gateway_specific_response_fields, :shipping_address
10
10
 
11
11
  def initialize(xml_doc)
12
12
  super
@@ -14,13 +14,14 @@ module Spreedly
14
14
  shipping_address_xml_doc = xml_doc.at_xpath('.//shipping_address')
15
15
  @response = response_xml_doc ? Response.new(response_xml_doc) : nil
16
16
  @shipping_address = shipping_address_xml_doc ? ShippingAddress.new(shipping_address_xml_doc) : nil
17
- @gateway_specific_fields = parse_gateway_specific_fields(xml_doc)
17
+ @gateway_specific_fields = parse_gateway_fields(xml_doc, './/gateway_specific_fields')
18
+ @gateway_specific_response_fields = parse_gateway_fields(xml_doc, './/gateway_specific_response_fields')
18
19
  end
19
20
 
20
- def parse_gateway_specific_fields(xml_doc)
21
+ def parse_gateway_fields(xml_doc, path)
21
22
  result = {}
22
23
 
23
- xml_doc.at_xpath('.//gateway_specific_fields').xpath('*').each do |node|
24
+ xml_doc.at_xpath(path).xpath('*').each do |node|
24
25
  node_name = node.name.to_sym
25
26
  if (node.elements.empty?)
26
27
  result[node_name] = node.text
@@ -1,7 +1,4 @@
1
1
  module Spreedly
2
-
3
2
  class Purchase < AuthPurchase
4
-
5
3
  end
6
-
7
4
  end
data/lib/spreedly/urls.rb CHANGED
@@ -50,6 +50,10 @@ module Spreedly
50
50
  "#{base_url}/v1/payment_methods/#{payment_method_token}/redact.xml"
51
51
  end
52
52
 
53
+ def recache_payment_method_url(payment_method_token)
54
+ "#{base_url}/v1/payment_methods/#{payment_method_token}/recache.xml"
55
+ end
56
+
53
57
  def redact_gateway_url(gateway_token)
54
58
  "#{base_url}/v1/gateways/#{gateway_token}/redact.xml"
55
59
  end
@@ -91,6 +95,10 @@ module Spreedly
91
95
  "#{base_url}/v1/receivers.xml"
92
96
  end
93
97
 
98
+ def redact_receiver_url(token)
99
+ "#{base_url}/v1/receivers/#{token}/redact.xml"
100
+ end
101
+
94
102
  def add_payment_method_url
95
103
  "#{base_url}/v1/payment_methods.xml"
96
104
  end
@@ -1,3 +1,3 @@
1
1
  module Spreedly
2
- VERSION = "2.0.18"
2
+ VERSION = "2.0.19"
3
3
  end
data/spreedly.gemspec CHANGED
@@ -1,30 +1,27 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require 'spreedly/version'
5
4
 
6
-
7
5
  Gem::Specification.new do |s|
8
- s.name = "spreedly"
6
+ s.name = 'spreedly'
9
7
  s.version = Spreedly::VERSION
10
- s.authors = ["Spreedly"]
11
- s.email = ["duff@spreedly.com"]
12
- s.summary = "Provides a Ruby wrapper for the Spreedly API."
13
- s.description = "The Spreedly gem provides a convenient Ruby wrapper for the Spreedly API."
14
- s.homepage = "https://github.com/spreedly/spreedly-gem"
15
- s.license = "MIT"
8
+ s.authors = ['Spreedly']
9
+ s.email = ['duff@spreedly.com', 'doug@spreedly.com', 'jeremy@spreedly.com']
10
+ s.summary = 'Provides a Ruby wrapper for the Spreedly API.'
11
+ s.description = 'The Spreedly gem provides a convenient Ruby wrapper for the Spreedly API.'
12
+ s.homepage = 'https://github.com/spreedly/spreedly-gem'
13
+ s.license = 'MIT'
16
14
 
17
- s.files = `git ls-files`.split($/)
15
+ s.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
18
16
  s.test_files = s.files.grep(%r{^(test|spec|features)/})
19
- s.require_paths = ["lib"]
17
+ s.require_paths = ['lib']
20
18
 
21
19
  s.add_dependency 'nokogiri'
22
20
 
23
- s.add_development_dependency 'bundler', '~> 1.3'
24
- s.add_development_dependency 'rake'
25
- s.add_development_dependency 'mocha'
26
- s.add_development_dependency 'log_buddy'
27
21
  s.add_development_dependency 'awesome_print'
22
+ s.add_development_dependency 'bundler'
23
+ s.add_development_dependency 'log_buddy'
24
+ s.add_development_dependency 'mocha'
25
+ s.add_development_dependency 'rake'
28
26
  s.add_development_dependency 'test-unit'
29
27
  end
30
-
@@ -0,0 +1,5 @@
1
+ # To run remote tests you'll need to copy this file to credentials.yml
2
+ # in the same directory and change the values to match your spreedly environment.
3
+
4
+ environment_key: "YOUR-SPREEDLY-ENVIRONMENT-KEY"
5
+ access_secret: "YOUR-SPREEDLY-ACCESS-SECRET"
@@ -23,7 +23,7 @@ module Spreedly
23
23
  end
24
24
 
25
25
  def load_personal_creds
26
- return {} unless File.exists?(personal_creds_file)
26
+ return {} unless File.exist?(personal_creds_file)
27
27
 
28
28
  personal_creds = YAML.load(File.read(personal_creds_file))
29
29
  return {} unless personal_creds
@@ -23,7 +23,7 @@ module Spreedly
23
23
 
24
24
  def default_card_deets
25
25
  {
26
- email: 'perrin@wot.com', number: '5555555555554444', month: 1, year: 2019,
26
+ email: 'perrin@wot.com', number: '5555555555554444', month: 1, year: 2023,
27
27
  last_name: 'Aybara', first_name: 'Perrin', retained: true
28
28
  }
29
29
  end
@@ -51,7 +51,7 @@ class RemoteAddCreditCardTest < Test::Unit::TestCase
51
51
  end
52
52
 
53
53
  def test_successfull_add_using_full_name
54
- t = @environment.add_credit_card(number: '5555555555554444', month: 1, year: 2019, full_name: "Kvothe Jones")
54
+ t = @environment.add_credit_card(number: '5555555555554444', month: 1, year: 2023, full_name: "Kvothe Jones")
55
55
  assert t.succeeded?
56
56
  assert_equal "Kvothe", t.payment_method.first_name
57
57
  assert_equal "Jones", t.payment_method.last_name
@@ -62,7 +62,7 @@ class RemoteAddCreditCardTest < Test::Unit::TestCase
62
62
  private
63
63
  def card_deets(options = {})
64
64
  {
65
- email: 'perrin@wot.com', number: '5555555555554444', month: 1, year: 2019,
65
+ email: 'perrin@wot.com', number: '5555555555554444', month: 1, year: 2023,
66
66
  last_name: 'Aybara', first_name: 'Perrin', data: "occupation: Blacksmith"
67
67
  }.merge(options)
68
68
  end
@@ -25,9 +25,9 @@ class RemoteAddReceiverTest < Test::Unit::TestCase
25
25
  end
26
26
 
27
27
  def test_add_test_receiver
28
- receiver = @environment.add_receiver(:test, 'http://testserver.com')
28
+ receiver = @environment.add_receiver(:test, 'http://spreedly-echo.herokuapp.com')
29
29
  assert_equal "test", receiver.receiver_type
30
- assert_equal 'http://testserver.com', receiver.hostnames
30
+ assert_equal 'http://spreedly-echo.herokuapp.com', receiver.hostnames
31
31
  end
32
32
 
33
33
  def test_need_active_account
@@ -38,9 +38,9 @@ class RemoteDeliverPaymentMethodTest < Test::Unit::TestCase
38
38
  assert_equal(true, transaction.succeeded?)
39
39
  assert_equal(card_token, transaction.payment_method.token)
40
40
  assert_equal(receiver_token, transaction.receiver.token)
41
- assert_match(/Successfully dumped 0 post variables.*Post body was 109 chars long/m, transaction.response.body)
41
+ assert_match(/HOST: spreedly-echo.herokuapp.com\nCONNECTION: close/m, transaction.response.body)
42
42
  assert_equal('200', transaction.response.status)
43
- assert_match(/Server: Apache/m, transaction.response.headers)
43
+ assert_match(/Server: thin/m, transaction.response.headers)
44
44
  end
45
45
 
46
46
  private
@@ -49,7 +49,7 @@ class RemoteDeliverPaymentMethodTest < Test::Unit::TestCase
49
49
  end
50
50
 
51
51
  def url
52
- 'http://posttestserver.com/post.php'
52
+ 'https://spreedly-echo.herokuapp.com'
53
53
  end
54
54
 
55
55
  def receiver_test_credentials
@@ -10,7 +10,7 @@ class RemoteGatewayOptionsTest < Test::Unit::TestCase
10
10
  gateway_classes = @environment.gateway_options
11
11
  braintree = gateway_classes.select { |each| each.name == "Braintree" }.first
12
12
  assert_equal "http://www.braintreepaymentsolutions.com/", braintree.homepage
13
- assert_equal %w(credit_card third_party_token apple_pay android_pay), braintree.payment_methods
13
+ assert_equal %w(credit_card third_party_token apple_pay android_pay google_pay), braintree.payment_methods
14
14
  assert_equal %w(asia_pacific europe north_america), braintree.regions
15
15
  assert_equal %w(orange blue), braintree.auth_modes.map { |e| e.auth_mode_type }
16
16
  assert_equal %w(login password), braintree.auth_modes.first.credentials.map { |e| e.name }
@@ -66,6 +66,29 @@ class RemotePurchaseTest < Test::Unit::TestCase
66
66
  assert transaction.checkout_url
67
67
  end
68
68
 
69
+ def test_3d_secure_attempt_transaction_arguments
70
+ gateway_token = @environment.add_gateway(:test).token
71
+ card_token = create_card_on(@environment, number: '4556761029983886', retained: false).token
72
+
73
+ transaction = @environment.purchase_on_gateway(gateway_token, card_token, 344,
74
+ order_id: "8675",
75
+ description: "SuperDuper",
76
+ ip: "183.128.100.103",
77
+ email: "fred@example.com",
78
+ merchant_name_descriptor: "Real Stuff",
79
+ merchant_location_descriptor: "Raleigh",
80
+ retain_on_success: true,
81
+ redirect_url: "https://example.com/redirect",
82
+ callback_url: "https://example.com/callback",
83
+ attempt_3dsecure: true)
84
+
85
+ assert_equal "pending", transaction.state
86
+ assert "https://example.com/callback", transaction.callback_url
87
+ assert "https://example.com/redirect", transaction.redirect_url
88
+ assert_equal '', transaction.checkout_url
89
+ assert transaction.checkout_form.include?("<form action=\"https://core.spreedly.com/test/#{gateway_token}")
90
+ end
91
+
69
92
  def test_optional_arguments
70
93
  gateway_token = @environment.add_gateway(:test).token
71
94
  card_token = create_card_on(@environment, retained: false).token
@@ -89,6 +112,7 @@ class RemotePurchaseTest < Test::Unit::TestCase
89
112
  assert_equal "fred@example.com", transaction.email
90
113
  assert_equal "perrin@wot.com", transaction.payment_method.email
91
114
  assert_match /\d/, transaction.gateway_transaction_id
115
+ assert_match "Purchase", transaction.transaction_type
92
116
  end
93
117
 
94
118
  def test_gateway_specific_fields
@@ -0,0 +1,30 @@
1
+ require 'test_helper'
2
+
3
+ class RemoteRecachePaymentMethodTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @environment = Spreedly::Environment.new(remote_test_environment_key, remote_test_access_secret)
7
+ end
8
+
9
+ def test_invalid_login
10
+ assert_invalid_login do |environment|
11
+ environment.recache_payment_method('payment_method_token')
12
+ end
13
+ end
14
+
15
+ def test_payment_method_token_token_not_found
16
+ assert_raise_with_message(Spreedly::NotFoundError, "Unable to find the specified payment method.") do
17
+ @environment.recache_payment_method('unknown_token')
18
+ end
19
+ end
20
+
21
+ def test_successful_recache
22
+ card_token = create_card_on(@environment).token
23
+
24
+ transaction = @environment.recache_payment_method(card_token, verification_value: '123')
25
+
26
+ assert transaction.succeeded?
27
+ assert_equal 'retained', transaction.payment_method.storage_state
28
+ end
29
+
30
+ end
@@ -0,0 +1,16 @@
1
+ require 'test_helper'
2
+
3
+ class RemoteRedactReceiverTest < Test::Unit::TestCase
4
+ def setup
5
+ @environment = Spreedly::Environment.new(remote_test_environment_key, remote_test_access_secret)
6
+ end
7
+
8
+ def test_successful_redact
9
+ receiver = @environment.add_receiver(:test, 'https://sandbox.usaepay.com')
10
+
11
+ transaction = @environment.redact_receiver(receiver.token)
12
+
13
+ assert transaction.succeeded?
14
+ assert_equal 'redacted', transaction.state
15
+ end
16
+ end
@@ -56,7 +56,7 @@ class RemoteUpdateCreditCardTest < Test::Unit::TestCase
56
56
  private
57
57
  def card_deets(options = {})
58
58
  {
59
- email: 'cauthon@wot.com', month: 1, year: 2019,
59
+ email: 'cauthon@wot.com', month: 1, year: 2023,
60
60
  last_name: 'Cauthon', first_name: 'Mat',
61
61
  eligible_for_card_updater: 'false'
62
62
  }.merge(options)
@@ -24,6 +24,7 @@ class AddCreditCreditCardTest < Test::Unit::TestCase
24
24
 
25
25
  assert_equal "AXaBXfVUqhaGMg8ytf8isiMAAL9", t.payment_method.token
26
26
  assert_equal "Eland Venture", t.payment_method.full_name
27
+ assert_equal 'credit_card', t.payment_method.payment_method_type
27
28
  assert_equal "Don't test everything here, since find_payment_method tests it all.", t.payment_method.data
28
29
 
29
30
  assert t.payment_method.eligible_for_card_updater
@@ -121,5 +122,3 @@ class AddCreditCreditCardTest < Test::Unit::TestCase
121
122
  end
122
123
 
123
124
  end
124
-
125
-
@@ -28,11 +28,14 @@ class AuthorizeTest < Test::Unit::TestCase
28
28
  assert_equal 'Tax Free Zone', t.merchant_location_descriptor
29
29
  assert_equal 'YjWxOjbpeieXsZFdAsbhM2DFgLe', t.gateway_token
30
30
  assert_equal "44", t.gateway_transaction_id
31
+ assert_equal "Authorization", t.transaction_type
31
32
  assert_equal "TheName", t.gateway_specific_fields[:litle][:descriptor_name]
32
33
  assert_equal "33411441", t.gateway_specific_fields[:litle][:descriptor_phone]
33
34
  assert_equal "844", t.gateway_specific_fields[:stripe][:application_fee]
35
+ assert_equal "credit", t.gateway_specific_response_fields[:stripe][:card_funding]
34
36
 
35
37
  assert_equal 'Nh2Vw0kAoSQvcJDpK52q4dZlrVJ', t.payment_method.token
38
+ assert_equal 'credit_card', t.payment_method.payment_method_type
36
39
  assert_equal 'Forthrast', t.payment_method.last_name
37
40
 
38
41
  assert t.response.success
@@ -67,7 +70,8 @@ class AuthorizeTest < Test::Unit::TestCase
67
70
  [ './merchant_name_descriptor', 'TRain' ],
68
71
  [ './merchant_location_descriptor', 'British Colombia' ],
69
72
  [ './gateway_specific_fields/braintree/customer_id', '1143' ],
70
- [ './retain_on_success', 'true' ]
73
+ [ './retain_on_success', 'true' ],
74
+ [ './continue_caching', 'true']
71
75
  end
72
76
 
73
77
 
@@ -88,7 +92,8 @@ class AuthorizeTest < Test::Unit::TestCase
88
92
  gateway_specific_fields: {
89
93
  braintree: { customer_id: "1143" }
90
94
  },
91
- retain_on_success: true
95
+ retain_on_success: true,
96
+ continue_caching: true
92
97
  }
93
98
  end
94
99
 
@@ -28,6 +28,8 @@ class CaptureTest < Test::Unit::TestCase
28
28
  assert_equal 'Tax Free Zone', t.merchant_location_descriptor
29
29
  assert_equal 'SoPblCOGDwaRyym68XGWeRiCy1C', t.gateway_token
30
30
  assert_equal 'PH6U2tyFWtDSVp88bNW2nnGy5rk', t.reference_token
31
+ assert_equal 'Capture', t.transaction_type
32
+ assert_equal "credit", t.gateway_specific_response_fields[:stripe][:card_funding]
31
33
 
32
34
  assert t.response.success
33
35
  assert_equal 'Successful capture', t.response.message
@@ -22,6 +22,7 @@ class FindPaymentMethodTest < Test::Unit::TestCase
22
22
  assert_equal(1369504152, card.created_at.to_i)
23
23
  assert_equal(1369508044, card.updated_at.to_i)
24
24
  assert_equal('master', card.card_type)
25
+ assert_equal('credit_card', card.payment_method_type)
25
26
  assert_equal('Alcatraz', card.first_name)
26
27
  assert_equal('Smedry', card.last_name)
27
28
  assert_equal('8', card.month)
@@ -23,6 +23,7 @@ class ListPaymentMethodsTest < Test::Unit::TestCase
23
23
 
24
24
  assert_equal 'Perrin Aybara', list.first.full_name
25
25
  assert_equal 'Mat Cauthon', list[1].full_name
26
+ assert_equal 'credit_card', list.first.payment_method_type
26
27
  assert_equal 'test_vault:4111111111111111', list[2].third_party_token
27
28
  assert_equal 'retained', list[3].storage_state
28
29
  assert_equal '4321', list[4].account_number_display_digits
@@ -29,6 +29,7 @@ class PurchaseTest < Test::Unit::TestCase
29
29
  assert_equal 'YOaCn5a9xRaBTGgmGAWbkgWUuqv', t.gateway_token
30
30
  assert_equal '8xXXIPGXTaPXysDA5OUpgnjTEjK', t.payment_method.token
31
31
  assert_equal "44", t.gateway_transaction_id
32
+ assert_equal "Purchase", t.transaction_type
32
33
 
33
34
  assert t.response.success
34
35
  assert_equal 'Successful purchase', t.response.message
@@ -54,6 +55,59 @@ class PurchaseTest < Test::Unit::TestCase
54
55
  assert_equal '', t.shipping_address.phone_number
55
56
  end
56
57
 
58
+ def test_successful_3dsecure_purchase_attempt
59
+ t = purchase_using(successful_purchase_3dsecure_attempt_response)
60
+
61
+ assert_kind_of(Spreedly::Purchase, t)
62
+ assert_equal 'Btcyks35m4JLSNOs9ymJoNQLjeX', t.token
63
+ assert_equal 144, t.amount
64
+ assert t.on_test_gateway?
65
+ assert_equal Time.parse("2013-07-31 19:46:26 UTC"), t.created_at
66
+ assert_equal Time.parse("2013-07-31 19:46:32 UTC"), t.updated_at
67
+ assert_equal 'USD', t.currency_code
68
+ assert !t.succeeded?
69
+ assert_equal 'pending', t.state
70
+ assert_equal 'none', t.required_action
71
+ assert_equal 'http://challenge_url.test', t.challenge_url
72
+ assert_equal 'challenge form data', t.challenge_form
73
+ assert_equal 'device fingerprint form data', t.device_fingerprint_form
74
+ assert_equal '', t.order_id
75
+ assert_equal '', t.ip
76
+ assert_equal '4 Shardblades', t.description
77
+ assert_equal '', t.merchant_name_descriptor
78
+ assert_equal '', t.merchant_location_descriptor
79
+ assert_equal 'YOaCn5a9xRaBTGgmGAWbkgWUuqv', t.gateway_token
80
+ assert_equal '8xXXIPGXTaPXysDA5OUpgnjTEjK', t.payment_method.token
81
+ assert_equal "44", t.gateway_transaction_id
82
+
83
+ assert t.response.success
84
+ assert_equal 'Checked enrollment status', t.response.message
85
+ assert !t.response.pending
86
+ assert !t.response.fraud_review
87
+ assert_equal '', t.response.error_code
88
+ assert_equal Time.parse('2013-07-31T19:46:26Z'), t.response.created_at
89
+ assert_equal Time.parse('2013-07-31T19:46:27Z'), t.response.updated_at
90
+
91
+ assert_equal 'https://example.com/callback_url', t.callback_url
92
+ assert_equal 'https://example.com/redirect_url', t.redirect_url
93
+ assert_equal '', t.checkout_url
94
+
95
+ assert t.checkout_form.include?('<form action="https://core.spreedly.com/test/1234/auth/1234" method="POST">')
96
+ assert t.checkout_form.include?('<input name="PaReq" value="" type="hidden"/>')
97
+ assert t.checkout_form.include?('<input name="MD" value="" type="hidden"/>')
98
+ assert t.checkout_form.include?('<input name="TermUrl" value="https://core.spreedly.com/transaction/Btcyks35m4JLSNOs9ymJoNQLjeX/redirect" type="hidden"/>')
99
+ assert t.checkout_form.include?('<input name="Complete" value="Authorize Transaction" type="submit"/>')
100
+
101
+ assert_equal '', t.shipping_address.name
102
+ assert_equal '', t.shipping_address.address1
103
+ assert_equal '', t.shipping_address.address2
104
+ assert_equal '', t.shipping_address.city
105
+ assert_equal '', t.shipping_address.state
106
+ assert_equal '', t.shipping_address.zip
107
+ assert_equal '', t.shipping_address.country
108
+ assert_equal '', t.shipping_address.phone_number
109
+ end
110
+
57
111
  def test_failed_purchase
58
112
  t = purchase_using(failed_purchase_response)
59
113
 
@@ -94,7 +148,8 @@ class PurchaseTest < Test::Unit::TestCase
94
148
  [ './ip', '183.128.100.103' ],
95
149
  [ './merchant_name_descriptor', 'Real Stuff' ],
96
150
  [ './merchant_location_descriptor', 'Raleigh' ],
97
- [ './retain_on_success', 'true' ]
151
+ [ './retain_on_success', 'true' ],
152
+ [ './continue_caching', 'true']
98
153
  end
99
154
 
100
155
 
@@ -112,7 +167,8 @@ class PurchaseTest < Test::Unit::TestCase
112
167
  ip: "183.128.100.103",
113
168
  merchant_name_descriptor: "Real Stuff",
114
169
  merchant_location_descriptor: "Raleigh",
115
- retain_on_success: true
170
+ retain_on_success: true,
171
+ continue_caching: true
116
172
  }
117
173
  end
118
174
 
@@ -0,0 +1,34 @@
1
+ require 'test_helper'
2
+ require 'unit/response_stubs/recache_payment_method_stubs'
3
+
4
+ class RecachePaymentMethodTest < Test::Unit::TestCase
5
+
6
+ include RecachePaymentMethodStubs
7
+
8
+ def setup
9
+ @environment = Spreedly::Environment.new("key", "secret")
10
+ end
11
+
12
+ def test_successful_recache
13
+ t = recache_using(successful_recache_payment_method_response)
14
+
15
+ assert_kind_of(Spreedly::RecacheSensitiveData, t)
16
+ assert_equal '2BSe5T6FHpypph3ensF7m3Nb3qk', t.token
17
+ assert_equal Time.parse('2013-08-05 17:43:41 UTC'), t.created_at
18
+ assert_equal Time.parse('2013-08-05 17:43:41 UTC'), t.updated_at
19
+ assert t.succeeded?
20
+ assert_equal 'Succeeded!', t.message
21
+ assert_equal 'succeeded', t.state
22
+ assert_equal 'retained', t.payment_method.storage_state
23
+ assert_equal 'RvsxKgbAZBmiZHEPhhTcOQzJeC2', t.payment_method.token
24
+ end
25
+
26
+ private
27
+
28
+ def recache_using(response)
29
+ @environment.stubs(:raw_ssl_request).returns(response)
30
+ @environment.recache_payment_method("IgnoredTokenSinceResponseIsStubbed", verification_value: 'VerificationValue')
31
+ end
32
+
33
+ end
34
+
@@ -28,6 +28,7 @@ class RefundTest < Test::Unit::TestCase
28
28
  assert_equal 'Tax Free Zone', t.merchant_location_descriptor
29
29
  assert_equal 'XYI0V2l4KC1cAm6Y3c2kG5loJaA', t.gateway_token
30
30
  assert_equal 'RkIAltzr49eXuWc7ajBjLLeKZt8', t.reference_token
31
+ assert_equal 'Credit', t.transaction_type
31
32
 
32
33
  assert t.response.success
33
34
  assert_equal 'Successful credit', t.response.message
@@ -26,8 +26,11 @@ module AuthorizationStubs
26
26
  <application_fee>844</application_fee>
27
27
  </stripe>
28
28
  </gateway_specific_fields>
29
- <gateway_specific_fields nil="true"/>
30
- <gateway_specific_response_fields nil="true"/>
29
+ <gateway_specific_response_fields>
30
+ <stripe>
31
+ <card_funding>credit</card_funding>
32
+ </stripe>
33
+ </gateway_specific_response_fields>
31
34
  <message key="messages.transaction_succeeded">Succeeded!</message>
32
35
  <gateway_token>YjWxOjbpeieXsZFdAsbhM2DFgLe</gateway_token>
33
36
  <gateway_transaction_id>44</gateway_transaction_id>
@@ -19,7 +19,11 @@ module CaptureStubs
19
19
  <merchant_name_descriptor>My Writeoff Inc.</merchant_name_descriptor>
20
20
  <merchant_location_descriptor>Tax Free Zone</merchant_location_descriptor>
21
21
  <gateway_specific_fields nil="true"/>
22
- <gateway_specific_response_fields nil="true"/>
22
+ <gateway_specific_response_fields>
23
+ <stripe>
24
+ <card_funding>credit</card_funding>
25
+ </stripe>
26
+ </gateway_specific_response_fields>
23
27
  <message key="messages.transaction_succeeded">Succeeded!</message>
24
28
  <gateway_token>SoPblCOGDwaRyym68XGWeRiCy1C</gateway_token>
25
29
  <gateway_transaction_id>44</gateway_transaction_id>
@@ -241,4 +241,109 @@ module PurchaseStubs
241
241
  XML
242
242
  end
243
243
 
244
+ def successful_purchase_3dsecure_attempt_response
245
+ StubResponse.succeeded <<-XML
246
+ <transaction>
247
+ <amount type="integer">144</amount>
248
+ <on_test_gateway type="boolean">true</on_test_gateway>
249
+ <created_at type="datetime">2013-07-31T19:46:26Z</created_at>
250
+ <updated_at type="datetime">2013-07-31T19:46:32Z</updated_at>
251
+ <currency_code>USD</currency_code>
252
+ <succeeded type="boolean">false</succeeded>
253
+ <state>pending</state>
254
+ <token>Btcyks35m4JLSNOs9ymJoNQLjeX</token>
255
+ <transaction_type>Purchase</transaction_type>
256
+ <order_id nil="true"/>
257
+ <ip nil="true"/>
258
+ <description>4 Shardblades</description>
259
+ <merchant_name_descriptor nil="true"/>
260
+ <merchant_location_descriptor nil="true"/>
261
+ <gateway_specific_fields nil="true"/>
262
+ <gateway_specific_response_fields nil="true"/>
263
+ <message key="messages.transaction_pending">Pending</message>
264
+ <required_action>none</required_action>
265
+ <challenge_url>http://challenge_url.test</challenge_url>
266
+ <challenge_form>challenge form data</challenge_form>
267
+ <device_fingerprint_form>device fingerprint form data</device_fingerprint_form>
268
+ <gateway_token>YOaCn5a9xRaBTGgmGAWbkgWUuqv</gateway_token>
269
+ <gateway_transaction_id>44</gateway_transaction_id>
270
+ <shipping_address>
271
+ <name nil="true"/>
272
+ <address1 nil="true"/>
273
+ <address2 nil="true"/>
274
+ <city nil="true"/>
275
+ <state nil="true"/>
276
+ <zip nil="true"/>
277
+ <country nil="true"/>
278
+ <phone_number nil="true"//>
279
+ </shipping_address>
280
+ <response>
281
+ <success type="boolean">true</success>
282
+ <message>Checked enrollment status</message>
283
+ <error_code nil="true"/>
284
+ <checkout_url nil="true"/>
285
+ <created_at type="datetime">2013-07-31T19:46:26Z</created_at>
286
+ <updated_at type="datetime">2013-07-31T19:46:27Z</updated_at>
287
+ </response>
288
+ <payment_method>
289
+ <token>8xXXIPGXTaPXysDA5OUpgnjTEjK</token>
290
+ <created_at type="datetime">2013-07-31T19:46:25Z</created_at>
291
+ <updated_at type="datetime">2013-07-31T19:46:26Z</updated_at>
292
+ <email>perrin@wot.com</email>
293
+ <data nil="true"/>
294
+ <storage_state>retained</storage_state>
295
+ <last_four_digits>4444</last_four_digits>
296
+ <first_six_digits>411111</first_six_digits>
297
+ <card_type>master</card_type>
298
+ <first_name>Perrin</first_name>
299
+ <last_name>Aybara</last_name>
300
+ <month type="integer">1</month>
301
+ <year type="integer">2019</year>
302
+ <address1 nil="true"/>
303
+ <address2 nil="true"/>
304
+ <city nil="true"/>
305
+ <state nil="true"/>
306
+ <zip nil="true"/>
307
+ <country nil="true"/>
308
+ <phone_number nil="true"/>
309
+ <company>Acme</company>
310
+ <full_name>Perrin Aybara</full_name>
311
+ <payment_method_type>credit_card</payment_method_type>
312
+ <eligible_for_card_updater type="boolean">true</eligible_for_card_updater>
313
+ <errors>
314
+ </errors>
315
+ <verification_value></verification_value>
316
+ <fingerprint>ac5579920013cc571e506805f1c8f3220eff</fingerprint>
317
+ <number>XXXX-XXXX-XXXX-4444</number>
318
+ </payment_method>
319
+ <api_urls>
320
+ <callback_conversations>https://core.spreedly.com/v1/callbacks/12345/conversations.xml</callback_conversations>
321
+ </api_urls>
322
+ <callback_url>https://example.com/callback_url</callback_url>
323
+ <redirect_url>https://example.com/redirect_url</redirect_url>
324
+ <checkout_url nil="true"/>
325
+ <checkout_form>
326
+ <![CDATA[
327
+ <form action="https://core.spreedly.com/test/1234/auth/1234" method="POST">
328
+ <div>
329
+ <input name="PaReq" value="" type="hidden"/>
330
+ <input name="MD" value="" type="hidden"/>
331
+ <input name="TermUrl" value="https://core.spreedly.com/transaction/Btcyks35m4JLSNOs9ymJoNQLjeX/redirect" type="hidden"/>
332
+ <input name="Complete" value="Authorize Transaction" type="submit"/>
333
+ </div>
334
+ </form>
335
+ ]]>
336
+ </checkout_form>
337
+ <setup_response>
338
+ <success type="boolean">true</success>
339
+ <message>Checked enrollment status</message>
340
+ <error_code nil="true"/>
341
+ <checkout_url nil="true"/>
342
+ <created_at type="datetime">2013-07-31T19:46:26Z</created_at>
343
+ <updated_at type="datetime">2013-07-31T19:46:27Z</updated_at>
344
+ </setup_response>
345
+ </transaction>
346
+ XML
347
+ end
348
+
244
349
  end
@@ -0,0 +1,53 @@
1
+ module RecachePaymentMethodStubs
2
+
3
+ def successful_recache_payment_method_response
4
+ StubResponse.succeeded <<-XML
5
+ <transaction>
6
+ <on_test_gateway type="boolean">false</on_test_gateway>
7
+ <created_at type="datetime">2013-08-05T17:43:41Z</created_at>
8
+ <updated_at type="datetime">2013-08-05T17:43:41Z</updated_at>
9
+ <succeeded type="boolean">true</succeeded>
10
+ <token>2BSe5T6FHpypph3ensF7m3Nb3qk</token>
11
+ <state>succeeded</state>
12
+ <gateway_specific_fields nil="true"/>
13
+ <gateway_specific_response_fields nil="true"/>
14
+ <transaction_type>RecacheSensitiveData</transaction_type>
15
+ <order_id nil="true"/>
16
+ <ip nil="true"/>
17
+ <message key="messages.transaction_succeeded">Succeeded!</message>
18
+ <payment_method>
19
+ <token>RvsxKgbAZBmiZHEPhhTcOQzJeC2</token>
20
+ <created_at type="datetime">2013-08-05T17:43:41Z</created_at>
21
+ <updated_at type="datetime">2013-08-05T17:43:41Z</updated_at>
22
+ <email>perrin@wot.com</email>
23
+ <data nil="true"/>
24
+ <storage_state>retained</storage_state>
25
+ <last_four_digits>4444</last_four_digits>
26
+ <first_six_digits>411111</first_six_digits>
27
+ <card_type>master</card_type>
28
+ <first_name>Perrin</first_name>
29
+ <last_name>Aybara</last_name>
30
+ <month type="integer">1</month>
31
+ <year type="integer">2019</year>
32
+ <address1 nil="true"/>
33
+ <address2 nil="true"/>
34
+ <city nil="true"/>
35
+ <state nil="true"/>
36
+ <zip nil="true"/>
37
+ <country nil="true"/>
38
+ <phone_number nil="true"/>
39
+ <company>Acme</company>
40
+ <full_name>Perrin Aybara</full_name>
41
+ <payment_method_type>credit_card</payment_method_type>
42
+ <eligible_for_card_updater type="boolean">true</eligible_for_card_updater>
43
+ <errors>
44
+ </errors>
45
+ <verification_value></verification_value>
46
+ <fingerprint>ac5579920013cc571e506805f1c8f3220eff</fingerprint>
47
+ <number>XXXX-XXXX-XXXX-4444</number>
48
+ </payment_method>
49
+ </transaction>
50
+ XML
51
+ end
52
+
53
+ end
@@ -26,6 +26,7 @@ class VerifyTest < Test::Unit::TestCase
26
26
  assert_equal 'Tax Free Zone', t.merchant_location_descriptor
27
27
  assert_equal 'LoxFMxQJD5E1ksAwFWykUamaCKE', t.gateway_token
28
28
  assert_equal "49", t.gateway_transaction_id
29
+ assert_equal 'Verification', t.transaction_type
29
30
 
30
31
  assert_equal '98626DYInHb4K86dp6GrocnZOW6', t.payment_method.token
31
32
  assert_equal 'Aybara', t.payment_method.last_name
@@ -57,7 +58,8 @@ class VerifyTest < Test::Unit::TestCase
57
58
  [ './ip', '183.128.100.102' ],
58
59
  [ './merchant_name_descriptor', 'TRain' ],
59
60
  [ './merchant_location_descriptor', 'British Colombia' ],
60
- [ './retain_on_success', 'true' ]
61
+ [ './retain_on_success', 'true' ],
62
+ [ './continue_caching', 'true']
61
63
  end
62
64
 
63
65
 
@@ -74,7 +76,8 @@ class VerifyTest < Test::Unit::TestCase
74
76
  ip: "183.128.100.102",
75
77
  merchant_name_descriptor: "TRain",
76
78
  merchant_location_descriptor: "British Colombia",
77
- retain_on_success: true
79
+ retain_on_success: true,
80
+ continue_caching: true
78
81
  }
79
82
  end
80
83
 
@@ -27,6 +27,7 @@ class VoidTest < Test::Unit::TestCase
27
27
  assert_equal 'Somewhere', t.merchant_location_descriptor
28
28
  assert_equal 'EuXlDMZEMZfrHSvE9tkRzaW8j0z', t.gateway_token
29
29
  assert_equal 'CjedAratpuiT3CMmln4t3oZFvOS', t.reference_token
30
+ assert_equal 'Void', t.transaction_type
30
31
 
31
32
  assert t.response.success?
32
33
  assert_equal 'Successful void', t.response.message
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spreedly
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.18
4
+ version: 2.0.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Spreedly
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-08-20 00:00:00.000000000 Z
11
+ date: 2019-06-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -25,21 +25,21 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: bundler
28
+ name: awesome_print
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.3'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '1.3'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rake
42
+ name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: mocha
56
+ name: log_buddy
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -67,7 +67,7 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: log_buddy
70
+ name: mocha
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
@@ -81,7 +81,7 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: awesome_print
84
+ name: rake
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
@@ -112,11 +112,14 @@ description: The Spreedly gem provides a convenient Ruby wrapper for the Spreedl
112
112
  API.
113
113
  email:
114
114
  - duff@spreedly.com
115
+ - doug@spreedly.com
116
+ - jeremy@spreedly.com
115
117
  executables: []
116
118
  extensions: []
117
119
  extra_rdoc_files: []
118
120
  files:
119
121
  - ".gitignore"
122
+ - CHANGELOG.md
120
123
  - Gemfile
121
124
  - HISTORY.md
122
125
  - LICENSE.txt
@@ -162,7 +165,7 @@ files:
162
165
  - lib/spreedly/urls.rb
163
166
  - lib/spreedly/version.rb
164
167
  - spreedly.gemspec
165
- - test/credentials/credentials.yml
168
+ - test/credentials/credentials.yml.example
166
169
  - test/credentials/test_credentials.rb
167
170
  - test/helpers/assertions.rb
168
171
  - test/helpers/communication_helper.rb
@@ -183,9 +186,11 @@ files:
183
186
  - test/remote/remote_list_payment_methods_test.rb
184
187
  - test/remote/remote_list_transactions_test.rb
185
188
  - test/remote/remote_purchase_test.rb
189
+ - test/remote/remote_recache_payment_method_test.rb
186
190
  - test/remote/remote_receiver_options_test.rb
187
191
  - test/remote/remote_redact_gateway_test.rb
188
192
  - test/remote/remote_redact_payment_method_test.rb
193
+ - test/remote/remote_redact_receiver_test.rb
189
194
  - test/remote/remote_refund_test.rb
190
195
  - test/remote/remote_retain_test.rb
191
196
  - test/remote/remote_store_test.rb
@@ -210,6 +215,7 @@ files:
210
215
  - test/unit/list_payment_methods_test.rb
211
216
  - test/unit/list_transactions_test.rb
212
217
  - test/unit/purchase_test.rb
218
+ - test/unit/recache_payment_method_test.rb
213
219
  - test/unit/receiver_options_test.rb
214
220
  - test/unit/redact_gateway_test.rb
215
221
  - test/unit/redact_payment_method_test.rb
@@ -228,6 +234,7 @@ files:
228
234
  - test/unit/response_stubs/list_payment_methods_stubs.rb
229
235
  - test/unit/response_stubs/list_transactions_stubs.rb
230
236
  - test/unit/response_stubs/purchase_stubs.rb
237
+ - test/unit/response_stubs/recache_payment_method_stubs.rb
231
238
  - test/unit/response_stubs/receiver_options_stubs.rb
232
239
  - test/unit/response_stubs/redact_gateway_stubs.rb
233
240
  - test/unit/response_stubs/redact_payment_method_stubs.rb
@@ -263,12 +270,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
263
270
  version: '0'
264
271
  requirements: []
265
272
  rubyforge_project:
266
- rubygems_version: 2.6.14
273
+ rubygems_version: 2.5.2
267
274
  signing_key:
268
275
  specification_version: 4
269
276
  summary: Provides a Ruby wrapper for the Spreedly API.
270
277
  test_files:
271
- - test/credentials/credentials.yml
278
+ - test/credentials/credentials.yml.example
272
279
  - test/credentials/test_credentials.rb
273
280
  - test/helpers/assertions.rb
274
281
  - test/helpers/communication_helper.rb
@@ -289,9 +296,11 @@ test_files:
289
296
  - test/remote/remote_list_payment_methods_test.rb
290
297
  - test/remote/remote_list_transactions_test.rb
291
298
  - test/remote/remote_purchase_test.rb
299
+ - test/remote/remote_recache_payment_method_test.rb
292
300
  - test/remote/remote_receiver_options_test.rb
293
301
  - test/remote/remote_redact_gateway_test.rb
294
302
  - test/remote/remote_redact_payment_method_test.rb
303
+ - test/remote/remote_redact_receiver_test.rb
295
304
  - test/remote/remote_refund_test.rb
296
305
  - test/remote/remote_retain_test.rb
297
306
  - test/remote/remote_store_test.rb
@@ -316,6 +325,7 @@ test_files:
316
325
  - test/unit/list_payment_methods_test.rb
317
326
  - test/unit/list_transactions_test.rb
318
327
  - test/unit/purchase_test.rb
328
+ - test/unit/recache_payment_method_test.rb
319
329
  - test/unit/receiver_options_test.rb
320
330
  - test/unit/redact_gateway_test.rb
321
331
  - test/unit/redact_payment_method_test.rb
@@ -334,6 +344,7 @@ test_files:
334
344
  - test/unit/response_stubs/list_payment_methods_stubs.rb
335
345
  - test/unit/response_stubs/list_transactions_stubs.rb
336
346
  - test/unit/response_stubs/purchase_stubs.rb
347
+ - test/unit/response_stubs/recache_payment_method_stubs.rb
337
348
  - test/unit/response_stubs/receiver_options_stubs.rb
338
349
  - test/unit/response_stubs/redact_gateway_stubs.rb
339
350
  - test/unit/response_stubs/redact_payment_method_stubs.rb
@@ -1,9 +0,0 @@
1
- # This file contains the Spreedly credentials to use when running remote tests.
2
- # They're working credentials so the remote tests should simply run.
3
-
4
- # You may instead choose to use your own credentials for your own Spreedly
5
- # test environment by copying this file to the gitignored file named
6
- # personal_credentials.yml located in the same directory as this file.
7
-
8
- environment_key: "R7lHscqcYkZeDGGbthKp6GKMu15"
9
- access_secret: "8sefxO5Q44sLWpmZpalQS3Qlqo03JbCemsqsWJR3YOLCuigOFRlaLSAn0WaL5dWU"