active-fedora 1.0.5 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/.gitignore +21 -0
- data/.hg/00changelog.i +0 -0
- data/.hg/branch +1 -0
- data/.hg/branch.cache +2 -0
- data/.hg/dirstate +0 -0
- data/.hg/hgrc +2 -0
- data/.hg/requires +2 -0
- data/.hg/store/00changelog.i +0 -0
- data/.hg/store/00manifest.i +0 -0
- data/.hg/store/data/.hgignore.i +0 -0
- data/.hg/store/data/.hgtags.i +0 -0
- data/.hg/store/data/_c_o_p_y_i_n_g.txt.i +0 -0
- data/.hg/store/data/_c_o_y_i_n_g._l_e_s_s_e_r.txt.i +0 -0
- data/.hg/store/data/_history.txt.i +0 -0
- data/.hg/store/data/_license.txt.i +0 -0
- data/.hg/store/data/_manifest.txt.i +0 -0
- data/.hg/store/data/_post_install.txt.i +0 -0
- data/.hg/store/data/_r_e_a_d_m_e.rdoc.i +0 -0
- data/.hg/store/data/_r_e_a_d_m_e.txt.i +0 -0
- data/.hg/store/data/_rakefile.i +0 -0
- data/.hg/store/data/_v_e_r_s_i_o_n.i +0 -0
- data/.hg/store/data/active-fedora.gemspec.i +0 -0
- data/.hg/store/data/active__fedora/_history.txt.i +0 -0
- data/.hg/store/data/active__fedora/_manifest.txt.i +0 -0
- data/.hg/store/data/active__fedora/_post_install.txt.i +0 -0
- data/.hg/store/data/active__fedora/_r_e_a_d_m_e.rdoc.i +0 -0
- data/.hg/store/data/active__fedora/_rakefile.i +0 -0
- data/.hg/store/data/active__fedora/lib/active__fedora.rb.i +0 -0
- data/.hg/store/data/active__fedora/script/console.i +0 -0
- data/.hg/store/data/active__fedora/script/destroy.i +0 -0
- data/.hg/store/data/active__fedora/script/generate.i +0 -0
- data/.hg/store/data/active__fedora/spec/active__fedora__spec.rb.i +0 -0
- data/.hg/store/data/active__fedora/spec/spec__helper.rb.i +0 -0
- data/.hg/store/data/config/fedora.yml.i +0 -0
- data/.hg/store/data/config/solr__mappings.yml.i +0 -0
- data/.hg/store/data/config/solr__mappings__af__0.1.yml.i +0 -0
- data/.hg/store/data/config/solr__mappings__bl__2.4.yml.i +0 -0
- data/.hg/store/data/lib/active-fedora.rb.i +0 -0
- data/.hg/store/data/lib/active__fedora.rb.i +0 -0
- data/.hg/store/data/lib/active__fedora/base.rb.i +0 -0
- data/.hg/store/data/lib/active__fedora/content__model.rb.i +0 -0
- data/.hg/store/data/lib/active__fedora/datastream.rb.i +0 -0
- data/.hg/store/data/lib/active__fedora/fedora__object.rb.i +0 -0
- data/.hg/store/data/lib/active__fedora/metadata__datastream.rb.i +0 -0
- data/.hg/store/data/lib/active__fedora/model.rb.i +0 -0
- data/.hg/store/data/lib/active__fedora/property.rb.i +0 -0
- data/.hg/store/data/lib/active__fedora/qualified__dublin__core__datastream.rb.i +0 -0
- data/.hg/store/data/lib/active__fedora/relationship.rb.i +0 -0
- data/.hg/store/data/lib/active__fedora/rels__ext__datastream.rb.i +0 -0
- data/.hg/store/data/lib/active__fedora/semantic__node.rb.i +0 -0
- data/.hg/store/data/lib/active__fedora/solr__mapper.rb.i +0 -0
- data/.hg/store/data/lib/active__fedora/solr__service.rb.i +0 -0
- data/.hg/store/data/lib/fedora/base.rb.i +0 -0
- data/.hg/store/data/lib/fedora/connection.rb.i +0 -0
- data/.hg/store/data/lib/fedora/datastream.rb.i +0 -0
- data/.hg/store/data/lib/fedora/fedora__object.rb.i +0 -0
- data/.hg/store/data/lib/fedora/formats.rb.i +0 -0
- data/.hg/store/data/lib/fedora/generic__search.rb.i +0 -0
- data/.hg/store/data/lib/fedora/repository.rb.i +0 -0
- data/.hg/store/data/lib/ruby-fedora.rb.i +0 -0
- data/.hg/store/data/lib/util/class__level__inheritable__attributes.rb.i +0 -0
- data/.hg/store/data/script/console.i +0 -0
- data/.hg/store/data/script/destroy.i +0 -0
- data/.hg/store/data/script/generate.i +0 -0
- data/.hg/store/data/solr/config/schema-1.5.xml.i +0 -0
- data/.hg/store/data/solr/config/schema.xml.i +0 -0
- data/.hg/store/data/solr/config/solrconfig-1.5.xml.i +0 -0
- data/.hg/store/data/spec/fixtures/changeme155.xml.i +0 -0
- data/.hg/store/data/spec/fixtures/dino.jpg.i +0 -0
- data/.hg/store/data/spec/fixtures/minivan.jpg.d +0 -0
- data/.hg/store/data/spec/fixtures/minivan.jpg.i +0 -0
- data/.hg/store/data/spec/fixtures/test__12.foxml.xml.i +0 -0
- data/.hg/store/data/spec/integration/active__fedora/base__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/active__fedora/datastream__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/active__fedora/fedora__object__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/active__fedora/full__featured__model__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/active__fedora/model__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/active__fedora/rels__ext__datastream__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/active__fedora/semantic__node__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/base__file__management__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/base__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/bug__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/datastream__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/datastreams__crud__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/fedora__object__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/full__featured__model__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/model__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/rels__ext__datastream__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/repository__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/rf__fedora__object__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/semantic__node__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/solr__service__spec.rb.i +0 -0
- data/.hg/store/data/spec/samples/models/audio__record.rb.i +0 -0
- data/.hg/store/data/spec/samples/models/image.rb.i +0 -0
- data/.hg/store/data/spec/samples/models/oral__history.rb.i +0 -0
- data/.hg/store/data/spec/samples/models/seminar.rb.i +0 -0
- data/.hg/store/data/spec/samples/models/seminar__audio__file.rb.i +0 -0
- data/.hg/store/data/spec/samples/oh__qdc.xml.i +0 -0
- data/.hg/store/data/spec/samples/oral__history.rb.i +0 -0
- data/.hg/store/data/spec/samples/oral__history__sample.xml.i +0 -0
- data/.hg/store/data/spec/samples/oral__history__sample__model.rb.i +0 -0
- data/.hg/store/data/spec/samples/oral__history__xml.xml.i +0 -0
- data/.hg/store/data/spec/spec.opts.i +0 -0
- data/.hg/store/data/spec/spec__helper.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora/base__cma__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora/base__extra__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora/base__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora/content__model__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora/datastream__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora/inheritance__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora/metadata__datastream__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora/model__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora/property__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora/qualified__dublin__core__datastream__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora/relationship__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora/rels__ext__datastream__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora/semantic__node__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora/solr__service__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/base__cma__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/base__datastream__management__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/base__extra__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/base__file__management__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/base__loader__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/base__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/connection__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/content__model__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/datastream__concurrency__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/datastream__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/fedora__object__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/inheritance__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/metadata__datastream__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/model__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/property__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/qualified__dublin__core__datastream__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/relationship__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/rels__ext__datastream__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/repository__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/rf__datastream__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/semantic__node__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/solr__config__options__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/solr__mapper__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/solr__service__spec.rb.i +0 -0
- data/.hg/store/data/tasks/rspec.rake.i +0 -0
- data/.hg/store/undo +0 -0
- data/.hg/undo.branch +1 -0
- data/.hg/undo.dirstate +0 -0
- data/.hgignore +7 -0
- data/.hgtags +14 -0
- data/COPYING.txt +674 -0
- data/COYING.LESSER.txt +165 -0
- data/History.txt +34 -0
- data/LICENSE +20 -0
- data/License.txt +58 -0
- data/Manifest.txt +1 -1
- data/README.rdoc +13 -54
- data/README.txt +59 -0
- data/Rakefile +35 -0
- data/VERSION +1 -0
- data/active-fedora.gemspec +359 -0
- data/config/fedora.yml +16 -0
- data/config/solr_mappings.yml +14 -0
- data/config/solr_mappings_af_0.1.yml +16 -0
- data/config/solr_mappings_bl_2.4.yml +14 -0
- data/lib/active_fedora.rb +66 -6
- data/lib/active_fedora/base.rb +59 -23
- data/lib/active_fedora/datastream.rb +1 -1
- data/lib/active_fedora/metadata_datastream.rb +14 -7
- data/lib/active_fedora/model.rb +4 -4
- data/lib/active_fedora/rels_ext_datastream.rb +1 -1
- data/lib/active_fedora/semantic_node.rb +4 -3
- data/lib/active_fedora/solr_mapper.rb +17 -0
- data/lib/active_fedora/solr_service.rb +44 -2
- data/lib/fedora/base.rb +38 -0
- data/lib/fedora/connection.rb +210 -0
- data/lib/fedora/datastream.rb +56 -0
- data/lib/fedora/fedora_object.rb +161 -0
- data/lib/fedora/formats.rb +30 -0
- data/lib/fedora/generic_search.rb +71 -0
- data/lib/fedora/repository.rb +287 -0
- data/lib/ruby-fedora.rb +20 -0
- data/lib/util/class_level_inheritable_attributes.rb +23 -0
- data/script/console +15 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/solr/config/schema-1.5.xml +468 -0
- data/solr/config/schema.xml +174 -212
- data/solr/config/solrconfig-1.5.xml +1069 -0
- data/spec/active_fedora_spec.rb +7 -0
- data/spec/fixtures/changeme155.xml +255 -0
- data/spec/fixtures/dino.jpg +0 -0
- data/spec/fixtures/minivan.jpg +0 -0
- data/spec/fixtures/test_12.foxml.xml +121 -0
- data/spec/integration/base_file_management_spec.rb +20 -0
- data/spec/integration/base_spec.rb +196 -0
- data/spec/integration/bug_spec.rb +57 -0
- data/spec/integration/datastream_spec.rb +60 -0
- data/spec/integration/datastreams_crud_spec.rb +208 -0
- data/spec/integration/fedora_object_spec.rb +77 -0
- data/spec/integration/full_featured_model_spec.rb +207 -0
- data/spec/integration/model_spec.rb +54 -0
- data/spec/integration/rels_ext_datastream_spec.rb +67 -0
- data/spec/integration/repository_spec.rb +297 -0
- data/spec/integration/rf_fedora_object_spec.rb +95 -0
- data/spec/integration/semantic_node_spec.rb +95 -0
- data/spec/integration/solr_service_spec.rb +33 -0
- data/spec/samples/models/audio_record.rb +29 -0
- data/spec/samples/models/image.rb +5 -0
- data/spec/samples/models/oral_history.rb +50 -0
- data/spec/samples/models/seminar.rb +29 -0
- data/spec/samples/models/seminar_audio_file.rb +34 -0
- data/spec/samples/oh_qdc.xml +32 -0
- data/spec/samples/oral_history_sample.xml +38 -0
- data/spec/samples/oral_history_sample_model.rb +39 -0
- data/spec/samples/oral_history_xml.xml +35 -0
- data/spec/spec.opts +5 -0
- data/spec/spec_helper.rb +41 -0
- data/spec/unit/active_fedora_spec.rb +15 -0
- data/spec/unit/base_cma_spec.rb +25 -0
- data/spec/unit/base_datastream_management_spec.rb +119 -0
- data/spec/unit/base_extra_spec.rb +108 -0
- data/spec/unit/base_file_management_spec.rb +90 -0
- data/spec/unit/base_loader_spec.rb +43 -0
- data/spec/unit/base_spec.rb +584 -0
- data/spec/unit/connection_spec.rb +25 -0
- data/spec/unit/content_model_spec.rb +51 -0
- data/spec/unit/datastream_concurrency_spec.rb +59 -0
- data/spec/unit/datastream_spec.rb +85 -0
- data/spec/unit/fedora_object_spec.rb +66 -0
- data/spec/unit/inheritance_spec.rb +46 -0
- data/spec/unit/metadata_datastream_spec.rb +290 -0
- data/spec/unit/model_spec.rb +186 -0
- data/spec/unit/property_spec.rb +50 -0
- data/spec/unit/qualified_dublin_core_datastream_spec.rb +177 -0
- data/spec/unit/relationship_spec.rb +77 -0
- data/spec/unit/rels_ext_datastream_spec.rb +99 -0
- data/spec/unit/repository_spec.rb +136 -0
- data/spec/unit/rf_datastream_spec.rb +49 -0
- data/spec/unit/semantic_node_spec.rb +354 -0
- data/spec/unit/solr_config_options_spec.rb +98 -0
- data/spec/unit/solr_mapper_spec.rb +31 -0
- data/spec/unit/solr_service_spec.rb +83 -0
- data/tasks/hoe.rake +0 -0
- data/tasks/rspec.rake +29 -0
- metadata +373 -55
@@ -0,0 +1,95 @@
|
|
1
|
+
require File.join( File.dirname(__FILE__), "../spec_helper" )
|
2
|
+
|
3
|
+
require 'active_fedora'
|
4
|
+
|
5
|
+
describe ActiveFedora::SemanticNode do
|
6
|
+
|
7
|
+
before(:all) do
|
8
|
+
class SpecNode
|
9
|
+
include ActiveFedora::SemanticNode
|
10
|
+
has_relationship "collection_members", :has_collection_member
|
11
|
+
end
|
12
|
+
@node = SpecNode.new
|
13
|
+
class SpecModel < ActiveFedora::Base
|
14
|
+
has_relationship("parts", :is_part_of, :inbound => true)
|
15
|
+
has_relationship("containers", :is_member_of)
|
16
|
+
end
|
17
|
+
|
18
|
+
@test_object = SpecModel.new
|
19
|
+
@test_object.save
|
20
|
+
|
21
|
+
@part1 = ActiveFedora::Base.new()
|
22
|
+
@part1.add_relationship(:is_part_of, @test_object)
|
23
|
+
@part1.save
|
24
|
+
@part2 = ActiveFedora::Base.new()
|
25
|
+
@part2.add_relationship(:is_part_of, @test_object)
|
26
|
+
@part2.save
|
27
|
+
|
28
|
+
|
29
|
+
@container1 = ActiveFedora::Base.new()
|
30
|
+
@container1.save
|
31
|
+
@container2 = ActiveFedora::Base.new()
|
32
|
+
@container2.save
|
33
|
+
|
34
|
+
@test_object.add_relationship(:is_member_of, @container1)
|
35
|
+
@test_object.add_relationship(:is_member_of, @container2)
|
36
|
+
@test_object.save
|
37
|
+
end
|
38
|
+
|
39
|
+
after(:all) do
|
40
|
+
@part1.delete
|
41
|
+
@part2.delete
|
42
|
+
@container1.delete
|
43
|
+
@container2.delete
|
44
|
+
@test_object.delete
|
45
|
+
|
46
|
+
Object.send(:remove_const, :SpecModel)
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
describe '#has_relationship' do
|
51
|
+
it "should create useable finders" do
|
52
|
+
spec_node = SpecNode.new
|
53
|
+
spec_node.collection_members.should == []
|
54
|
+
rel = ActiveFedora::Relationship.new(:subject => :self, :predicate => :has_collection_member, :object => @test_object.pid)
|
55
|
+
spec_node.add_relationship(rel)
|
56
|
+
collection_members = spec_node.collection_members
|
57
|
+
collection_members.length.should == 1
|
58
|
+
collection_members.first.pid.should == @test_object.pid
|
59
|
+
collection_members.first.class.should == @test_object.class
|
60
|
+
end
|
61
|
+
it "should create useable inbound finders if :inbound is set to true"
|
62
|
+
end
|
63
|
+
|
64
|
+
describe "inbound relationship finders" do
|
65
|
+
it "should return an array of Base objects" do
|
66
|
+
parts = @test_object.parts
|
67
|
+
parts.each do |part|
|
68
|
+
part.should be_kind_of(ActiveFedora::Base)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
it "_ids should return an array of pids" do
|
72
|
+
ids = @test_object.parts_ids
|
73
|
+
ids.each do |id|
|
74
|
+
id.should satisfy {|id| id == @part1.pid || @part2.pid}
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe "outbound relationship finders" do
|
80
|
+
it "should return an array of Base objects" do
|
81
|
+
containers = @test_object.containers
|
82
|
+
containers.length.should > 0
|
83
|
+
containers.each do |container|
|
84
|
+
container.should be_kind_of(ActiveFedora::Base)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
it "_ids should return an array of pids" do
|
88
|
+
ids = @test_object.containers_ids
|
89
|
+
ids.each do |id|
|
90
|
+
id.should satisfy {|id| id == @container1.pid || @container2.pid}
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require File.join( File.dirname(__FILE__), "../spec_helper" )
|
2
|
+
|
3
|
+
require 'active_fedora'
|
4
|
+
|
5
|
+
include ActiveFedora
|
6
|
+
|
7
|
+
|
8
|
+
describe ActiveFedora::SolrService do
|
9
|
+
describe "#reify_solr_results" do
|
10
|
+
before(:all) do
|
11
|
+
class FooObject < ActiveFedora::Base
|
12
|
+
end
|
13
|
+
@test_object = ActiveFedora::Base.new
|
14
|
+
@foo_object = FooObject.new
|
15
|
+
@test_object.save
|
16
|
+
@foo_object.save
|
17
|
+
end
|
18
|
+
after(:all) do
|
19
|
+
@test_object.delete
|
20
|
+
@foo_object.delete
|
21
|
+
end
|
22
|
+
it "should return an array of objects that are of the class stored in active_fedora_model_s" do
|
23
|
+
query = "id\:#{SolrService.escape_uri_for_query(@test_object.pid)} OR id\:#{SolrService.escape_uri_for_query(@foo_object.pid)}"
|
24
|
+
solr_result = SolrService.instance.conn.query(query)
|
25
|
+
result = ActiveFedora::SolrService.reify_solr_results(solr_result)
|
26
|
+
result.length.should == 2
|
27
|
+
result.each do |r|
|
28
|
+
(r.class == ActiveFedora::Base || r.class == FooObject).should be_true
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'active-fedora'
|
2
|
+
|
3
|
+
class AudioRecord
|
4
|
+
|
5
|
+
include ActiveFedora::Model
|
6
|
+
|
7
|
+
# This seems a bit strange, since this Class might be used outside of Oral Histories.
|
8
|
+
# From this perspective, it makes more sense to put triples on the containing object, not on the children...
|
9
|
+
|
10
|
+
relationship "parents", :is_part_of, [nil, :oral_history]
|
11
|
+
#has n, :parents, {:predicate => :is_part_of, :likely_types => [nil, :oral_history]}
|
12
|
+
# OR
|
13
|
+
# is_part_of [:oral_history]
|
14
|
+
|
15
|
+
property "date_recorded", :date
|
16
|
+
property "file_name", :string
|
17
|
+
property "duration", :string
|
18
|
+
property "notes", :text
|
19
|
+
|
20
|
+
# This doesn't make sense when you have both compressed and uncompressed in the same object!
|
21
|
+
# Probably better to rely on the file size in datastreamVersion "SIZE" attribute from Fedora anyway
|
22
|
+
#property "file_size", :integer
|
23
|
+
|
24
|
+
#property "restriction", :text
|
25
|
+
|
26
|
+
datastream "compressed", ["audio/mpeg"], :multiple => true
|
27
|
+
datastream "uncompressed", ["audio/wav", "audio/aiff"], :multiple => true
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'active-fedora'
|
2
|
+
|
3
|
+
include ActiveFedora
|
4
|
+
include SemanticNode
|
5
|
+
|
6
|
+
class OralHistory < ActiveFedora::Base
|
7
|
+
include Model
|
8
|
+
|
9
|
+
|
10
|
+
# Imitating DataMapper ...
|
11
|
+
|
12
|
+
has_relationship "parts", :is_part_of, :inbound => true
|
13
|
+
|
14
|
+
# These are all the properties that don't quite fit into Qualified DC
|
15
|
+
# Put them on the object itself (in the properties datastream) for now.
|
16
|
+
has_metadata :name => "properties", :type => MetadataDatastream do |m|
|
17
|
+
field "alt_title", :string
|
18
|
+
field "narrator", :string
|
19
|
+
field "interviewer", :integer
|
20
|
+
field "transcript_editor", :text
|
21
|
+
field "bio", :string
|
22
|
+
field "notes", :text
|
23
|
+
field "hard_copy_availability", :text
|
24
|
+
field "hard_copy_location", :text
|
25
|
+
field "other_contributors", :string
|
26
|
+
field "restrictions", :text
|
27
|
+
end
|
28
|
+
|
29
|
+
has_metadata :name => "dublin_core", :type => QualifiedDublinCoreDatastream do |m|
|
30
|
+
# Default :multiple => true
|
31
|
+
#
|
32
|
+
# on retrieval, these will be pluralized and returned as arrays
|
33
|
+
# ie. subject_entries = my_oral_history.dublin_core.subjects
|
34
|
+
#
|
35
|
+
# aimint to use method-missing to support calling methods like
|
36
|
+
# my_oral_history.subjects OR my_oral_history.titles OR EVEN my_oral_history.title whenever possible
|
37
|
+
|
38
|
+
#field :name => "subject_heading", :string, {:xml_node => "subject", :encoding => "LCSH"}
|
39
|
+
end
|
40
|
+
|
41
|
+
has_metadata :name => "significant_passages" do |m|
|
42
|
+
field "significant_passage", :text
|
43
|
+
end
|
44
|
+
|
45
|
+
has_metadata :name => "sensitive_passages" do |m|
|
46
|
+
field "sensitive_passage", :text
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'active-fedora'
|
2
|
+
|
3
|
+
class Seminar
|
4
|
+
|
5
|
+
include ActiveFedora::Model
|
6
|
+
|
7
|
+
# Imitating DataMapper ...
|
8
|
+
|
9
|
+
relationship "parts", :is_part_of, [:seminar_audio_file], :inbound => true
|
10
|
+
#has n, :parts, {:predicate => :is_part_of, :likely_types => [:seminar_audio_file], :inbound => true}
|
11
|
+
# OR
|
12
|
+
# has_parts [:seminar_audio_file]
|
13
|
+
|
14
|
+
property "title_wylie", :text # Note: reserving title_tibetan for actual UTF-8 tibetan text
|
15
|
+
property "title_english", :text
|
16
|
+
property "original_media_format", :text
|
17
|
+
property "original_media_number_of_units", :integer
|
18
|
+
property "author_name_wylie", :text
|
19
|
+
property "author_name_english", :text
|
20
|
+
property "location", :string
|
21
|
+
property "date_recorded", :date
|
22
|
+
property "file_name", :string
|
23
|
+
property "duration", :string
|
24
|
+
property "file_size", :integer
|
25
|
+
property "restriction", :text
|
26
|
+
property "uri", :string
|
27
|
+
property "notes", :text
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'active-fedora'
|
2
|
+
|
3
|
+
class SeminarAudioFile
|
4
|
+
|
5
|
+
include ActiveFedora::Model
|
6
|
+
|
7
|
+
# Imitating DataMapper ...
|
8
|
+
|
9
|
+
relationship "parent", :is_part_of, :seminar
|
10
|
+
#has n, :parents, {:predicate => :is_part_of, :likely_types => [:seminar]}
|
11
|
+
# OR
|
12
|
+
# is_part_of :seminar
|
13
|
+
|
14
|
+
property "date_recorded", :date
|
15
|
+
property "file_name", :string
|
16
|
+
property "duration", :string
|
17
|
+
property "uri", :string
|
18
|
+
property "notes", :text
|
19
|
+
|
20
|
+
# TODO: Figure out how to declare access restrictions
|
21
|
+
#property "restriction", :text
|
22
|
+
set_restrictions ["public", "private"]
|
23
|
+
|
24
|
+
# A file_size property doesn't make sense when you have both compressed and uncompressed in the same object!
|
25
|
+
# Probably better to rely on the file size in datastreamVersion "SIZE" attribute from Fedora anyway
|
26
|
+
#property "file_size", :integer
|
27
|
+
|
28
|
+
datastream "compressed", ["audio/mpeg"], :multiple => true
|
29
|
+
datastream "uncompressed", ["audio/wav", "audio/aiff"], :multiple => true
|
30
|
+
|
31
|
+
#has_metadata "dublin_core", :type => ActiveFedora::MetadataDatastream::QualifiedDublinCore
|
32
|
+
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<wrapper xmlns:foxml="info:fedora/fedora-system:def/foxml#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
3
|
+
xsi:schemaLocation="info:fedora/fedora-system:def/foxml# http://www.fedora.info/definitions/1/0/foxml1-1.xsd">
|
4
|
+
|
5
|
+
<foxml:datastream ID='dublin_core' STATE='A' CONTROL_GROUP='X' VERSIONABLE='true'>
|
6
|
+
<foxml:datastreamVersion SIZE='1726' ID='dublin_core.0' MIMETYPE='text/xml' LABEL='' CREATED='2009-01-15T17:55:49.277Z'>
|
7
|
+
<foxml:xmlContent>
|
8
|
+
<dc xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:dcterms='http://purl.org/dc/terms/'>
|
9
|
+
<dcterms:type xsi:type='DCMITYPE'>sound</dcterms:type>
|
10
|
+
<dcterms:medium>medium</dcterms:medium>
|
11
|
+
<dcterms:rights>rights</dcterms:rights>
|
12
|
+
<dcterms:language>English</dcterms:language>
|
13
|
+
<dcterms:temporal>tmp</dcterms:temporal>
|
14
|
+
<dcterms:subject>kw1</dcterms:subject>
|
15
|
+
<dcterms:subject>kw2</dcterms:subject>
|
16
|
+
<dcterms:creator>creator</dcterms:creator>
|
17
|
+
<dcterms:title>title</dcterms:title>
|
18
|
+
<dcterms:extent>extent</dcterms:extent>
|
19
|
+
<dcterms:format>audio/x-wav</dcterms:format>
|
20
|
+
<dcterms:subject xsi:type='LCSH'>sh1</dcterms:subject>
|
21
|
+
<dcterms:subject xsi:type='LCSH'>sh2</dcterms:subject>
|
22
|
+
<dcterms:spatial>sp1</dcterms:spatial>
|
23
|
+
<dcterms:spatial>sp2</dcterms:spatial>
|
24
|
+
<dcterms:publisher>jwa</dcterms:publisher>
|
25
|
+
<dcterms:alternative>alt</dcterms:alternative>
|
26
|
+
<dcterms:description>desc</dcterms:description>
|
27
|
+
<dcterms:date>datestr</dcterms:date>
|
28
|
+
</dc>
|
29
|
+
</foxml:xmlContent>
|
30
|
+
</foxml:datastreamVersion>
|
31
|
+
</foxml:datastream>
|
32
|
+
</wrapper>
|
@@ -0,0 +1,38 @@
|
|
1
|
+
<xml>
|
2
|
+
<fields>
|
3
|
+
<system_create_date>2008-07-02T05:09:42.015Z</system_create_date>
|
4
|
+
<system_modified_date>2008-09-29T21:21:52.892Z</system_modified_date>
|
5
|
+
<active_fedora_model_field>OralHistory</active_fedora_model_field>
|
6
|
+
<id>changeme:14527</id>
|
7
|
+
<subject_heading>subject heading</subject_heading>
|
8
|
+
<type>type</type>
|
9
|
+
<rights>rights</rights>
|
10
|
+
<publisher>publisher</publisher>
|
11
|
+
<creation_date>creation date</creation_date>
|
12
|
+
<identifier>jwa:sample_pid</identifier>
|
13
|
+
<format>format</format>
|
14
|
+
<extent>extent</extent>
|
15
|
+
<language>language</language>
|
16
|
+
<description>description</description>
|
17
|
+
<title>title</title>
|
18
|
+
<medium>medium</medium>
|
19
|
+
<spatial_coverage>spatial coverage</spatial_coverage>
|
20
|
+
<alt_title>alt_title</alt_title>
|
21
|
+
<temporal_coverage>temporal coverage</temporal_coverage>
|
22
|
+
<subject>subject</subject>
|
23
|
+
<creator>creator</creator>
|
24
|
+
<abstract>abstract</abstract>
|
25
|
+
<other_contributors>Sally Ride</other_contributors>
|
26
|
+
<transcript_editor>Transcript Editor</transcript_editor>
|
27
|
+
<restrictions>None</restrictions>
|
28
|
+
<bio>Biographic info</bio>
|
29
|
+
<series>My Series</series>
|
30
|
+
<notes>My Note</notes>
|
31
|
+
<location>location</location>
|
32
|
+
<hard_copy_availability>Yes</hard_copy_availability>
|
33
|
+
<narrator>Narrator</narrator>
|
34
|
+
<hard_copy_location>Archives</hard_copy_location>
|
35
|
+
<interviewer>Interviewer</interviewer>
|
36
|
+
</fields>
|
37
|
+
<content/>
|
38
|
+
</xml>
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require "active_fedora"
|
2
|
+
class OralHistorySampleModel < ActiveFedora::Base
|
3
|
+
|
4
|
+
has_relationship "parts", :is_part_of, :inbound => true
|
5
|
+
|
6
|
+
has_metadata :name => "properties", :type => ActiveFedora::MetadataDatastream do |m|
|
7
|
+
m.field "narrator", :string
|
8
|
+
m.field "interviewer", :string
|
9
|
+
m.field "transcript_editor", :text
|
10
|
+
m.field "bio", :string
|
11
|
+
m.field "notes", :text
|
12
|
+
m.field "hard_copy_availability", :text
|
13
|
+
m.field "hard_copy_location", :text
|
14
|
+
m.field "other_contributor", :string
|
15
|
+
m.field "restrictions", :text
|
16
|
+
m.field "series", :string
|
17
|
+
m.field "location", :string
|
18
|
+
end
|
19
|
+
|
20
|
+
has_metadata :name => "dublin_core", :type => ActiveFedora::QualifiedDublinCoreDatastream do |m|
|
21
|
+
m.field "creation_date", :date, :xml_node => "date"
|
22
|
+
m.field "abstract", :text, :xml_node => "abstract"
|
23
|
+
m.field "rights", :text, :xml_node => "rights"
|
24
|
+
m.field "subject_heading", :string, :xml_node => "subject", :encoding => "LCSH"
|
25
|
+
m.field "spatial_coverage", :string, :xml_node => "spatial", :encoding => "TGN"
|
26
|
+
m.field "temporal_coverage", :string, :xml_node => "temporal", :encoding => "Period"
|
27
|
+
m.field "type", :string, :xml_node => "type", :encoding => "DCMITYPE"
|
28
|
+
m.field "alt_title", :string, :xml_node => "alternative"
|
29
|
+
end
|
30
|
+
|
31
|
+
has_metadata :name => "significant_passages", :type => ActiveFedora::MetadataDatastream do |m|
|
32
|
+
m.field "significant_passage", :text
|
33
|
+
end
|
34
|
+
|
35
|
+
has_metadata :name => "sensitive_passages", :type => ActiveFedora::MetadataDatastream do |m|
|
36
|
+
m.field "sensitive_passage", :text
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
<doc>
|
2
|
+
<field name="system_create_date">2008-07-02T05:09:42.015Z</field>
|
3
|
+
<field name="system_modified_date">2008-09-29T21:21:52.892Z</field>
|
4
|
+
<field name="active_fedora_model_field">OralHistory</field>
|
5
|
+
<field name="id">changeme:13919</field>
|
6
|
+
<field name="subject_heading_field">subject heading</field>
|
7
|
+
<field name="type_field">type</field>
|
8
|
+
<field name="rights_text">rights</field>
|
9
|
+
<field name="publisher_field">publisher</field>
|
10
|
+
<field name="creation_date">creation date</field>
|
11
|
+
<field name="identifier_field">jwa:sample_pid</field>
|
12
|
+
<field name="format_field">format</field>
|
13
|
+
<field name="extent_field">extent</field>
|
14
|
+
<field name="language_field">language</field>
|
15
|
+
<field name="description_field">description</field>
|
16
|
+
<field name="title_field">title</field>
|
17
|
+
<field name="medium_field">medium</field>
|
18
|
+
<field name="spatial_coverage_field">spatial coverage</field>
|
19
|
+
<field name="alt_title_field">alt_title</field>
|
20
|
+
<field name="temporal_coverage_field">temporal coverage</field>
|
21
|
+
<field name="subject_field">subject</field>
|
22
|
+
<field name="creator_field">creator</field>
|
23
|
+
<field name="abstract_text">abstract</field>
|
24
|
+
<field name="other_contributors_field">Sally Ride</field>
|
25
|
+
<field name="transcript_editor_text">Transcript Editor</field>
|
26
|
+
<field name="restrictions_text">None</field>
|
27
|
+
<field name="bio_field">Biographic info</field>
|
28
|
+
<field name="series_field">My Series</field>
|
29
|
+
<field name="notes_text">My Note</field>
|
30
|
+
<field name="location_field">location</field>
|
31
|
+
<field name="hard_copy_availability_text">Yes</field>
|
32
|
+
<field name="narrator_field">Narrator</field>
|
33
|
+
<field name="hard_copy_location_text">Archives</field>
|
34
|
+
<field name="interviewer_integer">Interviewer</field>
|
35
|
+
</doc>
|
data/spec/spec.opts
ADDED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
gem 'mocha'
|
3
|
+
require 'ruby-debug'
|
4
|
+
require 'mocha'
|
5
|
+
require 'ruby-fedora'
|
6
|
+
begin
|
7
|
+
require 'spec'
|
8
|
+
rescue LoadError
|
9
|
+
gem 'rspec'
|
10
|
+
require 'spec'
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
$:.unshift(File.dirname(__FILE__) + '/../lib')
|
15
|
+
Dir[File.join(File.dirname(__FILE__)+'/../lib/')+'**/*.rb'].each{|x| require x}
|
16
|
+
$VERBOSE=nil
|
17
|
+
|
18
|
+
# This loads the Fedora and Solr config info from /config/fedora.yml
|
19
|
+
# You can load it from a different location by passing a file path as an argument.
|
20
|
+
ActiveFedora.init(File.join(File.dirname(__FILE__), "..", "config", "fedora.yml"))
|
21
|
+
|
22
|
+
Spec::Runner.configure do |config|
|
23
|
+
config.mock_with :mocha
|
24
|
+
end
|
25
|
+
|
26
|
+
#TEST_FEDORA_URL = 'http://fedoraAdmin:fedoraAdmin@127.0.0.1:8080/fedora'
|
27
|
+
#TEST_SOLR_URL = 'http://127.0.0.1:8080/solr'
|
28
|
+
#Fedora::Repository.register(TEST_FEDORA_URL)
|
29
|
+
#ActiveFedora::SolrService.register(TEST_SOLR_URL)
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
def fixture(file)
|
34
|
+
File.new(File.join(File.dirname(__FILE__), 'fixtures', file))
|
35
|
+
end
|
36
|
+
|
37
|
+
def validate_xml(xml, expected_root)
|
38
|
+
root = REXML::Document.new(xml).root
|
39
|
+
root.should_not be_nil
|
40
|
+
root.name.should == expected_root
|
41
|
+
end
|