active-fedora 8.0.1 → 8.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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