Skip to content

Commit 018969c

Browse files
committed
Add missing Statement#dup. Does not duplicate blank node components.
1 parent 5ff4507 commit 018969c

2 files changed

Lines changed: 36 additions & 0 deletions

File tree

lib/rdf/model/statement.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,18 @@ def canonicalize
437437
nil
438438
end
439439

440+
# New statement with duplicated components (other than blank nodes)
441+
#
442+
# @return [RDF::Statement]
443+
def dup
444+
options = Hash[@options]
445+
options[:subject] = subject.is_a?(RDF::Node) ? subject : subject.dup
446+
options[:predicate] = predicate.dup
447+
options[:object] = object.is_a?(RDF::Node) ? object : object.dup
448+
options[:graph_name] = graph_name.is_a?(RDF::Node) ? graph_name : graph_name.dup if graph_name
449+
RDF::Statement.new(options)
450+
end
451+
440452
##
441453
# Returns the terms of this statement as a `Hash`.
442454
#

spec/model_statement_spec.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,18 @@
7979
it {is_expected.to be_statement}
8080
it {is_expected.not_to be_inferred}
8181
its(:terms) {is_expected.to include(s, p, o)}
82+
83+
describe "#dup" do
84+
its(:dup) {is_expected.to eql(subject)}
85+
its(:dup) {is_expected.not_to equal(subject)}
86+
87+
[:subject, :predicate, :object].each do |c|
88+
it "#{c} duplicated as appropriate" do
89+
expect(subject.dup.send(c)).to eql(subject.send(c))
90+
expect(subject.dup.send(c)).not_to equal(subject.send(c)) unless subject.send(c).is_a?(RDF::Node)
91+
end
92+
end
93+
end
8294
end
8395

8496
context "when created with a blank node subject" do
@@ -103,6 +115,18 @@
103115
its(:graph_name) {is_expected.not_to be_nil}
104116
it {is_expected.to eq stmt}
105117
it {is_expected.not_to eql stmt}
118+
119+
describe "#dup" do
120+
its(:dup) {is_expected.to eql(subject)}
121+
its(:dup) {is_expected.not_to equal(subject)}
122+
123+
[:subject, :predicate, :object, :graph_name].each do |c|
124+
it "#{c} duplicated as appropriate" do
125+
expect(subject.dup.send(c)).to eql(subject.send(c))
126+
expect(subject.dup.send(c)).not_to equal(subject.send(c)) unless subject.send(c).is_a?(RDF::Node)
127+
end
128+
end
129+
end
106130
end
107131

108132
context "when created with a default graph" do

0 commit comments

Comments
 (0)