active_rest_client 1.0.6 → 1.0.7

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: 3477c6e4b20c5133c874a8ef329c9e71f2d50be0
4
- data.tar.gz: 7cdfcda9c6f33f0262228c80a5b1cdade5aee5ff
3
+ metadata.gz: 9e90aa3aab74da133bb45147624a0723812c609e
4
+ data.tar.gz: fe25689f084ddcaa682c7230152e2c1a49fa03db
5
5
  SHA512:
6
- metadata.gz: 29e829f81a617090b82e56cb68a03f46ca92238bcc6c9f5d056ad524daa5822724ad65dc9a79f1fdebf60e642d270200bd379748257ba84771d9454167000743
7
- data.tar.gz: 9b2b9b9de8634f62e9ff1a78879dd0d5fd1ec7272550ab4dfa7a6e2aee74e41cbe927f6e784f0abffb8f1ebab250cbd106351927642b86d7b7e4ba560a7ecbc4
6
+ metadata.gz: a5376c72339436353eb5e46ef657c479bda1adb14bd446e7bc731aae88ace39c6a42a64a449de3cb49f3f123c3f2b1ef85a0e214ff01c4f838bc5fd07f1e7e0c
7
+ data.tar.gz: dbf38d4b667137b07724da1d3fb0d365f7cb415df6b7aafd28cbcb4c1b74d5e225077a221110342de9bded154501708022883f35e35d9bf5de90340d00db1729
data/.travis.yml CHANGED
@@ -1,5 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
+ - 2.2.0
3
4
  - 2.1.0
4
5
  - 2.0.0
5
6
  - 1.9.3
data/README.md CHANGED
@@ -75,6 +75,15 @@ id = @person.id
75
75
  end
76
76
  ```
77
77
 
78
+ If an API returns an array of results and you have [will_paginate](https://rubygems.org/gems/will_paginate) installed then you can call the paginate method to return a particular page of the results (note: this doesn't reduce the load on the server, but it can help with pagination if you have a cached response).
79
+
80
+ ```ruby
81
+ @people = Person.all
82
+ @people.paginate(page: 1, per_page: 10).each do |person|
83
+ puts "You made the first page: " + person.first_name
84
+ end
85
+ ```
86
+
78
87
  Note, you can assign to any attribute, whether it exists or not before and read from any attribute (which will return nil if not found). If you pass a string or a number to a method it will assume that it's for the "id" field. Any other field values must be passed as a hash and you can't mix passing a string/number and a hash.
79
88
 
80
89
  ```ruby
@@ -317,7 +326,7 @@ ActiveRestClient::Base.cache_store = Redis::Store.new("redis://localhost:6379/0/
317
326
 
318
327
  You can use filters to alter get/post parameters, the URL or set the post body (doing so overrides normal parameter insertion in to the body) before a request or to adjust the response after a request. This can either be a block or a named method (like ActionController's `before_filter`/`before_action` methods).
319
328
 
320
- The filter is passed the name of the method (e.g. `:save`) and an object (a request object for `before_filter` and a response object for `after_filter`). The request object has four public attributes `post_params` (a Hash of the POST parameters), `get_params` (a Hash of the GET parameters), headers and `url` (a String containing the full URL without GET parameters appended)
329
+ The filter is passed the name of the method (e.g. `:save`) and an object (a request object for `before_request` and a response object for `after_request`). The request object has four public attributes `post_params` (a Hash of the POST parameters), `get_params` (a Hash of the GET parameters), headers and `url` (a String containing the full URL without GET parameters appended)
321
330
 
322
331
  ```ruby
323
332
  require 'secure_random'
@@ -372,11 +381,11 @@ After filters work in exactly the same way:
372
381
 
373
382
  ```ruby
374
383
  class Person < ActiveRestClient::Base
375
- after_filter :fix_empty_content
384
+ after_request :fix_empty_content
376
385
 
377
386
  private
378
387
 
379
- def fix_empty_content
388
+ def fix_empty_content(name, response)
380
389
  if response.status == 204 && response.body.blank?
381
390
  response.body = '{"empty": true}'
382
391
  end
@@ -443,13 +452,25 @@ or
443
452
  ActiveRestClient::Base.request_body_type = :json
444
453
  ```
445
454
 
455
+ This will also set the header `Content-Type` to `application/x-www-form-urlencoded` by default or `application/json` when `:json`.
456
+
457
+ If you have an API that is inconsistent in its body type requirements, you can also specify it on the individual method mapping:
458
+
459
+ ```ruby
460
+ class Person < ActiveRestClient::Base
461
+ request_body_type :form_encoded # This is the default, but just for demo purposes
462
+
463
+ get :all, '/people', request_body_type: :json
464
+ end
465
+ ```
466
+
446
467
  ### Faking Calls
447
468
 
448
469
  There are times when an API hasn't been developed yet, so you want to fake the API call response. To do this, you can simply pass a `fake` option when mapping the call containing the response.
449
470
 
450
471
  ```ruby
451
472
  class Person < ActiveRestClient::Base
452
- get :all, '/people', :fake => "[{first_name:"Johnny"}, {first_name:"Bob"}]"
473
+ get :all, '/people', fake: [{first_name:"Johnny"}, {first_name:"Bob"}]
453
474
  end
454
475
  ```
455
476
 
@@ -457,7 +478,7 @@ You may want to run a proc when faking data (to put information from the paramet
457
478
 
458
479
  ```ruby
459
480
  class Person < ActiveRestClient::Base
460
- get :all, '/people', :fake => ->(request) { "{\"result\":#{request.get_params[:id]}}" }
481
+ get :all, '/people', fake: ->(request) { {result: request.get_params[:id]} }
461
482
  end
462
483
  ```
463
484
 
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.add_development_dependency "bundler", "~> 1.3"
23
23
  spec.add_development_dependency "rake"
24
- spec.add_development_dependency "rspec", "~> 2"
24
+ spec.add_development_dependency "rspec", "~> 3"
25
25
  spec.add_development_dependency "webmock"
26
26
  spec.add_development_dependency "rspec_junit_formatter"
27
27
  spec.add_development_dependency "simplecov"
@@ -33,5 +33,5 @@ Gem::Specification.new do |spec|
33
33
  spec.add_runtime_dependency "multi_json"
34
34
  spec.add_runtime_dependency "activesupport"
35
35
  spec.add_runtime_dependency "faraday"
36
- spec.add_development_dependency "patron", ">= 0.4.9" # 0.4.18 breaks against Curl v0.7.15 but works with webmock
36
+ spec.add_runtime_dependency "patron", ">= 0.4.9" # 0.4.18 breaks against Curl v0.7.15 but works with webmock
37
37
  end
@@ -8,6 +8,8 @@ module ActiveRestClient
8
8
  include Recording
9
9
 
10
10
  attr_accessor :_status
11
+ attr_accessor :_etag
12
+ attr_accessor :_headers
11
13
 
12
14
  instance_methods.each do |m|
13
15
  next unless %w{display errors presence load require hash untrust trust freeze method enable_warnings with_warnings suppress capture silence quietly debugger breakpoint}.map(&:to_sym).include? m
@@ -24,6 +26,8 @@ module ActiveRestClient
24
26
  attribute_name = attribute_name.to_sym
25
27
  if attribute_value.to_s[/\d{4}\-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(Z|[+-]\d{2}:\d{2})/]
26
28
  @attributes[attribute_name] = DateTime.parse(attribute_value)
29
+ elsif attribute_value.to_s =~ /^\d{4}\-\d{2}-\d{2}$/
30
+ @attributes[attribute_name] = Date.parse(attribute_value)
27
31
  else
28
32
  @attributes[attribute_name] = attribute_value
29
33
  end
@@ -95,6 +99,20 @@ module ActiveRestClient
95
99
  end
96
100
  end
97
101
 
102
+ def inspect
103
+ inspection = if @attributes.any?
104
+ @attributes.collect { |key, value|
105
+ "#{key}: #{value_for_inspect(value)}"
106
+ }.compact.join(", ")
107
+ else
108
+ "[uninitialized]"
109
+ end
110
+ inspection += "#{"," if @attributes.any?} ETag: #{@_etag}" unless @_etag.nil?
111
+ inspection += "#{"," if @attributes.any?} Status: #{@_status}" unless @_status.nil?
112
+ inspection += " (unsaved: #{@dirty_attributes.map(&:to_s).join(", ")})" if @dirty_attributes.any?
113
+ "#<#{self.class} #{inspection}>"
114
+ end
115
+
98
116
  def method_missing(name, *args)
99
117
  if name.to_s[-1,1] == "="
100
118
  name = name.to_s.chop.to_sym
@@ -146,6 +164,19 @@ module ActiveRestClient
146
164
  output = to_hash
147
165
  output.to_json
148
166
  end
167
+
168
+ private
169
+
170
+ def value_for_inspect(value)
171
+ if value.is_a?(String) && value.length > 50
172
+ "#{value[0..50]}...".inspect
173
+ elsif value.is_a?(Date) || value.is_a?(Time)
174
+ %("#{value.to_s(:db)}")
175
+ else
176
+ value.inspect
177
+ end
178
+ end
179
+
149
180
  end
150
181
 
151
182
  class NoAttributeException < StandardError ; end
@@ -2,6 +2,8 @@ module ActiveRestClient
2
2
  module Configuration
3
3
  module ClassMethods
4
4
  @@base_url = nil
5
+ @@username = nil
6
+ @@password = nil
5
7
  @@request_body_type = :form_encoded
6
8
  @lazy_load = false
7
9
 
@@ -24,6 +26,40 @@ module ActiveRestClient
24
26
  @@base_url = value
25
27
  end
26
28
 
29
+ def username(value = nil)
30
+ if value.nil?
31
+ if @username.nil?
32
+ @@username
33
+ else
34
+ @username
35
+ end
36
+ else
37
+ @username = value
38
+ end
39
+ end
40
+
41
+ def username=(value)
42
+ ActiveRestClient::Logger.info "\033[1;4;32m#{name}\033[0m Username set to be #{value}"
43
+ @@username = value
44
+ end
45
+
46
+ def password(value = nil)
47
+ if value.nil?
48
+ if @password.nil?
49
+ @@password
50
+ else
51
+ @password
52
+ end
53
+ else
54
+ @password = value
55
+ end
56
+ end
57
+
58
+ def password=(value)
59
+ ActiveRestClient::Logger.info "\033[1;4;32m#{name}\033[0m Password set..."
60
+ @@password = value
61
+ end
62
+
27
63
  def request_body_type(value = nil)
28
64
  if value.nil?
29
65
  if @request_body_type.nil?
@@ -44,8 +44,34 @@ module ActiveRestClient
44
44
  end
45
45
  end
46
46
 
47
- def request_body_type
47
+ def base_url
48
+ if object_is_class?
49
+ @object.base_url
50
+ else
51
+ @object.class.base_url
52
+ end
53
+ end
54
+
55
+ def username
48
56
  if object_is_class?
57
+ @object.username
58
+ else
59
+ @object.class.username
60
+ end
61
+ end
62
+
63
+ def password
64
+ if object_is_class?
65
+ @object.password
66
+ else
67
+ @object.class.password
68
+ end
69
+ end
70
+
71
+ def request_body_type
72
+ if @method[:options][:request_body_type]
73
+ @method[:options][:request_body_type]
74
+ elsif object_is_class?
49
75
  @object.request_body_type
50
76
  else
51
77
  @object.class.request_body_type
@@ -183,8 +209,10 @@ module ActiveRestClient
183
209
  def prepare_request_body(params = nil)
184
210
  if request_body_type == :form_encoded
185
211
  @body ||= (params || @post_params || {}).map {|k,v| "#{k}=#{CGI.escape(v.to_s)}"}.sort * "&"
212
+ headers["Content-Type"] ||= "application/x-www-form-urlencoded"
186
213
  elsif request_body_type == :json
187
214
  @body ||= (params || @post_params || {}).to_json
215
+ headers["Content-Type"] ||= "application/json"
188
216
  end
189
217
  end
190
218
 
@@ -210,6 +238,7 @@ module ActiveRestClient
210
238
  else
211
239
  _, @base_url, @url = parts
212
240
  end
241
+ base_url.gsub!(%r{//(.)}, "//#{username}:#{password}@\\1") if username && !base_url[%r{//[^/]*:[^/]*@}]
213
242
  connection = ActiveRestClient::ConnectionManager.get_connection(@base_url)
214
243
  end
215
244
  else
@@ -220,6 +249,7 @@ module ActiveRestClient
220
249
  @url = "#{base_url}#{@url}".gsub(@base_url, "")
221
250
  base_url = @base_url
222
251
  end
252
+ base_url.gsub!(%r{//(.)}, "//#{username}:#{password}@\\1") if username && !base_url[%r{//[^/]*:[^/]*@}]
223
253
  connection = ActiveRestClient::ConnectionManager.get_connection(base_url)
224
254
  end
225
255
  ActiveRestClient::Logger.info " \033[1;4;32m#{ActiveRestClient::NAME}\033[0m #{@instrumentation_name} - Requesting #{connection.base_url}#{@url}"
@@ -437,8 +467,11 @@ module ActiveRestClient
437
467
  else
438
468
  result = new_object(body, @overriden_name)
439
469
  result._status = @response.status
470
+ result._headers = @response.headers
471
+ result._etag = @response.headers['ETag']
440
472
  if !object_is_class? && options[:mutable] != false
441
473
  @object._copy_from(result)
474
+ @object._clean!
442
475
  result = @object
443
476
  end
444
477
  end
@@ -26,6 +26,10 @@ module ActiveRestClient
26
26
  size == 0
27
27
  end
28
28
 
29
+ def reverse
30
+ @reversed_items ||= @items.reverse
31
+ end
32
+
29
33
  def each
30
34
  @items.each do |el|
31
35
  yield el
@@ -62,5 +66,19 @@ module ActiveRestClient
62
66
  collected_responses
63
67
  end
64
68
 
69
+ def paginate(options = {})
70
+ raise WillPaginateNotAvailableException.new unless Object.constants.include?(:WillPaginate)
71
+
72
+ page = options[:page] || 1
73
+ per_page = options[:per_page] || WillPaginate.per_page
74
+ total = options[:total_entries] || @items.length
75
+
76
+ WillPaginate::Collection.create(page, per_page, total) do |pager|
77
+ pager.replace @items[pager.offset, pager.per_page].to_a
78
+ end
79
+ end
80
+
65
81
  end
82
+
83
+ class WillPaginateNotAvailableException < StandardError ; end
66
84
  end
@@ -1,3 +1,3 @@
1
1
  module ActiveRestClient
2
- VERSION = "1.0.6"
2
+ VERSION = "1.0.7"
3
3
  end
@@ -39,7 +39,7 @@ end
39
39
 
40
40
  describe ActiveRestClient::Base do
41
41
  it 'should instantiate a new descendant' do
42
- expect{EmptyExample.new}.to_not raise_error(Exception)
42
+ expect{EmptyExample.new}.to_not raise_error
43
43
  end
44
44
 
45
45
  it "should not instantiate a new base class" do
@@ -73,13 +73,20 @@ describe ActiveRestClient::Base do
73
73
  expect(values).to eq(["Billy", "United Kingdom"])
74
74
  end
75
75
 
76
- it "should automatically parse ISO 8601 format dates" do
76
+ it "should automatically parse ISO 8601 format date and time" do
77
77
  t = Time.now
78
78
  client = EmptyExample.new(:test => t.iso8601)
79
79
  expect(client["test"]).to be_an_instance_of(DateTime)
80
80
  expect(client["test"].to_s).to eq(t.to_datetime.to_s)
81
81
  end
82
82
 
83
+ it "should automatically parse ISO 8601 format dates" do
84
+ d = Date.today
85
+ client = EmptyExample.new(:test => d.iso8601)
86
+ expect(client["test"]).to be_an_instance_of(Date)
87
+ expect(client["test"]).to eq(d)
88
+ end
89
+
83
90
  it "should store attributes set using missing method names and mark them as dirty" do
84
91
  client = EmptyExample.new()
85
92
  client.test = "Something"
@@ -105,8 +112,8 @@ describe ActiveRestClient::Base do
105
112
 
106
113
  it 'should respond_to? attributes defined in the response' do
107
114
  client = EmptyExample.new(:hello => "World")
108
- client.respond_to?(:hello).should be_true
109
- client.respond_to?(:world).should be_false
115
+ expect(client.respond_to?(:hello)).to be_truthy
116
+ expect(client.respond_to?(:world)).to be_falsey
110
117
  end
111
118
 
112
119
  it "should save the base URL for the API server" do
@@ -149,22 +156,63 @@ describe ActiveRestClient::Base do
149
156
  end
150
157
 
151
158
  it "should be able to lazy instantiate an object from a prefixed lazy_ method call" do
152
- ActiveRestClient::Connection.any_instance.should_receive(:get).with('/find/1', anything).and_return(OpenStruct.new(status:200, headers:{}, body:"{\"first_name\":\"Billy\"}"))
159
+ expect_any_instance_of(ActiveRestClient::Connection).to receive(:get).with('/find/1', anything).and_return(OpenStruct.new(status:200, headers:{}, body:"{\"first_name\":\"Billy\"}"))
153
160
  example = AlteringClientExample.lazy_find(1)
154
161
  expect(example).to be_an_instance_of(ActiveRestClient::LazyLoader)
155
162
  expect(example.first_name).to eq("Billy")
156
163
  end
157
164
 
158
165
  it "should be able to lazy instantiate an object from a prefixed lazy_ method call from an instance" do
159
- ActiveRestClient::Connection.any_instance.should_receive(:get).with('/find/1', anything).and_return(OpenStruct.new(status:200, headers:{}, body:"{\"first_name\":\"Billy\"}"))
166
+ expect_any_instance_of(ActiveRestClient::Connection).to receive(:get).with('/find/1', anything).and_return(OpenStruct.new(status:200, headers:{}, body:"{\"first_name\":\"Billy\"}"))
160
167
  example = AlteringClientExample.new.lazy_find(1)
161
168
  expect(example).to be_an_instance_of(ActiveRestClient::LazyLoader)
162
169
  expect(example.first_name).to eq("Billy")
163
170
  end
164
171
 
172
+ context "#inspect output" do
173
+ it "displays a nice version" do
174
+ object = EmptyExample.new(id: 1, name: "John Smith")
175
+ expect(object.inspect).to match(/#<EmptyExample id: 1, name: "John Smith"/)
176
+ end
177
+
178
+ it "shows dirty attributes as a list of names at the end" do
179
+ object = EmptyExample.new(id: 1, name: "John Smith")
180
+ expect(object.inspect).to match(/#<EmptyExample id: 1, name: "John Smith" \(unsaved: id, name\)/)
181
+ end
182
+
183
+ it "doesn't show an empty list of dirty attributes" do
184
+ object = EmptyExample.new(id: 1, name: "John Smith")
185
+ object.instance_variable_set(:@dirty_attributes, Set.new)
186
+ expect(object.inspect).to_not match(/\(unsaved: id, name\)/)
187
+ end
188
+
189
+ it "shows dates in a nice format" do
190
+ object = EmptyExample.new(dob: Time.new(2015, 01, 02, 03, 04, 05))
191
+ expect(object.inspect).to match(/#<EmptyExample dob: "2015\-01\-02 03:04:05"/)
192
+ end
193
+
194
+ it "shows the etag if one is set" do
195
+ object = EmptyExample.new(id: 1)
196
+ object.instance_variable_set(:@_etag, "sample_etag")
197
+ expect(object.inspect).to match(/#<EmptyExample id: 1, ETag: sample_etag/)
198
+ end
199
+
200
+ it "shows the HTTP status code if one is set" do
201
+ object = EmptyExample.new(id: 1)
202
+ object.instance_variable_set(:@_status, 200)
203
+ expect(object.inspect).to match(/#<EmptyExample id: 1, Status: 200/)
204
+ end
205
+
206
+ it "shows [uninitialized] for new objects" do
207
+ object = EmptyExample.new
208
+ expect(object.inspect).to match(/#<EmptyExample \[uninitialized\]/)
209
+ end
210
+
211
+ end
212
+
165
213
  context "accepts a Translator to reformat JSON" do
166
214
  it "should log a deprecation warning when using a translator" do
167
- ActiveRestClient::Logger.should_receive(:warn) do |message|
215
+ expect(ActiveRestClient::Logger).to receive(:warn) do |message|
168
216
  expect(message).to start_with("DEPRECATION")
169
217
  end
170
218
  Proc.new do
@@ -175,7 +223,7 @@ describe ActiveRestClient::Base do
175
223
  end
176
224
 
177
225
  it "should call Translator#method when calling the mapped method if it responds to it" do
178
- TranslatorExample.should_receive(:all).with(an_instance_of(Hash)).and_return({})
226
+ expect(TranslatorExample).to receive(:all).with(an_instance_of(Hash)).and_return({})
179
227
  AlteringClientExample.all
180
228
  end
181
229
 
@@ -198,35 +246,35 @@ describe ActiveRestClient::Base do
198
246
 
199
247
  context "directly call a URL, rather than via a mapped method" do
200
248
  it "should be able to directly call a URL" do
201
- ActiveRestClient::Request.any_instance.should_receive(:do_request).with(any_args).and_return(OpenStruct.new(status:200, headers:{}, body:"{\"first_name\":\"Billy\"}"))
249
+ expect_any_instance_of(ActiveRestClient::Request).to receive(:do_request).with(any_args).and_return(OpenStruct.new(status:200, headers:{}, body:"{\"first_name\":\"Billy\"}"))
202
250
  EmptyExample._request("http://api.example.com/")
203
251
  end
204
252
 
205
253
  it "runs filters as usual" do
206
- ActiveRestClient::Request.any_instance.should_receive(:do_request).with(any_args).and_return(OpenStruct.new(status:200, headers:{}, body:"{\"first_name\":\"Billy\"}"))
207
- EmptyExample.should_receive(:_filter_request).with(any_args).exactly(2).times
254
+ expect_any_instance_of(ActiveRestClient::Request).to receive(:do_request).with(any_args).and_return(OpenStruct.new(status:200, headers:{}, body:"{\"first_name\":\"Billy\"}"))
255
+ expect(EmptyExample).to receive(:_filter_request).with(any_args).exactly(2).times
208
256
  EmptyExample._request("http://api.example.com/")
209
257
  end
210
258
 
211
259
  it "should make an HTTP request" do
212
- ActiveRestClient::Connection.any_instance.should_receive(:get).with(any_args).and_return(OpenStruct.new(status:200, headers:{}, body:"{\"first_name\":\"Billy\"}"))
260
+ expect_any_instance_of(ActiveRestClient::Connection).to receive(:get).with(any_args).and_return(OpenStruct.new(status:200, headers:{}, body:"{\"first_name\":\"Billy\"}"))
213
261
  EmptyExample._request("http://api.example.com/")
214
262
  end
215
263
 
216
264
  it "should make an HTTP request including the path in the base_url" do
217
- ActiveRestClient::Connection.any_instance.should_receive(:get).with('/v1/all', anything).and_return(OpenStruct.new(status:200, headers:{}, body:"{\"first_name\":\"Billy\"}"))
265
+ expect_any_instance_of(ActiveRestClient::Connection).to receive(:get).with('/v1/all', anything).and_return(OpenStruct.new(status:200, headers:{}, body:"{\"first_name\":\"Billy\"}"))
218
266
  NonHostnameBaseUrlExample.all
219
267
  end
220
268
 
221
269
  it "should map the response from the directly called URL in the normal way" do
222
- ActiveRestClient::Request.any_instance.should_receive(:do_request).with(any_args).and_return(OpenStruct.new(status:200, headers:{}, body:"{\"first_name\":\"Billy\"}"))
270
+ expect_any_instance_of(ActiveRestClient::Request).to receive(:do_request).with(any_args).and_return(OpenStruct.new(status:200, headers:{}, body:"{\"first_name\":\"Billy\"}"))
223
271
  example = EmptyExample._request("http://api.example.com/")
224
272
  expect(example.first_name).to eq("Billy")
225
273
  end
226
274
 
227
275
  it "should be able to pass the plain response from the directly called URL bypassing JSON loading" do
228
276
  response = OpenStruct.new(_status:200, body:"This is another non-JSON string")
229
- ActiveRestClient::Connection.any_instance.should_receive(:post).with(any_args).and_return(OpenStruct.new(status:200, headers:{}, body:response))
277
+ expect_any_instance_of(ActiveRestClient::Connection).to receive(:post).with(any_args).and_return(OpenStruct.new(status:200, headers:{}, body:response))
230
278
  expect(EmptyExample._plain_request("http://api.example.com/", :post, {id:1234})).to eq(response)
231
279
  end
232
280
 
@@ -236,7 +284,7 @@ describe ActiveRestClient::Base do
236
284
  begin
237
285
  response = OpenStruct.new(_status:200, body:"This is a non-JSON string")
238
286
  other_response = OpenStruct.new(_status:200, body:"This is another non-JSON string")
239
- allow_any_instance_of(ActiveRestClient::Connection).to receive(:get) do |url, others|
287
+ allow_any_instance_of(ActiveRestClient::Connection).to receive(:get) do |instance, url, others|
240
288
  if url == "/?test=1"
241
289
  OpenStruct.new(status:200, headers:{}, body:response)
242
290
  else
@@ -254,19 +302,19 @@ describe ActiveRestClient::Base do
254
302
  end
255
303
 
256
304
  it "should be able to lazy load a direct URL request" do
257
- ActiveRestClient::Request.any_instance.should_receive(:do_request).with(any_args).and_return(OpenStruct.new(status:200, headers:{}, body:"{\"first_name\":\"Billy\"}"))
305
+ expect_any_instance_of(ActiveRestClient::Request).to receive(:do_request).with(any_args).and_return(OpenStruct.new(status:200, headers:{}, body:"{\"first_name\":\"Billy\"}"))
258
306
  example = EmptyExample._lazy_request("http://api.example.com/")
259
307
  expect(example).to be_an_instance_of(ActiveRestClient::LazyLoader)
260
308
  expect(example.first_name).to eq("Billy")
261
309
  end
262
310
 
263
311
  it "should be able to specify a method and parameters for the call" do
264
- ActiveRestClient::Connection.any_instance.should_receive(:post).with(any_args).and_return(OpenStruct.new(status:200, headers:{}, body:"{\"first_name\":\"Billy\"}"))
312
+ expect_any_instance_of(ActiveRestClient::Connection).to receive(:post).with(any_args).and_return(OpenStruct.new(status:200, headers:{}, body:"{\"first_name\":\"Billy\"}"))
265
313
  EmptyExample._request("http://api.example.com/", :post, {id:1234})
266
314
  end
267
315
 
268
316
  it "should be able to use mapped methods to create a request to pass in to _lazy_request" do
269
- ActiveRestClient::Connection.any_instance.should_receive(:get).with('/find/1', anything).and_return(OpenStruct.new(status:200, headers:{}, body:"{\"first_name\":\"Billy\"}"))
317
+ expect_any_instance_of(ActiveRestClient::Connection).to receive(:get).with('/find/1', anything).and_return(OpenStruct.new(status:200, headers:{}, body:"{\"first_name\":\"Billy\"}"))
270
318
  request = AlteringClientExample._request_for(:find, :id => 1)
271
319
  example = AlteringClientExample._lazy_request(request)
272
320
  expect(example.first_name).to eq("Billy")
@@ -275,7 +323,7 @@ describe ActiveRestClient::Base do
275
323
 
276
324
  context "Recording a response" do
277
325
  it "calls back to the record_response callback with the url and response body" do
278
- ActiveRestClient::Connection.any_instance.should_receive(:get).with(any_args).and_return(OpenStruct.new(status:200, headers:{}, body:"Hello world"))
326
+ expect_any_instance_of(ActiveRestClient::Connection).to receive(:get).with(any_args).and_return(OpenStruct.new(status:200, headers:{}, body:"Hello world"))
279
327
  expect{RecordResponseExample.all}.to raise_error(Exception, "/all|Hello world")
280
328
  end
281
329
  end