From 9b7ecc0012f0c7959c41ece3776a426c40293cd5 Mon Sep 17 00:00:00 2001 From: Justin Coyne Date: Mon, 26 Jan 2015 22:27:22 -0600 Subject: [PATCH] Don't attempt to remove a non-existant variable --- lib/ldp/response.rb | 10 ++++---- spec/lib/ldp/response_spec.rb | 43 +++++++++++++++++++++++------------ 2 files changed, 35 insertions(+), 18 deletions(-) diff --git a/lib/ldp/response.rb b/lib/ldp/response.rb index 7e62b2b..25e5cd4 100644 --- a/lib/ldp/response.rb +++ b/lib/ldp/response.rb @@ -63,10 +63,12 @@ def self.rdf_source? response def dup super.tap do |new_resp| new_resp.send(:extend, Ldp::Response) - if ::RUBY_VERSION < '2.0' - new_resp.send(:remove_instance_variable, :@graph) - else - new_resp.remove_instance_variable(:@graph) + unless new_resp.instance_variable_get(:@graph).nil? + if ::RUBY_VERSION < '2.0' + new_resp.send(:remove_instance_variable, :@graph) + else + new_resp.remove_instance_variable(:@graph) + end end end end diff --git a/spec/lib/ldp/response_spec.rb b/spec/lib/ldp/response_spec.rb index 4c2bf46..dd89ebf 100644 --- a/spec/lib/ldp/response_spec.rb +++ b/spec/lib/ldp/response_spec.rb @@ -19,29 +19,44 @@ end describe "#dup" do - let(:simple_container_graph) { "<> a ." } - let(:link) { [";rel=\"type\"",";rel=\"type\""] } - + let(:mock_conn) { Faraday.new { |builder| builder.adapter :test, conn_stubs } } + let(:client) { Ldp::Client.new mock_conn } + let(:raw_response) { client.get "a_container" } let(:conn_stubs) do Faraday::Adapter::Test::Stubs.new do |stub| - stub.get('/a_container') { [200, {"Link" => link}, simple_container_graph] } + stub.get('/a_container') { [200, {"Link" => link}, body] } end end - - let(:mock_conn) { Faraday.new { |builder| builder.adapter :test, conn_stubs } } - let(:client) { Ldp::Client.new mock_conn } - let(:raw_response) { client.get "a_container" } - let(:response) { Ldp::Response.wrap mock_client, raw_response } + subject { response.dup } - it { is_expected.to respond_to :links } - it "should not have duplicated the graph" do - expect(response.graph.object_id).not_to eq subject.graph.object_id + context "for a container resource" do + let(:body) { "<> a ." } + let(:link) { [";rel=\"type\"",";rel=\"type\""] } + it { is_expected.to respond_to :links } + + it "should not have duplicated the graph" do + expect(response.graph.object_id).not_to eq subject.graph.object_id + end + + it "should have duplicated the body" do + expect(response.body.object_id).to eq subject.body.object_id + end end - it "should have duplicated the body" do - expect(response.body.object_id).to eq subject.body.object_id + context "for a non-rdf resource" do + let(:body) { "This is only a test" } + let(:link) { [";rel=\"type\"",";rel=\"type\""] } + it { is_expected.to respond_to :links } + + it "should not have a graph" do + expect(response.instance_variable_get(:@graph)).to be_nil + end + + it "should have duplicated the body" do + expect(response.body.object_id).to eq subject.body.object_id + end end end