webpay 2.3.1 → 2.4.0

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: c927ca24f603b3b182f7001148cb32839dbda14e
4
- data.tar.gz: 063d18639d6a65db61d86d4e70fbb09b746d580c
3
+ metadata.gz: ab7cf932ec8c0372298a6f00d6e885b4fd729568
4
+ data.tar.gz: 27aad786e540929fa939d41411a341998344cb1b
5
5
  SHA512:
6
- metadata.gz: 16cc7aaed7e03c44ea73b601c034609d7736e03b2b6688310cef13176211d319cd443a249130b6ac9e6bfc7f9048c8c6623a1af6e6a256d302844049e09002ba
7
- data.tar.gz: a9d269f913a2ddd4082ce5538234aa0852b4bc23818979494ec57d251d8e2af89cba558d347dbd1cff895f05de98ec0797f9e6375e70ee2528840b165d0dc11b
6
+ metadata.gz: 9c9945eaad012fc3060d14101e158a05ddc050a082010e166b7517d25e2a7ae05894e4a4cf6d951b4c92b1e9ca2a9e56a627a1507e4d5687eb24c7195f269753
7
+ data.tar.gz: 9b676b07a53a773edca3eeca496fcf7f7b375bc8b570e08212fff6d3f9671d9fa58d0140f924ec96fc40037a3cadc7c8a0c2d327cea659e7532e3b31dc5ba3e8
@@ -0,0 +1,52 @@
1
+ module WebPay
2
+
3
+ # Object for API response hash object with <code>hash['object'] = recursion</code>
4
+ class Recursion < Entity
5
+ install_class_operations :create, :all
6
+
7
+ # @return [String] Relative path to API root
8
+ # @api private
9
+ def self.path
10
+ '/recursions'
11
+ end
12
+
13
+ # @return [Entity] WebPay::Recursion or WebPay::DeletedEntity. <code>deleted?</code> is to classify.
14
+ def self.retrieve(id)
15
+ id = id.to_s
16
+ if id.strip == ''
17
+ raise InvalidRequestError.invalid_id(id)
18
+ end
19
+ response = WebPay.client.get([path, id].join('/'))
20
+ if response['deleted']
21
+ DeletedEntity.new(response)
22
+ else
23
+ convert(response)
24
+ end
25
+ end
26
+
27
+ # @return [Boolean] false
28
+ def deleted?
29
+ false
30
+ end
31
+
32
+ # Send resume request.
33
+ # @return [Recursion] this object, resumed
34
+ def resume(params = {})
35
+ update_attributes(WebPay.client.post([path, 'resume'].join('/'), params))
36
+ end
37
+
38
+ # Delete this recursion.
39
+ # This operation cannot be undone.
40
+ # @return [Boolean] true if operation succeeded
41
+ def delete
42
+ response = WebPay.client.delete(path)
43
+ response['deleted']
44
+ end
45
+
46
+ # @return [String] Relative path of instance to API root
47
+ # @api private
48
+ def path
49
+ "/recursions/#{id}"
50
+ end
51
+ end
52
+ end
@@ -39,6 +39,8 @@ module WebPay
39
39
  Event.new(attributes)
40
40
  when 'shop'
41
41
  Shop.new(attributes)
42
+ when 'recursion'
43
+ Recursion.new(attributes)
42
44
  when 'account'
43
45
  Account.new(attributes)
44
46
 
@@ -1,5 +1,5 @@
1
1
  module WebPay
2
2
 
3
3
  # Version of WebPay gem
4
- VERSION = "2.3.1"
4
+ VERSION = "2.4.0"
5
5
  end
data/lib/webpay.rb CHANGED
@@ -22,6 +22,7 @@ module WebPay
22
22
  autoload(:Fee, 'webpay/fee')
23
23
  autoload(:Token, 'webpay/token')
24
24
  autoload(:Shop, 'webpay/shop')
25
+ autoload(:Recursion, 'webpay/recursion')
25
26
  autoload(:ResponseConverter, 'webpay/response_converter')
26
27
 
27
28
  @api_base = 'https://api.webpay.jp'
@@ -0,0 +1,61 @@
1
+ HTTP/1.1 200 OK
2
+ Content-Type: application/json; charset=utf-8
3
+ X-Ua-Compatible: IE=Edge
4
+ Etag: "85a874114a18027d48c30b768d7d795f"
5
+ Cache-Control: max-age=0, private, must-revalidate
6
+ X-Request-Id: 0f1a2a36522cabe66be6a7bd3b5d31ec
7
+ X-Runtime: 0.010103
8
+ Server: WEBrick/1.3.1 (Ruby/1.9.3/2013-02-22)
9
+ Date: Fri, 18 Apr 2014 06:44:15 GMT
10
+ Content-Length: 1109
11
+ Connection: Keep-Alive
12
+
13
+ {
14
+ "object": "list",
15
+ "url": "/v1/recursions",
16
+ "count": 5,
17
+ "data": [
18
+ {
19
+ "id": "rec_5lF9aV07v9IR3L0",
20
+ "object": "recursion",
21
+ "livemode": false,
22
+ "created": 1397803401,
23
+ "amount": 400,
24
+ "currency": "jpy",
25
+ "period": "month",
26
+ "description": "Test4",
27
+ "customer": "cus_5lF6YD7mq3dWdzB",
28
+ "shop": null,
29
+ "attempted": null,
30
+ "status": "active"
31
+ },
32
+ {
33
+ "id": "rec_5lF8Yxc6V65c7zc",
34
+ "object": "recursion",
35
+ "livemode": false,
36
+ "created": 1397803398,
37
+ "amount": 400,
38
+ "currency": "jpy",
39
+ "period": "month",
40
+ "description": "Test3",
41
+ "customer": "cus_5lF6YD7mq3dWdzB",
42
+ "shop": null,
43
+ "attempted": null,
44
+ "status": "active"
45
+ },
46
+ {
47
+ "id": "rec_5lF8UpcBrfAj0Rz",
48
+ "object": "recursion",
49
+ "livemode": false,
50
+ "created": 1397803397,
51
+ "amount": 400,
52
+ "currency": "jpy",
53
+ "period": "month",
54
+ "description": "Test2",
55
+ "customer": "cus_5lF6YD7mq3dWdzB",
56
+ "shop": null,
57
+ "attempted": null,
58
+ "status": "active"
59
+ }
60
+ ]
61
+ }
@@ -0,0 +1,26 @@
1
+ HTTP/1.1 201 Created
2
+ Content-Type: application/json; charset=utf-8
3
+ X-Ua-Compatible: IE=Edge
4
+ Etag: "37625663f15f24dec9ef0739d046d14b"
5
+ Cache-Control: max-age=0, private, must-revalidate
6
+ X-Request-Id: faae37f4e9971a2e20ff3740bcdf8675
7
+ X-Runtime: 0.415393
8
+ Server: WEBrick/1.3.1 (Ruby/1.9.3/2013-02-22)
9
+ Date: Fri, 18 Apr 2014 06:35:06 GMT
10
+ Content-Length: 308
11
+ Connection: Keep-Alive
12
+
13
+ {
14
+ "id": "rec_5lFaeX56W7bkdKR",
15
+ "object": "recursion",
16
+ "livemode": false,
17
+ "created": 1397802905,
18
+ "amount": 400,
19
+ "currency": "jpy",
20
+ "period": "month",
21
+ "description": "WebPayマガジン購読料",
22
+ "customer": "cus_5lF6YD7mq3dWdzB",
23
+ "shop": null,
24
+ "attempted": null,
25
+ "status": "active"
26
+ }
@@ -0,0 +1,16 @@
1
+ HTTP/1.1 200 OK
2
+ Content-Type: application/json; charset=utf-8
3
+ X-Ua-Compatible: IE=Edge
4
+ Etag: "ab1d4d4a559e3f8eb960027a141a54a3"
5
+ Cache-Control: max-age=0, private, must-revalidate
6
+ X-Request-Id: f5ee127050e68d06e0c2e1c070679111
7
+ X-Runtime: 0.293522
8
+ Server: WEBrick/1.3.1 (Ruby/1.9.3/2013-02-22)
9
+ Date: Fri, 18 Apr 2014 07:53:07 GMT
10
+ Content-Length: 53
11
+ Connection: Keep-Alive
12
+
13
+ {
14
+ "id": "rec_5lFaeX56W7bkdKR",
15
+ "deleted": true
16
+ }
@@ -0,0 +1,26 @@
1
+ HTTP/1.1 200 OK
2
+ Content-Type: application/json; charset=utf-8
3
+ X-Ua-Compatible: IE=Edge
4
+ Etag: "24621c69f613b6fccdc9d4a4a8abf3fb"
5
+ Cache-Control: max-age=0, private, must-revalidate
6
+ X-Request-Id: a008ef1567889291bb1829fbc51d1431
7
+ X-Runtime: 0.980437
8
+ Server: WEBrick/1.3.1 (Ruby/1.9.3/2013-02-22)
9
+ Date: Fri, 18 Apr 2014 06:47:17 GMT
10
+ Content-Length: 292
11
+ Connection: Keep-Alive
12
+
13
+ {
14
+ "id": "rec_5lF8UpcBrfAj0Rz",
15
+ "object": "recursion",
16
+ "livemode": false,
17
+ "created": 1397803397,
18
+ "amount": 400,
19
+ "currency": "jpy",
20
+ "period": "month",
21
+ "description": "Test2",
22
+ "customer": "cus_5lF6YD7mq3dWdzB",
23
+ "shop": null,
24
+ "attempted": 1397803500,
25
+ "status": "active"
26
+ }
@@ -0,0 +1,26 @@
1
+ HTTP/1.1 200 OK
2
+ Content-Type: application/json; charset=utf-8
3
+ X-Ua-Compatible: IE=Edge
4
+ Etag: "9a39c473972ee2c6c7d9bd4f7ed998c9"
5
+ Cache-Control: max-age=0, private, must-revalidate
6
+ X-Request-Id: 1a3babf541f3500faeee6f37cc4014e7
7
+ X-Runtime: 0.008752
8
+ Server: WEBrick/1.3.1 (Ruby/1.9.3/2013-02-22)
9
+ Date: Fri, 18 Apr 2014 06:42:32 GMT
10
+ Content-Length: 314
11
+ Connection: Keep-Alive
12
+
13
+ {
14
+ "id": "rec_5lFaeX56W7bkdKR",
15
+ "object": "recursion",
16
+ "livemode": false,
17
+ "created": 1397802905,
18
+ "amount": 400,
19
+ "currency": "jpy",
20
+ "period": "month",
21
+ "description": "WebPayマガジン購読料",
22
+ "customer": "cus_5lF6YD7mq3dWdzB",
23
+ "shop": null,
24
+ "attempted": 1397803007,
25
+ "status": "active"
26
+ }
@@ -0,0 +1,16 @@
1
+ HTTP/1.1 200 OK
2
+ Content-Type: application/json; charset=utf-8
3
+ X-Ua-Compatible: IE=Edge
4
+ Etag: "5f69aa9cd4f51a072ee1d717727fbbc2"
5
+ Cache-Control: max-age=0, private, must-revalidate
6
+ X-Request-Id: 763d8f6e2a44ffa75a74d765fc7ebc11
7
+ X-Runtime: 0.006094
8
+ Server: WEBrick/1.3.1 (Ruby/1.9.3/2013-02-22)
9
+ Date: Fri, 18 Apr 2014 06:48:04 GMT
10
+ Content-Length: 53
11
+ Connection: Keep-Alive
12
+
13
+ {
14
+ "id": "rec_5lF8M9bka5Ov4Po",
15
+ "deleted": true
16
+ }
@@ -0,0 +1,26 @@
1
+ HTTP/1.1 200 OK
2
+ Content-Type: application/json; charset=utf-8
3
+ X-Ua-Compatible: IE=Edge
4
+ Etag: "12698e0d94810f39f72a419511570eae"
5
+ Cache-Control: max-age=0, private, must-revalidate
6
+ X-Request-Id: e2e4a33762953b14b091e0a2398b421a
7
+ X-Runtime: 0.008016
8
+ Server: WEBrick/1.3.1 (Ruby/1.9.3/2013-02-22)
9
+ Date: Fri, 18 Apr 2014 07:59:16 GMT
10
+ Content-Length: 295
11
+ Connection: Keep-Alive
12
+
13
+ {
14
+ "id": "rec_5lF8UpcBrfAj0Rz",
15
+ "object": "recursion",
16
+ "livemode": false,
17
+ "created": 1397803397,
18
+ "amount": 400,
19
+ "currency": "jpy",
20
+ "period": "month",
21
+ "description": "Test2",
22
+ "customer": "cus_5lF6YD7mq3dWdzB",
23
+ "shop": null,
24
+ "attempted": 1397803500,
25
+ "status": "suspended"
26
+ }
@@ -0,0 +1,93 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+ describe WebPay::Recursion do
4
+ describe '.create' do
5
+ let(:params) {{
6
+ :amount => '400',
7
+ :currency => 'jpy',
8
+ :customer => 'cus_5lF6YD7mq3dWdzB',
9
+ :period => 'month',
10
+ :description => 'WebPayマガジン購読料',
11
+ }}
12
+ before do
13
+ stub_post_request('/recursions', 'recursions/create', params)
14
+ end
15
+ subject(:recursion) { WebPay::Recursion.create(params)}
16
+
17
+ its(:id) { should eq 'rec_5lFaeX56W7bkdKR' }
18
+ its(:object) { should eq 'recursion' }
19
+ its(:livemode) { should eq false }
20
+ its(:description) { should eq 'WebPayマガジン購読料' }
21
+ its(:attempted) { should eq nil }
22
+ its(:status) { should eq 'active' }
23
+ end
24
+
25
+ describe '.retrieve' do
26
+ let(:id) { 'rec_5lFaeX56W7bkdKR' }
27
+ before do
28
+ stub_get_request("/recursions/#{id}", 'recursions/retrieve')
29
+ end
30
+
31
+ subject(:recursion) { described_class.retrieve(id) }
32
+ its(:id) { should eq id }
33
+ its(:object) { should eq 'recursion' }
34
+ its(:livemode) { should eq false }
35
+ its(:description) { should eq 'WebPayマガジン購読料' }
36
+ its(:attempted) { should eq 1397803007 }
37
+ its(:status) { should eq 'active' }
38
+ end
39
+
40
+ describe '.retrieve deleted instance' do
41
+ let(:id) { 'rec_5lF8M9bka5Ov4Po' }
42
+ before do
43
+ stub_get_request("/recursions/#{id}", 'recursions/retrieve_deleted')
44
+ end
45
+
46
+ subject(:recursion) { described_class.retrieve(id) }
47
+ its(:id) { should eq id }
48
+ its(:deleted) { should eq true }
49
+ it { should be_deleted }
50
+ end
51
+
52
+ describe '.all' do
53
+ let(:customer_id) { 'cus_5lF6YD7mq3dWdzB' }
54
+ before do
55
+ stub_get_request("/recursions?count=3&suspended=false&customer=#{customer_id}", 'recursions/all')
56
+ end
57
+
58
+ subject(:list) { described_class.all(count: 3, suspended: false, customer: customer_id) }
59
+ its(:url) { should eq '/v1/recursions' }
60
+ its(:count) { should eq 5 }
61
+ it 'data[0].customer' do
62
+ expect(list.data[0].customer).to eq customer_id
63
+ end
64
+ end
65
+
66
+ describe '#resume' do
67
+ let(:id) { 'rec_5lF8UpcBrfAj0Rz' }
68
+ before do
69
+ stub_get_request("/recursions/#{id}", 'recursions/retrieve_suspended')
70
+ stub_post_request("/recursions/#{id}/resume", 'recursions/resume', retry: 'false')
71
+ end
72
+
73
+ it 'should update information of the retrieved recursion' do
74
+ recursion = described_class.retrieve(id)
75
+ recursion.resume(retry: false)
76
+
77
+ expect(recursion.status).to eq 'active'
78
+ end
79
+ end
80
+
81
+ describe '#delete' do
82
+ let(:id) { 'rec_5lFaeX56W7bkdKR' }
83
+ before do
84
+ stub_get_request("/recursions/#{id}", 'recursions/retrieve')
85
+ stub_delete_request("/recursions/#{id}", 'recursions/delete')
86
+ end
87
+
88
+ it 'should delete the retrieved recursion' do
89
+ recursion = described_class.retrieve(id)
90
+ expect(recursion.delete).to eq true
91
+ end
92
+ end
93
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webpay
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.1
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - webpay
@@ -9,104 +9,104 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-05-05 00:00:00.000000000 Z
12
+ date: 2014-05-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - "~>"
18
+ - - ~>
19
19
  - !ruby/object:Gem::Version
20
20
  version: '0.8'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - "~>"
25
+ - - ~>
26
26
  - !ruby/object:Gem::Version
27
27
  version: '0.8'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: bundler
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - "~>"
32
+ - - ~>
33
33
  - !ruby/object:Gem::Version
34
34
  version: '1.3'
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - "~>"
39
+ - - ~>
40
40
  - !ruby/object:Gem::Version
41
41
  version: '1.3'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: rake
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - ">="
46
+ - - '>='
47
47
  - !ruby/object:Gem::Version
48
48
  version: '0'
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - ">="
53
+ - - '>='
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: yard
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - "~>"
60
+ - - ~>
61
61
  - !ruby/object:Gem::Version
62
62
  version: 0.8.6.2
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - "~>"
67
+ - - ~>
68
68
  - !ruby/object:Gem::Version
69
69
  version: 0.8.6.2
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: redcarpet
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
- - - "~>"
74
+ - - ~>
75
75
  - !ruby/object:Gem::Version
76
76
  version: 3.0.0
77
77
  type: :development
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
- - - "~>"
81
+ - - ~>
82
82
  - !ruby/object:Gem::Version
83
83
  version: 3.0.0
84
84
  - !ruby/object:Gem::Dependency
85
85
  name: rspec
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
- - - "~>"
88
+ - - ~>
89
89
  - !ruby/object:Gem::Version
90
90
  version: 2.14.0
91
91
  type: :development
92
92
  prerelease: false
93
93
  version_requirements: !ruby/object:Gem::Requirement
94
94
  requirements:
95
- - - "~>"
95
+ - - ~>
96
96
  - !ruby/object:Gem::Version
97
97
  version: 2.14.0
98
98
  - !ruby/object:Gem::Dependency
99
99
  name: webmock
100
100
  requirement: !ruby/object:Gem::Requirement
101
101
  requirements:
102
- - - "~>"
102
+ - - ~>
103
103
  - !ruby/object:Gem::Version
104
104
  version: 1.13.0
105
105
  type: :development
106
106
  prerelease: false
107
107
  version_requirements: !ruby/object:Gem::Requirement
108
108
  requirements:
109
- - - "~>"
109
+ - - ~>
110
110
  - !ruby/object:Gem::Version
111
111
  version: 1.13.0
112
112
  description: WebPay is payment gateway service in Japan. see also https://webpay.jp/
@@ -117,9 +117,9 @@ executables: []
117
117
  extensions: []
118
118
  extra_rdoc_files: []
119
119
  files:
120
- - ".gitignore"
121
- - ".rspec"
122
- - ".travis.yml"
120
+ - .gitignore
121
+ - .rspec
122
+ - .travis.yml
123
123
  - Gemfile
124
124
  - LICENSE.txt
125
125
  - README.md
@@ -138,6 +138,7 @@ files:
138
138
  - lib/webpay/event.rb
139
139
  - lib/webpay/fee.rb
140
140
  - lib/webpay/operations.rb
141
+ - lib/webpay/recursion.rb
141
142
  - lib/webpay/response_converter.rb
142
143
  - lib/webpay/shop.rb
143
144
  - lib/webpay/token.rb
@@ -167,6 +168,13 @@ files:
167
168
  - spec/resources/errors/unknown_api_error.txt
168
169
  - spec/resources/events/all_with_type.txt
169
170
  - spec/resources/events/retrieve.txt
171
+ - spec/resources/recursions/all.txt
172
+ - spec/resources/recursions/create.txt
173
+ - spec/resources/recursions/delete.txt
174
+ - spec/resources/recursions/resume.txt
175
+ - spec/resources/recursions/retrieve.txt
176
+ - spec/resources/recursions/retrieve_deleted.txt
177
+ - spec/resources/recursions/retrieve_suspended.txt
170
178
  - spec/resources/shops/all.txt
171
179
  - spec/resources/shops/create.txt
172
180
  - spec/resources/shops/retrieve.txt
@@ -178,6 +186,7 @@ files:
178
186
  - spec/webpay/charge_spec.rb
179
187
  - spec/webpay/customer_spec.rb
180
188
  - spec/webpay/event_spec.rb
189
+ - spec/webpay/recursion_spec.rb
181
190
  - spec/webpay/shop_spec.rb
182
191
  - spec/webpay/token_spec.rb
183
192
  - spec/webpay/webpay_error_spec.rb
@@ -193,17 +202,17 @@ require_paths:
193
202
  - lib
194
203
  required_ruby_version: !ruby/object:Gem::Requirement
195
204
  requirements:
196
- - - ">="
205
+ - - '>='
197
206
  - !ruby/object:Gem::Version
198
207
  version: '0'
199
208
  required_rubygems_version: !ruby/object:Gem::Requirement
200
209
  requirements:
201
- - - ">="
210
+ - - '>='
202
211
  - !ruby/object:Gem::Version
203
212
  version: '0'
204
213
  requirements: []
205
214
  rubyforge_project:
206
- rubygems_version: 2.2.0
215
+ rubygems_version: 2.0.14
207
216
  signing_key:
208
217
  specification_version: 4
209
218
  summary: Ruby bindings of WebPay API
@@ -232,6 +241,13 @@ test_files:
232
241
  - spec/resources/errors/unknown_api_error.txt
233
242
  - spec/resources/events/all_with_type.txt
234
243
  - spec/resources/events/retrieve.txt
244
+ - spec/resources/recursions/all.txt
245
+ - spec/resources/recursions/create.txt
246
+ - spec/resources/recursions/delete.txt
247
+ - spec/resources/recursions/resume.txt
248
+ - spec/resources/recursions/retrieve.txt
249
+ - spec/resources/recursions/retrieve_deleted.txt
250
+ - spec/resources/recursions/retrieve_suspended.txt
235
251
  - spec/resources/shops/all.txt
236
252
  - spec/resources/shops/create.txt
237
253
  - spec/resources/shops/retrieve.txt
@@ -243,6 +259,7 @@ test_files:
243
259
  - spec/webpay/charge_spec.rb
244
260
  - spec/webpay/customer_spec.rb
245
261
  - spec/webpay/event_spec.rb
262
+ - spec/webpay/recursion_spec.rb
246
263
  - spec/webpay/shop_spec.rb
247
264
  - spec/webpay/token_spec.rb
248
265
  - spec/webpay/webpay_error_spec.rb