recurly 0.4.2 → 0.4.3
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of recurly might be problematic. Click here for more details.
- data/lib/recurly.rb +1 -0
- data/lib/recurly/base.rb +92 -12
- data/lib/recurly/formats/xml_with_errors.rb +132 -0
- data/lib/recurly/version.rb +1 -1
- data/spec/config/recurly.yml +4 -4
- data/spec/integration/transaction_spec.rb +4 -3
- data/spec/vcr/account/accept-language-account/1297746103.yml +6 -6
- data/spec/vcr/account/close/1297746103.yml +17 -17
- data/spec/vcr/account/create-blank/1297746103.yml +4 -4
- data/spec/vcr/account/create-duplicate/1297746103.yml +10 -10
- data/spec/vcr/account/create-min/1297746103.yml +6 -6
- data/spec/vcr/account/create/1297746103.yml +6 -6
- data/spec/vcr/account/find/1297746103.yml +16 -16
- data/spec/vcr/account/list/1297746103.yml +204 -156
- data/spec/vcr/account/update/1297746103.yml +29 -29
- data/spec/vcr/billing/create/1298594128.yml +21 -21
- data/spec/vcr/billing/destroy/1298594128.yml +28 -28
- data/spec/vcr/billing/find/1298594128.yml +28 -28
- data/spec/vcr/billing/update/1298594128.yml +29 -29
- data/spec/vcr/charge/create/1297746103.yml +29 -29
- data/spec/vcr/charge/delete-uninvoiced/1297746103.yml +32 -32
- data/spec/vcr/charge/list-all/1297746103.yml +41 -41
- data/spec/vcr/charge/list-invoiced/1297746103.yml +68 -68
- data/spec/vcr/charge/list-pending/1297746103.yml +41 -41
- data/spec/vcr/charge/lookup/1297746103.yml +21 -21
- data/spec/vcr/coupon/create/1299714521.yml +25 -25
- data/spec/vcr/coupon/destroy/1299714521.yml +22 -22
- data/spec/vcr/credit/create/1299714599.yml +21 -21
- data/spec/vcr/credit/delete/1299714599.yml +28 -28
- data/spec/vcr/credit/list/1299714599.yml +41 -41
- data/spec/vcr/credit/lookup/1299714599.yml +21 -21
- data/spec/vcr/invoice/create-no-charges/1297746103.yml +18 -18
- data/spec/vcr/invoice/create/1297746103.yml +42 -42
- data/spec/vcr/invoice/list/1297746103.yml +61 -61
- data/spec/vcr/invoice/lookup/1297746103.yml +43 -43
- data/spec/vcr/plan/all.yml +65 -52
- data/spec/vcr/plan/find.yml +58 -34
- data/spec/vcr/plan/update.yml +28 -29
- data/spec/vcr/subscription/addons/add/1297746103.yml +293 -335
- data/spec/vcr/subscription/addons/add/1301884213.yml +480 -0
- data/spec/vcr/subscription/addons/create/1297746103.yml +134 -335
- data/spec/vcr/subscription/addons/create/1301884213.yml +321 -0
- data/spec/vcr/subscription/addons/remove/1297746103.yml +262 -335
- data/spec/vcr/subscription/addons/remove/1301884213.yml +449 -0
- data/spec/vcr/subscription/cancel-with-code/{1297746103.yml → 1301881900.yml} +104 -92
- data/spec/vcr/subscription/cancel/{1297746103.yml → 1301881900.yml} +90 -78
- data/spec/vcr/subscription/change1/{1297746103.yml → 1301881900.yml} +86 -74
- data/spec/vcr/subscription/change2/{1297746103.yml → 1301881900.yml} +86 -74
- data/spec/vcr/subscription/create/{1297746103.yml → 1301881900.yml} +50 -38
- data/spec/vcr/subscription/find/{1297746103.yml → 1301881900.yml} +62 -50
- data/spec/vcr/subscription/reactivate/{1297746103.yml → 1301881900.yml} +95 -83
- data/spec/vcr/subscription/refund-full/{1297746103.yml → 1301881900.yml} +79 -67
- data/spec/vcr/subscription/refund-none/{1297746103.yml → 1301881900.yml} +79 -67
- data/spec/vcr/subscription/refund-partial/{1297746103.yml → 1301881900.yml} +79 -67
- data/spec/vcr/transaction/all/1301883347.yml +387 -0
- data/spec/vcr/transaction/create-no-account/{1300473500.yml → 1301883347.yml} +18 -18
- data/spec/vcr/transaction/create-with-account/{1300473500.yml → 1301883347.yml} +37 -37
- data/spec/vcr/transaction/list-filled/{1300473500.yml → 1301883347.yml} +169 -169
- data/spec/vcr/transaction/list-initial/{1300473500.yml → 1301883347.yml} +39 -39
- data/spec/vcr/transaction/lookup/{1300473500.yml → 1301883347.yml} +119 -119
- data/spec/vcr/transaction/refund/{1300473500.yml → 1301883347.yml} +53 -53
- data/spec/vcr/transaction/void/1301883347.yml +365 -0
- data/spec/vcr/transparent/post-url/{1300476053.yml → 1301879142.yml} +19 -19
- metadata +66 -58
- data/spec/vcr/transaction/all/1300473500.yml +0 -387
- data/spec/vcr/transaction/void/1300473500.yml +0 -620
- data/spec/vcr/transparent/post-url/1300475927.yml +0 -41
- data/spec/vcr/transparent/post-url/1300475952.yml +0 -41
- data/spec/vcr/transparent/post-url/1300476034.yml +0 -125
- data/spec/vcr/transparent/post-url/1300476102.yml +0 -125
- data/spec/vcr/transparent/post-url/1300476126.yml +0 -125
data/lib/recurly.rb
CHANGED
@@ -14,6 +14,7 @@ end
|
|
14
14
|
require 'recurly/version'
|
15
15
|
require 'recurly/exceptions'
|
16
16
|
require 'recurly/formats/xml_with_pagination'
|
17
|
+
require 'recurly/formats/xml_with_errors'
|
17
18
|
require 'recurly/config_parser'
|
18
19
|
require 'recurly/rails3/railtie' if defined?(::Rails::Railtie)
|
19
20
|
require 'recurly/base'
|
data/lib/recurly/base.rb
CHANGED
@@ -5,18 +5,7 @@ module Recurly
|
|
5
5
|
class Base < ActiveResource::Base
|
6
6
|
extend ActiveSupport::Memoizable
|
7
7
|
|
8
|
-
self.format = Recurly::Formats::
|
9
|
-
|
10
|
-
def initialize(attributes = {})
|
11
|
-
super(attributes)
|
12
|
-
end
|
13
|
-
|
14
|
-
# Add User-Agent to headers
|
15
|
-
def headers
|
16
|
-
super
|
17
|
-
@headers['User-Agent'] = "Recurly Ruby Client v#{VERSION}"
|
18
|
-
@headers
|
19
|
-
end
|
8
|
+
self.format = Recurly::Formats::XmlWithErrorsFormat.new
|
20
9
|
|
21
10
|
def update_only
|
22
11
|
false
|
@@ -56,6 +45,36 @@ module Recurly
|
|
56
45
|
!persisted?
|
57
46
|
end
|
58
47
|
|
48
|
+
# patched to read Errors array
|
49
|
+
def load(attributes)
|
50
|
+
raise ArgumentError, "expected an attributes Hash, got #{attributes.inspect}" unless attributes.is_a?(Hash)
|
51
|
+
@prefix_options, attributes = split_options(attributes)
|
52
|
+
attributes.each do |key, value|
|
53
|
+
if key.to_s == 'errors' && value.is_a?(Array)
|
54
|
+
load_errors_from_array(value)
|
55
|
+
next
|
56
|
+
end
|
57
|
+
@attributes[key.to_s] =
|
58
|
+
case value
|
59
|
+
when Array
|
60
|
+
resource = find_or_create_resource_for_collection(key)
|
61
|
+
value.map do |attrs|
|
62
|
+
if attrs.is_a?(Hash)
|
63
|
+
resource.new(attrs)
|
64
|
+
else
|
65
|
+
attrs.duplicable? ? attrs.dup : attrs
|
66
|
+
end
|
67
|
+
end
|
68
|
+
when Hash
|
69
|
+
resource = find_or_create_resource_for(key)
|
70
|
+
resource.new(value)
|
71
|
+
else
|
72
|
+
value.dup rescue value
|
73
|
+
end
|
74
|
+
end
|
75
|
+
self
|
76
|
+
end
|
77
|
+
|
59
78
|
# builds the object from the transparent results
|
60
79
|
def from_transparent_results(response)
|
61
80
|
self.load_attributes_from_response(response)
|
@@ -68,6 +87,39 @@ module Recurly
|
|
68
87
|
super
|
69
88
|
@persisted = true
|
70
89
|
end
|
90
|
+
|
91
|
+
# Patched to read errors with field information
|
92
|
+
def load_errors_from_array(new_errors, save_cache = false)
|
93
|
+
errors.clear unless save_cache
|
94
|
+
return if new_errors.nil? or new_errors.empty?
|
95
|
+
humanized_attributes = Hash[self.known_attributes.map { |attr_name| [attr_name.humanize, attr_name] }] unless self.known_attributes.nil?
|
96
|
+
humanized_attributes ||= Hash[@attributes.keys.map { |attr_name| [attr_name.humanize, attr_name] }]
|
97
|
+
new_errors.each do |error|
|
98
|
+
if error.is_a?(Hash)
|
99
|
+
field = error['field']
|
100
|
+
message = error['message']
|
101
|
+
|
102
|
+
if field.blank?
|
103
|
+
errors[:base] << message
|
104
|
+
end
|
105
|
+
|
106
|
+
humanized_name = field.humanize
|
107
|
+
message = message[(humanized_name.size + 1)..-1] if message[0, humanized_name.size + 1] == "#{humanized_name} "
|
108
|
+
|
109
|
+
errors.add field.to_sym, message
|
110
|
+
elsif error.is_a?(String)
|
111
|
+
message = error
|
112
|
+
attr_message = humanized_attributes.keys.detect do |attr_name|
|
113
|
+
if message[0, attr_name.size + 1] == "#{attr_name} "
|
114
|
+
errors.add humanized_attributes[attr_name], message[(attr_name.size + 1)..-1]
|
115
|
+
next
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
errors[:base] << message
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
71
123
|
|
72
124
|
private
|
73
125
|
# patch instantiate_record so it marks result records as persisted
|
@@ -77,6 +129,34 @@ module Recurly
|
|
77
129
|
result
|
78
130
|
end
|
79
131
|
|
132
|
+
def build_request_headers(headers, http_method, uri)
|
133
|
+
super(headers, http_method, uri).update({'User-Agent' => "Recurly Ruby Client v#{VERSION}"})
|
134
|
+
end
|
135
|
+
|
136
|
+
def handle_response(response)
|
137
|
+
case response.code.to_i
|
138
|
+
when 401
|
139
|
+
message = Hash.from_xml(response.body)['errors']['error'] rescue nil
|
140
|
+
raise(UnauthorizedAccess.new(response, message))
|
141
|
+
when 403
|
142
|
+
message = Hash.from_xml(response.body)['errors']['error'] rescue nil
|
143
|
+
raise(ForbiddenAccess.new(response, message))
|
144
|
+
when 404
|
145
|
+
message = Hash.from_xml(response.body)['errors']['error'] rescue nil
|
146
|
+
raise ResourceNotFound.new(response, message)
|
147
|
+
when 422
|
148
|
+
message = Hash.from_xml(response.body)['errors']['error'] rescue nil
|
149
|
+
raise ResourceInvalid.new(response, message)
|
150
|
+
when 412
|
151
|
+
message = Hash.from_xml(response.body)['errors']['error'] rescue nil
|
152
|
+
raise ClientError.new(response, message)
|
153
|
+
when 500
|
154
|
+
message = Hash.from_xml(response.body)['errors']['error'] rescue nil
|
155
|
+
raise(ServerError.new(response, message))
|
156
|
+
else
|
157
|
+
super
|
158
|
+
end
|
159
|
+
end
|
80
160
|
end
|
81
161
|
|
82
162
|
# backwards compatibility
|
@@ -0,0 +1,132 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
|
3
|
+
module Recurly
|
4
|
+
module Formats
|
5
|
+
class XmlWithErrorsFormat
|
6
|
+
include ActiveResource::Formats::XmlFormat
|
7
|
+
|
8
|
+
def decode(xml)
|
9
|
+
doc = Nokogiri::XML(xml)
|
10
|
+
data = xml_node_to_hash(doc.root)
|
11
|
+
|
12
|
+
if data.is_a?(Hash) and data["type"] == 'collection' and data["current_page"]
|
13
|
+
data = paginate_data(data)
|
14
|
+
end
|
15
|
+
|
16
|
+
data
|
17
|
+
end
|
18
|
+
|
19
|
+
def xml_node_to_hash(node)
|
20
|
+
return node.content.to_s.strip unless node.element?
|
21
|
+
|
22
|
+
node_type = xml_node_type(node)
|
23
|
+
if node.children.size == 1 && node.children[0].text?
|
24
|
+
return [] if node_type == 'array'
|
25
|
+
return xml_node_value(node)
|
26
|
+
end
|
27
|
+
|
28
|
+
if node.name == 'errors'
|
29
|
+
return node.children.collect do |child|
|
30
|
+
error_xml_node_to_hash(child) if child.name == 'error'
|
31
|
+
end.reject { |n| n.nil? }
|
32
|
+
elsif node_type == 'array'
|
33
|
+
return node.children.collect do |child|
|
34
|
+
xml_node_to_hash(child)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
return nil if node.children.empty?
|
39
|
+
|
40
|
+
result_hash = {}
|
41
|
+
result_hash['type'] = node_type unless node_type.nil?
|
42
|
+
|
43
|
+
node.children.each do |child|
|
44
|
+
child_name = child.name
|
45
|
+
result = xml_node_to_hash(child)
|
46
|
+
|
47
|
+
next if child_name == 'text' && result == ''
|
48
|
+
|
49
|
+
if result_hash[child_name]
|
50
|
+
next if result == ''
|
51
|
+
if result_hash[child_name].is_a?(Array)
|
52
|
+
result_hash[child_name] << result
|
53
|
+
else
|
54
|
+
result_hash[child_name] = [result_hash[child_name]] << result
|
55
|
+
end
|
56
|
+
else
|
57
|
+
result_hash[child_name] = result
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
result_hash
|
62
|
+
end
|
63
|
+
|
64
|
+
def error_xml_node_to_hash(node)
|
65
|
+
xml_attributes(node).merge('message' => node.children[0].content.to_s)
|
66
|
+
end
|
67
|
+
|
68
|
+
def xml_node_value(node)
|
69
|
+
return nil if xml_node_nil?(node)
|
70
|
+
|
71
|
+
case xml_node_type(node)
|
72
|
+
when 'integer'
|
73
|
+
node.content.to_i
|
74
|
+
when 'boolean'
|
75
|
+
['true','1'].include?(node.content.downcase)
|
76
|
+
when 'datetime'
|
77
|
+
Time.parse(node.content)
|
78
|
+
else
|
79
|
+
node.content.to_s.strip
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def xml_node_nil?(node)
|
84
|
+
return true if node.nil?
|
85
|
+
attr_node = node.attribute('nil')
|
86
|
+
attr_node.nil? ? false : true
|
87
|
+
end
|
88
|
+
|
89
|
+
def xml_node_type(node)
|
90
|
+
attr_node = node.attribute('type')
|
91
|
+
attr_node.nil? ? nil : attr_node.value
|
92
|
+
end
|
93
|
+
|
94
|
+
def xml_attributes(node)
|
95
|
+
return nil if node.attribute_nodes.empty?
|
96
|
+
values = {}
|
97
|
+
node.attribute_nodes.each do |attribute|
|
98
|
+
values[attribute.name] = attribute.value
|
99
|
+
end
|
100
|
+
values
|
101
|
+
end
|
102
|
+
|
103
|
+
# convert the data into a paginated resultset (array with singleton methods)
|
104
|
+
def paginate_data(data)
|
105
|
+
per_page = data["per_page"] || 0
|
106
|
+
current_page = data["current_page"] || 0
|
107
|
+
total_entries = data["total_entries"] || 0
|
108
|
+
|
109
|
+
# find the first array and use that as the resultset (lame workaround)
|
110
|
+
results = data.values.select{|v| v.is_a?(Array)}.first || []
|
111
|
+
if results.empty?
|
112
|
+
data.delete("per_page")
|
113
|
+
data.delete("current_page")
|
114
|
+
data.delete("total_entries")
|
115
|
+
data.delete("type")
|
116
|
+
results = [data.values.first].compact
|
117
|
+
end
|
118
|
+
|
119
|
+
# define total_entries accessor on result object
|
120
|
+
results.instance_eval "def total_entries; #{total_entries.to_i}; end"
|
121
|
+
|
122
|
+
# define current_page accessor on result object
|
123
|
+
results.instance_eval "def current_page; #{current_page.to_i}; end"
|
124
|
+
|
125
|
+
# define per_page accessor on result object
|
126
|
+
results.instance_eval "def per_page; #{per_page.to_i}; end"
|
127
|
+
|
128
|
+
results
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
data/lib/recurly/version.rb
CHANGED
data/spec/config/recurly.yml
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
---
|
2
|
-
username: api-test-
|
3
|
-
password:
|
4
|
-
private_key:
|
5
|
-
subdomain:
|
2
|
+
username: api-test@hello-test.com
|
3
|
+
password: 50a5b8a69a2545db84ac4112ba8cac6f
|
4
|
+
private_key: 54922a65b9ba4d49a486de7f0b2057c3
|
5
|
+
subdomain: hello-test
|
6
6
|
environment: :development
|
7
7
|
|
8
8
|
#username: api-test@isaactest.com
|
@@ -65,8 +65,8 @@ module Recurly
|
|
65
65
|
end
|
66
66
|
|
67
67
|
it "should be in void state" do
|
68
|
-
@transactions.first.amount_in_cents.should ==
|
69
|
-
@transactions.first.status.should == '
|
68
|
+
@transactions.first.amount_in_cents.should == 0
|
69
|
+
@transactions.first.status.should == 'success'
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
@@ -84,7 +84,8 @@ module Recurly
|
|
84
84
|
end
|
85
85
|
|
86
86
|
it "should return a list of transactions made on the account" do
|
87
|
-
|
87
|
+
# one authorization and three transactions
|
88
|
+
@successful_transactions.length.should == 4
|
88
89
|
@total_transactions.length.should == 4
|
89
90
|
end
|
90
91
|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
- !ruby/struct:VCR::HTTPInteraction
|
3
3
|
request: !ruby/struct:VCR::Request
|
4
4
|
method: :post
|
5
|
-
uri: http://api-test-
|
5
|
+
uri: http://api-test%40hello-test.com:50a5b8a69a2545db84ac4112ba8cac6f@app.recurly.local:3000/accounts.xml
|
6
6
|
body: |
|
7
7
|
<?xml version="1.0" encoding="UTF-8"?>
|
8
8
|
<account>
|
@@ -20,7 +20,7 @@
|
|
20
20
|
|
21
21
|
headers:
|
22
22
|
authorization:
|
23
|
-
- Basic
|
23
|
+
- Basic YXBpLXRlc3RAaGVsbG8tdGVzdC5jb206NTBhNWI4YTY5YTI1NDVkYjg0YWM0MTEyYmE4Y2FjNmY=
|
24
24
|
content-type:
|
25
25
|
- application/xml
|
26
26
|
accept:
|
@@ -39,13 +39,13 @@
|
|
39
39
|
location:
|
40
40
|
- http://app.recurly.local:3000/accounts/account1-french-1297746103
|
41
41
|
x-runtime:
|
42
|
-
- "
|
42
|
+
- "340"
|
43
43
|
content-type:
|
44
44
|
- application/xml; charset=utf-8
|
45
45
|
content-length:
|
46
46
|
- "585"
|
47
47
|
set-cookie:
|
48
|
-
- _recurly_session=
|
48
|
+
- _recurly_session=f0053268a5a52285db50fb2ac850bbb6; domain=.recurly.local; path=/; HttpOnly
|
49
49
|
connection:
|
50
50
|
- close
|
51
51
|
server:
|
@@ -62,8 +62,8 @@
|
|
62
62
|
<company_name>Recurly Ruby Gem</company_name>
|
63
63
|
<balance_in_cents type="integer">0</balance_in_cents>
|
64
64
|
<closed type="boolean">false</closed>
|
65
|
-
<hosted_login_token>
|
66
|
-
<created_at type="datetime">2011-
|
65
|
+
<hosted_login_token>7528d672c9194529b738db26528b8f81</hosted_login_token>
|
66
|
+
<created_at type="datetime">2011-04-04T02:17:56Z</created_at>
|
67
67
|
<state>active</state>
|
68
68
|
</account>
|
69
69
|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
- !ruby/struct:VCR::HTTPInteraction
|
3
3
|
request: !ruby/struct:VCR::Request
|
4
4
|
method: :post
|
5
|
-
uri: http://api-test-
|
5
|
+
uri: http://api-test%40hello-test.com:50a5b8a69a2545db84ac4112ba8cac6f@app.recurly.local:3000/accounts.xml
|
6
6
|
body: |
|
7
7
|
<?xml version="1.0" encoding="UTF-8"?>
|
8
8
|
<account>
|
@@ -20,7 +20,7 @@
|
|
20
20
|
|
21
21
|
headers:
|
22
22
|
authorization:
|
23
|
-
- Basic
|
23
|
+
- Basic YXBpLXRlc3RAaGVsbG8tdGVzdC5jb206NTBhNWI4YTY5YTI1NDVkYjg0YWM0MTEyYmE4Y2FjNmY=
|
24
24
|
content-type:
|
25
25
|
- application/xml
|
26
26
|
accept:
|
@@ -39,13 +39,13 @@
|
|
39
39
|
location:
|
40
40
|
- http://app.recurly.local:3000/accounts/account-close-1297746103
|
41
41
|
x-runtime:
|
42
|
-
- "
|
42
|
+
- "330"
|
43
43
|
content-type:
|
44
44
|
- application/xml; charset=utf-8
|
45
45
|
content-length:
|
46
46
|
- "581"
|
47
47
|
set-cookie:
|
48
|
-
- _recurly_session=
|
48
|
+
- _recurly_session=9225b6b1bc4bc9e4c294a37a04543860; domain=.recurly.local; path=/; HttpOnly
|
49
49
|
connection:
|
50
50
|
- close
|
51
51
|
server:
|
@@ -62,8 +62,8 @@
|
|
62
62
|
<company_name>Recurly Ruby Gem</company_name>
|
63
63
|
<balance_in_cents type="integer">0</balance_in_cents>
|
64
64
|
<closed type="boolean">false</closed>
|
65
|
-
<hosted_login_token>
|
66
|
-
<created_at type="datetime">2011-
|
65
|
+
<hosted_login_token>43d53db8bae74f36bfcef0fad8ff4499</hosted_login_token>
|
66
|
+
<created_at type="datetime">2011-04-04T02:17:42Z</created_at>
|
67
67
|
<state>active</state>
|
68
68
|
</account>
|
69
69
|
|
@@ -71,11 +71,11 @@
|
|
71
71
|
- !ruby/struct:VCR::HTTPInteraction
|
72
72
|
request: !ruby/struct:VCR::Request
|
73
73
|
method: :delete
|
74
|
-
uri: http://api-test-
|
74
|
+
uri: http://api-test%40hello-test.com:50a5b8a69a2545db84ac4112ba8cac6f@app.recurly.local:3000/accounts/account-close-1297746103.xml
|
75
75
|
body:
|
76
76
|
headers:
|
77
77
|
authorization:
|
78
|
-
- Basic
|
78
|
+
- Basic YXBpLXRlc3RAaGVsbG8tdGVzdC5jb206NTBhNWI4YTY5YTI1NDVkYjg0YWM0MTEyYmE4Y2FjNmY=
|
79
79
|
accept:
|
80
80
|
- application/xml
|
81
81
|
user-agent:
|
@@ -90,13 +90,13 @@
|
|
90
90
|
cache-control:
|
91
91
|
- no-cache
|
92
92
|
x-runtime:
|
93
|
-
- "
|
93
|
+
- "574"
|
94
94
|
content-type:
|
95
95
|
- application/xml; charset=utf-8
|
96
96
|
content-length:
|
97
97
|
- "1"
|
98
98
|
set-cookie:
|
99
|
-
- _recurly_session=
|
99
|
+
- _recurly_session=a9dd2fed298913d0bf1a222c6eb3f3e7; domain=.recurly.local; path=/; HttpOnly
|
100
100
|
connection:
|
101
101
|
- close
|
102
102
|
server:
|
@@ -106,11 +106,11 @@
|
|
106
106
|
- !ruby/struct:VCR::HTTPInteraction
|
107
107
|
request: !ruby/struct:VCR::Request
|
108
108
|
method: :get
|
109
|
-
uri: http://api-test-
|
109
|
+
uri: http://api-test%40hello-test.com:50a5b8a69a2545db84ac4112ba8cac6f@app.recurly.local:3000/accounts/account-close-1297746103.xml
|
110
110
|
body:
|
111
111
|
headers:
|
112
112
|
authorization:
|
113
|
-
- Basic
|
113
|
+
- Basic YXBpLXRlc3RAaGVsbG8tdGVzdC5jb206NTBhNWI4YTY5YTI1NDVkYjg0YWM0MTEyYmE4Y2FjNmY=
|
114
114
|
accept:
|
115
115
|
- application/xml
|
116
116
|
accept-encoding:
|
@@ -125,17 +125,17 @@
|
|
125
125
|
message: OK
|
126
126
|
headers:
|
127
127
|
x-runtime:
|
128
|
-
- "
|
128
|
+
- "291"
|
129
129
|
content-type:
|
130
130
|
- application/xml; charset=utf-8
|
131
131
|
etag:
|
132
|
-
- "\"
|
132
|
+
- "\"507894927f1390fd5c54ee01dad7cb82\""
|
133
133
|
cache-control:
|
134
134
|
- private, max-age=0, must-revalidate
|
135
135
|
content-length:
|
136
136
|
- "580"
|
137
137
|
set-cookie:
|
138
|
-
- _recurly_session=
|
138
|
+
- _recurly_session=5881daad994bb5da5746c645afc5d914; domain=.recurly.local; path=/; HttpOnly
|
139
139
|
connection:
|
140
140
|
- close
|
141
141
|
server:
|
@@ -152,8 +152,8 @@
|
|
152
152
|
<company_name>Recurly Ruby Gem</company_name>
|
153
153
|
<balance_in_cents type="integer">0</balance_in_cents>
|
154
154
|
<closed type="boolean">true</closed>
|
155
|
-
<hosted_login_token>
|
156
|
-
<created_at type="datetime">2011-
|
155
|
+
<hosted_login_token>43d53db8bae74f36bfcef0fad8ff4499</hosted_login_token>
|
156
|
+
<created_at type="datetime">2011-04-04T02:17:42Z</created_at>
|
157
157
|
<state>closed</state>
|
158
158
|
</account>
|
159
159
|
|