From ed4547fdcbc1a2e1da1e39357457ea1f9f78293d Mon Sep 17 00:00:00 2001 From: Adam Wead Date: Wed, 3 Dec 2014 10:18:25 -0500 Subject: [PATCH] Return array of version uris --- lib/active_fedora/versionable.rb | 25 +++++++++++------------ spec/integration/versionable_spec.rb | 30 +++++++++++++++------------- 2 files changed, 28 insertions(+), 27 deletions(-) diff --git a/lib/active_fedora/versionable.rb b/lib/active_fedora/versionable.rb index 55d3e827c..256f3fddd 100644 --- a/lib/active_fedora/versionable.rb +++ b/lib/active_fedora/versionable.rb @@ -20,23 +20,18 @@ def model_type end end - # Returns an array of RDF::Literal objects where the version label matches - # our own version label and excludes auto-snapshot versions from Fedora. + # Returns an array of uris matching our own version label, excluding auto-snapshot versions from Fedora. def versions results = versions_graph.query([nil, ::RDF::URI.new('http://fedora.info/definitions/v4/repository#hasVersionLabel'), nil]) - numbered_versions(results) + numbered_versions(results).map { |v| version(v.to_s) } end def versions_graph @versions_graph ||= ::RDF::Graph.new << ::RDF::Reader.for(:ttl).new(versions_request) end - def versions_url - uri + '/fcr:versions' - end - def create_version - resp = ActiveFedora.fedora.connection.post(versions_url, nil, {slug: version_name}) + resp = ActiveFedora.fedora.connection.post(versions_uri, nil, {slug: version_name}) @versions_graph = nil resp.success? end @@ -44,14 +39,14 @@ def create_version # This method does not rely on the internal versionable flag of the object, instead # it queries Fedora directly to figure out if there are versions for the resource. def has_versions? - ActiveFedora.fedora.connection.head(versions_url) + ActiveFedora.fedora.connection.head(versions_uri) true rescue Ldp::NotFound false end def restore_version label - resp = ActiveFedora.fedora.connection.patch(version_url(label), nil) + resp = ActiveFedora.fedora.connection.patch(version(label), nil) @versions_graph = nil reload refresh_attributes if self.respond_to?("refresh_attributes") @@ -62,7 +57,7 @@ def restore_version label def versions_request resp = begin - ActiveFedora.fedora.connection.get(versions_url) + ActiveFedora.fedora.connection.get(versions_uri) rescue Ldp::NotFound return '' end @@ -74,10 +69,14 @@ def versions_request resp.body end - def version_url label - versions_url + '/' + label + def versions_uri + uri + '/fcr:versions' end + def version label + versions_uri + '/' + label + end + def version_name if versions.empty? "version1" diff --git a/spec/integration/versionable_spec.rb b/spec/integration/versionable_spec.rb index 4aac645a8..d4b9ece8a 100644 --- a/spec/integration/versionable_spec.rb +++ b/spec/integration/versionable_spec.rb @@ -29,7 +29,8 @@ class WithVersions < ActiveFedora::Base it "should have one version" do expect(subject.versions.size).to eq 1 - expect(subject.versions.first).to be_kind_of ::RDF::Literal + expect(subject.versions.first).to be_kind_of String + expect(subject.versions.first).to match(/version1$/) end context "two times" do @@ -41,8 +42,8 @@ class WithVersions < ActiveFedora::Base it "should have two versions" do expect(subject.versions.size).to eq 2 - subject.versions.each do |version| - expect(version).to be_kind_of ::RDF::Literal + subject.versions.each_index do |index| + expect(subject.versions[index]).to match(/#{"version"+(index+1).to_s}$/) end end @@ -126,7 +127,7 @@ class MockAFBase < ActiveFedora::Base end it "should have one version" do - expect(subject.versions.first).to be_kind_of ::RDF::Literal + expect(subject.versions.first).to match(/version1$/) end it "should have a title" do @@ -146,8 +147,8 @@ class MockAFBase < ActiveFedora::Base it "should have two versions" do expect(subject.versions.size).to eq 2 - subject.versions.each do |version| - expect(version).to be_kind_of ::RDF::Literal + subject.versions.each_index do |index| + expect(subject.versions[index]).to match(/#{"version"+(index+1).to_s}$/) end end @@ -255,8 +256,7 @@ class MockAFBase < ActiveFedora::Base end it "should have one version" do - expect(subject.versions.size).to eq 1 - expect(subject.versions.first).to be_kind_of ::RDF::Literal + expect(subject.versions.first).to match(/version1$/) end it "should have a title" do @@ -277,8 +277,8 @@ class MockAFBase < ActiveFedora::Base it "should have two unique versions" do expect(subject.versions.size).to eq 2 - subject.versions.each do |version| - expect(version).to be_kind_of ::RDF::Literal + subject.versions.each_index do |index| + expect(subject.versions[index]).to match(/#{"version"+(index+1).to_s}$/) end end @@ -384,7 +384,7 @@ class MockAFBase < ActiveFedora::Base expect(subject.versions.size).to eq 1 expect(subject.original_name).to eql(first_name) expect(subject.content.size).to eq first_file.size - expect(subject.versions.first).to be_kind_of ::RDF::Literal + expect(subject.versions.first).to match(/version1$/) end context "two times" do @@ -401,8 +401,8 @@ class MockAFBase < ActiveFedora::Base expect(subject.versions.size).to eq 2 expect(subject.original_name).to eql(second_name) expect(subject.content.size).to eq second_file.size - subject.versions.each do |version| - expect(version).to be_kind_of ::RDF::Literal + subject.versions.each_index do |index| + expect(subject.versions[index]).to match(/#{"version"+(index+1).to_s}$/) end end @@ -436,7 +436,9 @@ class MockAFBase < ActiveFedora::Base expect(subject.versions.size).to eq 3 expect(subject.original_name).to eql(first_name) expect(subject.content.size).to eq first_file.size - expect(subject.versions.first).to be_kind_of ::RDF::Literal + subject.versions.each_index do |index| + expect(subject.versions[index]).to match(/#{"version"+(index+1).to_s}$/) + end end end