active-fedora 8.0.1 → 8.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/History.txt +15 -0
- data/active-fedora.gemspec +1 -1
- data/lib/active_fedora.rb +1 -1
- data/lib/active_fedora/content_model.rb +6 -7
- data/lib/active_fedora/core.rb +7 -13
- data/lib/active_fedora/rdf/identifiable.rb +1 -1
- data/lib/active_fedora/relation/finder_methods.rb +5 -3
- data/lib/active_fedora/version.rb +1 -1
- data/spec/integration/datastreams_spec.rb +5 -5
- data/spec/unit/base_spec.rb +2 -2
- data/spec/unit/content_model_spec.rb +2 -2
- data/spec/unit/om_datastream_spec.rb +2 -2
- data/spec/unit/rdf_datastream_spec.rb +2 -1
- data/spec/unit/rdf_resource_datastream_spec.rb +1 -3
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f80f162fa9ed3128b27996f14c735381637053d0
|
4
|
+
data.tar.gz: 7fd1c593871f7b7e02176bd4498b65d5c58e5bc9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a35dc73b4243b5b5c3c3c647ae84102126e0e7781e6b65b88a140c65407055ba6e846a6281af56d8440f79fba19d1b78e04fbbe0dc079c13a714d042e3278840
|
7
|
+
data.tar.gz: 49a39ac794359b97de9d8165fed133211950b6f2e4ce2b8fdf84d9550dc0a659bad1c39cd09d7dc52cacc957e3019f96ef728614cd412325da6b687cfd95b3fa
|
data/History.txt
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
8.1.0
|
2
|
+
|
3
|
+
2015-04-27: Patches casting behavior [David Chandek-Stark]
|
4
|
+
See https://github.com/projecthydra/active_fedora/wiki/Patching-ActiveFedora-7.x-&-8.x-Casting-Behavior
|
5
|
+
for detailed information on the problem.
|
6
|
+
|
7
|
+
The solution offered in this patch preserves the most-specific-class algorithm
|
8
|
+
of `ActiveFedora::ContentModel.best_model_for` and raises a new execption,
|
9
|
+
`ActiveFedora::ModelNotAsserted` in `ActiveFedora::Core#adapt_to_cmodel`.
|
10
|
+
|
11
|
+
Note that a repository object can still be loaded into a model class not asserted,
|
12
|
+
for example, by using `.find` with `cast: false`.
|
13
|
+
|
14
|
+
Closes #746 (although not really a backport)
|
15
|
+
|
1
16
|
8.0.1
|
2
17
|
|
3
18
|
2015-03-11: Backport solr escape patch [Chris Colvard]
|
data/active-fedora.gemspec
CHANGED
@@ -14,7 +14,7 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.license = "APACHE2"
|
15
15
|
s.required_ruby_version = '>= 1.9.3'
|
16
16
|
|
17
|
-
s.add_dependency 'rsolr', "~> 1.0.
|
17
|
+
s.add_dependency 'rsolr', "~> 1.0.11"
|
18
18
|
s.add_dependency 'om', '~> 3.1'
|
19
19
|
s.add_dependency 'nom-xml', '>= 0.5.1'
|
20
20
|
s.add_dependency "activesupport", '>= 3.0.0'
|
data/lib/active_fedora.rb
CHANGED
@@ -23,7 +23,7 @@ module ActiveFedora #:nodoc:
|
|
23
23
|
class RecordNotSaved < RuntimeError; end # :nodoc:
|
24
24
|
class IllegalOperation < RuntimeError; end # :nodoc:
|
25
25
|
class Rollback < RuntimeError; end # :nodoc:
|
26
|
-
|
26
|
+
class ModelNotAsserted < RuntimeError; end # :nodoc:
|
27
27
|
|
28
28
|
eager_autoload do
|
29
29
|
autoload :AssociationRelation
|
@@ -14,15 +14,14 @@ module ActiveFedora
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def self.best_model_for(obj)
|
17
|
-
best_model_match =
|
17
|
+
best_model_match = nil
|
18
18
|
|
19
19
|
known_models_for(obj).each do |model_value|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
best_model_match = model_value
|
20
|
+
if model_value <= obj.class
|
21
|
+
# If there is an inheritance structure, use the most specific case.
|
22
|
+
if best_model_match.nil? || best_model_match > model_value
|
23
|
+
best_model_match = model_value
|
24
|
+
end
|
26
25
|
end
|
27
26
|
end
|
28
27
|
|
data/lib/active_fedora/core.rb
CHANGED
@@ -119,22 +119,16 @@ module ActiveFedora
|
|
119
119
|
klass.allocate.init_with_object(inner_object)
|
120
120
|
end
|
121
121
|
|
122
|
-
#
|
123
|
-
#
|
124
|
-
#
|
125
|
-
# in the RELS-EXT for this object. Due to how the RDF writer works, this is
|
126
|
-
# currently just the first alphabetical model.
|
127
|
-
#
|
128
|
-
# If the object was instantiated with any other class, then use that class
|
129
|
-
# as the base of the type the user wants rather than casting to the first
|
130
|
-
# :has_model found on the object.
|
131
|
-
#
|
132
|
-
# In either case, if an extended model of that initial base model of the two
|
133
|
-
# cases above exists in the :has_model, then instantiate as that extended
|
134
|
-
# model type instead.
|
122
|
+
# Adapts the inner object to the best known model
|
123
|
+
# Raise ActiveFedora::ModelNotAsserted if unable to adapt object
|
124
|
+
# (i.e, best model is nil)
|
135
125
|
def adapt_to_cmodel
|
136
126
|
best_model_match = ActiveFedora::ContentModel.best_model_for(self)
|
137
127
|
|
128
|
+
if best_model_match.nil?
|
129
|
+
raise ActiveFedora::ModelNotAsserted, "Unable to adapt #{self.inspect} to a model asserted for the resource."
|
130
|
+
end
|
131
|
+
|
138
132
|
self.instance_of?(best_model_match) ? self : self.adapt_to(best_model_match)
|
139
133
|
end
|
140
134
|
|
@@ -47,7 +47,7 @@ module ActiveFedora::RDF::Identifiable
|
|
47
47
|
# @param [RDF::URI] uri URI that is being looked up.
|
48
48
|
def from_uri(uri,_)
|
49
49
|
begin
|
50
|
-
|
50
|
+
ActiveFedora::Base.find(pid_from_subject(uri))
|
51
51
|
rescue ActiveFedora::ObjectNotFoundError
|
52
52
|
self.ds_specs[resource_datastream.to_s][:type].resource_class.new(uri)
|
53
53
|
end
|
@@ -168,10 +168,12 @@ module ActiveFedora
|
|
168
168
|
protected
|
169
169
|
|
170
170
|
def load_from_fedora(pid, cast)
|
171
|
-
cast = true if klass == ActiveFedora::Base && cast.nil?
|
172
171
|
inner = DigitalObject.find(klass, pid)
|
173
|
-
|
174
|
-
cast
|
172
|
+
obj = klass.allocate.init_with_object(inner)
|
173
|
+
if cast != false
|
174
|
+
obj = obj.adapt_to_cmodel
|
175
|
+
end
|
176
|
+
obj
|
175
177
|
end
|
176
178
|
|
177
179
|
def find_with_ids(ids, cast)
|
@@ -60,7 +60,7 @@ describe ActiveFedora::Datastreams do
|
|
60
60
|
end
|
61
61
|
|
62
62
|
it "should use ds_specs and preserve existing datastreams on migrated objects" do
|
63
|
-
test_obj = HasMetadata.find(@base.pid)
|
63
|
+
test_obj = HasMetadata.find(@base.pid, cast: false)
|
64
64
|
expect(test_obj.datastreams["testDS"].dsLabel).to eql "Test DS"
|
65
65
|
expect(test_obj.datastreams["testDS"].new?).to be_false
|
66
66
|
expect(test_obj.with_versions.dsLabel).to eql "Versioned DS"
|
@@ -114,17 +114,17 @@ describe ActiveFedora::Datastreams do
|
|
114
114
|
end
|
115
115
|
|
116
116
|
it "should use ds_specs on migrated objects" do
|
117
|
-
test_obj = HasFile.find(@base.pid)
|
117
|
+
test_obj = HasFile.find(@base.pid, cast: false)
|
118
118
|
expect(test_obj.file_ds.versionable).to be_false
|
119
119
|
expect(test_obj.file_ds.new?).to be_true
|
120
120
|
test_obj.file_ds.content = "blah blah blah"
|
121
121
|
test_obj.save
|
122
122
|
expect(test_obj.file_ds.versionable).to be_false
|
123
123
|
# look it up again to check datastream profile
|
124
|
-
test_obj = HasFile.find(@base.pid)
|
124
|
+
test_obj = HasFile.find(@base.pid, cast: false)
|
125
125
|
expect(test_obj.file_ds.versionable).to be_false
|
126
126
|
expect(test_obj.file_ds.dsLabel).to eql "File Datastream"
|
127
|
-
test_obj = HasFile.find(@base2.pid)
|
127
|
+
test_obj = HasFile.find(@base2.pid, cast: false)
|
128
128
|
expect(test_obj.file_ds.versionable).to be_true
|
129
129
|
expect(test_obj.file_ds.dsLabel).to eql "Pre-existing DS"
|
130
130
|
end
|
@@ -170,4 +170,4 @@ describe ActiveFedora::Datastreams do
|
|
170
170
|
expect(test_obj.datastreams['someMetadata'].controlGroup).to eql 'M'
|
171
171
|
end
|
172
172
|
end
|
173
|
-
end
|
173
|
+
end
|
data/spec/unit/base_spec.rb
CHANGED
@@ -428,9 +428,9 @@ describe ActiveFedora::Base do
|
|
428
428
|
describe ".adapt_to_cmodel with implemented (non-ActiveFedora::Base) cmodel" do
|
429
429
|
subject { FooHistory.new }
|
430
430
|
|
431
|
-
it "should
|
431
|
+
it "should raise an exception if the object class is not equal to or a subclass of any known model" do
|
432
432
|
ActiveFedora::ContentModel.should_receive(:known_models_for).with(subject).and_return([FooAdaptation])
|
433
|
-
subject.adapt_to_cmodel.
|
433
|
+
expect { subject.adapt_to_cmodel }.to raise_error(ActiveFedora::ModelNotAsserted)
|
434
434
|
end
|
435
435
|
it "should cast to an inherited model over a random one" do
|
436
436
|
ActiveFedora::ContentModel.should_receive(:known_models_for).with(subject).and_return([FooAdaptation, FooInherited])
|
@@ -19,10 +19,10 @@ describe ActiveFedora::ContentModel do
|
|
19
19
|
end
|
20
20
|
|
21
21
|
describe '.best_model_for' do
|
22
|
-
it 'should be
|
22
|
+
it 'should be nil if no relationships' do
|
23
23
|
mock_object = BaseModel.new
|
24
24
|
mock_object.should_receive(:relationships).with(:has_model).and_return([])
|
25
|
-
expect(ActiveFedora::ContentModel.best_model_for(mock_object)).to
|
25
|
+
expect(ActiveFedora::ContentModel.best_model_for(mock_object)).to be_nil
|
26
26
|
end
|
27
27
|
|
28
28
|
it 'should be based on inheritance hierarchy' do
|
@@ -407,15 +407,15 @@ describe ActiveFedora::OmDatastream do
|
|
407
407
|
@obj = MyObj.new
|
408
408
|
@obj.descMetadata.title = 'Foobar'
|
409
409
|
@obj.save
|
410
|
+
@obj.reload
|
410
411
|
end
|
411
412
|
after do
|
412
413
|
@obj.destroy
|
413
414
|
Object.send(:remove_const, :MyObj)
|
414
415
|
end
|
415
|
-
subject { @obj.reload.descMetadata }
|
416
416
|
it "should not load the descMetadata datastream when calling content_changed?" do
|
417
417
|
@obj.inner_object.repository.should_not_receive(:datastream_dissemination).with(hash_including(:dsid=>'descMetadata'))
|
418
|
-
|
418
|
+
@obj.descMetadata.should_not be_content_changed
|
419
419
|
end
|
420
420
|
end
|
421
421
|
end
|
@@ -18,13 +18,14 @@ describe ActiveFedora::RDFDatastream do
|
|
18
18
|
@obj = MyObj.new
|
19
19
|
@obj.descMetadata.title = 'Foobar'
|
20
20
|
@obj.save
|
21
|
+
@obj.reload
|
21
22
|
end
|
22
23
|
after do
|
23
24
|
@obj.destroy
|
24
25
|
Object.send(:remove_const, :MyDatastream)
|
25
26
|
Object.send(:remove_const, :MyObj)
|
26
27
|
end
|
27
|
-
subject { @obj.
|
28
|
+
subject { @obj.descMetadata }
|
28
29
|
it "should not load the descMetadata datastream when calling content_changed?" do
|
29
30
|
@obj.inner_object.repository.should_not_receive(:datastream_dissemination).with(hash_including(:dsid=>'descMetadata'))
|
30
31
|
subject.should_not be_content_changed
|
@@ -7,8 +7,6 @@ describe ActiveFedora::RDFDatastream do
|
|
7
7
|
property :relation, :predicate => RDF::DC[:relation]
|
8
8
|
end
|
9
9
|
|
10
|
-
class DummyAsset < ActiveFedora::Base; end;
|
11
|
-
|
12
10
|
class DummyResource < ActiveFedora::RDFDatastream
|
13
11
|
property :title, :predicate => RDF::DC[:title], :class_name => RDF::Literal do |index|
|
14
12
|
index.as :searchable, :displayable
|
@@ -16,7 +14,7 @@ describe ActiveFedora::RDFDatastream do
|
|
16
14
|
property :license, :predicate => RDF::DC[:license], :class_name => DummySubnode do |index|
|
17
15
|
index.as :searchable, :displayable
|
18
16
|
end
|
19
|
-
property :creator, :predicate => RDF::DC[:creator], :class_name => DummyAsset do |index|
|
17
|
+
property :creator, :predicate => RDF::DC[:creator], :class_name => "DummyAsset" do |index|
|
20
18
|
index.as :searchable
|
21
19
|
end
|
22
20
|
def serialization_format
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active-fedora
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 8.0
|
4
|
+
version: 8.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Zumwalt
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2015-
|
13
|
+
date: 2015-05-18 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rsolr
|
@@ -18,14 +18,14 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - "~>"
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 1.0.
|
21
|
+
version: 1.0.11
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
26
|
- - "~>"
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
version: 1.0.
|
28
|
+
version: 1.0.11
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: om
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|