ticketevolution-ruby 0.6.4 → 0.6.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -19,19 +19,23 @@ module TicketEvolution
19
19
  }
20
20
 
21
21
  def request(method, path, params = nil, &response_handler)
22
- response = self.build_request(method, path, params)
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 >= 400
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)
@@ -1,3 +1,3 @@
1
1
  module TicketEvolution
2
- VERSION = '0.6.4'
2
+ VERSION = '0.6.5'
3
3
  end
@@ -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 { curl.should_receive(:http) }
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 { curl.should_receive(:http) }
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
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: &70256748458480 !ruby/object:Gem::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: *70256748458480
24
+ version_requirements: *70271315278760
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: curb
27
- requirement: &70256748457480 !ruby/object:Gem::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: *70256748457480
35
+ version_requirements: *70271315277780
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: yajl-ruby
38
- requirement: &70256748456140 !ruby/object:Gem::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: *70256748456140
46
+ version_requirements: *70271315276260
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: multi_json
49
- requirement: &70256748454820 !ruby/object:Gem::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: *70256748454820
57
+ version_requirements: *70271315275140
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: nokogiri
60
- requirement: &70256748454100 !ruby/object:Gem::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: *70256748454100
68
+ version_requirements: *70271315274460
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
- requirement: &70256748453420 !ruby/object:Gem::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: *70256748453420
79
+ version_requirements: *70271315273680
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: vcr
82
- requirement: &70256748452700 !ruby/object:Gem::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: *70256748452700
90
+ version_requirements: *70271315273000
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: webmock
93
- requirement: &70256748451480 !ruby/object:Gem::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: *70256748451480
101
+ version_requirements: *70271315271880
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: awesome_print
104
- requirement: &70256748450920 !ruby/object:Gem::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: *70256748450920
112
+ version_requirements: *70271315271340
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: rake
115
- requirement: &70256748450320 !ruby/object:Gem::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: *70256748450320
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: -3594449940152660308
298
+ hash: 3497363882923040696
299
299
  required_rubygems_version: !ruby/object:Gem::Requirement
300
300
  none: false
301
301
  requirements: