diff options
| author | Jon Leighton <j@jonathanleighton.com> | 2010-10-14 10:25:43 +0100 |
|---|---|---|
| committer | Jon Leighton <j@jonathanleighton.com> | 2010-10-14 10:25:43 +0100 |
| commit | 3fb493c2b037ffbdda5c91d66334ec6f79faa2d1 (patch) | |
| tree | e49b072103bbfe6fb6159954c786a31f44099325 /activeresource/lib/active_resource/http_mock.rb | |
| parent | 212fdd8ba9624f61421a7a950283537a3d39ac18 (diff) | |
| parent | 01ab6f961bff150d50c99f03fa3946f48ac29b17 (diff) | |
| download | rails-3fb493c2b037ffbdda5c91d66334ec6f79faa2d1.tar.gz rails-3fb493c2b037ffbdda5c91d66334ec6f79faa2d1.tar.bz2 rails-3fb493c2b037ffbdda5c91d66334ec6f79faa2d1.zip | |
Merge branch 'master' into nested_has_many_through
Conflicts:
activerecord/lib/active_record/associations.rb
activerecord/test/cases/associations/cascaded_eager_loading_test.rb
Diffstat (limited to 'activeresource/lib/active_resource/http_mock.rb')
| -rw-r--r-- | activeresource/lib/active_resource/http_mock.rb | 56 |
1 files changed, 37 insertions, 19 deletions
diff --git a/activeresource/lib/active_resource/http_mock.rb b/activeresource/lib/active_resource/http_mock.rb index ddd3fb1f5d..9aefde7c30 100644 --- a/activeresource/lib/active_resource/http_mock.rb +++ b/activeresource/lib/active_resource/http_mock.rb @@ -100,11 +100,11 @@ module ActiveResource # Accepts a block which declares a set of requests and responses for the HttpMock to respond to in # the following format: - # + # # mock.http_method(path, request_headers = {}, body = nil, status = 200, response_headers = {}) - # + # # === Example - # + # # @matz = { :id => 1, :name => "Matz" }.to_xml(:root => "person") # ActiveResource::HttpMock.respond_to do |mock| # mock.post "/people.xml", {}, @matz, 201, "Location" => "/people/1.xml" @@ -112,65 +112,76 @@ module ActiveResource # mock.put "/people/1.xml", {}, nil, 204 # mock.delete "/people/1.xml", {}, nil, 200 # end - # + # # Alternatively, accepts a hash of <tt>{Request => Response}</tt> pairs allowing you to generate # these the following format: - # + # # ActiveResource::Request.new(method, path, body, request_headers) # ActiveResource::Response.new(body, status, response_headers) - # + # # === Example - # + # # Request.new(:#{method}, path, nil, request_headers) - # + # # @matz = { :id => 1, :name => "Matz" }.to_xml(:root => "person") # # create_matz = ActiveResource::Request.new(:post, '/people.xml', @matz, {}) # created_response = ActiveResource::Response.new("", 201, {"Location" => "/people/1.xml"}) # get_matz = ActiveResource::Request.new(:get, '/people/1.xml', nil) # ok_response = ActiveResource::Response.new("", 200, {}) - # + # # pairs = {create_matz => created_response, get_matz => ok_response} - # + # # ActiveResource::HttpMock.respond_to(pairs) # # Note, by default, every time you call +respond_to+, any previous request and response pairs stored # in HttpMock will be deleted giving you a clean slate to work on. - # + # # If you want to override this behaviour, pass in +false+ as the last argument to +respond_to+ - # + # # === Example - # + # # ActiveResource::HttpMock.respond_to do |mock| # mock.send(:get, "/people/1", {}, "XML1") # end # ActiveResource::HttpMock.responses.length #=> 1 - # + # # ActiveResource::HttpMock.respond_to(false) do |mock| # mock.send(:get, "/people/2", {}, "XML2") # end # ActiveResource::HttpMock.responses.length #=> 2 - # + # # This also works with passing in generated pairs of requests and responses, again, just pass in false # as the last argument: - # + # # === Example - # + # # ActiveResource::HttpMock.respond_to do |mock| # mock.send(:get, "/people/1", {}, "XML1") # end # ActiveResource::HttpMock.responses.length #=> 1 - # + # # get_matz = ActiveResource::Request.new(:get, '/people/1.xml', nil) # ok_response = ActiveResource::Response.new("", 200, {}) - # + # # pairs = {get_matz => ok_response} # # ActiveResource::HttpMock.respond_to(pairs, false) # ActiveResource::HttpMock.responses.length #=> 2 + # + # # If you add a response with an existing request, it will be replaced + # + # fail_response = ActiveResource::Response.new("", 404, {}) + # pairs = {get_matz => fail_response} + # + # ActiveResource::HttpMock.respond_to(pairs, false) + # ActiveResource::HttpMock.responses.length #=> 2 + # def respond_to(*args) #:yields: mock pairs = args.first || {} reset! if args.last.class != FalseClass + + delete_responses_to_replace pairs.to_a responses.concat pairs.to_a if block_given? yield Responder.new(responses) @@ -179,6 +190,13 @@ module ActiveResource end end + def delete_responses_to_replace(new_responses) + new_responses.each{|nr| + request_to_remove = nr[0] + @@responses = responses.delete_if{|r| r[0] == request_to_remove} + } + end + # Deletes all logged requests and responses. def reset! requests.clear |
