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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 871db23f4245cc098c16e0c574421725780ed9a5
4
- data.tar.gz: f36930059f1df74329c347afddfe0ba6dc99bf06
3
+ metadata.gz: f80f162fa9ed3128b27996f14c735381637053d0
4
+ data.tar.gz: 7fd1c593871f7b7e02176bd4498b65d5c58e5bc9
5
5
  SHA512:
6
- metadata.gz: 88fcb0f9e49bd039bb2d24bd3187a072e4344c1e63a6c205f75a3539dc2ce2e6bf5317025e2f96abe6fa15b57dc20ecce4a40989beec3fd53b46aed7d12637c1
7
- data.tar.gz: 81faaa5d12bf5e92118c503eb3d934db8351f33ae26b00ecc4647e90803fd68a1dc9c8f50a2f9a81ef69408af3a20641087e4422c613a158044febe7dc92db7e
6
+ metadata.gz: a35dc73b4243b5b5c3c3c647ae84102126e0e7781e6b65b88a140c65407055ba6e846a6281af56d8440f79fba19d1b78e04fbbe0dc079c13a714d042e3278840
7
+ data.tar.gz: 49a39ac794359b97de9d8165fed133211950b6f2e4ce2b8fdf84d9550dc0a659bad1c39cd09d7dc52cacc957e3019f96ef728614cd412325da6b687cfd95b3fa
@@ -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]
@@ -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.10"
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'
@@ -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 = obj.class unless obj.instance_of? ActiveFedora::Base
17
+ best_model_match = nil
18
18
 
19
19
  known_models_for(obj).each do |model_value|
20
- # If this is of type ActiveFedora::Base, then set to the first found :has_model.
21
- best_model_match ||= model_value
22
-
23
- # If there is an inheritance structure, use the most specific case.
24
- if best_model_match > model_value
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
 
@@ -119,22 +119,16 @@ module ActiveFedora
119
119
  klass.allocate.init_with_object(inner_object)
120
120
  end
121
121
 
122
- # Examines the :has_model assertions in the RELS-EXT.
123
- #
124
- # If the object is of type ActiveFedora::Base, then use the first :has_model
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
- self.find(pid_from_subject(uri))
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
- af_base = klass.allocate.init_with_object(inner)
174
- cast ? af_base.adapt_to_cmodel : af_base
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)
@@ -1,3 +1,3 @@
1
1
  module ActiveFedora
2
- VERSION = "8.0.1"
2
+ VERSION = "8.1.0"
3
3
  end
@@ -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
@@ -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 not cast to a random first cmodel if it has a specific cmodel already" do
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.should be_kind_of FooHistory
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 the input model if no relationships' do
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 eq BaseModel
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
- subject.should_not be_content_changed
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.reload.descMetadata }
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.1
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-03-27 00:00:00.000000000 Z
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.10
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.10
28
+ version: 1.0.11
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: om
31
31
  requirement: !ruby/object:Gem::Requirement