active-fedora 9.1.2 → 9.2.0.rc1
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 +4 -4
- data/.travis.yml +1 -1
- data/Gemfile +1 -0
- data/History.txt +90 -0
- data/active-fedora.gemspec +2 -2
- data/lib/active_fedora.rb +17 -3
- data/lib/active_fedora/associations.rb +77 -0
- data/lib/active_fedora/associations/association.rb +2 -2
- data/lib/active_fedora/associations/basic_contains_association.rb +52 -0
- data/lib/active_fedora/associations/builder/directly_contains.rb +23 -0
- data/lib/active_fedora/associations/builder/directly_contains_one.rb +44 -0
- data/lib/active_fedora/associations/builder/has_and_belongs_to_many.rb +2 -23
- data/lib/active_fedora/associations/builder/indirectly_contains.rb +26 -0
- data/lib/active_fedora/associations/builder/property.rb +10 -0
- data/lib/active_fedora/associations/collection_association.rb +42 -45
- data/lib/active_fedora/associations/collection_proxy.rb +6 -0
- data/lib/active_fedora/associations/contained_finder.rb +41 -0
- data/lib/active_fedora/associations/container_proxy.rb +9 -0
- data/lib/active_fedora/associations/contains_association.rb +20 -38
- data/lib/active_fedora/associations/delete_proxy.rb +28 -0
- data/lib/active_fedora/associations/directly_contains_association.rb +56 -0
- data/lib/active_fedora/associations/directly_contains_one_association.rb +113 -0
- data/lib/active_fedora/associations/has_and_belongs_to_many_association.rb +6 -14
- data/lib/active_fedora/associations/has_many_association.rb +0 -3
- data/lib/active_fedora/associations/id_composite.rb +30 -0
- data/lib/active_fedora/associations/indirectly_contains_association.rb +90 -0
- data/lib/active_fedora/associations/rdf.rb +8 -4
- data/lib/active_fedora/associations/record_composite.rb +39 -0
- data/lib/active_fedora/attached_files.rb +1 -1
- data/lib/active_fedora/attributes.rb +28 -10
- data/lib/active_fedora/attributes/active_triple_attribute.rb +17 -0
- data/lib/active_fedora/attributes/om_attribute.rb +29 -0
- data/lib/active_fedora/attributes/rdf_datastream_attribute.rb +47 -0
- data/lib/active_fedora/attributes/stream_attribute.rb +46 -0
- data/lib/active_fedora/autosave_association.rb +2 -2
- data/lib/active_fedora/base.rb +3 -0
- data/lib/active_fedora/containers/container.rb +38 -0
- data/lib/active_fedora/containers/direct_container.rb +5 -0
- data/lib/active_fedora/containers/indirect_container.rb +7 -0
- data/lib/active_fedora/core.rb +4 -48
- data/lib/active_fedora/delegated_attribute.rb +5 -98
- data/lib/active_fedora/fedora.rb +1 -1
- data/lib/active_fedora/fedora_attributes.rb +4 -26
- data/lib/active_fedora/file.rb +87 -159
- data/lib/active_fedora/file/attributes.rb +63 -0
- data/lib/active_fedora/file/streaming.rb +46 -0
- data/lib/active_fedora/file_relation.rb +7 -0
- data/lib/active_fedora/identifiable.rb +87 -0
- data/lib/active_fedora/inbound_relation_connection.rb +21 -0
- data/lib/active_fedora/indexers.rb +10 -0
- data/lib/active_fedora/indexers/global_indexer.rb +30 -0
- data/lib/active_fedora/indexers/null_indexer.rb +12 -0
- data/lib/active_fedora/indexing/map.rb +4 -5
- data/lib/active_fedora/indexing_service.rb +3 -22
- data/lib/active_fedora/loadable_from_json.rb +8 -0
- data/lib/active_fedora/pathing.rb +24 -0
- data/lib/active_fedora/persistence.rb +15 -8
- data/lib/active_fedora/rdf.rb +2 -0
- data/lib/active_fedora/rdf/fcrepo4.rb +1 -0
- data/lib/active_fedora/rdf/field_map.rb +90 -0
- data/lib/active_fedora/rdf/field_map_entry.rb +28 -0
- data/lib/active_fedora/rdf/indexing_service.rb +9 -23
- data/lib/active_fedora/rdf/rdf_datastream.rb +1 -2
- data/lib/active_fedora/reflection.rb +16 -15
- data/lib/active_fedora/relation/delegation.rb +15 -4
- data/lib/active_fedora/relation/finder_methods.rb +4 -4
- data/lib/active_fedora/schema.rb +26 -0
- data/lib/active_fedora/schema_indexing_strategy.rb +25 -0
- data/lib/active_fedora/simple_datastream.rb +2 -2
- data/lib/active_fedora/solr_query_builder.rb +3 -2
- data/lib/active_fedora/version.rb +1 -1
- data/lib/active_fedora/with_metadata.rb +1 -1
- data/spec/integration/associations/rdf_spec.rb +49 -0
- data/spec/integration/base_spec.rb +19 -0
- data/spec/integration/belongs_to_association_spec.rb +6 -6
- data/spec/integration/collection_association_spec.rb +4 -4
- data/spec/integration/complex_rdf_datastream_spec.rb +12 -12
- data/spec/integration/datastream_rdf_nested_attributes_spec.rb +1 -1
- data/spec/integration/direct_container_spec.rb +254 -0
- data/spec/integration/directly_contains_one_association_spec.rb +102 -0
- data/spec/integration/file_spec.rb +16 -5
- data/spec/integration/has_many_associations_spec.rb +93 -58
- data/spec/integration/indirect_container_spec.rb +251 -0
- data/spec/integration/rdf_nested_attributes_spec.rb +1 -1
- data/spec/integration/relation_spec.rb +43 -27
- data/spec/spec_helper.rb +1 -1
- data/spec/unit/attributes_spec.rb +6 -6
- data/spec/unit/collection_proxy_spec.rb +28 -0
- data/spec/unit/file_spec.rb +1 -1
- data/spec/unit/files_hash_spec.rb +4 -4
- data/spec/unit/has_and_belongs_to_many_association_spec.rb +11 -9
- data/spec/unit/indexers/global_indexer_spec.rb +41 -0
- data/spec/unit/indexing_service_spec.rb +0 -21
- data/spec/unit/loadable_from_json_spec.rb +31 -0
- data/spec/unit/pathing_spec.rb +37 -0
- data/spec/unit/rdf/indexing_service_spec.rb +3 -3
- data/spec/unit/rdf_resource_datastream_spec.rb +26 -7
- data/spec/unit/schema_indexing_strategy_spec.rb +68 -0
- data/spec/unit/solr_query_builder_spec.rb +1 -1
- data/spec/unit/solr_service_spec.rb +1 -1
- metadata +49 -8
@@ -7,7 +7,7 @@ describe "Nesting attribute behavior of RDF resources" do
|
|
7
7
|
end
|
8
8
|
|
9
9
|
class ComplexResource < ActiveFedora::Base
|
10
|
-
property :topic, predicate: DummyMADS.Topic, class_name: "Topic"
|
10
|
+
property :topic, predicate: DummyMADS.Topic, class_name: "ComplexResource::Topic"
|
11
11
|
|
12
12
|
class Topic < ActiveTriples::Resource
|
13
13
|
property :subject, predicate: ::RDF::DC.subject
|
@@ -3,10 +3,13 @@ require 'spec_helper'
|
|
3
3
|
describe ActiveFedora::Base do
|
4
4
|
before :all do
|
5
5
|
class Library < ActiveFedora::Base
|
6
|
-
has_many :books
|
6
|
+
has_many :books
|
7
|
+
end
|
8
|
+
class Book < ActiveFedora::Base
|
9
|
+
belongs_to :library, predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isPartOf
|
7
10
|
end
|
8
|
-
class Book < ActiveFedora::Base; end
|
9
11
|
end
|
12
|
+
|
10
13
|
after :all do
|
11
14
|
Object.send(:remove_const, :Library)
|
12
15
|
Object.send(:remove_const, :Book)
|
@@ -18,40 +21,53 @@ describe ActiveFedora::Base do
|
|
18
21
|
expect(subject.class).to be ActiveFedora::Relation
|
19
22
|
end
|
20
23
|
|
21
|
-
|
22
|
-
Library.create
|
23
|
-
@library = Library.create
|
24
|
-
end
|
25
|
-
|
26
|
-
let(:library1) { @library }
|
27
|
-
|
28
|
-
describe "is cached" do
|
24
|
+
context "when some records exist" do
|
29
25
|
before do
|
30
|
-
|
26
|
+
Library.create
|
31
27
|
end
|
32
28
|
|
33
|
-
|
34
|
-
|
29
|
+
let!(:library1) { Library.create }
|
30
|
+
|
31
|
+
describe "is cached" do
|
32
|
+
before do
|
33
|
+
subject.to_a # trigger initial load
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should be loaded" do
|
37
|
+
expect(subject).to be_loaded
|
38
|
+
end
|
39
|
+
it "shouldn't reload" do
|
40
|
+
expect_any_instance_of(ActiveFedora::Relation).to_not receive :find_each
|
41
|
+
subject[0]
|
42
|
+
end
|
35
43
|
end
|
36
|
-
|
37
|
-
|
38
|
-
|
44
|
+
|
45
|
+
describe "#find" do
|
46
|
+
it "should find one of them" do
|
47
|
+
expect(subject.find(library1.id)).to eq library1
|
48
|
+
end
|
49
|
+
it "should find with a block" do
|
50
|
+
expect(subject.find { |l| l.id == library1.id}).to eq library1
|
51
|
+
end
|
39
52
|
end
|
40
|
-
end
|
41
53
|
|
42
|
-
|
43
|
-
|
44
|
-
|
54
|
+
describe "#select" do
|
55
|
+
it "should find with a block" do
|
56
|
+
expect(subject.select { |l| l.id == library1.id}).to eq [library1]
|
57
|
+
end
|
45
58
|
end
|
46
|
-
|
47
|
-
|
59
|
+
|
60
|
+
context "unpermitted methods" do
|
61
|
+
it "excludes them" do
|
62
|
+
expect{ subject.sort! }.to raise_error NoMethodError
|
63
|
+
end
|
48
64
|
end
|
49
|
-
end
|
50
65
|
|
51
|
-
|
52
|
-
|
53
|
-
|
66
|
+
context "when limit is applied" do
|
67
|
+
subject { Library.create books: [Book.create, Book.create] }
|
68
|
+
it "limits the number of books" do
|
69
|
+
expect(subject.books.limit(1).size).to eq 1
|
70
|
+
end
|
54
71
|
end
|
55
72
|
end
|
56
73
|
end
|
57
|
-
|
data/spec/spec_helper.rb
CHANGED
@@ -17,7 +17,7 @@ require 'rspec'
|
|
17
17
|
require 'rspec/its'
|
18
18
|
require 'equivalent-xml/rspec_matchers'
|
19
19
|
require 'logger'
|
20
|
-
require '
|
20
|
+
require 'pry' unless ENV['TRAVIS']
|
21
21
|
|
22
22
|
ActiveFedora::Base.logger = Logger.new(STDERR)
|
23
23
|
ActiveFedora::Base.logger.level = Logger::WARN
|
@@ -407,12 +407,14 @@ describe ActiveFedora::Base do
|
|
407
407
|
|
408
408
|
subject { BarHistory4.new }
|
409
409
|
|
410
|
-
|
411
|
-
|
410
|
+
let(:error_message) { "Undefined file: `rdfish' in property description" }
|
411
|
+
|
412
|
+
it "raises an error on get" do
|
413
|
+
expect { subject.description }.to raise_error(ArgumentError, error_message)
|
412
414
|
end
|
413
415
|
|
414
|
-
it "
|
415
|
-
expect { subject.description = ['Neat'] }.to raise_error(ArgumentError,
|
416
|
+
it "raises an error on set" do
|
417
|
+
expect { subject.description = ['Neat'] }.to raise_error(ArgumentError, error_message)
|
416
418
|
end
|
417
419
|
|
418
420
|
describe ".datastream_class_for_name" do
|
@@ -520,5 +522,3 @@ describe ActiveFedora::Base do
|
|
520
522
|
end
|
521
523
|
end
|
522
524
|
end
|
523
|
-
|
524
|
-
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ActiveFedora::Associations::CollectionProxy do
|
4
|
+
|
5
|
+
before do
|
6
|
+
class Book < ActiveFedora::Base
|
7
|
+
end
|
8
|
+
class Page < ActiveFedora::Base
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
after do
|
13
|
+
Object.send(:remove_const, :Page)
|
14
|
+
Object.send(:remove_const, :Book)
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "#spawn" do
|
18
|
+
|
19
|
+
let(:reflection) { Book.create_reflection(:has_many, :pages, { predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isMemberOfCollection }, Book) }
|
20
|
+
let(:association) { ActiveFedora::Associations::HasManyAssociation.new(Book.new, reflection ) }
|
21
|
+
let(:proxy) { described_class.new(association) }
|
22
|
+
|
23
|
+
subject { proxy.spawn }
|
24
|
+
it { is_expected.to be_instance_of ActiveFedora::Relation }
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
data/spec/unit/file_spec.rb
CHANGED
@@ -228,7 +228,7 @@ describe ActiveFedora::Datastream do
|
|
228
228
|
context "when there is nothing to save" do
|
229
229
|
it "should not write" do
|
230
230
|
expect(file.ldp_source).not_to receive(:create)
|
231
|
-
expect(file.save).to be
|
231
|
+
expect(file.save).to be false
|
232
232
|
end
|
233
233
|
end
|
234
234
|
end
|
@@ -2,18 +2,18 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe ActiveFedora::FilesHash do
|
4
4
|
before do
|
5
|
-
class
|
6
|
-
allow(
|
5
|
+
class FilesContainer; end
|
6
|
+
allow(FilesContainer).to receive(:child_resource_reflections).and_return(file: reflection)
|
7
7
|
allow(container).to receive(:association).with(:file).and_return(association)
|
8
8
|
allow(container).to receive(:undeclared_files).and_return([])
|
9
9
|
end
|
10
10
|
|
11
|
-
after { Object.send(:remove_const, :
|
11
|
+
after { Object.send(:remove_const, :FilesContainer) }
|
12
12
|
|
13
13
|
let(:reflection) { double('reflection') }
|
14
14
|
let(:association) { double('association', reader: object) }
|
15
15
|
let(:object) { double('object') }
|
16
|
-
let(:container) {
|
16
|
+
let(:container) { FilesContainer.new }
|
17
17
|
|
18
18
|
subject { ActiveFedora::FilesHash.new(container) }
|
19
19
|
|
@@ -42,17 +42,19 @@ describe ActiveFedora::Associations::HasAndBelongsToManyAssociation do
|
|
42
42
|
|
43
43
|
describe "finding member" do
|
44
44
|
let(:ids) { (0..15).map(&:to_s) }
|
45
|
-
let(:
|
46
|
-
let(:
|
47
|
-
|
48
|
-
it "should call solr query multiple times" do
|
49
|
-
reflection = Book.create_reflection(:has_and_belongs_to_many, :pages, { predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isMemberOfCollection, solr_page_size: 10}, Book)
|
45
|
+
let(:reflection) { Book.create_reflection(:has_and_belongs_to_many, :pages, { predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isMemberOfCollection }, Book) }
|
46
|
+
let(:association) { ActiveFedora::Associations::HasAndBelongsToManyAssociation.new(subject, reflection) }
|
47
|
+
it "calls ActiveFedora::Base.find" do
|
50
48
|
expect(subject).to receive(:[]).with('page_ids').and_return(ids)
|
51
|
-
expect(ActiveFedora::
|
52
|
-
|
49
|
+
expect(ActiveFedora::Base).to receive(:find).with(ids)
|
50
|
+
association.send(:find_target)
|
51
|
+
end
|
52
|
+
end
|
53
53
|
|
54
|
-
|
55
|
-
|
54
|
+
describe "solr page size option" do
|
55
|
+
it "sends a deprecation warning" do
|
56
|
+
expect(Deprecation).to receive(:warn)
|
57
|
+
Book.has_and_belongs_to_many(:pages, predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isMemberOfCollection, solr_page_size: 123)
|
56
58
|
end
|
57
59
|
end
|
58
60
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe ActiveFedora::Indexers::GlobalIndexer do
|
4
|
+
subject { described_class.new(index_types) }
|
5
|
+
let(:index_types) {}
|
6
|
+
|
7
|
+
describe "#new" do
|
8
|
+
# The global indexer acts as both an indexer factory and an indexer, since
|
9
|
+
# the property doesn't matter.
|
10
|
+
it "should return itself" do
|
11
|
+
expect(subject.new("bla")).to eq subject
|
12
|
+
end
|
13
|
+
end
|
14
|
+
describe "#index" do
|
15
|
+
let(:index_obj) { instance_double(ActiveFedora::Indexing::Map::IndexObject, as: nil) }
|
16
|
+
context "with one index type" do
|
17
|
+
let(:index_types) { :symbol }
|
18
|
+
it "should pass that to index_obj" do
|
19
|
+
subject.index(index_obj)
|
20
|
+
|
21
|
+
expect(index_obj).to have_received(:as).with(:symbol)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
context "with multiple index types" do
|
25
|
+
let(:index_types) { [:symbol, :stored_searchable] }
|
26
|
+
it "should pass that to index_obj" do
|
27
|
+
subject.index(index_obj)
|
28
|
+
|
29
|
+
expect(index_obj).to have_received(:as).with(:symbol, :stored_searchable)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
context "with no index types" do
|
33
|
+
subject { described_class.new }
|
34
|
+
it "should not pass anything to index_obj" do
|
35
|
+
subject.index(index_obj)
|
36
|
+
|
37
|
+
expect(index_obj).not_to have_received(:as)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -4,27 +4,6 @@ describe ActiveFedora::IndexingService do
|
|
4
4
|
let(:indexer) { described_class.new(object) }
|
5
5
|
let(:object) { ActiveFedora::Base.new }
|
6
6
|
|
7
|
-
describe "#solrize_relationships" do
|
8
|
-
subject { indexer.send(:solrize_relationships) }
|
9
|
-
let(:person_reflection) { double('person', foreign_key: 'person_id', kind_of?: true, solr_key: member_of) }
|
10
|
-
let(:location_reflection) { double('location', foreign_key: 'location_id', kind_of?: true, solr_key: part_of) }
|
11
|
-
let(:reflections) { { 'person' => person_reflection, 'location' => location_reflection } }
|
12
|
-
|
13
|
-
let(:member_of) { ActiveFedora::SolrQueryBuilder.solr_name("info:fedora/fedora-system:def/relations-external#isMemberOf", :symbol) }
|
14
|
-
let(:part_of) { ActiveFedora::SolrQueryBuilder.solr_name("info:fedora/fedora-system:def/relations-external#isPartOf", :symbol) }
|
15
|
-
|
16
|
-
before do
|
17
|
-
expect(object).to receive(:[]).with('person_id').and_return('info:fedora/demo:10')
|
18
|
-
expect(object).to receive(:[]).with('location_id').and_return('info:fedora/demo:11')
|
19
|
-
expect(object.class).to receive(:reflections).and_return(reflections)
|
20
|
-
end
|
21
|
-
|
22
|
-
it "should serialize the relationships into a Hash" do
|
23
|
-
expect(subject[member_of]).to eq "info:fedora/demo:10"
|
24
|
-
expect(subject[part_of]).to eq "info:fedora/demo:11"
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
7
|
describe "#generate_solr_document" do
|
29
8
|
context "when no block is passed" do
|
30
9
|
subject { indexer.generate_solr_document }
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ActiveFedora::LoadableFromJson::SolrBackedResource do
|
4
|
+
before do
|
5
|
+
class Foo < ActiveFedora::Base
|
6
|
+
belongs_to :bar, predicate: ::RDF::DC.extent
|
7
|
+
end
|
8
|
+
|
9
|
+
class Bar < ActiveFedora::Base
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
after do
|
14
|
+
Object.send(:remove_const, :Foo)
|
15
|
+
Object.send(:remove_const, :Bar)
|
16
|
+
end
|
17
|
+
|
18
|
+
let(:resource) { described_class.new(Foo) }
|
19
|
+
|
20
|
+
before do
|
21
|
+
resource.insert [nil, ::RDF::DC.extent, RDF::URI('http://example.org/123')]
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "#query" do
|
25
|
+
subject { resource.query(predicate: ::RDF::DC.extent) }
|
26
|
+
|
27
|
+
it "is enumerable" do
|
28
|
+
expect(subject.map { |g| g.object }).to eq [RDF::URI('http://example.org/123')]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ActiveFedora::Base do
|
4
|
+
describe ".uri_prefix" do
|
5
|
+
let(:path) { "foo" }
|
6
|
+
|
7
|
+
before do
|
8
|
+
class FooHistory < ActiveFedora::Base
|
9
|
+
def uri_prefix
|
10
|
+
"foo"
|
11
|
+
end
|
12
|
+
property :title, predicate: ::RDF::DC.title
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
after do
|
17
|
+
Object.send(:remove_const, :FooHistory)
|
18
|
+
end
|
19
|
+
|
20
|
+
subject { FooHistory.new(title: ["Root foo"]) }
|
21
|
+
|
22
|
+
it { is_expected.to have_uri_prefix }
|
23
|
+
|
24
|
+
it "uses the root path in the uri" do
|
25
|
+
expect(subject.uri_prefix).to eql path
|
26
|
+
end
|
27
|
+
|
28
|
+
context "when the object is saved" do
|
29
|
+
before { subject.save }
|
30
|
+
|
31
|
+
it "should persist the path in the uri" do
|
32
|
+
expect(subject.uri.to_s).to include(path)
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -78,12 +78,12 @@ describe ActiveFedora::RDF::IndexingService do
|
|
78
78
|
end
|
79
79
|
|
80
80
|
it "should return the right values" do
|
81
|
-
expect(fields[
|
82
|
-
expect(fields[
|
81
|
+
expect(fields["related_url"].values).to eq ["http://example.org/blogtastic/"]
|
82
|
+
expect(fields["based_near"].values).to eq ["Tacoma, WA", "Renton, WA"]
|
83
83
|
end
|
84
84
|
|
85
85
|
it "should return the right type information" do
|
86
|
-
expect(fields[
|
86
|
+
expect(fields["created"].type).to eq :date
|
87
87
|
end
|
88
88
|
end
|
89
89
|
|
@@ -42,10 +42,8 @@ describe ActiveFedora::RDFDatastream do
|
|
42
42
|
subject { DummyAsset.new }
|
43
43
|
|
44
44
|
describe "#to_solr" do
|
45
|
-
|
46
|
-
|
47
|
-
subject.descMetadata.license = DummySubnode.new('http://example.org/blah')
|
48
|
-
end
|
45
|
+
|
46
|
+
before { subject.descMetadata.title = "bla" }
|
49
47
|
|
50
48
|
it "should not be blank" do
|
51
49
|
expect(subject.to_solr).not_to be_blank
|
@@ -55,9 +53,31 @@ describe ActiveFedora::RDFDatastream do
|
|
55
53
|
expect(subject.to_solr["desc_metadata__title_teim"]).to eq ["bla"]
|
56
54
|
end
|
57
55
|
|
58
|
-
|
59
|
-
|
56
|
+
context "with ActiveFedora::Base resources" do
|
57
|
+
|
58
|
+
let(:dummy_asset) { DummyAsset.new }
|
59
|
+
|
60
|
+
before do
|
61
|
+
allow(dummy_asset).to receive(:uri).and_return("http://foo")
|
62
|
+
subject.descMetadata.creator = dummy_asset
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should solrize objects" do
|
66
|
+
expect(subject.to_solr["desc_metadata__creator_teim"]).to eq ["http://foo"]
|
67
|
+
end
|
68
|
+
|
60
69
|
end
|
70
|
+
|
71
|
+
context "with ActiveTriples resources" do
|
72
|
+
|
73
|
+
before { subject.descMetadata.license = DummySubnode.new('http://example.org/blah') }
|
74
|
+
|
75
|
+
it "should solrize uris" do
|
76
|
+
expect(subject.to_solr["desc_metadata__license_teim"]).to eq ['http://example.org/blah']
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
61
81
|
end
|
62
82
|
|
63
83
|
describe "delegation" do
|
@@ -148,7 +168,6 @@ describe ActiveFedora::RDFDatastream do
|
|
148
168
|
end
|
149
169
|
context "persisted to repository" do
|
150
170
|
before do
|
151
|
-
DummySubnode.configure :repository => :default
|
152
171
|
allow_any_instance_of(DummySubnode).to receive(:repository).and_return(RDF::Repository.new)
|
153
172
|
dummy = DummySubnode.new(RDF::URI('http://example.org/dummy/blah'))
|
154
173
|
dummy.title = 'subbla'
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe ActiveFedora::SchemaIndexingStrategy do
|
4
|
+
subject { described_class.new(property_indexer_factory) }
|
5
|
+
|
6
|
+
describe "#apply" do
|
7
|
+
let(:property) do
|
8
|
+
p = object_double(ActiveTriples::Property.new(:name => nil))
|
9
|
+
allow(p).to receive(:to_h).and_return(options)
|
10
|
+
allow(p).to receive(:name).and_return(name)
|
11
|
+
p
|
12
|
+
end
|
13
|
+
let(:name) { "Name" }
|
14
|
+
let(:options) do
|
15
|
+
{
|
16
|
+
:class_name => "Test"
|
17
|
+
}
|
18
|
+
end
|
19
|
+
let(:object) do
|
20
|
+
o = object_double(ActiveFedora::Base)
|
21
|
+
allow(o).to receive(:property).and_yield(index_configuration)
|
22
|
+
o
|
23
|
+
end
|
24
|
+
let(:index_configuration) do
|
25
|
+
d = double("index configuration")
|
26
|
+
allow(d).to receive(:as)
|
27
|
+
d
|
28
|
+
end
|
29
|
+
let(:property_indexer) do
|
30
|
+
p = double("property_indexer")
|
31
|
+
allow(p).to receive(:index).with(anything) do |index|
|
32
|
+
index.as(*Array.wrap(index_types))
|
33
|
+
end
|
34
|
+
p
|
35
|
+
end
|
36
|
+
let(:property_indexer_factory) do
|
37
|
+
p = double("property indexer factory")
|
38
|
+
allow(p).to receive(:new).with(anything).and_return(property_indexer)
|
39
|
+
p
|
40
|
+
end
|
41
|
+
let(:index_types) {}
|
42
|
+
context "with no index types" do
|
43
|
+
subject { described_class.new }
|
44
|
+
it "should not try to index it" do
|
45
|
+
subject.apply(object, property)
|
46
|
+
|
47
|
+
expect(object).to have_received(:property).with(property.name, property.to_h)
|
48
|
+
expect(index_configuration).not_to have_received(:as)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
context "with one index type" do
|
52
|
+
let(:index_types) { :symbol }
|
53
|
+
it "should apply that one" do
|
54
|
+
subject.apply(object, property)
|
55
|
+
|
56
|
+
expect(index_configuration).to have_received(:as).with(:symbol)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
context "with multiple index types" do
|
60
|
+
let(:index_types) { [:symbol, :stored_searchable] }
|
61
|
+
it "should apply all of them" do
|
62
|
+
subject.apply(object, property)
|
63
|
+
|
64
|
+
expect(index_configuration).to have_received(:as).with(:symbol, :stored_searchable)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|