spreedly 2.0.13 → 2.0.14

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a37f361841f4061cc7399fe9bd2ef837b78130fd
4
- data.tar.gz: 056a38b2f942463ba7f370ff77348520660346e1
3
+ metadata.gz: ab2b935117b1a317e75e3a6d4047b286b9ed06e7
4
+ data.tar.gz: eaeb49ca9cf5fac4fc679a7147d4acc108d554e3
5
5
  SHA512:
6
- metadata.gz: 68d2591350a32dc483495c667710caf9af2c5c39863991935e51c45db417bcc34ae10d82116a2afa4c3649a97b8b9aecfc1da2c60a5600be748f87a9b7d89e39
7
- data.tar.gz: 3a5d21b3104d2cdd510f8cbea4bae54acba20004cf1bd1420681b447cf2979d2425cbed727c37aef2ea78a705205f0d899b233d8208df9590a802daa0743b6a6
6
+ metadata.gz: a656bb8873f3a8d476ab0760bb63d1e804392bf65e0aa0ce06ebbd9a4351e081ea81a4129d958b237ed5e32aae645f1a097c155856b0b97d03e8fa585d3bb3a9
7
+ data.tar.gz: 673025cc11a94db65ffd22e86a99e6967c7797e1b3072a95e676e02e4657949f72fac988efe33ece8c4b9163ba65379207060bf93c0882f66cc5de1c62a11cef
data/HISTORY.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  ## Next Version
4
4
 
5
+ ## 2.0.14
6
+ * Add support for gateway_specific_fields [duff]
5
7
 
6
8
  ## 2.0.13
7
9
  * Check attributes for non-nil before sending [markabe]
@@ -256,10 +256,23 @@ module Spreedly
256
256
  end
257
257
 
258
258
  def add_extra_options_for_basic_ops(doc, options)
259
+ add_gateway_specific_fields(doc, options)
259
260
  add_to_doc(doc, options, :order_id, :description, :ip, :merchant_name_descriptor,
260
261
  :merchant_location_descriptor)
261
262
  end
262
263
 
264
+ def add_gateway_specific_fields(doc, options)
265
+ return unless options[:gateway_specific_fields].kind_of?(Hash)
266
+ doc << "<gateway_specific_fields>#{xml_for_hash(options[:gateway_specific_fields])}</gateway_specific_fields>"
267
+ end
268
+
269
+ def xml_for_hash(hash)
270
+ hash.map do |key, value|
271
+ text = value.kind_of?(Hash) ? xml_for_hash(value) : value
272
+ "<#{key}>#{text}</#{key}>"
273
+ end.join
274
+ end
275
+
263
276
  def build_xml_request(root)
264
277
  builder = Nokogiri::XML::Builder.new
265
278
  builder.__send__(root) do |doc|
@@ -6,14 +6,32 @@ module Spreedly
6
6
  field :merchant_name_descriptor, :merchant_location_descriptor
7
7
  field :on_test_gateway, type: :boolean
8
8
 
9
- attr_reader :response
9
+ attr_reader :response, :gateway_specific_fields
10
10
 
11
11
  def initialize(xml_doc)
12
12
  super
13
13
  response_xml_doc = xml_doc.at_xpath('.//response')
14
14
  @response = response_xml_doc ? Response.new(response_xml_doc) : nil
15
+ @gateway_specific_fields = parse_gateway_specific_fields(xml_doc)
15
16
  end
16
17
 
18
+ def parse_gateway_specific_fields(xml_doc)
19
+ result = {}
20
+
21
+ xml_doc.at_xpath('.//gateway_specific_fields').xpath('*').each do |node|
22
+ node_name = node.name.to_sym
23
+ if (node.elements.empty?)
24
+ result[node_name] = node.text
25
+ else
26
+ node.elements.each do |childnode|
27
+ result[node_name] ||= {}
28
+ result[node_name][childnode.name.to_sym] = childnode.text
29
+ end
30
+ end
31
+ end
32
+
33
+ result
34
+ end
17
35
  end
18
36
 
19
37
  class Response
@@ -1,3 +1,3 @@
1
1
  module Spreedly
2
- VERSION = "2.0.13"
2
+ VERSION = "2.0.14"
3
3
  end
@@ -67,4 +67,25 @@ class RemotePurchaseTest < Test::Unit::TestCase
67
67
  assert_match /\d/, transaction.gateway_transaction_id
68
68
  end
69
69
 
70
+ def test_gateway_specific_fields
71
+ gateway_token = @environment.add_gateway(:test).token
72
+ card_token = create_card_on(@environment, retained: false).token
73
+
74
+ t = @environment.purchase_on_gateway(gateway_token, card_token, 344,
75
+ gateway_specific_fields:
76
+ {
77
+ litle: {
78
+ descriptor_name: "CompanyName",
79
+ descriptor_phone: "1331131131"
80
+ },
81
+ stripe: {
82
+ application_fee: 411
83
+ }
84
+ })
85
+
86
+ assert t.succeeded?
87
+ assert_equal "CompanyName", t.gateway_specific_fields[:litle][:descriptor_name]
88
+ assert_equal "411", t.gateway_specific_fields[:stripe][:application_fee]
89
+ end
90
+
70
91
  end
@@ -28,6 +28,9 @@ 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 "TheName", t.gateway_specific_fields[:litle][:descriptor_name]
32
+ assert_equal "33411441", t.gateway_specific_fields[:litle][:descriptor_phone]
33
+ assert_equal "844", t.gateway_specific_fields[:stripe][:application_fee]
31
34
 
32
35
  assert_equal 'Nh2Vw0kAoSQvcJDpK52q4dZlrVJ', t.payment_method.token
33
36
  assert_equal 'Forthrast', t.payment_method.last_name
@@ -63,6 +66,7 @@ class AuthorizeTest < Test::Unit::TestCase
63
66
  [ './ip', '183.128.100.102' ],
64
67
  [ './merchant_name_descriptor', 'TRain' ],
65
68
  [ './merchant_location_descriptor', 'British Colombia' ],
69
+ [ './gateway_specific_fields/braintree/customer_id', '1143' ],
66
70
  [ './retain_on_success', 'true' ]
67
71
  end
68
72
 
@@ -81,6 +85,9 @@ class AuthorizeTest < Test::Unit::TestCase
81
85
  ip: "183.128.100.102",
82
86
  merchant_name_descriptor: "TRain",
83
87
  merchant_location_descriptor: "British Colombia",
88
+ gateway_specific_fields: {
89
+ braintree: { customer_id: "1143" }
90
+ },
84
91
  retain_on_success: true
85
92
  }
86
93
  end
@@ -17,6 +17,15 @@ module AuthorizationStubs
17
17
  <description>LotsOCoffee</description>
18
18
  <merchant_name_descriptor>My Writeoff Inc.</merchant_name_descriptor>
19
19
  <merchant_location_descriptor>Tax Free Zone</merchant_location_descriptor>
20
+ <gateway_specific_fields>
21
+ <litle>
22
+ <descriptor_name>TheName</descriptor_name>
23
+ <descriptor_phone>33411441</descriptor_blah>
24
+ </litle>
25
+ <stripe>
26
+ <application_fee>844</application_fee>
27
+ </stripe>
28
+ </gateway_specific_fields>
20
29
  <gateway_specific_fields nil="true"/>
21
30
  <gateway_specific_response_fields nil="true"/>
22
31
  <message key="messages.transaction_succeeded">Succeeded!</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.13
4
+ version: 2.0.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Spreedly
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-09 00:00:00.000000000 Z
11
+ date: 2014-10-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri