spreedly 2.0.1 → 2.0.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.
- data/HISTORY.md +3 -0
- data/lib/spreedly/connection.rb +9 -0
- data/lib/spreedly/environment.rb +7 -1
- data/lib/spreedly/gateway_class.rb +36 -0
- data/lib/spreedly/ssl_requester.rb +5 -0
- data/lib/spreedly/urls.rb +4 -4
- data/lib/spreedly/version.rb +1 -1
- data/lib/spreedly.rb +1 -0
- data/test/remote/remote_gateway_options_test.rb +17 -0
- data/test/unit/environment_test.rb +8 -0
- data/test/unit/gateway_options_test.rb +28 -0
- data/test/unit/response_stubs/gateway_options_stubs.rb +137 -0
- metadata +11 -4
data/HISTORY.md
CHANGED
data/lib/spreedly/connection.rb
CHANGED
@@ -20,6 +20,8 @@ module Spreedly
|
|
20
20
|
http.put(endpoint.request_uri, body, headers)
|
21
21
|
when :delete
|
22
22
|
http.delete(endpoint.request_uri, headers)
|
23
|
+
when :options
|
24
|
+
http.request(OptionsWithResponseBody.new(endpoint.request_uri, headers))
|
23
25
|
else
|
24
26
|
raise ArgumentError, "Unsupported request method #{method.to_s.upcase}"
|
25
27
|
end
|
@@ -36,5 +38,12 @@ module Spreedly
|
|
36
38
|
http
|
37
39
|
end
|
38
40
|
end
|
41
|
+
|
42
|
+
class OptionsWithResponseBody < Net::HTTPRequest
|
43
|
+
METHOD = 'OPTIONS'
|
44
|
+
REQUEST_HAS_BODY = false
|
45
|
+
RESPONSE_HAS_BODY = true
|
46
|
+
end
|
47
|
+
|
39
48
|
end
|
40
49
|
|
data/lib/spreedly/environment.rb
CHANGED
@@ -7,10 +7,11 @@ module Spreedly
|
|
7
7
|
include SslRequester
|
8
8
|
include Urls
|
9
9
|
|
10
|
-
attr_reader :key, :currency_code
|
10
|
+
attr_reader :key, :currency_code, :base_url
|
11
11
|
|
12
12
|
def initialize(environment_key, access_secret, options={})
|
13
13
|
@key, @access_secret = environment_key, access_secret
|
14
|
+
@base_url = options[:base_url] || "https://core.spreedly.com"
|
14
15
|
@currency_code = options[:currency_code] || 'USD'
|
15
16
|
end
|
16
17
|
|
@@ -86,6 +87,11 @@ module Spreedly
|
|
86
87
|
Gateway.new_list_from(xml_doc)
|
87
88
|
end
|
88
89
|
|
90
|
+
def gateway_options
|
91
|
+
xml_doc = ssl_options(gateway_options_url)
|
92
|
+
GatewayClass.new_list_from(xml_doc)
|
93
|
+
end
|
94
|
+
|
89
95
|
def add_gateway(gateway_type, credentials = {})
|
90
96
|
body = add_gateway_body(gateway_type, credentials)
|
91
97
|
xml_doc = ssl_post(add_gateway_url, body, headers)
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Spreedly
|
2
|
+
|
3
|
+
class GatewayClass
|
4
|
+
|
5
|
+
include Fields
|
6
|
+
field :gateway_type, :name, :supported_countries, :homepage
|
7
|
+
attr_reader :supported_countries, :payment_methods
|
8
|
+
|
9
|
+
def initialize(xml_doc)
|
10
|
+
initialize_fields(xml_doc)
|
11
|
+
init_supported_countries(xml_doc)
|
12
|
+
init_payment_methods(xml_doc)
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.new_list_from(xml_doc)
|
16
|
+
gateways = xml_doc.xpath('.//gateways/gateway')
|
17
|
+
gateways.map do |each|
|
18
|
+
self.new(each)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
def init_supported_countries(xml_doc)
|
24
|
+
list = xml_doc.at_xpath(".//supported_countries").inner_html.strip
|
25
|
+
@supported_countries = list.split(/\s*,\s*/)
|
26
|
+
end
|
27
|
+
|
28
|
+
def init_payment_methods(xml_doc)
|
29
|
+
@payment_methods = xml_doc.xpath('.//payment_methods/payment_method').map do |each|
|
30
|
+
each.text
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -14,6 +14,10 @@ module Spreedly
|
|
14
14
|
ssl_request(:put, endpoint, body, headers)
|
15
15
|
end
|
16
16
|
|
17
|
+
def ssl_options(endpoint)
|
18
|
+
ssl_request(:options, endpoint, nil, {})
|
19
|
+
end
|
20
|
+
|
17
21
|
private
|
18
22
|
def ssl_request(method, endpoint, body, headers)
|
19
23
|
raw_response = Timeout::timeout(70) do
|
@@ -57,6 +61,7 @@ module Spreedly
|
|
57
61
|
|
58
62
|
def show_raw_response(raw_response)
|
59
63
|
return unless ENV['SHOW_RAW_RESPONSE'] == 'true'
|
64
|
+
puts raw_response.inspect
|
60
65
|
puts "\nraw_response.code: #{raw_response.code}\nraw_response.body:\n#{raw_response.body}"
|
61
66
|
end
|
62
67
|
|
data/lib/spreedly/urls.rb
CHANGED
@@ -2,10 +2,6 @@ module Spreedly
|
|
2
2
|
|
3
3
|
module Urls
|
4
4
|
|
5
|
-
def base_url
|
6
|
-
"https://core.spreedly.com"
|
7
|
-
end
|
8
|
-
|
9
5
|
def find_payment_method_url(token)
|
10
6
|
"#{base_url}/v1/payment_methods/#{token}.xml"
|
11
7
|
end
|
@@ -67,6 +63,10 @@ module Spreedly
|
|
67
63
|
"#{base_url}/v1/gateways.xml#{since_param}"
|
68
64
|
end
|
69
65
|
|
66
|
+
def gateway_options_url
|
67
|
+
"#{base_url}/v1/gateways.xml"
|
68
|
+
end
|
69
|
+
|
70
70
|
def add_gateway_url
|
71
71
|
"#{base_url}/v1/gateways.xml"
|
72
72
|
end
|
data/lib/spreedly/version.rb
CHANGED
data/lib/spreedly.rb
CHANGED
@@ -23,6 +23,7 @@ require 'spreedly/transactions/retain_payment_method'
|
|
23
23
|
require 'spreedly/transactions/redact_payment_method'
|
24
24
|
require 'spreedly/transactions/redact_gateway'
|
25
25
|
require 'spreedly/gateway'
|
26
|
+
require 'spreedly/gateway_class'
|
26
27
|
require 'spreedly/error'
|
27
28
|
|
28
29
|
module Spreedly
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class RemoteGatewayOptionsTest < 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_successfully_get_options
|
10
|
+
gateway_classes = @environment.gateway_options
|
11
|
+
braintree = gateway_classes.select { |each| each.name == "Braintree" }.first
|
12
|
+
assert_equal "http://www.braintreepaymentsolutions.com/", braintree.homepage
|
13
|
+
assert_equal ["credit_card", "third_party_token"], braintree.payment_methods
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
@@ -15,4 +15,12 @@ class EnvironmentTest < Test::Unit::TestCase
|
|
15
15
|
assert_equal "EUR", environment.currency_code
|
16
16
|
end
|
17
17
|
|
18
|
+
def test_base_url_default
|
19
|
+
assert_equal "https://core.spreedly.com", @environment.base_url
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_base_url_override
|
23
|
+
environment = Spreedly::Environment.new("TheKey", "TheAccessSecret", base_url: "http://it.com")
|
24
|
+
assert_equal "http://it.com", environment.base_url
|
25
|
+
end
|
18
26
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'unit/response_stubs/gateway_options_stubs'
|
3
|
+
|
4
|
+
class ListGatewaysTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
include GatewayOptionsStubs
|
7
|
+
|
8
|
+
def setup
|
9
|
+
@environment = Spreedly::Environment.new("key", "secret")
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_successful_gateway_options
|
13
|
+
@environment.stubs(:raw_ssl_request).returns(successful_gateway_options_response)
|
14
|
+
list = @environment.gateway_options
|
15
|
+
|
16
|
+
assert_kind_of(Array, list)
|
17
|
+
assert_equal 2, list.size
|
18
|
+
|
19
|
+
assert_equal 'PayPal', list.first.name
|
20
|
+
assert_equal ["US", "GB", "CA"], list.first.supported_countries
|
21
|
+
assert_equal ["credit_card", "paypal"], list.first.payment_methods
|
22
|
+
assert_equal "paypal", list.first.gateway_type
|
23
|
+
assert_equal "http://paypal.com/", list.first.homepage
|
24
|
+
assert_kind_of Spreedly::GatewayClass, list.first
|
25
|
+
assert_kind_of Spreedly::GatewayClass, list.last
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,137 @@
|
|
1
|
+
module GatewayOptionsStubs
|
2
|
+
|
3
|
+
def successful_gateway_options_response
|
4
|
+
StubResponse.succeeded <<-XML
|
5
|
+
<gateways>
|
6
|
+
<gateway>
|
7
|
+
<gateway_type>paypal</gateway_type>
|
8
|
+
<name>PayPal</name>
|
9
|
+
<auth_modes>
|
10
|
+
<auth_mode>
|
11
|
+
<auth_mode_type>signature</auth_mode_type>
|
12
|
+
<name>Signature</name>
|
13
|
+
<credentials>
|
14
|
+
<credential>
|
15
|
+
<name>login</name>
|
16
|
+
<label>Login</label>
|
17
|
+
<safe type="boolean">true</safe>
|
18
|
+
</credential>
|
19
|
+
<credential>
|
20
|
+
<name>password</name>
|
21
|
+
<label>Password</label>
|
22
|
+
<safe type="boolean">false</safe>
|
23
|
+
</credential>
|
24
|
+
<credential>
|
25
|
+
<name>signature</name>
|
26
|
+
<label>Signature</label>
|
27
|
+
<safe type="boolean">false</safe>
|
28
|
+
</credential>
|
29
|
+
</credentials>
|
30
|
+
</auth_mode>
|
31
|
+
<auth_mode>
|
32
|
+
<auth_mode_type>certificate</auth_mode_type>
|
33
|
+
<name>Certificate</name>
|
34
|
+
<credentials>
|
35
|
+
<credential>
|
36
|
+
<name>login</name>
|
37
|
+
<label>Login</label>
|
38
|
+
<safe type="boolean">true</safe>
|
39
|
+
</credential>
|
40
|
+
<credential>
|
41
|
+
<name>password</name>
|
42
|
+
<label>Password</label>
|
43
|
+
<safe type="boolean">false</safe>
|
44
|
+
</credential>
|
45
|
+
<credential>
|
46
|
+
<name>pem</name>
|
47
|
+
<label>PEM Certificate</label>
|
48
|
+
<safe type="boolean">false</safe>
|
49
|
+
<large type="boolean">true</large>
|
50
|
+
</credential>
|
51
|
+
</credentials>
|
52
|
+
</auth_mode>
|
53
|
+
<auth_mode>
|
54
|
+
<auth_mode_type>delegate</auth_mode_type>
|
55
|
+
<name>Delegate</name>
|
56
|
+
<credentials>
|
57
|
+
<credential>
|
58
|
+
<name>email</name>
|
59
|
+
<label>PayPal Email</label>
|
60
|
+
<safe type="boolean">true</safe>
|
61
|
+
</credential>
|
62
|
+
</credentials>
|
63
|
+
</auth_mode>
|
64
|
+
</auth_modes>
|
65
|
+
<characteristics>
|
66
|
+
<supports_purchase type="boolean">true</supports_purchase>
|
67
|
+
<supports_authorize type="boolean">true</supports_authorize>
|
68
|
+
<supports_capture type="boolean">true</supports_capture>
|
69
|
+
<supports_credit type="boolean">true</supports_credit>
|
70
|
+
<supports_void type="boolean">true</supports_void>
|
71
|
+
<supports_reference_purchase type="boolean">true</supports_reference_purchase>
|
72
|
+
<supports_purchase_via_preauthorization type="boolean">true</supports_purchase_via_preauthorization>
|
73
|
+
<supports_offsite_purchase type="boolean">true</supports_offsite_purchase>
|
74
|
+
<supports_offsite_authorize type="boolean">true</supports_offsite_authorize>
|
75
|
+
<supports_3dsecure_purchase type="boolean">false</supports_3dsecure_purchase>
|
76
|
+
<supports_3dsecure_authorize type="boolean">false</supports_3dsecure_authorize>
|
77
|
+
<supports_store type="boolean">false</supports_store>
|
78
|
+
<supports_remove type="boolean">true</supports_remove>
|
79
|
+
</characteristics>
|
80
|
+
<payment_methods>
|
81
|
+
<payment_method>credit_card</payment_method>
|
82
|
+
<payment_method>paypal</payment_method>
|
83
|
+
</payment_methods>
|
84
|
+
<gateway_specific_fields>
|
85
|
+
<gateway_specific_field>recurring</gateway_specific_field>
|
86
|
+
</gateway_specific_fields>
|
87
|
+
<supported_countries>US, GB, CA</supported_countries>
|
88
|
+
<homepage>http://paypal.com/</homepage>
|
89
|
+
</gateway>
|
90
|
+
<gateway>
|
91
|
+
<gateway_type>worldpay</gateway_type>
|
92
|
+
<name>WorldPay</name>
|
93
|
+
<auth_modes>
|
94
|
+
<auth_mode>
|
95
|
+
<auth_mode_type>default</auth_mode_type>
|
96
|
+
<name>Default</name>
|
97
|
+
<credentials>
|
98
|
+
<credential>
|
99
|
+
<name>login</name>
|
100
|
+
<label>Login</label>
|
101
|
+
<safe type="boolean">true</safe>
|
102
|
+
</credential>
|
103
|
+
<credential>
|
104
|
+
<name>password</name>
|
105
|
+
<label>Password</label>
|
106
|
+
<safe type="boolean">false</safe>
|
107
|
+
</credential>
|
108
|
+
</credentials>
|
109
|
+
</auth_mode>
|
110
|
+
</auth_modes>
|
111
|
+
<characteristics>
|
112
|
+
<supports_purchase type="boolean">true</supports_purchase>
|
113
|
+
<supports_authorize type="boolean">true</supports_authorize>
|
114
|
+
<supports_capture type="boolean">true</supports_capture>
|
115
|
+
<supports_credit type="boolean">true</supports_credit>
|
116
|
+
<supports_void type="boolean">true</supports_void>
|
117
|
+
<supports_reference_purchase type="boolean">true</supports_reference_purchase>
|
118
|
+
<supports_purchase_via_preauthorization type="boolean">false</supports_purchase_via_preauthorization>
|
119
|
+
<supports_offsite_purchase type="boolean">false</supports_offsite_purchase>
|
120
|
+
<supports_offsite_authorize type="boolean">false</supports_offsite_authorize>
|
121
|
+
<supports_3dsecure_purchase type="boolean">false</supports_3dsecure_purchase>
|
122
|
+
<supports_3dsecure_authorize type="boolean">false</supports_3dsecure_authorize>
|
123
|
+
<supports_store type="boolean">false</supports_store>
|
124
|
+
<supports_remove type="boolean">false</supports_remove>
|
125
|
+
</characteristics>
|
126
|
+
<payment_methods>
|
127
|
+
<payment_method>credit_card</payment_method>
|
128
|
+
</payment_methods>
|
129
|
+
<gateway_specific_fields/>
|
130
|
+
<supported_countries>HK, US, GB, AU, AD, BE, CH, CY, CZ, DE, DK, ES, FI, FR, GI, GR, HU, IE, IL, IT, LI, LU, MC, MT, NL, NO, NZ, PL, PT, SE, SG, SI, SM, TR, UM, VA</supported_countries>
|
131
|
+
<homepage>http://worldpay.com</homepage>
|
132
|
+
</gateway>
|
133
|
+
</gateways>
|
134
|
+
XML
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
metadata
CHANGED
@@ -2,14 +2,14 @@
|
|
2
2
|
name: spreedly
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 2.0.
|
5
|
+
version: 2.0.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Spreedly
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-08-
|
12
|
+
date: 2013-08-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
prerelease: false
|
@@ -129,6 +129,7 @@ files:
|
|
129
129
|
- lib/spreedly/environment.rb
|
130
130
|
- lib/spreedly/error.rb
|
131
131
|
- lib/spreedly/gateway.rb
|
132
|
+
- lib/spreedly/gateway_class.rb
|
132
133
|
- lib/spreedly/model.rb
|
133
134
|
- lib/spreedly/payment_methods/bank_account.rb
|
134
135
|
- lib/spreedly/payment_methods/credit_card.rb
|
@@ -164,6 +165,7 @@ files:
|
|
164
165
|
- test/remote/remote_find_gateway_test.rb
|
165
166
|
- test/remote/remote_find_payment_method_test.rb
|
166
167
|
- test/remote/remote_find_transaction_test.rb
|
168
|
+
- test/remote/remote_gateway_options_test.rb
|
167
169
|
- test/remote/remote_list_gateways_test.rb
|
168
170
|
- test/remote/remote_list_payment_methods_test.rb
|
169
171
|
- test/remote/remote_list_transactions_test.rb
|
@@ -184,6 +186,7 @@ files:
|
|
184
186
|
- test/unit/find_gateway_test.rb
|
185
187
|
- test/unit/find_payment_method_test.rb
|
186
188
|
- test/unit/find_transaction_test.rb
|
189
|
+
- test/unit/gateway_options_test.rb
|
187
190
|
- test/unit/list_gateways_test.rb
|
188
191
|
- test/unit/list_payment_methods_test.rb
|
189
192
|
- test/unit/list_transactions_test.rb
|
@@ -198,6 +201,7 @@ files:
|
|
198
201
|
- test/unit/response_stubs/find_gateway_stubs.rb
|
199
202
|
- test/unit/response_stubs/find_payment_method_stubs.rb
|
200
203
|
- test/unit/response_stubs/find_transaction_stubs.rb
|
204
|
+
- test/unit/response_stubs/gateway_options_stubs.rb
|
201
205
|
- test/unit/response_stubs/list_gateways_stubs.rb
|
202
206
|
- test/unit/response_stubs/list_payment_methods_stubs.rb
|
203
207
|
- test/unit/response_stubs/list_transactions_stubs.rb
|
@@ -225,7 +229,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
225
229
|
- !ruby/object:Gem::Version
|
226
230
|
segments:
|
227
231
|
- 0
|
228
|
-
hash:
|
232
|
+
hash: -3250380428935698253
|
229
233
|
version: '0'
|
230
234
|
none: false
|
231
235
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
@@ -234,7 +238,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
234
238
|
- !ruby/object:Gem::Version
|
235
239
|
segments:
|
236
240
|
- 0
|
237
|
-
hash:
|
241
|
+
hash: -3250380428935698253
|
238
242
|
version: '0'
|
239
243
|
none: false
|
240
244
|
requirements: []
|
@@ -257,6 +261,7 @@ test_files:
|
|
257
261
|
- test/remote/remote_find_gateway_test.rb
|
258
262
|
- test/remote/remote_find_payment_method_test.rb
|
259
263
|
- test/remote/remote_find_transaction_test.rb
|
264
|
+
- test/remote/remote_gateway_options_test.rb
|
260
265
|
- test/remote/remote_list_gateways_test.rb
|
261
266
|
- test/remote/remote_list_payment_methods_test.rb
|
262
267
|
- test/remote/remote_list_transactions_test.rb
|
@@ -277,6 +282,7 @@ test_files:
|
|
277
282
|
- test/unit/find_gateway_test.rb
|
278
283
|
- test/unit/find_payment_method_test.rb
|
279
284
|
- test/unit/find_transaction_test.rb
|
285
|
+
- test/unit/gateway_options_test.rb
|
280
286
|
- test/unit/list_gateways_test.rb
|
281
287
|
- test/unit/list_payment_methods_test.rb
|
282
288
|
- test/unit/list_transactions_test.rb
|
@@ -291,6 +297,7 @@ test_files:
|
|
291
297
|
- test/unit/response_stubs/find_gateway_stubs.rb
|
292
298
|
- test/unit/response_stubs/find_payment_method_stubs.rb
|
293
299
|
- test/unit/response_stubs/find_transaction_stubs.rb
|
300
|
+
- test/unit/response_stubs/gateway_options_stubs.rb
|
294
301
|
- test/unit/response_stubs/list_gateways_stubs.rb
|
295
302
|
- test/unit/response_stubs/list_payment_methods_stubs.rb
|
296
303
|
- test/unit/response_stubs/list_transactions_stubs.rb
|