ticketevolution-ruby 0.6.4 → 0.6.5
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.
@@ -19,19 +19,23 @@ module TicketEvolution
|
|
19
19
|
}
|
20
20
|
|
21
21
|
def request(method, path, params = nil, &response_handler)
|
22
|
-
|
22
|
+
redirecting = caller.first =~ /request_handler/ ? false : true
|
23
|
+
response = self.build_request(method, path, params, redirecting)
|
23
24
|
response.http(method)
|
24
25
|
response = self.naturalize_response(response)
|
25
|
-
if response.response_code
|
26
|
+
if [301, 302].include?(response.response_code)
|
27
|
+
new_path = response.header.match(/Location: ([\w\.:\/]*)/).to_a[1].to_s.match(/^https?:\/\/[a-zA-Z_]+[\.a-zA-Z_]+(\/[\w\/]+)[\?]*/).to_a[1]
|
28
|
+
self.request(method, new_path, params, &response_handler)
|
29
|
+
elsif response.response_code >= 300
|
26
30
|
TicketEvolution::ApiError.new(response)
|
27
31
|
else
|
28
32
|
response_handler.call(response)
|
29
33
|
end
|
30
34
|
end
|
31
35
|
|
32
|
-
def build_request(method, path, params = nil)
|
36
|
+
def build_request(method, path, params = nil, build_path = true)
|
33
37
|
raise EndpointConfigurationError, "#{self.class.to_s}#request requires it's first parameter to be a valid HTTP method" unless [:GET, :POST, :PUT, :DELETE].include? method.to_sym
|
34
|
-
self.connection.build_request(method, "#{self.base_path}#{path}", params)
|
38
|
+
self.connection.build_request(method, "#{build_path ? self.base_path : ''}#{path}", params)
|
35
39
|
end
|
36
40
|
|
37
41
|
def naturalize_response(response)
|
data/spec/fixtures/fake.rb
CHANGED
@@ -19,11 +19,19 @@ class Fake
|
|
19
19
|
OpenStruct.new.tap do |resp|
|
20
20
|
resp.header = 'fake header string (we don\'t currently process this)'
|
21
21
|
resp.response_code = 200
|
22
|
-
resp.body = {:body => "test"}
|
22
|
+
resp.body = {:body => "test", :connection => self.connection}
|
23
23
|
resp.server_message = TicketEvolution::Endpoint::RequestHandler::CODES[200].last
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
+
def self.redirect_response
|
28
|
+
r = self.response
|
29
|
+
r.header = "HTTP/1.1 301 Moved Permanently\r\nContent-Type: text/html\r\nConnection: keep-alive\r\nStatus: 301\r\nX-Powered-By: Phusion Passenger (mod_rails/mod_rack) 3.0.11\r\nX-UA-Compatible: IE=Edge,chrome=1\r\nLocation: http://api.ticketevolution.com/something_else/1\r\nX-Runtime: 0.001401\r\nContent-Length: 102\r\nServer: nginx/1.0.11 + Phusion Passenger 3.0.11 (mod_rails/mod_rack)\r\n\r\n"
|
30
|
+
r.response_code = 302
|
31
|
+
r.server_message = TicketEvolution::Endpoint::RequestHandler::CODES[302].last
|
32
|
+
r
|
33
|
+
end
|
34
|
+
|
27
35
|
def self.show_response
|
28
36
|
r = self.response
|
29
37
|
r.body = {
|
@@ -173,3 +173,157 @@
|
|
173
173
|
Office","url":"/clients/1443","id":"1443"}},{"balance":"0.0","currency":"USD","url":"/accounts/3019","id":"3019","updated_at":"2011-08-11T03:13:27Z","client":{"name":"Main
|
174
174
|
Office","url":"/clients/1444","id":"1444"}}],"current_page":5,"per_page":4}'
|
175
175
|
http_version: '1.1'
|
176
|
+
- !ruby/struct:VCR::HTTPInteraction
|
177
|
+
request: !ruby/struct:VCR::Request
|
178
|
+
method: :get
|
179
|
+
uri: https://api.sandbox.ticketevolution.com:443/62?
|
180
|
+
body: !!null
|
181
|
+
headers:
|
182
|
+
accept:
|
183
|
+
- application/vnd.ticketevolution.api+json; version=8
|
184
|
+
x-signature:
|
185
|
+
- ZZGQZhUyFpSSPPVE83Xtg9Vtk/iNkwU3yKvi2ktrgy8=
|
186
|
+
x-token:
|
187
|
+
- b2b5a7a33b1a78896ed1b53d81c5c9cc
|
188
|
+
response: !ruby/struct:VCR::Response
|
189
|
+
status: !ruby/struct:VCR::ResponseStatus
|
190
|
+
code: 404
|
191
|
+
message: Not Found
|
192
|
+
headers:
|
193
|
+
content-type:
|
194
|
+
- application/vnd.ticketevolution.api+json; version=8; charset=utf-8
|
195
|
+
transfer-encoding:
|
196
|
+
- chunked
|
197
|
+
connection:
|
198
|
+
- keep-alive
|
199
|
+
status:
|
200
|
+
- '404'
|
201
|
+
x-powered-by:
|
202
|
+
- Phusion Passenger (mod_rails/mod_rack) 3.0.11
|
203
|
+
x-ua-compatible:
|
204
|
+
- IE=Edge,chrome=1
|
205
|
+
x-runtime:
|
206
|
+
- '0.044726'
|
207
|
+
cache-control:
|
208
|
+
- no-cache
|
209
|
+
strict-transport-security:
|
210
|
+
- max-age=31536000
|
211
|
+
server:
|
212
|
+
- nginx/1.0.11 + Phusion Passenger 3.0.11 (mod_rails/mod_rack)
|
213
|
+
body: ! '{"error":"The endpoint you requested doesn''t exist. You may have mistyped
|
214
|
+
the address or the resource may have moved."}'
|
215
|
+
http_version: '1.1'
|
216
|
+
- !ruby/struct:VCR::HTTPInteraction
|
217
|
+
request: !ruby/struct:VCR::Request
|
218
|
+
method: :get
|
219
|
+
uri: https://api.sandbox.ticketevolution.com:443/62?
|
220
|
+
body: !!null
|
221
|
+
headers:
|
222
|
+
accept:
|
223
|
+
- application/vnd.ticketevolution.api+json; version=8
|
224
|
+
x-signature:
|
225
|
+
- ZZGQZhUyFpSSPPVE83Xtg9Vtk/iNkwU3yKvi2ktrgy8=
|
226
|
+
x-token:
|
227
|
+
- b2b5a7a33b1a78896ed1b53d81c5c9cc
|
228
|
+
response: !ruby/struct:VCR::Response
|
229
|
+
status: !ruby/struct:VCR::ResponseStatus
|
230
|
+
code: 404
|
231
|
+
message: Not Found
|
232
|
+
headers:
|
233
|
+
content-type:
|
234
|
+
- application/vnd.ticketevolution.api+json; version=8; charset=utf-8
|
235
|
+
transfer-encoding:
|
236
|
+
- chunked
|
237
|
+
connection:
|
238
|
+
- keep-alive
|
239
|
+
status:
|
240
|
+
- '404'
|
241
|
+
x-powered-by:
|
242
|
+
- Phusion Passenger (mod_rails/mod_rack) 3.0.11
|
243
|
+
x-ua-compatible:
|
244
|
+
- IE=Edge,chrome=1
|
245
|
+
x-runtime:
|
246
|
+
- '0.044726'
|
247
|
+
cache-control:
|
248
|
+
- no-cache
|
249
|
+
strict-transport-security:
|
250
|
+
- max-age=31536000
|
251
|
+
server:
|
252
|
+
- nginx/1.0.11 + Phusion Passenger 3.0.11 (mod_rails/mod_rack)
|
253
|
+
body: ! '{"error":"The endpoint you requested doesn''t exist. You may have mistyped
|
254
|
+
the address or the resource may have moved."}'
|
255
|
+
http_version: '1.1'
|
256
|
+
- !ruby/struct:VCR::HTTPInteraction
|
257
|
+
request: !ruby/struct:VCR::Request
|
258
|
+
method: :get
|
259
|
+
uri: https://api.sandbox.ticketevolution.com:443/?page=5&per_page=4
|
260
|
+
body: !!null
|
261
|
+
headers:
|
262
|
+
accept:
|
263
|
+
- application/vnd.ticketevolution.api+json; version=8
|
264
|
+
x-signature:
|
265
|
+
- ZopWnvK10aQ8C2N9MpHc9/wTqL5aSKD7XnCS1vbd4Iw=
|
266
|
+
x-token:
|
267
|
+
- b2b5a7a33b1a78896ed1b53d81c5c9cc
|
268
|
+
response: !ruby/struct:VCR::Response
|
269
|
+
status: !ruby/struct:VCR::ResponseStatus
|
270
|
+
code: 301
|
271
|
+
message: Moved Permanently
|
272
|
+
headers:
|
273
|
+
content-type:
|
274
|
+
- text/html
|
275
|
+
connection:
|
276
|
+
- keep-alive
|
277
|
+
status:
|
278
|
+
- '301'
|
279
|
+
x-powered-by:
|
280
|
+
- Phusion Passenger (mod_rails/mod_rack) 3.0.11
|
281
|
+
x-ua-compatible:
|
282
|
+
- IE=Edge,chrome=1
|
283
|
+
location:
|
284
|
+
- http://developer.ticketevolution.com
|
285
|
+
x-runtime:
|
286
|
+
- '0.001913'
|
287
|
+
content-length:
|
288
|
+
- '102'
|
289
|
+
server:
|
290
|
+
- nginx/1.0.11 + Phusion Passenger 3.0.11 (mod_rails/mod_rack)
|
291
|
+
body: <html><body>You are being <a href="http://developer.ticketevolution.com">redirected</a>.</body></html>
|
292
|
+
http_version: '1.1'
|
293
|
+
- !ruby/struct:VCR::HTTPInteraction
|
294
|
+
request: !ruby/struct:VCR::Request
|
295
|
+
method: :get
|
296
|
+
uri: https://api.sandbox.ticketevolution.com:443/?page=5&per_page=4
|
297
|
+
body: !!null
|
298
|
+
headers:
|
299
|
+
accept:
|
300
|
+
- application/vnd.ticketevolution.api+json; version=8
|
301
|
+
x-signature:
|
302
|
+
- ZopWnvK10aQ8C2N9MpHc9/wTqL5aSKD7XnCS1vbd4Iw=
|
303
|
+
x-token:
|
304
|
+
- b2b5a7a33b1a78896ed1b53d81c5c9cc
|
305
|
+
response: !ruby/struct:VCR::Response
|
306
|
+
status: !ruby/struct:VCR::ResponseStatus
|
307
|
+
code: 301
|
308
|
+
message: Moved Permanently
|
309
|
+
headers:
|
310
|
+
content-type:
|
311
|
+
- text/html
|
312
|
+
connection:
|
313
|
+
- keep-alive
|
314
|
+
status:
|
315
|
+
- '301'
|
316
|
+
x-powered-by:
|
317
|
+
- Phusion Passenger (mod_rails/mod_rack) 3.0.11
|
318
|
+
x-ua-compatible:
|
319
|
+
- IE=Edge,chrome=1
|
320
|
+
location:
|
321
|
+
- http://developer.ticketevolution.com
|
322
|
+
x-runtime:
|
323
|
+
- '0.001913'
|
324
|
+
content-length:
|
325
|
+
- '102'
|
326
|
+
server:
|
327
|
+
- nginx/1.0.11 + Phusion Passenger 3.0.11 (mod_rails/mod_rack)
|
328
|
+
body: <html><body>You are being <a href="http://developer.ticketevolution.com">redirected</a>.</body></html>
|
329
|
+
http_version: '1.1'
|
@@ -120,7 +120,6 @@ shared_examples_for "a ticket_evolution endpoint class" do
|
|
120
120
|
end
|
121
121
|
|
122
122
|
describe "#build_request" do
|
123
|
-
|
124
123
|
context "which is valid" do
|
125
124
|
context "with params" do
|
126
125
|
let(:params) do
|
@@ -149,6 +148,16 @@ shared_examples_for "a ticket_evolution endpoint class" do
|
|
149
148
|
end
|
150
149
|
end
|
151
150
|
end
|
151
|
+
|
152
|
+
context "with build_path set to false" do
|
153
|
+
[:GET, :POST, :PUT, :DELETE].each do |method|
|
154
|
+
it "should not include the base_path when it calls connection#build_request" do
|
155
|
+
connection.should_receive(:build_request).with(method, path, nil).and_return(curl)
|
156
|
+
|
157
|
+
instance.build_request(method, path, nil, false)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
152
161
|
end
|
153
162
|
|
154
163
|
context "given an invalid http method" do
|
@@ -167,11 +176,11 @@ shared_examples_for "a ticket_evolution endpoint class" do
|
|
167
176
|
let(:handler) { Fake.send(:method, :response_handler) }
|
168
177
|
|
169
178
|
before do
|
170
|
-
connection.should_receive(:build_request).and_return(curl)
|
171
|
-
instance.should_receive(:naturalize_response).and_return(response)
|
172
179
|
end
|
173
180
|
|
174
181
|
it "calls http on the return Curl object with the method for the request" do
|
182
|
+
connection.should_receive(:build_request).and_return(curl)
|
183
|
+
instance.should_receive(:naturalize_response).and_return(response)
|
175
184
|
curl.should_receive(:http).with(method)
|
176
185
|
|
177
186
|
instance.request(method, path, nil, &handler).should == Fake.response_handler(true)
|
@@ -180,7 +189,11 @@ shared_examples_for "a ticket_evolution endpoint class" do
|
|
180
189
|
context "when there is an error from the api" do
|
181
190
|
let(:response) { Fake.error_response }
|
182
191
|
|
183
|
-
before
|
192
|
+
before do
|
193
|
+
connection.should_receive(:build_request).and_return(curl)
|
194
|
+
instance.should_receive(:naturalize_response).and_return(response)
|
195
|
+
curl.should_receive(:http)
|
196
|
+
end
|
184
197
|
|
185
198
|
it "should return an instance of TicketEvolution::ApiError" do
|
186
199
|
subject.should be_a TicketEvolution::ApiError
|
@@ -190,12 +203,36 @@ shared_examples_for "a ticket_evolution endpoint class" do
|
|
190
203
|
context "when successful" do
|
191
204
|
let(:response) { Fake.response }
|
192
205
|
|
193
|
-
before
|
206
|
+
before do
|
207
|
+
connection.should_receive(:build_request).and_return(curl)
|
208
|
+
instance.should_receive(:naturalize_response).and_return(response)
|
209
|
+
curl.should_receive(:http)
|
210
|
+
end
|
194
211
|
|
195
212
|
it "should pass the response object to #build_object" do
|
196
213
|
instance.request(method, path, nil, &handler).should == Fake.response_handler(true)
|
197
214
|
end
|
198
215
|
end
|
216
|
+
|
217
|
+
context "when there is a redirect response" do
|
218
|
+
let(:response) { Fake.redirect_response }
|
219
|
+
let(:redirect_path) { '/something_else/1'}
|
220
|
+
let(:second_curl) { double(:curl, :http => nil) }
|
221
|
+
let(:second_response) { Fake.response }
|
222
|
+
|
223
|
+
before do
|
224
|
+
curl.should_receive(:http)
|
225
|
+
connection.should_receive(:build_request).with(:GET, instance.base_path, nil).and_return(curl)
|
226
|
+
instance.should_receive(:naturalize_response).with(curl).and_return(response)
|
227
|
+
second_curl.should_receive(:http)
|
228
|
+
instance.connection.should_receive(:build_request).with(:GET, redirect_path, nil).and_return(second_curl)
|
229
|
+
instance.should_receive(:naturalize_response).with(second_curl).and_return(second_response)
|
230
|
+
end
|
231
|
+
|
232
|
+
it "should follow the redirect path" do
|
233
|
+
instance.request(:GET, nil, nil, &handler)
|
234
|
+
end
|
235
|
+
end
|
199
236
|
end
|
200
237
|
|
201
238
|
describe "#naturalize_response" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ticketevolution-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-02-17 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
16
|
-
requirement: &
|
16
|
+
requirement: &70271315278760 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 3.0.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70271315278760
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: curb
|
27
|
-
requirement: &
|
27
|
+
requirement: &70271315277780 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 0.7.8
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70271315277780
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: yajl-ruby
|
38
|
-
requirement: &
|
38
|
+
requirement: &70271315276260 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 0.7.7
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70271315276260
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: multi_json
|
49
|
-
requirement: &
|
49
|
+
requirement: &70271315275140 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 0.0.4
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70271315275140
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: nokogiri
|
60
|
-
requirement: &
|
60
|
+
requirement: &70271315274460 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.4.3
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70271315274460
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec
|
71
|
-
requirement: &
|
71
|
+
requirement: &70271315273680 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 2.7.1
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70271315273680
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: vcr
|
82
|
-
requirement: &
|
82
|
+
requirement: &70271315273000 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70271315273000
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: webmock
|
93
|
-
requirement: &
|
93
|
+
requirement: &70271315271880 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70271315271880
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: awesome_print
|
104
|
-
requirement: &
|
104
|
+
requirement: &70271315271340 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: '0'
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *70271315271340
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: rake
|
115
|
-
requirement: &
|
115
|
+
requirement: &70271315270720 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ! '>='
|
@@ -120,7 +120,7 @@ dependencies:
|
|
120
120
|
version: '0'
|
121
121
|
type: :development
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *70271315270720
|
124
124
|
description: Provides Ruby wrappers for the Ticket Evolution API (http://developer.ticketevolution.com).
|
125
125
|
Ticket Evolution is the industry leader in software for the Ticket Broker industry.
|
126
126
|
email:
|
@@ -295,7 +295,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
295
295
|
version: '0'
|
296
296
|
segments:
|
297
297
|
- 0
|
298
|
-
hash:
|
298
|
+
hash: 3497363882923040696
|
299
299
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
300
300
|
none: false
|
301
301
|
requirements:
|