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
- 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: