From 0562843dd3b6d6e03111ee14147b67d97bdf077f Mon Sep 17 00:00:00 2001 From: Mike Robinson Date: Tue, 21 Jun 2016 14:07:56 +0100 Subject: [PATCH] Add status predicate methods to Response#respond_to? Expands the existing respond_to? first-party method list to include the HTTP status predicates. Useful for things like rspec, which check respond_to? when using predicate matchers. --- lib/httparty/response.rb | 10 ++++++++-- spec/httparty/response_spec.rb | 5 +++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/httparty/response.rb b/lib/httparty/response.rb index 27d41f3e..ea4e39a0 100644 --- a/lib/httparty/response.rb +++ b/lib/httparty/response.rb @@ -49,11 +49,17 @@ def inspect %(#<#{self.class}:0x#{inspect_id} parsed_response=#{parsed_response.inspect}, @response=#{response.inspect}, @headers=#{headers.inspect}>) end + RESPOND_TO_METHODS = [:request, :response, :parsed_response, :body, :headers] + CODES_TO_OBJ = ::Net::HTTPResponse::CODE_CLASS_TO_OBJ.merge ::Net::HTTPResponse::CODE_TO_OBJ CODES_TO_OBJ.each do |response_code, klass| name = klass.name.sub("Net::HTTP", '') - define_method("#{underscore(name)}?") do + name = "#{underscore(name)}?".to_sym + + RESPOND_TO_METHODS << name + + define_method(name) do klass === response end end @@ -64,7 +70,7 @@ def inspect end def respond_to?(name, include_all = false) - return true if [:request, :response, :parsed_response, :body, :headers].include?(name) + return true if RESPOND_TO_METHODS.include?(name) parsed_response.respond_to?(name, include_all) || response.respond_to?(name, include_all) end diff --git a/spec/httparty/response_spec.rb b/spec/httparty/response_spec.rb index b51fb888..829674b7 100644 --- a/spec/httparty/response_spec.rb +++ b/spec/httparty/response_spec.rb @@ -107,6 +107,11 @@ expect(response.respond_to?(:parsed_response)).to be_truthy end + it "responds to predicates" do + response = HTTParty::Response.new(@request_object, @response_object, @parsed_response) + expect(response.respond_to?(:success?)).to be_truthy + end + it "responds to anything parsed_response responds to" do response = HTTParty::Response.new(@request_object, @response_object, @parsed_response) expect(response.respond_to?(:[])).to be_truthy