fedora-migrate 0.0.1 → 0.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.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Gemfile +1 -0
  4. data/LICENSE +14 -0
  5. data/README.md +201 -6
  6. data/config/jetty.yml +2 -2
  7. data/fedora-migrate.gemspec +7 -6
  8. data/lib/fedora-migrate.rb +7 -24
  9. data/lib/fedora_migrate/content_mover.rb +49 -0
  10. data/lib/fedora_migrate/datastream_mover.rb +19 -34
  11. data/lib/fedora_migrate/datastream_verification.rb +36 -0
  12. data/lib/fedora_migrate/dates_mover.rb +14 -0
  13. data/lib/fedora_migrate/hooks.rb +23 -0
  14. data/lib/fedora_migrate/migration_options.rb +18 -0
  15. data/lib/fedora_migrate/mover.rb +12 -0
  16. data/lib/fedora_migrate/object_mover.rb +20 -9
  17. data/lib/fedora_migrate/rdf_datastream_mover.rb +31 -14
  18. data/lib/fedora_migrate/rels_ext_datastream_mover.rb +28 -62
  19. data/lib/fedora_migrate/repository_migrator.rb +30 -25
  20. data/lib/fedora_migrate/rubydora_connection.rb +0 -2
  21. data/lib/fedora_migrate/target_constructor.rb +39 -0
  22. data/lib/fedora_migrate/version.rb +1 -1
  23. data/spec/fixtures/objects/scholarsphere_5712mc568.xml +7284 -0
  24. data/spec/fixtures/objects/scholarsphere_7d279232g.xml +20120 -0
  25. data/spec/fixtures/objects/scholarsphere_sf2686078.xml +8823 -0
  26. data/spec/fixtures/objects/scholarsphere_x346dj04v.xml +188 -0
  27. data/spec/fixtures/objects/scholarsphere_x346dj06d.xml +255 -0
  28. data/spec/fixtures/objects/scholarsphere_x346dj08z.xml +1242 -0
  29. data/spec/fixtures/objects/sufia_5m60qr94g.xml +68 -0
  30. data/spec/fixtures/objects/sufia_5m60qr95r.xml +133 -0
  31. data/spec/fixtures/objects/sufia_5m60qr961.xml +133 -0
  32. data/spec/fixtures/objects/sufia_5m60qr979.xml +118 -0
  33. data/spec/integration/content_versions_spec.rb +24 -1
  34. data/spec/integration/missing_relationships_spec.rb +30 -0
  35. data/spec/integration/object_migration_spec.rb +49 -5
  36. data/spec/integration/rdf_migration_spec.rb +38 -13
  37. data/spec/integration/relationship_migration_spec.rb +10 -9
  38. data/spec/integration/repository_migration_spec.rb +46 -19
  39. data/spec/integration/versions_spec.rb +32 -0
  40. data/spec/spec_helper.rb +8 -1
  41. data/spec/support/example_model.rb +56 -0
  42. data/spec/unit/content_mover_spec.rb +78 -0
  43. data/spec/unit/datastream_verification_spec.rb +60 -0
  44. data/spec/unit/dates_mover_spec.rb +33 -0
  45. data/spec/unit/migration_options_spec.rb +61 -0
  46. data/spec/unit/mover_spec.rb +35 -1
  47. data/spec/unit/object_mover_spec.rb +1 -3
  48. data/spec/unit/rels_ext_datastream_mover_spec.rb +28 -18
  49. data/spec/unit/repository_migrator_spec.rb +16 -5
  50. data/spec/unit/target_constructor_spec.rb +34 -0
  51. data/tasks/dev.rake +1 -1
  52. metadata +80 -38
  53. data/LICENSE.txt +0 -22
  54. data/lib/fedora_migrate/rdf_datastream_parser.rb +0 -29
  55. data/lib/fedora_migrate/triple_converter.rb +0 -39
  56. data/spec/fixtures/datastreams/rdf_ntriples_datastream.txt +0 -2
  57. data/spec/unit/rdf_datastream_mover_spec.rb +0 -8
  58. data/spec/unit/rdf_datastream_parser_spec.rb +0 -38
  59. data/spec/unit/triple_converter_spec.rb +0 -35
@@ -9,6 +9,20 @@ describe "Versioned content" do
9
9
  )
10
10
  end
11
11
 
12
+ let(:application_mover) do
13
+ FedoraMigrate::DatastreamMover.new(
14
+ FedoraMigrate.source.connection.find("sufia:rb68xc089").datastreams["content"],
15
+ ExampleModel::VersionedContent.create.attached_files["content"],
16
+ { application_creates_versions: true }
17
+ )
18
+ end
19
+
20
+ it "calls the before and after hooks when migrating" do
21
+ expect(mover).to receive(:before_datastream_migration)
22
+ expect(mover).to receive(:after_datastream_migration)
23
+ mover.migrate
24
+ end
25
+
12
26
  context "with migrating versions" do
13
27
  subject do
14
28
  mover.migrate
@@ -21,7 +35,16 @@ describe "Versioned content" do
21
35
  expect(subject.mime_type).to eql "image/png"
22
36
  expect(subject.original_name).to eql "world.png"
23
37
  end
24
- end
38
+ context "and the application creates the versions" do
39
+ subject do
40
+ application_mover.migrate
41
+ application_mover.target
42
+ end
43
+ it "FedoraMigrate creates no versions" do
44
+ expect(subject.versions.count).to eql 0
45
+ end
46
+ end
47
+ end
25
48
 
26
49
  context "without migrating versions" do
27
50
  subject do
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Collections with missing files" do
4
+
5
+ let(:collection) { "x346dj04v" }
6
+ let(:files) { ["x346dj06d", "x346dj08z"] }
7
+ let(:missing_file) { "x346dj07p" }
8
+
9
+ before do
10
+ FedoraMigrate::ObjectMover.new(FedoraMigrate.find("scholarsphere:#{collection}"), ExampleModel::Collection.new(collection)).migrate
11
+ files.each { |f| FedoraMigrate::ObjectMover.new(FedoraMigrate.find("scholarsphere:#{f}"), ExampleModel::MigrationObject.new(f)).migrate }
12
+ end
13
+
14
+ context "when migrating relationships" do
15
+
16
+ let(:migrated_collection) { ExampleModel::Collection.first }
17
+ let(:error_message) do
18
+ "scholarsphere:#{collection} could not migrate relationship info:fedora/fedora-system:def/relations-external#hasCollectionMember because info:fedora/scholarsphere:#{missing_file} doesn't exist in Fedora 4"
19
+ end
20
+
21
+ it "should only migrate existing relationships and log failed ones" do
22
+ expect(FedoraMigrate::Logger).to receive(:warn).with(error_message)
23
+ FedoraMigrate::RelsExtDatastreamMover.new(FedoraMigrate.find("scholarsphere:#{collection}")).migrate
24
+ expect(migrated_collection.members.count).to eql 2
25
+ expect(migrated_collection.member_ids).to_not include(missing_file)
26
+ end
27
+
28
+ end
29
+
30
+ end
@@ -8,7 +8,7 @@ describe "Migrating an object" do
8
8
  context "when the target model is provided" do
9
9
 
10
10
  let(:mover) { FedoraMigrate::ObjectMover.new source, ExampleModel::MigrationObject.new }
11
-
11
+
12
12
  subject do
13
13
  mover.migrate
14
14
  mover.target
@@ -27,6 +27,18 @@ describe "Migrating an object" do
27
27
  expect(subject.edit_users).to include("jilluser@example.com")
28
28
  end
29
29
 
30
+ describe "objects with Om datastreams" do
31
+ let(:mover) { FedoraMigrate::ObjectMover.new(source, ExampleModel::OmDatastreamExample.new) }
32
+ subject do
33
+ mover.migrate
34
+ mover.target
35
+ end
36
+ it "should migrate the object without warnings" do
37
+ expect(FedoraMigrate::Logger).to_not receive(:warn)
38
+ expect(subject.characterization.ng_xml).to be_equivalent_to(fits_xml)
39
+ end
40
+ end
41
+
30
42
  end
31
43
 
32
44
  context "when we have to determine the model" do
@@ -64,7 +76,7 @@ describe "Migrating an object" do
64
76
  Object.send(:remove_const, :GenericFile) if defined?(GenericFile)
65
77
  end
66
78
  it "should fail" do
67
- expect{mover.migrate}.to raise_error(NameError)
79
+ expect{mover.migrate}.to raise_error(FedoraMigrate::Errors::MigrationError)
68
80
  end
69
81
  end
70
82
 
@@ -74,7 +86,7 @@ describe "Migrating an object" do
74
86
 
75
87
  context "and we want to convert it to a provided model" do
76
88
  let(:mover) { FedoraMigrate::ObjectMover.new(source, ExampleModel::RDFObject.new, {convert: "descMetadata"}) }
77
-
89
+
78
90
  subject do
79
91
  mover.migrate
80
92
  mover.target
@@ -90,13 +102,32 @@ describe "Migrating an object" do
90
102
  expect(subject.title).to eql(["world.png"])
91
103
  end
92
104
 
105
+ it "should migrate the createdDate and lastModifiedDate" do
106
+ # The value of lastModifiedDate will depend on when you loaded your test fixtures
107
+ expect(subject.date_modified).to eq source.lastModifiedDate
108
+ expect(subject.date_uploaded).to eq '2014-10-15T03:50:37.063Z'
109
+ end
110
+ end
111
+
112
+ context "with ISO-8859-1 characters" do
113
+ let(:problem_source) { FedoraMigrate.source.connection.find("scholarsphere:5712mc568") }
114
+ let(:mover) { FedoraMigrate::ObjectMover.new(problem_source, ExampleModel::RDFObject.new, {convert: "descMetadata"}) }
115
+ subject do
116
+ mover.migrate
117
+ mover.target
118
+ end
119
+
120
+ it "should migrate the content" do
121
+ expect(subject.description.first).to match(/^The relationship between school administrators and music teachers/)
122
+ end
123
+
93
124
  end
94
125
 
95
126
  context "and we want to convert multiple datastreas" do
96
127
 
97
- # Need a fixture with two different datastreams for this test to be more effective
128
+ # Need a fixture with two different datastreams for this test to be more effective
98
129
  let(:mover) { FedoraMigrate::ObjectMover.new(source, ExampleModel::RDFObject.new, {convert: ["descMetadata", "descMetadata"]}) }
99
-
130
+
100
131
  subject do
101
132
  mover.migrate
102
133
  mover.target
@@ -107,6 +138,19 @@ describe "Migrating an object" do
107
138
  end
108
139
  end
109
140
 
141
+ context "with RDF errors" do
142
+ let(:problem_source) { FedoraMigrate.source.connection.find("scholarsphere:sf2686078") }
143
+ let(:mover) { FedoraMigrate::ObjectMover.new(problem_source, ExampleModel::RDFObject.new, {convert: "descMetadata"}) }
144
+ subject do
145
+ mover.migrate
146
+ mover.target
147
+ end
148
+
149
+ it "should migrate the content" do
150
+ expect(subject.title).to eql([" The \"Value Added\" in Editorial Acquisitions.pdf"])
151
+ end
152
+ end
153
+
110
154
  end
111
155
 
112
156
  end
@@ -1,22 +1,47 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "Mirating RDF terms" do
4
+ let(:mover) { FedoraMigrate::RDFDatastreamMover.new(file, ExampleModel::RDFProperties.new) }
4
5
 
5
- let(:mover) do
6
- FedoraMigrate::RDFDatastreamMover.new(
7
- FedoraMigrate.source.connection.find("sufia:xp68km39w").datastreams["descMetadata"],
8
- ExampleModel::RDFProperties.new
9
- )
10
- end
6
+ context "normal record" do
11
7
 
12
- subject do
13
- mover.migrate
14
- mover.target
15
- end
8
+ let(:file) { FedoraMigrate.source.connection.find("sufia:xp68km39w").datastreams["descMetadata"] }
9
+
10
+ it "should call the before and after hooks when migrating" do
11
+ expect(mover).to receive(:before_rdf_datastream_migration)
12
+ expect(mover).to receive(:after_rdf_datastream_migration)
13
+ mover.migrate
14
+ end
16
15
 
17
- it "adds each triple to a new Fedora4 resource" do
18
- expect(subject.title.first).to eql "Sample Migration Object A"
19
- expect(subject.creator.first).to eql "Adam Wead"
16
+ describe "using triples" do
17
+ subject do
18
+ mover.migrate
19
+ mover.target
20
+ end
21
+
22
+ it "adds each triple to a new Fedora4 resource" do
23
+ expect(subject.title.first).to eql "Sample Migration Object A"
24
+ expect(subject.creator.first).to eql "Adam Wead"
25
+ end
26
+ end
20
27
  end
21
28
 
29
+ context "record with UTF8 chracters" do
30
+
31
+ let(:file) { FedoraMigrate.source.connection.find("scholarsphere:7d279232g").datastreams["descMetadata"] }
32
+
33
+ describe "using triples" do
34
+ subject do
35
+ mover.migrate
36
+ mover.target
37
+ end
38
+
39
+ it "adds each triple to a new Fedora4 resource" do
40
+ expect(subject.title.first).to eql "Emerging Role of Genomic Profiling of Advanced Tumors to Aid in Treatment Selection: What Nurses Should Know"
41
+ expect(subject.creator.first).to eql "Eileen Bannon, RN, MSN, OCN, CBCN"
42
+ expect(subject.description.first). to eql "Objectives:\r\n• Explain the role of a new genomic assay (Target Now™) in guiding oncology treatment plans.\r\n• Describe the Target Now™ assay.\r\n• Present a case study where Target Now™ was instrumental in the patient’s treatment plan."
43
+ end
44
+ end
45
+
46
+ end
22
47
  end
@@ -4,7 +4,7 @@ describe "Migrating objects with relationships" do
4
4
 
5
5
  before :all do
6
6
  class GenericFile < ActiveFedora::Base
7
- belongs_to :batch, predicate: ActiveFedora::RDF::RelsExt.isPartOf
7
+ belongs_to :batch, predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isPartOf
8
8
  property :title, predicate: ::RDF::DC.title do |index|
9
9
  index.as :stored_searchable, :facetable
10
10
  end
@@ -14,14 +14,14 @@ describe "Migrating objects with relationships" do
14
14
  end
15
15
 
16
16
  class Batch < ActiveFedora::Base
17
- has_many :generic_files, predicate: ActiveFedora::RDF::RelsExt.isPartOf
17
+ has_many :generic_files, predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isPartOf
18
18
  end
19
19
  end
20
20
 
21
21
  after :all do
22
22
  Object.send(:remove_const, :GenericFile) if defined?(GenericFile)
23
23
  end
24
-
24
+
25
25
  let(:parent_source) { FedoraMigrate.source.connection.find("sufia:rb68xc09k") }
26
26
  let(:child_source) { FedoraMigrate.source.connection.find("sufia:rb68xc11m") }
27
27
 
@@ -32,18 +32,19 @@ describe "Migrating objects with relationships" do
32
32
  FedoraMigrate::ObjectMover.new(child_source).migrate
33
33
  end
34
34
 
35
- describe "migrating the parent object's relationships" do
35
+ subject { Batch.find("rb68xc09k") }
36
36
 
37
+ describe "migrating the parent object's relationships" do
37
38
  before do
38
39
  FedoraMigrate::RelsExtDatastreamMover.new(child_source).migrate
39
40
  end
40
-
41
- subject { Batch.find("rb68xc09k") }
42
-
43
- specify "you can migrate the parent object's relationships" do
41
+ specify "should connect the child to the parent" do
42
+ expect(subject.generic_files.count).to eql 1
43
+ end
44
+ specify "is repeatable" do
45
+ FedoraMigrate::RelsExtDatastreamMover.new(child_source).migrate
44
46
  expect(subject.generic_files.count).to eql 1
45
47
  end
46
-
47
48
  end
48
49
 
49
50
  end
@@ -7,23 +7,21 @@ describe "Migrating the repository" do
7
7
  before do
8
8
  Object.send(:remove_const, :GenericFile) if defined?(GenericFile)
9
9
  Object.send(:remove_const, :Batch) if defined?(Batch)
10
+ Object.send(:remove_const, :Collection) if defined?(Collection)
10
11
  end
11
12
 
12
- subject do
13
- results = FedoraMigrate.migrate_repository(namespace: "sufia", options: {convert: "descMetadata"})
14
- results.map { |e| e.values }.flatten
13
+ it "should log warnings" do
14
+ expect(FedoraMigrate::Logger).to receive(:warn).at_least(6).times
15
+ FedoraMigrate.migrate_repository(namespace: "sufia", options: {convert: "descMetadata"})
15
16
  end
16
- it { is_expected.to include("uninitialized constant GenericFile")}
17
- it { is_expected.to include("uninitialized constant Batch")}
18
- it { is_expected.to include("Source was not found in Fedora4. Did you migrated it?")}
19
17
  end
20
18
 
21
- context "with all target objects are defined" do
19
+ context "when all target objects are defined" do
22
20
 
23
21
  before do
24
22
  Object.send(:remove_const, :GenericFile) if defined?(GenericFile)
25
23
  class GenericFile < ExampleModel::MigrationObject
26
- belongs_to :batch, predicate: ActiveFedora::RDF::RelsExt.isPartOf
24
+ belongs_to :batch, predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isPartOf
27
25
  property :title, predicate: ::RDF::DC.title do |index|
28
26
  index.as :stored_searchable, :facetable
29
27
  end
@@ -32,28 +30,57 @@ describe "Migrating the repository" do
32
30
  end
33
31
  end
34
32
 
35
- Object.send(:remove_const, :Batch) if defined?(Batch)
33
+ Object.send(:remove_const, :Batch) if defined?(Batch)
36
34
  class Batch < ActiveFedora::Base
37
- has_many :generic_files, predicate: ActiveFedora::RDF::RelsExt.isPartOf
35
+ has_many :generic_files, predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isPartOf
36
+ end
37
+
38
+ Object.send(:remove_const, :Collection) if defined?(Collection)
39
+ class Collection < ExampleModel::Collection
38
40
  end
39
41
  end
40
42
 
41
43
  after do
42
44
  Object.send(:remove_const, :GenericFile) if defined?(GenericFile)
43
45
  Object.send(:remove_const, :Batch) if defined?(Batch)
46
+ Object.send(:remove_const, :Collection) if defined?(Collection)
44
47
  end
45
48
 
46
- it "should move every object" do
47
- results = FedoraMigrate.migrate_repository(namespace: "sufia", options: {convert: "descMetadata"})
48
- expect(results.collect { |r| r.values}.flatten.uniq).to eql [true]
49
- expect(GenericFile.find("rb68xc089").title).to eql(["world.png"])
50
- expect(GenericFile.find("xp68km39w").title).to eql(["Sample Migration Object A"])
51
- expect(GenericFile.find("xp68km39w").creator).to eql(["Adam Wead"])
52
- expect(GenericFile.all.count).to eql 4
53
- expect(Batch.all.count).to eql 1
54
- expect(Batch.first.generic_files.count).to eql 2
49
+ let(:file1) { GenericFile.find("rb68xc089") }
50
+ let(:file2) { GenericFile.find("xp68km39w") }
51
+ let(:versions_report) { GenericFile.all.map { |f| f.content.versions.count }.uniq }
52
+
53
+ context "by default" do
54
+ before do
55
+ FedoraMigrate.migrate_repository(namespace: "sufia", options: {convert: "descMetadata"})
56
+ end
57
+ it "should move every object and its versions" do
58
+ expect(file1.title).to eql ["world.png"]
59
+ expect(file2.title).to eql ["Sample Migration Object A"]
60
+ expect(file2.creator).to eql ["Adam Wead"]
61
+ expect(GenericFile.all.count).to eql 6
62
+ expect(Batch.all.count).to eql 2
63
+ expect(Batch.all.first.generic_files.count).to eql 2
64
+ expect(Batch.all.last.generic_files.count).to eql 2
65
+ expect(Collection.all.count).to eql 1
66
+ expect(Collection.first.members.count).to eql 2
67
+ expect(versions_report).to match_array [0,3,9]
68
+ end
69
+ end
70
+
71
+ context "and the application will create versions" do
72
+ before do
73
+ FedoraMigrate.migrate_repository(namespace: "sufia",
74
+ options: {convert: "descMetadata", application_creates_versions: true}
75
+ )
76
+ end
77
+ it "should move every object but not its versions" do
78
+ expect(file1.title).to eql ["world.png"]
79
+ expect(versions_report).to eql [0]
80
+ end
55
81
  end
56
82
 
57
83
  end
58
84
 
59
85
  end
86
+
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Versions" do
4
+
5
+ let(:source) { FedoraMigrate.source.connection.find("sufia:rb68xc089") }
6
+ let(:mover) { FedoraMigrate::ObjectMover.new source, ExampleModel::MigrationObject.new }
7
+
8
+ subject do
9
+ mover.migrate
10
+ mover.target
11
+ end
12
+
13
+ # Query the metadata node for a given version and return its hasDateCreatedByApplication expressed as an integer
14
+ def date_created_by_application version
15
+ uri = subject.content.versions.with_label(version).uri
16
+ response = ActiveFedora.fedora.connection.get(uri+"/fcr:metadata")
17
+ graph = ::RDF::Graph.new << ::RDF::Reader.for(:ttl).new(response.body)
18
+ value = graph.query(predicate: RDF::URI("http://www.loc.gov/premis/rdf/v1#hasDateCreatedByApplication")).first.object.to_s
19
+ DateTime.iso8601(value).to_i
20
+ end
21
+
22
+ def desc_metadata_source_versions
23
+ source.datastreams["descMetadata"].versions.sort { |a,b| a.createDate <=> b.createDate }
24
+ end
25
+
26
+ it "should be migrated in the order they were created with their original creation dates" do
27
+ expect(desc_metadata_source_versions[0].createDate.to_i).to eql date_created_by_application("version1")
28
+ expect(desc_metadata_source_versions[1].createDate.to_i).to eql date_created_by_application("version2")
29
+ expect(desc_metadata_source_versions[2].createDate.to_i).to eql date_created_by_application("version3")
30
+ end
31
+
32
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,13 +1,20 @@
1
1
  require 'byebug' unless ENV['TRAVIS']
2
+ ENV['RAILS_ENV'] = "test"
3
+
2
4
  require 'fedora-migrate'
3
5
  require 'equivalent-xml/rspec_matchers'
4
6
  require 'support/example_model'
5
7
  require 'active_fedora/cleaner'
6
- ENV['environment'] = "test"
7
8
 
9
+ require 'http_logger'
8
10
  ActiveFedora::Base.logger = Logger.new(STDERR)
9
11
  ActiveFedora::Base.logger.level = Logger::WARN
10
12
 
13
+ # HttpLogger.logger = Logger.new(STDOUT)
14
+ # HttpLogger.ignore = [/(127\.0\.0\.1|localhost):8983\/solr/]
15
+ # HttpLogger.colorize = false
16
+ # HttpLogger.log_headers = true
17
+
11
18
  RSpec.configure do |config|
12
19
  config.expect_with :rspec do |expectations|
13
20
  expectations.include_chain_clauses_in_custom_matcher_descriptions = true
@@ -1,3 +1,34 @@
1
+ # Shenanigans because we're not in a Rails environment and we need to load bits of
2
+ # code that depend on Rails in order to test migrating objects.
3
+ Hydra::Engine.config.autoload_paths.each { |path| $LOAD_PATH.unshift path }
4
+ # in gem version 2.4, .find_by_name isn't pulling up gems given in the Gemfile
5
+ # as opposed to those in the gemspec file.
6
+ # This is a workaround:
7
+ Gem::Specification.all.each do |g|
8
+ HAC_DIR = g.gem_dir if g.name.match("hydra-access-controls")
9
+ HCL_DIR = g.gem_dir if g.name.match("hydra-collections")
10
+ HCR_DIR = g.gem_dir if g.name.match("hydra-core")
11
+ end
12
+
13
+ # Load Rails-specific bits of hydra-access-controls
14
+ require HAC_DIR+'/app/vocabularies/acl'
15
+ require HAC_DIR+'/app/vocabularies/hydra/acl'
16
+ require HAC_DIR+'/app/models/role_mapper'
17
+ require HAC_DIR+'/app/models/ability'
18
+ require HAC_DIR+'/app/models/hydra/access_controls/access_control_list'
19
+ require HAC_DIR+'/app/models/hydra/access_controls/permission'
20
+ require HAC_DIR+'/app/models/hydra/access_controls/embargo'
21
+ require HAC_DIR+'/app/models/hydra/access_controls/lease'
22
+ require HAC_DIR+'/app/models/concerns/hydra/with_depositor'
23
+ require HAC_DIR+'/app/services/hydra/lease_service'
24
+ require HAC_DIR+'/app/services/hydra/embargo_service'
25
+ require HAC_DIR+'/app/validators/hydra/future_date_validator'
26
+
27
+ # Loading hydra-collections
28
+ require 'hydra-collections'
29
+ require HCR_DIR+'/app/models/concerns/hydra/model_methods'
30
+ require HCL_DIR+'/app/models/concerns/hydra/collection'
31
+
1
32
  module ExampleModel
2
33
 
3
34
  class RDFProperties < ActiveFedora::Base
@@ -7,6 +38,10 @@ module ExampleModel
7
38
  property :creator, predicate: ::RDF::DC.creator do |index|
8
39
  index.as :stored_searchable, :facetable
9
40
  end
41
+ property :description, predicate: ::RDF::DC.description do |index|
42
+ index.type :text
43
+ index.as :stored_searchable
44
+ end
10
45
  end
11
46
 
12
47
  class VersionedDatastream < ActiveFedora::File
@@ -24,13 +59,34 @@ module ExampleModel
24
59
  contains "characterization", class_name: "ActiveFedora::File"
25
60
  end
26
61
 
62
+ class OmDatastreamExample < ActiveFedora::Base
63
+ contains "characterization", class_name: "ActiveFedora::OmDatastream"
64
+ end
65
+
27
66
  class RDFObject < ActiveFedora::Base
28
67
  property :title, predicate: ::RDF::DC.title do |index|
29
68
  index.as :stored_searchable, :facetable
30
69
  end
70
+
71
+ property :description, predicate: ::RDF::DC.description
72
+
73
+ property :date_uploaded, predicate: ::RDF::DC.dateSubmitted, multiple: false do |index|
74
+ index.type :date
75
+ index.as :stored_sortable
76
+ end
77
+
78
+ property :date_modified, predicate: ::RDF::DC.modified, multiple: false do |index|
79
+ index.type :date
80
+ index.as :stored_sortable
81
+ end
82
+
31
83
  contains "content", class_name: "ExampleModel::VersionedDatastream"
32
84
  contains "thumbnail", class_name: "ActiveFedora::File"
33
85
  contains "characterization", class_name: "ActiveFedora::File"
34
86
  end
35
87
 
88
+ class Collection < ActiveFedora::Base
89
+ include Hydra::Collection
90
+ end
91
+
36
92
  end