active-fedora 6.8.0 → 7.0.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +15 -5
- data/CONTRIBUTING.md +2 -0
- data/Gemfile +0 -2
- data/History.txt +2 -32
- data/README.md +143 -0
- data/Rakefile +5 -7
- data/active-fedora.gemspec +9 -9
- data/gemfiles/rails3.gemfile +11 -0
- data/gemfiles/rails4.gemfile +10 -0
- data/lib/active_fedora.rb +31 -4
- data/lib/active_fedora/association_relation.rb +18 -0
- data/lib/active_fedora/associations.rb +38 -171
- data/lib/active_fedora/associations/association.rb +163 -0
- data/lib/active_fedora/associations/association_scope.rb +39 -0
- data/lib/active_fedora/associations/belongs_to_association.rb +47 -25
- data/lib/active_fedora/associations/builder/association.rb +55 -0
- data/lib/active_fedora/associations/builder/belongs_to.rb +100 -0
- data/lib/active_fedora/associations/builder/collection_association.rb +56 -0
- data/lib/active_fedora/associations/builder/has_and_belongs_to_many.rb +30 -0
- data/lib/active_fedora/associations/builder/has_many.rb +63 -0
- data/lib/active_fedora/associations/builder/singular_association.rb +32 -0
- data/lib/active_fedora/associations/{association_collection.rb → collection_association.rb} +203 -53
- data/lib/active_fedora/associations/collection_proxy.rb +862 -0
- data/lib/active_fedora/associations/has_and_belongs_to_many_association.rb +35 -25
- data/lib/active_fedora/associations/has_many_association.rb +36 -11
- data/lib/active_fedora/associations/singular_association.rb +62 -0
- data/lib/active_fedora/attributes.rb +43 -139
- data/lib/active_fedora/autosave_association.rb +317 -0
- data/lib/active_fedora/base.rb +10 -327
- data/lib/active_fedora/callbacks.rb +1 -3
- data/lib/active_fedora/content_model.rb +16 -0
- data/lib/active_fedora/core.rb +151 -0
- data/lib/active_fedora/datastream_attribute.rb +76 -0
- data/lib/active_fedora/datastream_hash.rb +8 -13
- data/lib/active_fedora/datastreams.rb +39 -26
- data/lib/active_fedora/digital_object.rb +2 -2
- data/lib/active_fedora/fedora_attributes.rb +45 -0
- data/lib/active_fedora/fixture_loader.rb +1 -1
- data/lib/active_fedora/indexing.rb +6 -1
- data/lib/active_fedora/model.rb +0 -17
- data/lib/active_fedora/nested_attributes.rb +2 -2
- data/lib/active_fedora/null_relation.rb +7 -0
- data/lib/active_fedora/om_datastream.rb +3 -4
- data/lib/active_fedora/persistence.rb +41 -29
- data/lib/active_fedora/querying.rb +2 -163
- data/lib/active_fedora/rdf.rb +1 -0
- data/lib/active_fedora/rdf/indexing.rb +67 -0
- data/lib/active_fedora/rdf_datastream.rb +2 -50
- data/lib/active_fedora/rdf_node.rb +12 -7
- data/lib/active_fedora/rdf_node/term_proxy.rb +30 -21
- data/lib/active_fedora/rdfxml_rdf_datastream.rb +1 -1
- data/lib/active_fedora/reflection.rb +163 -20
- data/lib/active_fedora/relation.rb +33 -130
- data/lib/active_fedora/relation/calculations.rb +19 -0
- data/lib/active_fedora/relation/delegation.rb +22 -0
- data/lib/active_fedora/relation/finder_methods.rb +247 -0
- data/lib/active_fedora/relation/merger.rb +22 -0
- data/lib/active_fedora/relation/query_methods.rb +58 -0
- data/lib/active_fedora/relation/spawn_methods.rb +46 -0
- data/lib/active_fedora/relationship_graph.rb +0 -2
- data/lib/active_fedora/rels_ext_datastream.rb +1 -4
- data/lib/active_fedora/rubydora_connection.rb +1 -1
- data/lib/active_fedora/scoping.rb +20 -0
- data/lib/active_fedora/scoping/default.rb +38 -0
- data/lib/active_fedora/scoping/named.rb +32 -0
- data/lib/active_fedora/semantic_node.rb +54 -106
- data/lib/active_fedora/serialization.rb +19 -0
- data/lib/active_fedora/sharding.rb +58 -0
- data/lib/active_fedora/solr_digital_object.rb +15 -5
- data/lib/active_fedora/solr_instance_loader.rb +1 -1
- data/lib/active_fedora/solr_service.rb +1 -1
- data/lib/active_fedora/unsaved_digital_object.rb +6 -4
- data/lib/active_fedora/version.rb +1 -1
- data/lib/tasks/active_fedora.rake +3 -0
- data/lib/tasks/active_fedora_dev.rake +6 -5
- data/spec/config_helper.rb +14 -14
- data/spec/integration/associations_spec.rb +168 -455
- data/spec/integration/attributes_spec.rb +12 -11
- data/spec/integration/auditable_spec.rb +11 -11
- data/spec/integration/autosave_association_spec.rb +25 -0
- data/spec/integration/base_spec.rb +163 -163
- data/spec/integration/belongs_to_association_spec.rb +166 -0
- data/spec/integration/bug_spec.rb +7 -7
- data/spec/integration/collection_association_spec.rb +58 -0
- data/spec/integration/complex_rdf_datastream_spec.rb +88 -88
- data/spec/integration/datastream_collections_spec.rb +69 -69
- data/spec/integration/datastream_spec.rb +43 -43
- data/spec/integration/datastreams_spec.rb +63 -63
- data/spec/integration/delete_all_spec.rb +46 -39
- data/spec/integration/fedora_solr_sync_spec.rb +5 -5
- data/spec/integration/field_to_solr_name_spec.rb +34 -0
- data/spec/integration/full_featured_model_spec.rb +100 -101
- data/spec/integration/has_and_belongs_to_many_associations_spec.rb +341 -0
- data/spec/integration/has_many_associations_spec.rb +172 -24
- data/spec/integration/json_serialization_spec.rb +31 -0
- data/spec/integration/load_from_solr_spec.rb +48 -0
- data/spec/integration/model_spec.rb +35 -40
- data/spec/integration/nested_attribute_spec.rb +42 -43
- data/spec/integration/ntriples_datastream_spec.rb +131 -113
- data/spec/integration/om_datastream_spec.rb +67 -67
- data/spec/integration/persistence_spec.rb +7 -7
- data/spec/integration/rdf_nested_attributes_spec.rb +56 -56
- data/spec/integration/relation_delegation_spec.rb +26 -25
- data/spec/integration/relation_spec.rb +42 -0
- data/spec/integration/rels_ext_datastream_spec.rb +20 -20
- data/spec/integration/scoped_query_spec.rb +61 -51
- data/spec/integration/solr_instance_loader_spec.rb +5 -5
- data/spec/integration/solr_service_spec.rb +46 -46
- data/spec/samples/hydra-mods_article_datastream.rb +334 -334
- data/spec/samples/hydra-rights_metadata_datastream.rb +57 -57
- data/spec/samples/marpa-dc_datastream.rb +17 -17
- data/spec/samples/models/audio_record.rb +16 -16
- data/spec/samples/models/image.rb +2 -2
- data/spec/samples/models/mods_article.rb +5 -5
- data/spec/samples/models/oral_history.rb +18 -18
- data/spec/samples/models/seminar.rb +24 -24
- data/spec/samples/models/seminar_audio_file.rb +17 -17
- data/spec/samples/oral_history_sample_model.rb +21 -21
- data/spec/samples/special_thing.rb +14 -14
- data/spec/spec_helper.rb +11 -7
- data/spec/support/an_active_model.rb +2 -8
- data/spec/support/freeze_mocks.rb +12 -0
- data/spec/support/mock_fedora.rb +17 -16
- data/spec/unit/active_fedora_spec.rb +58 -60
- data/spec/unit/attributes_spec.rb +314 -0
- data/spec/unit/base_active_model_spec.rb +28 -27
- data/spec/unit/base_cma_spec.rb +5 -5
- data/spec/unit/base_datastream_management_spec.rb +27 -27
- data/spec/unit/base_extra_spec.rb +76 -48
- data/spec/unit/base_spec.rb +277 -348
- data/spec/unit/callback_spec.rb +18 -19
- data/spec/unit/code_configurator_spec.rb +17 -17
- data/spec/unit/config_spec.rb +8 -16
- data/spec/unit/content_model_spec.rb +79 -60
- data/spec/unit/datastream_collections_spec.rb +229 -229
- data/spec/unit/datastream_spec.rb +51 -63
- data/spec/unit/datastreams_spec.rb +87 -87
- data/spec/unit/file_configurator_spec.rb +217 -217
- data/spec/unit/has_and_belongs_to_many_collection_spec.rb +44 -25
- data/spec/unit/has_many_collection_spec.rb +26 -8
- data/spec/unit/inheritance_spec.rb +13 -12
- data/spec/unit/model_spec.rb +39 -45
- data/spec/unit/nom_datastream_spec.rb +15 -15
- data/spec/unit/ntriples_datastream_spec.rb +123 -118
- data/spec/unit/om_datastream_spec.rb +227 -233
- data/spec/unit/persistence_spec.rb +34 -15
- data/spec/unit/predicates_spec.rb +73 -73
- data/spec/unit/property_spec.rb +17 -9
- data/spec/unit/qualified_dublin_core_datastream_spec.rb +33 -33
- data/spec/unit/query_spec.rb +222 -198
- data/spec/unit/rdf_datastream_spec.rb +21 -28
- data/spec/unit/rdf_list_nested_attributes_spec.rb +34 -34
- data/spec/unit/rdf_list_spec.rb +65 -64
- data/spec/unit/rdf_node_spec.rb +7 -7
- data/spec/unit/rdf_xml_writer_spec.rb +10 -10
- data/spec/unit/rdfxml_rdf_datastream_spec.rb +27 -27
- data/spec/unit/relationship_graph_spec.rb +51 -51
- data/spec/unit/rels_ext_datastream_spec.rb +68 -74
- data/spec/unit/rspec_matchers/belong_to_associated_active_fedora_object_matcher_spec.rb +15 -15
- data/spec/unit/rspec_matchers/have_many_associated_active_fedora_objects_matcher_spec.rb +15 -15
- data/spec/unit/rspec_matchers/have_predicate_matcher_spec.rb +15 -15
- data/spec/unit/rspec_matchers/match_fedora_datastream_matcher_spec.rb +12 -12
- data/spec/unit/rubydora_connection_spec.rb +5 -5
- data/spec/unit/semantic_node_spec.rb +48 -107
- data/spec/unit/serializers_spec.rb +4 -4
- data/spec/unit/service_definitions_spec.rb +26 -26
- data/spec/unit/simple_datastream_spec.rb +17 -17
- data/spec/unit/solr_config_options_spec.rb +29 -28
- data/spec/unit/solr_digital_object_spec.rb +17 -25
- data/spec/unit/solr_service_spec.rb +95 -82
- data/spec/unit/unsaved_digital_object_spec.rb +24 -23
- data/spec/unit/validations_spec.rb +21 -21
- metadata +110 -159
- data/.rspec +0 -1
- data/.rubocop.yml +0 -1
- data/.rubocop_todo.yml +0 -938
- data/CONSOLE_GETTING_STARTED.textile +0 -1
- data/NOKOGIRI_DATASTREAMS.textile +0 -1
- data/README.textile +0 -116
- data/lib/active_fedora/associations/association_proxy.rb +0 -178
- data/lib/active_fedora/delegating.rb +0 -72
- data/lib/active_fedora/nokogiri_datastream.rb +0 -11
- data/spec/integration/delegating_spec.rb +0 -59
- data/spec/rails3_test_app/.gitignore +0 -4
- data/spec/rails3_test_app/.rspec +0 -1
- data/spec/rails3_test_app/Gemfile +0 -40
- data/spec/rails3_test_app/Rakefile +0 -7
- data/spec/rails3_test_app/app/controllers/application_controller.rb +0 -3
- data/spec/rails3_test_app/app/helpers/application_helper.rb +0 -2
- data/spec/rails3_test_app/app/views/layouts/application.html.erb +0 -14
- data/spec/rails3_test_app/config.ru +0 -4
- data/spec/rails3_test_app/config/application.rb +0 -42
- data/spec/rails3_test_app/config/boot.rb +0 -6
- data/spec/rails3_test_app/config/database.yml +0 -22
- data/spec/rails3_test_app/config/environment.rb +0 -5
- data/spec/rails3_test_app/config/environments/development.rb +0 -25
- data/spec/rails3_test_app/config/environments/production.rb +0 -49
- data/spec/rails3_test_app/config/environments/test.rb +0 -35
- data/spec/rails3_test_app/config/initializers/backtrace_silencers.rb +0 -7
- data/spec/rails3_test_app/config/initializers/inflections.rb +0 -10
- data/spec/rails3_test_app/config/initializers/mime_types.rb +0 -5
- data/spec/rails3_test_app/config/initializers/secret_token.rb +0 -7
- data/spec/rails3_test_app/config/initializers/session_store.rb +0 -8
- data/spec/rails3_test_app/config/locales/en.yml +0 -5
- data/spec/rails3_test_app/config/routes.rb +0 -58
- data/spec/rails3_test_app/db/seeds.rb +0 -7
- data/spec/rails3_test_app/run_tests +0 -3
- data/spec/rails3_test_app/script/rails +0 -6
- data/spec/rails3_test_app/spec/spec_helper.rb +0 -27
- data/spec/rails3_test_app/spec/unit/rails_3_init.rb +0 -15
- data/spec/unit/association_proxy_spec.rb +0 -12
- data/spec/unit/base_delegate_spec.rb +0 -197
- data/spec/unit/base_delegate_to_spec.rb +0 -73
@@ -1,45 +1,64 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe ActiveFedora::Associations::HasAndBelongsToManyAssociation do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
4
|
+
before do
|
5
|
+
class Book < ActiveFedora::Base
|
6
|
+
end
|
7
|
+
class Page < ActiveFedora::Base
|
8
|
+
end
|
9
|
+
end
|
10
10
|
|
11
|
-
|
11
|
+
after do
|
12
|
+
Object.send(:remove_const, :Book)
|
13
|
+
Object.send(:remove_const, :Page)
|
14
|
+
end
|
12
15
|
|
16
|
+
it "should call add_relationship" do
|
17
|
+
subject = Book.new(pid: 'subject:a')
|
18
|
+
subject.stub(:new_record? => false, save: true)
|
19
|
+
predicate = Book.create_reflection(:has_and_belongs_to_many, 'pages', {:property=>'predicate'}, nil)
|
20
|
+
ActiveFedora::SolrService.stub(:query).and_return([])
|
21
|
+
ac = ActiveFedora::Associations::HasAndBelongsToManyAssociation.new(subject, predicate)
|
22
|
+
ac.should_receive(:callback).twice
|
23
|
+
object = Page.new(:pid => 'object:b')
|
24
|
+
object.stub(:new_record? => false, save: true)
|
25
|
+
|
26
|
+
subject.should_receive(:add_relationship).with('predicate', object)
|
27
|
+
|
13
28
|
ac << object
|
14
29
|
|
15
30
|
end
|
16
31
|
|
17
|
-
it
|
18
|
-
subject =
|
19
|
-
|
20
|
-
|
32
|
+
it "should call add_relationship on subject and object when inverse_of given" do
|
33
|
+
subject = Book.new(pid: 'subject:a')
|
34
|
+
subject.stub(:new_record? => false, save: true)
|
35
|
+
predicate = Book.create_reflection(:has_and_belongs_to_many, 'pages', {:property=>'predicate', :inverse_of => 'inverse_predicate'}, nil)
|
36
|
+
ActiveFedora::SolrService.stub(:query).and_return([])
|
21
37
|
ac = ActiveFedora::Associations::HasAndBelongsToManyAssociation.new(subject, predicate)
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
38
|
+
ac.should_receive(:callback).twice
|
39
|
+
object = Page.new(:pid => 'object:b')
|
40
|
+
object.stub(:new_record? => false, save: true)
|
41
|
+
|
42
|
+
subject.should_receive(:add_relationship).with('predicate', object)
|
43
|
+
|
44
|
+
object.should_receive(:add_relationship).with('inverse_predicate', subject)
|
45
|
+
|
28
46
|
ac << object
|
29
47
|
|
30
48
|
end
|
31
49
|
|
32
|
-
it
|
50
|
+
it "should call solr query multiple times" do
|
33
51
|
|
34
|
-
subject =
|
35
|
-
|
52
|
+
subject = Book.new(pid: 'subject:a')
|
53
|
+
subject.stub(:new_record? => false, save: true)
|
54
|
+
predicate = Book.create_reflection(:has_and_belongs_to_many, 'pages', {:property=>'predicate', :solr_page_size => 10}, nil)
|
36
55
|
ids = []
|
37
56
|
0.upto(15) {|i| ids << i.to_s}
|
38
|
-
query1 = ids.slice(0,
|
39
|
-
query2 = ids.slice(10,
|
40
|
-
|
41
|
-
|
42
|
-
|
57
|
+
query1 = ids.slice(0,10).map {|i| "_query_:\"{!raw f=id}#{i}\""}.join(" OR ")
|
58
|
+
query2 = ids.slice(10,10).map {|i| "_query_:\"{!raw f=id}#{i}\""}.join(" OR ")
|
59
|
+
subject.should_receive(:ids_for_outbound).and_return(ids)
|
60
|
+
ActiveFedora::SolrService.should_receive(:query).with(query1, {:rows=>10}).and_return([])
|
61
|
+
ActiveFedora::SolrService.should_receive(:query).with(query2, {:rows=>10}).and_return([])
|
43
62
|
|
44
63
|
ac = ActiveFedora::Associations::HasAndBelongsToManyAssociation.new(subject, predicate)
|
45
64
|
ac.find_target
|
@@ -1,17 +1,35 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe ActiveFedora::Associations::HasManyAssociation do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
4
|
+
before do
|
5
|
+
class Book < ActiveFedora::Base
|
6
|
+
end
|
7
|
+
class Page < ActiveFedora::Base
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
after do
|
12
|
+
Object.send(:remove_const, :Book)
|
13
|
+
Object.send(:remove_const, :Page)
|
14
|
+
end
|
10
15
|
|
11
|
-
|
16
|
+
subject { Book.new(pid: 'subject:a') }
|
17
|
+
before {
|
18
|
+
subject.stub(:new_record? => false, save: true)
|
19
|
+
}
|
12
20
|
|
21
|
+
it "should call add_relationship" do
|
22
|
+
reflection = Book.create_reflection(:has_many, 'pages', {:property=>'predicate'}, Book)
|
23
|
+
ActiveFedora::SolrService.stub(:query).and_return([])
|
24
|
+
ac = ActiveFedora::Associations::HasManyAssociation.new(subject, reflection)
|
25
|
+
ac.should_receive(:callback).twice
|
26
|
+
object = Page.new(:pid => 'object:b')
|
27
|
+
object.stub(:new_record? => false, save: true)
|
28
|
+
|
29
|
+
object.should_receive(:add_relationship).with('predicate', subject)
|
30
|
+
|
13
31
|
ac << object
|
14
32
|
|
15
33
|
end
|
16
|
-
|
34
|
+
|
17
35
|
end
|
@@ -3,31 +3,31 @@ require 'spec_helper'
|
|
3
3
|
describe ActiveFedora::Base do
|
4
4
|
before(:each) do
|
5
5
|
class Foo < ActiveFedora::Base
|
6
|
-
has_metadata :type
|
7
|
-
m.field
|
6
|
+
has_metadata :type=>ActiveFedora::SimpleDatastream, :name=>"foostream" do|m|
|
7
|
+
m.field "foostream", :string
|
8
8
|
end
|
9
|
-
has_metadata :type
|
9
|
+
has_metadata :type=>ActiveFedora::QualifiedDublinCoreDatastream, :name=>"dcstream"
|
10
10
|
end
|
11
|
-
class Bar
|
12
|
-
has_metadata :type
|
13
|
-
m.field
|
11
|
+
class Bar < ActiveFedora::Base
|
12
|
+
has_metadata :type=>ActiveFedora::SimpleDatastream, :name=>"barstream" do |m|
|
13
|
+
m.field "barfield", :string
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
18
|
it "doesn't overwrite stream specs" do
|
19
19
|
f = Foo.new
|
20
|
-
|
20
|
+
f.datastreams.size.should == 3
|
21
21
|
streams = f.datastreams.values.map{|x| x.class.to_s}.sort
|
22
|
-
|
23
|
-
|
24
|
-
|
22
|
+
streams.pop.should == "ActiveFedora::SimpleDatastream"
|
23
|
+
streams.pop.should == "ActiveFedora::RelsExtDatastream"
|
24
|
+
streams.pop.should == "ActiveFedora::QualifiedDublinCoreDatastream"
|
25
25
|
end
|
26
26
|
|
27
|
-
it
|
27
|
+
it "should work for multiple types" do
|
28
28
|
b = Foo.new
|
29
29
|
f = Bar.new
|
30
|
-
|
30
|
+
b.class.ds_specs.should_not == f.class.ds_specs
|
31
31
|
end
|
32
32
|
after do
|
33
33
|
Object.send(:remove_const, :Bar)
|
@@ -35,3 +35,4 @@ describe ActiveFedora::Base do
|
|
35
35
|
end
|
36
36
|
|
37
37
|
end
|
38
|
+
|
data/spec/unit/model_spec.rb
CHANGED
@@ -1,64 +1,58 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
self.class.to_s
|
3
|
+
describe ActiveFedora::Model do
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
module SpecModel
|
7
|
+
class Basic < ActiveFedora::Base
|
8
|
+
end
|
10
9
|
end
|
10
|
+
@model_query = "has_model_s:#{solr_uri("info:fedora/afmodel:SpecModel_Basic")}"
|
11
11
|
end
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
|
13
|
+
after(:all) do
|
14
|
+
Object.send(:remove_const, :SpecModel)
|
15
|
+
end
|
16
|
+
|
16
17
|
describe '.solr_query_handler' do
|
17
18
|
after do
|
18
|
-
|
19
|
+
# reset to default
|
20
|
+
SpecModel::Basic.solr_query_handler = 'standard'
|
19
21
|
end
|
20
|
-
it
|
21
|
-
|
22
|
+
it "should have a default" do
|
23
|
+
SpecModel::Basic.solr_query_handler.should == 'standard'
|
22
24
|
end
|
23
|
-
it
|
24
|
-
|
25
|
-
|
25
|
+
it "should be settable" do
|
26
|
+
SpecModel::Basic.solr_query_handler = 'search'
|
27
|
+
SpecModel::Basic.solr_query_handler.should == 'search'
|
26
28
|
end
|
27
29
|
end
|
28
|
-
|
29
|
-
describe
|
30
|
-
before :
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
end
|
36
|
-
|
37
|
-
context 'with the namespace declared in the model' do
|
38
|
-
it '#to_class_uri' do
|
39
|
-
expect(@camel).to receive(:pid_namespace).and_return('test-cModel')
|
40
|
-
expect(@camel.to_class_uri).to eq 'info:fedora/test-cModel:SpecModelM_CamelCased'
|
30
|
+
|
31
|
+
describe "URI translation" do
|
32
|
+
before :all do
|
33
|
+
module SpecModel
|
34
|
+
class CamelCased
|
35
|
+
include ActiveFedora::Model
|
36
|
+
end
|
41
37
|
end
|
42
38
|
end
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
expect(@camel).to receive(:pid_suffix).and_return('-TEST-SUFFIX')
|
47
|
-
expect(@camel.to_class_uri).to eq 'info:fedora/afmodel:SpecModelM_CamelCased-TEST-SUFFIX'
|
48
|
-
end
|
39
|
+
|
40
|
+
after :all do
|
41
|
+
SpecModel.send(:remove_const, :CamelCased)
|
49
42
|
end
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
43
|
+
subject {SpecModel::CamelCased}
|
44
|
+
|
45
|
+
describe ".classname_from_uri" do
|
46
|
+
it "should turn an afmodel URI into a Model class name" do
|
47
|
+
ActiveFedora::Model.classname_from_uri('info:fedora/afmodel:SpecModel_CamelCased').should == ['SpecModel::CamelCased', 'afmodel']
|
54
48
|
end
|
55
|
-
it
|
56
|
-
|
49
|
+
it "should not change plurality" do
|
50
|
+
ActiveFedora::Model.classname_from_uri('info:fedora/afmodel:MyMetadata').should == ['MyMetadata', 'afmodel']
|
57
51
|
end
|
58
|
-
it
|
59
|
-
|
52
|
+
it "should capitalize the first letter" do
|
53
|
+
ActiveFedora::Model.classname_from_uri('info:fedora/afmodel:image').should == ['Image', 'afmodel']
|
60
54
|
end
|
61
55
|
end
|
62
56
|
end
|
63
|
-
|
57
|
+
|
64
58
|
end
|
@@ -1,40 +1,40 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe ActiveFedora::NomDatastream do
|
4
|
-
describe
|
4
|
+
describe "test" do
|
5
5
|
subject {
|
6
6
|
class MyNomDatastream < ActiveFedora::NomDatastream
|
7
|
-
|
7
|
+
|
8
8
|
set_terminology do |t|
|
9
9
|
t.a :path => '//a', :accessor => lambda { |x| x.text }, :index => 'a_s'
|
10
10
|
t.b :path => '//b', :index => 'b_s'
|
11
11
|
end
|
12
|
-
end
|
12
|
+
end
|
13
13
|
|
14
14
|
MyNomDatastream.from_xml '<root><a>123</a><b><c>asdf</c></b></root>'
|
15
15
|
}
|
16
16
|
|
17
|
-
it
|
18
|
-
|
17
|
+
it "should work" do
|
18
|
+
subject.a.should include("123")
|
19
19
|
end
|
20
20
|
|
21
|
-
it
|
22
|
-
|
23
|
-
|
21
|
+
it "should to_solr" do
|
22
|
+
subject.to_solr['a_s'].should include('123')
|
23
|
+
subject.to_solr['b_s'].should include('asdf')
|
24
24
|
end
|
25
25
|
|
26
|
-
it
|
27
|
-
|
26
|
+
it "should be a managed datastream" do
|
27
|
+
subject.controlGroup.should == 'M'
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
describe
|
31
|
+
describe "with options for .set_terminology" do
|
32
32
|
subject {
|
33
33
|
class TerminologyOptions < ActiveFedora::NomDatastream
|
34
34
|
set_terminology({
|
35
35
|
:namespaces => {
|
36
|
-
'dc' =>
|
37
|
-
'dcterms' =>
|
36
|
+
'dc' => "http://purl.org/dc/elements/1.1/",
|
37
|
+
'dcterms' => "http://purl.org/dc/terms/"
|
38
38
|
}
|
39
39
|
}) do |t|
|
40
40
|
t.a :path => 'a', :xmlns => 'dc', :accessor => lambda { |x| x.text }
|
@@ -53,8 +53,8 @@ describe ActiveFedora::NomDatastream do
|
|
53
53
|
)
|
54
54
|
}
|
55
55
|
|
56
|
-
it
|
57
|
-
|
56
|
+
it "should scope #a attribute to only the dc namespace" do
|
57
|
+
subject.a.should == ["123"]
|
58
58
|
end
|
59
59
|
|
60
60
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe ActiveFedora::NtriplesRDFDatastream do
|
4
|
-
describe
|
5
|
-
before do
|
4
|
+
describe "an instance with content" do
|
5
|
+
before do
|
6
6
|
class MyDatastream < ActiveFedora::NtriplesRDFDatastream
|
7
7
|
map_predicates do |map|
|
8
8
|
map.created(:in => RDF::DC)
|
@@ -11,84 +11,84 @@ describe ActiveFedora::NtriplesRDFDatastream do
|
|
11
11
|
map.creator(:in => RDF::DC)
|
12
12
|
map.educationLevel(:in => RDF::DC)
|
13
13
|
map.based_near(:in => RDF::FOAF)
|
14
|
-
map.related_url(:to =>
|
14
|
+
map.related_url(:to => "seeAlso", :in => RDF::RDFS)
|
15
15
|
end
|
16
16
|
end
|
17
|
-
@subject = MyDatastream.new(double('inner object', :pid
|
17
|
+
@subject = MyDatastream.new(double('inner object', :pid=>'test:1', :new_record? =>true), 'descMetadata')
|
18
18
|
@subject.content = File.new('spec/fixtures/mixed_rdf_descMetadata.nt').read
|
19
19
|
end
|
20
20
|
after do
|
21
21
|
Object.send(:remove_const, :MyDatastream)
|
22
22
|
end
|
23
|
-
it
|
24
|
-
|
23
|
+
it "should have a subject" do
|
24
|
+
@subject.rdf_subject.should == "info:fedora/test:1"
|
25
25
|
end
|
26
|
-
it
|
27
|
-
|
26
|
+
it "should have controlGroup" do
|
27
|
+
@subject.controlGroup.should == 'M'
|
28
28
|
end
|
29
|
-
it
|
30
|
-
|
29
|
+
it "should have mimeType" do
|
30
|
+
@subject.mimeType.should == 'text/plain'
|
31
31
|
end
|
32
|
-
it
|
33
|
-
|
32
|
+
it "should have dsid" do
|
33
|
+
@subject.dsid.should == 'descMetadata'
|
34
34
|
end
|
35
|
-
it
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
35
|
+
it "should have fields" do
|
36
|
+
@subject.created.should == ["2010-12-31"]
|
37
|
+
@subject.title.should == ["Title of work"]
|
38
|
+
@subject.publisher.should == ["Penn State"]
|
39
|
+
@subject.based_near.should == ["New York, NY, US"]
|
40
|
+
@subject.related_url.should == ["http://google.com/"]
|
41
41
|
end
|
42
42
|
|
43
|
-
it
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
43
|
+
it "should be able to call enumerable methods on the fields" do
|
44
|
+
@subject.title.join(', ').should == "Title of work"
|
45
|
+
@subject.title.count.should == 1
|
46
|
+
@subject.title.size.should == 1
|
47
|
+
@subject.title[0].should == "Title of work"
|
48
|
+
@subject.title.to_a.should == ["Title of work"]
|
49
49
|
val = []
|
50
50
|
@subject.title.each_with_index {|v, i| val << "#{i}. #{v}"}
|
51
|
-
|
51
|
+
val.should == ["0. Title of work"]
|
52
52
|
end
|
53
53
|
|
54
|
-
it
|
55
|
-
|
54
|
+
it "should return fields that are not TermProxies" do
|
55
|
+
@subject.created.should be_kind_of Array
|
56
56
|
end
|
57
|
-
it
|
58
|
-
|
57
|
+
it "should have method missing" do
|
58
|
+
lambda{@subject.frank}.should raise_exception NoMethodError
|
59
59
|
end
|
60
60
|
|
61
|
-
it
|
61
|
+
it "should set fields" do
|
62
62
|
@subject.publisher = "St. Martin's Press"
|
63
|
-
|
63
|
+
@subject.publisher.should == ["St. Martin's Press"]
|
64
64
|
end
|
65
|
-
it
|
66
|
-
@subject.creator = RDF.Literal(
|
67
|
-
|
65
|
+
it "should set rdf literal fields" do
|
66
|
+
@subject.creator = RDF.Literal("Geoff Ryman")
|
67
|
+
@subject.creator.should == ["Geoff Ryman"]
|
68
68
|
end
|
69
|
-
it
|
69
|
+
it "should append fields" do
|
70
70
|
@subject.publisher << "St. Martin's Press"
|
71
|
-
|
71
|
+
@subject.publisher.should == ["Penn State", "St. Martin's Press"]
|
72
72
|
end
|
73
|
-
it
|
74
|
-
@subject.related_url.delete(RDF::URI(
|
75
|
-
|
73
|
+
it "should delete fields" do
|
74
|
+
@subject.related_url.delete(RDF::URI("http://google.com/"))
|
75
|
+
@subject.related_url.should == []
|
76
76
|
end
|
77
77
|
end
|
78
78
|
|
79
|
-
describe
|
79
|
+
describe "some dummy instances" do
|
80
80
|
before do
|
81
81
|
@one = ActiveFedora::RDFDatastream.new('fakepid', 'myFoobar')
|
82
82
|
@two = ActiveFedora::RDFDatastream.new('fakepid', 'myQuix')
|
83
83
|
end
|
84
|
-
it
|
85
|
-
|
86
|
-
|
84
|
+
it "should generate predictable prexies" do
|
85
|
+
@one .prefix("baz").should == :my_foobar__baz
|
86
|
+
@two.prefix("baz").should == :my_quix__baz
|
87
87
|
end
|
88
88
|
end
|
89
89
|
|
90
|
-
describe
|
91
|
-
before do
|
90
|
+
describe "an instance with a custom subject" do
|
91
|
+
before do
|
92
92
|
class MyDatastream < ActiveFedora::NtriplesRDFDatastream
|
93
93
|
rdf_subject { |ds| "info:fedora/#{ds.pid}/content" }
|
94
94
|
map_predicates do |map|
|
@@ -96,7 +96,7 @@ describe ActiveFedora::NtriplesRDFDatastream do
|
|
96
96
|
map.title(:in => RDF::DC)
|
97
97
|
map.publisher(:in => RDF::DC)
|
98
98
|
map.based_near(:in => RDF::FOAF)
|
99
|
-
map.related_url(:to =>
|
99
|
+
map.related_url(:to => "seeAlso", :in => RDF::RDFS)
|
100
100
|
end
|
101
101
|
end
|
102
102
|
@subject = MyDatastream.new(@inner_object, 'mixed_rdf')
|
@@ -109,16 +109,16 @@ describe ActiveFedora::NtriplesRDFDatastream do
|
|
109
109
|
Object.send(:remove_const, :MyDatastream)
|
110
110
|
end
|
111
111
|
|
112
|
-
it
|
113
|
-
|
112
|
+
it "should have fields" do
|
113
|
+
@subject.title.should == ["Title of datastream"]
|
114
114
|
end
|
115
115
|
|
116
|
-
it
|
117
|
-
|
116
|
+
it "should have a custom subject" do
|
117
|
+
@subject.rdf_subject.should == 'info:fedora/test:1/content'
|
118
118
|
end
|
119
119
|
end
|
120
120
|
|
121
|
-
describe
|
121
|
+
describe "a new instance" do
|
122
122
|
before(:each) do
|
123
123
|
class MyDatastream < ActiveFedora::NtriplesRDFDatastream
|
124
124
|
map_predicates do |map|
|
@@ -131,35 +131,35 @@ describe ActiveFedora::NtriplesRDFDatastream do
|
|
131
131
|
after(:each) do
|
132
132
|
Object.send(:remove_const, :MyDatastream)
|
133
133
|
end
|
134
|
-
it
|
135
|
-
|
136
|
-
@subject.publisher =
|
137
|
-
|
138
|
-
@subject.publisher <<
|
139
|
-
|
134
|
+
it "should support to_s method" do
|
135
|
+
@subject.publisher.to_s.should == [].to_s
|
136
|
+
@subject.publisher = "Bob"
|
137
|
+
@subject.publisher.to_s.should == ["Bob"].to_s
|
138
|
+
@subject.publisher << "Jim"
|
139
|
+
@subject.publisher.to_s.should == ["Bob", "Jim"].to_s
|
140
140
|
end
|
141
141
|
end
|
142
142
|
|
143
|
-
describe
|
143
|
+
describe "solr integration" do
|
144
144
|
before(:all) do
|
145
145
|
class MyDatastream < ActiveFedora::NtriplesRDFDatastream
|
146
146
|
map_predicates do |map|
|
147
|
-
map.created(:in => RDF::DC) do |index|
|
147
|
+
map.created(:in => RDF::DC) do |index|
|
148
148
|
index.as :sortable, :displayable
|
149
149
|
index.type :date
|
150
150
|
end
|
151
151
|
map.title(:in => RDF::DC) do |index|
|
152
152
|
index.as :stored_searchable, :sortable
|
153
|
-
index.type :text
|
153
|
+
index.type :text
|
154
154
|
end
|
155
|
-
map.publisher(:in => RDF::DC) do |index|
|
155
|
+
map.publisher(:in => RDF::DC) do |index|
|
156
156
|
index.as :facetable, :sortable, :stored_searchable
|
157
157
|
end
|
158
158
|
map.based_near(:in => RDF::FOAF) do |index|
|
159
|
-
index.as :facetable, :stored_searchable
|
159
|
+
index.as :facetable, :stored_searchable
|
160
160
|
index.type :text
|
161
161
|
end
|
162
|
-
map.related_url(:to =>
|
162
|
+
map.related_url(:to => "seeAlso", :in => RDF::RDFS) do |index|
|
163
163
|
index.as :stored_searchable
|
164
164
|
end
|
165
165
|
map.rights(:in => RDF::DC)
|
@@ -171,88 +171,93 @@ describe ActiveFedora::NtriplesRDFDatastream do
|
|
171
171
|
after(:all) do
|
172
172
|
Object.send(:remove_const, :MyDatastream)
|
173
173
|
end
|
174
|
-
before(:each) do
|
174
|
+
before(:each) do
|
175
175
|
@subject.stub(:pid => 'test:1')
|
176
176
|
end
|
177
|
-
it
|
178
|
-
|
179
|
-
|
177
|
+
it "should provide .to_solr and return a SolrDocument" do
|
178
|
+
@subject.should respond_to(:to_solr)
|
179
|
+
@subject.to_solr.should be_kind_of(Hash)
|
180
180
|
end
|
181
|
-
|
182
|
-
|
183
|
-
expect(
|
181
|
+
|
182
|
+
it "should have a solr_name method" do
|
183
|
+
expect(MyDatastream.primary_solr_name('descMetadata', :based_near)).to eq 'desc_metadata__based_near_sim'
|
184
|
+
expect(MyDatastream.primary_solr_name('props', :title)).to eq 'props__title_tesim'
|
184
185
|
end
|
185
|
-
|
186
|
+
|
187
|
+
it "should optionally allow you to provide the Solr::Document to add fields to and return that document when done" do
|
188
|
+
doc = Hash.new
|
189
|
+
@subject.to_solr(doc).should == doc
|
190
|
+
end
|
191
|
+
it "should iterate through @fields hash" do
|
186
192
|
solr_doc = @subject.to_solr
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
193
|
+
solr_doc[ActiveFedora::SolrService.solr_name("solr_rdf__publisher", type: :string)].should == ["publisher1"]
|
194
|
+
solr_doc[ActiveFedora::SolrService.solr_name("solr_rdf__publisher", :sortable)].should == "publisher1"
|
195
|
+
solr_doc[ActiveFedora::SolrService.solr_name("solr_rdf__publisher", :facetable)].should == ["publisher1"]
|
196
|
+
solr_doc[ActiveFedora::SolrService.solr_name("solr_rdf__based_near", type: :string)].should == ["coverage1", "coverage2"]
|
197
|
+
solr_doc[ActiveFedora::SolrService.solr_name("solr_rdf__based_near", :facetable)].should == ["coverage1", "coverage2"]
|
198
|
+
solr_doc[ActiveFedora::SolrService.solr_name("solr_rdf__created", :sortable, type: :date)].should == "2009-10-10T00:00:00Z"
|
199
|
+
solr_doc[ActiveFedora::SolrService.solr_name("solr_rdf__created", :displayable)].should == ["2009-10-10"]
|
200
|
+
solr_doc[ActiveFedora::SolrService.solr_name("solr_rdf__title", type: :string)].should == ["fake-title"]
|
201
|
+
solr_doc[ActiveFedora::SolrService.solr_name("solr_rdf__title", :sortable)].should == "fake-title"
|
202
|
+
solr_doc[ActiveFedora::SolrService.solr_name("solr_rdf__related_url", type: :string)].should == ["http://example.org/"]
|
197
203
|
end
|
198
204
|
|
199
|
-
describe
|
205
|
+
describe "with an actual object" do
|
200
206
|
before(:each) do
|
201
207
|
class Foo < ActiveFedora::Base
|
202
|
-
has_metadata :name =>
|
203
|
-
|
204
|
-
delegate :title, :to => :descMetadata, multiple: true
|
205
|
-
delegate :publisher, :to => :descMetadata, multiple: true
|
206
|
-
delegate :based_near, :to => :descMetadata, multiple: true
|
207
|
-
delegate :related_url, :to => :descMetadata, multiple: true
|
208
|
-
delegate :rights, :to => :descMetadata, multiple: true
|
208
|
+
has_metadata :name => "descMetadata", :type => MyDatastream
|
209
|
+
has_attributes :created, :title, :publisher, :based_near, :related_url, :rights, datastream: :descMetadata, multiple: true
|
209
210
|
end
|
210
211
|
@obj = MyDatastream.new(@inner_object, 'solr_rdf')
|
211
212
|
repository = double()
|
212
213
|
@obj.stub(:repository => repository, :pid => 'test:1')
|
213
|
-
|
214
|
-
|
215
|
-
@obj.created =
|
216
|
-
@obj.title =
|
214
|
+
repository.stub(:modify_datastream)
|
215
|
+
repository.stub(:add_datastream)
|
216
|
+
@obj.created = "2012-03-04"
|
217
|
+
@obj.title = "Of Mice and Men, The Sequel"
|
217
218
|
@obj.publisher = "Bob's Blogtastic Publishing"
|
218
|
-
@obj.based_near = [
|
219
|
-
@obj.related_url =
|
219
|
+
@obj.based_near = ["Tacoma, WA", "Renton, WA"]
|
220
|
+
@obj.related_url = "http://example.org/blogtastic/"
|
220
221
|
@obj.rights = "Totally open, y'all"
|
221
222
|
@obj.save
|
222
223
|
end
|
224
|
+
after do
|
225
|
+
Object.send(:remove_const, :Foo)
|
226
|
+
end
|
227
|
+
|
223
228
|
|
224
|
-
describe
|
225
|
-
it
|
226
|
-
|
229
|
+
describe ".fields()" do
|
230
|
+
it "should return the right fields" do
|
231
|
+
@obj.send(:fields).keys.should == ["created", "title", "publisher", "based_near", "related_url"]
|
227
232
|
end
|
228
|
-
it
|
233
|
+
it "should return the right values" do
|
229
234
|
fields = @obj.send(:fields)
|
230
|
-
|
231
|
-
|
235
|
+
fields[:related_url][:values].should == ["http://example.org/blogtastic/"]
|
236
|
+
fields[:based_near][:values].should == ["Tacoma, WA", "Renton, WA"]
|
232
237
|
end
|
233
|
-
it
|
238
|
+
it "should return the right type information" do
|
234
239
|
fields = @obj.send(:fields)
|
235
|
-
|
240
|
+
fields[:created][:type].should == :date
|
236
241
|
end
|
237
242
|
end
|
238
|
-
describe
|
239
|
-
it
|
240
|
-
|
241
|
-
ActiveFedora::SolrService.solr_name(
|
242
|
-
ActiveFedora::SolrService.solr_name(
|
243
|
-
ActiveFedora::SolrService.solr_name(
|
244
|
-
ActiveFedora::SolrService.solr_name(
|
245
|
-
ActiveFedora::SolrService.solr_name(
|
246
|
-
ActiveFedora::SolrService.solr_name(
|
247
|
-
ActiveFedora::SolrService.solr_name(
|
248
|
-
ActiveFedora::SolrService.solr_name(
|
249
|
-
ActiveFedora::SolrService.solr_name(
|
243
|
+
describe ".to_solr()" do
|
244
|
+
it "should return the right fields" do
|
245
|
+
@obj.to_solr.keys.should include(ActiveFedora::SolrService.solr_name("solr_rdf__related_url", type: :string),
|
246
|
+
ActiveFedora::SolrService.solr_name("solr_rdf__publisher", type: :string),
|
247
|
+
ActiveFedora::SolrService.solr_name("solr_rdf__publisher", :sortable),
|
248
|
+
ActiveFedora::SolrService.solr_name("solr_rdf__publisher", :facetable),
|
249
|
+
ActiveFedora::SolrService.solr_name("solr_rdf__created", :sortable, type: :date),
|
250
|
+
ActiveFedora::SolrService.solr_name("solr_rdf__created", :displayable),
|
251
|
+
ActiveFedora::SolrService.solr_name("solr_rdf__title", type: :string),
|
252
|
+
ActiveFedora::SolrService.solr_name("solr_rdf__title", :sortable),
|
253
|
+
ActiveFedora::SolrService.solr_name("solr_rdf__based_near", type: :string),
|
254
|
+
ActiveFedora::SolrService.solr_name("solr_rdf__based_near", :facetable))
|
250
255
|
|
251
256
|
end
|
252
257
|
|
253
|
-
it
|
254
|
-
|
255
|
-
|
258
|
+
it "should return the right values" do
|
259
|
+
@obj.to_solr[ActiveFedora::SolrService.solr_name("solr_rdf__related_url", type: :string)].should == ["http://example.org/blogtastic/"]
|
260
|
+
@obj.to_solr[ActiveFedora::SolrService.solr_name("solr_rdf__based_near", type: :string)].should == ["Tacoma, WA","Renton, WA"]
|
256
261
|
end
|
257
262
|
end
|
258
263
|
end
|