hydra-pcdm 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.
- checksums.yaml +4 -4
- data/.travis.yml +4 -0
- data/Gemfile +0 -4
- data/README.md +2 -2
- data/hydra-pcdm.gemspec +2 -1
- data/lib/hydra/pcdm.rb +21 -30
- data/lib/hydra/pcdm/ancestor_checker.rb +18 -0
- data/lib/hydra/pcdm/collection_indexer.rb +2 -2
- data/lib/hydra/pcdm/deep_member_iterator.rb +31 -0
- data/lib/hydra/pcdm/models/concerns/collection_behavior.rb +20 -57
- data/lib/hydra/pcdm/models/concerns/object_behavior.rb +12 -37
- data/lib/hydra/pcdm/models/concerns/pcdm_behavior.rb +34 -0
- data/lib/hydra/pcdm/object_indexer.rb +1 -1
- data/lib/hydra/pcdm/services/file/get_mime_type.rb +1 -1
- data/lib/hydra/pcdm/validators.rb +8 -0
- data/lib/hydra/pcdm/validators/ancestor_validator.rb +26 -0
- data/lib/hydra/pcdm/validators/composite_validator.rb +17 -0
- data/lib/hydra/pcdm/validators/pcdm_object_validator.rb +9 -0
- data/lib/hydra/pcdm/validators/pcdm_validator.rb +9 -0
- data/lib/hydra/pcdm/version.rb +1 -1
- data/lib/hydra/pcdm/vocab/pcdm_terms.rb +1 -1
- data/spec/hydra/pcdm/ancestor_checker_spec.rb +29 -0
- data/spec/hydra/pcdm/collection_indexer_spec.rb +11 -11
- data/spec/hydra/pcdm/deep_member_iterator_spec.rb +52 -0
- data/spec/hydra/pcdm/models/collection_spec.rb +691 -17
- data/spec/hydra/pcdm/models/file_spec.rb +16 -0
- data/spec/hydra/pcdm/models/object_spec.rb +576 -27
- data/spec/hydra/pcdm/object_indexer_spec.rb +6 -6
- data/spec/spec_helper.rb +8 -1
- metadata +31 -52
- data/lib/hydra/pcdm/services/collection/add_collection.rb +0 -20
- data/lib/hydra/pcdm/services/collection/add_object.rb +0 -19
- data/lib/hydra/pcdm/services/collection/add_related_object.rb +0 -21
- data/lib/hydra/pcdm/services/collection/get_collections.rb +0 -18
- data/lib/hydra/pcdm/services/collection/get_objects.rb +0 -18
- data/lib/hydra/pcdm/services/collection/get_related_objects.rb +0 -17
- data/lib/hydra/pcdm/services/collection/remove_collection.rb +0 -36
- data/lib/hydra/pcdm/services/collection/remove_object.rb +0 -43
- data/lib/hydra/pcdm/services/collection/remove_related_object.rb +0 -36
- data/lib/hydra/pcdm/services/object/add_object.rb +0 -20
- data/lib/hydra/pcdm/services/object/add_related_object.rb +0 -21
- data/lib/hydra/pcdm/services/object/get_objects.rb +0 -18
- data/lib/hydra/pcdm/services/object/get_related_objects.rb +0 -17
- data/lib/hydra/pcdm/services/object/remove_object.rb +0 -43
- data/lib/hydra/pcdm/services/object/remove_related_object.rb +0 -36
- data/spec/hydra/pcdm/services/collection/add_collection_spec.rb +0 -197
- data/spec/hydra/pcdm/services/collection/add_object_spec.rb +0 -132
- data/spec/hydra/pcdm/services/collection/add_related_object_spec.rb +0 -94
- data/spec/hydra/pcdm/services/collection/get_collections_spec.rb +0 -40
- data/spec/hydra/pcdm/services/collection/get_objects_spec.rb +0 -40
- data/spec/hydra/pcdm/services/collection/get_related_objects_spec.rb +0 -37
- data/spec/hydra/pcdm/services/collection/remove_collection_spec.rb +0 -143
- data/spec/hydra/pcdm/services/collection/remove_object_spec.rb +0 -180
- data/spec/hydra/pcdm/services/collection/remove_related_object_spec.rb +0 -146
- data/spec/hydra/pcdm/services/file/add_type_spec.rb +0 -19
- data/spec/hydra/pcdm/services/object/add_object_spec.rb +0 -186
- data/spec/hydra/pcdm/services/object/add_related_object_spec.rb +0 -94
- data/spec/hydra/pcdm/services/object/get_objects_spec.rb +0 -33
- data/spec/hydra/pcdm/services/object/get_related_objects_spec.rb +0 -39
- data/spec/hydra/pcdm/services/object/remove_object_spec.rb +0 -158
- data/spec/hydra/pcdm/services/object/remove_related_object_spec.rb +0 -126
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c08bc42e4a5ea8d987f0830db5474b9e2d7c1ada
|
|
4
|
+
data.tar.gz: 7f3e582637ddb0254b8cc399ab71d45f9f7ac482
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 70d9932eddb9b3c3581ef2d14e7628fa15b6034d4dc607d3d92df74ea92ce19d40b5f5712b6eb2ef8421f3f4cd59a382dc683368eec2a2a123f8a4790bdcd913
|
|
7
|
+
data.tar.gz: b5b4827cc4a421cb9f35821d48504c0cbf4c072e191fad3bf29bcdbcdcb76275de3846c0e124f60e47c45d606a8a4b80967f6ee2cb780c29a03a1c84009e41a3
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -33,12 +33,12 @@ We are using [Web ACL](http://www.w3.org/wiki/WebAccessControl) as implemented b
|
|
|
33
33
|
|
|
34
34
|
## PCDM Model
|
|
35
35
|
|
|
36
|
-
Reference: [Portland Common Data Model](https://
|
|
36
|
+
Reference: [Portland Common Data Model](https://github.com/duraspace/pcdm/wiki)
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
### Model Definition
|
|
40
40
|
|
|
41
|
-

|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
### Example
|
data/hydra-pcdm.gemspec
CHANGED
|
@@ -19,7 +19,8 @@ Gem::Specification.new do |spec|
|
|
|
19
19
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
20
20
|
spec.require_paths = ["lib"]
|
|
21
21
|
|
|
22
|
-
spec.add_dependency 'activefedora-aggregation', '~> 0.
|
|
22
|
+
spec.add_dependency 'activefedora-aggregation', '~> 0.4'
|
|
23
|
+
spec.add_dependency 'mime-types', '>= 1'
|
|
23
24
|
|
|
24
25
|
spec.add_development_dependency 'bundler', '~> 1.6'
|
|
25
26
|
spec.add_development_dependency 'jettywrapper', '>= 2.0.0'
|
data/lib/hydra/pcdm.rb
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
require 'active_support'
|
|
2
|
+
require 'mime/types'
|
|
3
|
+
require 'active_fedora/aggregation'
|
|
4
|
+
|
|
2
5
|
|
|
3
6
|
module Hydra
|
|
4
7
|
module PCDM
|
|
@@ -10,59 +13,47 @@ module Hydra
|
|
|
10
13
|
autoload :SweetjplVocabularies, 'hydra/pcdm/vocab/sweetjpl_terms'
|
|
11
14
|
|
|
12
15
|
# models
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
+
autoload_under 'models' do
|
|
17
|
+
autoload :Collection
|
|
18
|
+
autoload :Object
|
|
19
|
+
autoload :File
|
|
20
|
+
end
|
|
16
21
|
|
|
17
22
|
# behavior concerns
|
|
18
|
-
|
|
19
|
-
|
|
23
|
+
autoload_under 'models/concerns' do
|
|
24
|
+
autoload :CollectionBehavior
|
|
25
|
+
autoload :ObjectBehavior
|
|
26
|
+
autoload :PcdmBehavior
|
|
27
|
+
end
|
|
20
28
|
|
|
21
29
|
autoload :CollectionIndexer
|
|
22
30
|
autoload :ObjectIndexer
|
|
23
31
|
|
|
24
|
-
# collection services
|
|
25
|
-
autoload :AddCollectionToCollection, 'hydra/pcdm/services/collection/add_collection'
|
|
26
|
-
autoload :AddObjectToCollection, 'hydra/pcdm/services/collection/add_object'
|
|
27
|
-
autoload :AddRelatedObjectToCollection, 'hydra/pcdm/services/collection/add_related_object'
|
|
28
|
-
autoload :GetCollectionsFromCollection, 'hydra/pcdm/services/collection/get_collections'
|
|
29
|
-
autoload :GetObjectsFromCollection, 'hydra/pcdm/services/collection/get_objects'
|
|
30
|
-
autoload :GetRelatedObjectsFromCollection, 'hydra/pcdm/services/collection/get_related_objects'
|
|
31
|
-
autoload :RemoveCollectionFromCollection, 'hydra/pcdm/services/collection/remove_collection'
|
|
32
|
-
autoload :RemoveObjectFromCollection, 'hydra/pcdm/services/collection/remove_object'
|
|
33
|
-
autoload :RemoveRelatedObjectFromCollection, 'hydra/pcdm/services/collection/remove_related_object'
|
|
34
|
-
|
|
35
32
|
# file services
|
|
36
33
|
autoload :AddTypeToFile, 'hydra/pcdm/services/file/add_type'
|
|
37
34
|
autoload :GetMimeTypeForFile, 'hydra/pcdm/services/file/get_mime_type'
|
|
38
35
|
|
|
36
|
+
# Iterators
|
|
37
|
+
autoload :DeepMemberIterator, 'hydra/pcdm/deep_member_iterator'
|
|
39
38
|
|
|
40
|
-
#
|
|
41
|
-
autoload :
|
|
42
|
-
autoload :
|
|
43
|
-
autoload :AddRelatedObjectToObject, 'hydra/pcdm/services/object/add_related_object'
|
|
44
|
-
autoload :CreateObject, 'hydra/pcdm/services/object/create'
|
|
45
|
-
autoload :GetObjectsFromObject, 'hydra/pcdm/services/object/get_objects'
|
|
46
|
-
autoload :GetRelatedObjectsFromObject, 'hydra/pcdm/services/object/get_related_objects'
|
|
47
|
-
autoload :GetFilesFromObject, 'hydra/pcdm/services/object/get_collections'
|
|
48
|
-
autoload :RemoveObjectFromObject, 'hydra/pcdm/services/object/remove_object'
|
|
49
|
-
autoload :RemoveRelatedObjectFromObject, 'hydra/pcdm/services/object/remove_related_object'
|
|
50
|
-
|
|
39
|
+
# Associations
|
|
40
|
+
autoload :AncestorChecker, 'hydra/pcdm/ancestor_checker'
|
|
41
|
+
autoload :Validators, 'hydra/pcdm/validators'
|
|
51
42
|
|
|
52
43
|
# model validations
|
|
53
44
|
def self.collection? collection
|
|
54
45
|
return false unless collection.respond_to? :type
|
|
55
|
-
collection.type.include? RDFVocabularies::PCDMTerms.Collection
|
|
46
|
+
Array(collection.type).include? RDFVocabularies::PCDMTerms.Collection
|
|
56
47
|
end
|
|
57
48
|
|
|
58
49
|
def self.object? object
|
|
59
50
|
return false unless object.respond_to? :type
|
|
60
|
-
object.type.include? RDFVocabularies::PCDMTerms.Object
|
|
51
|
+
Array(object.type).include? RDFVocabularies::PCDMTerms.Object
|
|
61
52
|
end
|
|
62
53
|
|
|
63
54
|
def self.file? file
|
|
64
55
|
return false unless file.respond_to? :metadata_node
|
|
65
|
-
file.metadata_node.type.include? RDFVocabularies::PCDMTerms.File
|
|
56
|
+
Array(file.metadata_node.type).include? RDFVocabularies::PCDMTerms.File
|
|
66
57
|
end
|
|
67
58
|
|
|
68
59
|
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Hydra::PCDM
|
|
2
|
+
##
|
|
3
|
+
# Checks whether or not one object is an ancestor of another.
|
|
4
|
+
class AncestorChecker
|
|
5
|
+
attr_reader :record
|
|
6
|
+
|
|
7
|
+
# @param [ActiveFedora::Base] record The object which may have ancestors.
|
|
8
|
+
def initialize(record)
|
|
9
|
+
@record = record
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# @param [#members] potential_ancestor Object which may be the ancestor of
|
|
13
|
+
# the initialized record.
|
|
14
|
+
def ancestor?(potential_ancestor)
|
|
15
|
+
record == potential_ancestor || Hydra::PCDM::DeepMemberIterator.new(potential_ancestor).include?(record)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -3,8 +3,8 @@ module Hydra::PCDM
|
|
|
3
3
|
|
|
4
4
|
def generate_solr_document
|
|
5
5
|
super.tap do |solr_doc|
|
|
6
|
-
solr_doc["
|
|
7
|
-
solr_doc["
|
|
6
|
+
solr_doc["member_ids_ssim"] = object.member_ids
|
|
7
|
+
solr_doc["child_collection_ids_ssim"] = object.child_collection_ids
|
|
8
8
|
end
|
|
9
9
|
end
|
|
10
10
|
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module Hydra::PCDM
|
|
2
|
+
##
|
|
3
|
+
# Iterates over a record's members and all of their members in a breadth-first
|
|
4
|
+
# search.
|
|
5
|
+
class DeepMemberIterator
|
|
6
|
+
include Enumerable
|
|
7
|
+
attr_reader :record
|
|
8
|
+
# @param [#members] record The object whose members are iterated across.
|
|
9
|
+
def initialize(record)
|
|
10
|
+
@record = HasMembers.new(record)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def each
|
|
14
|
+
record.members.each do |member|
|
|
15
|
+
yield member
|
|
16
|
+
end
|
|
17
|
+
record.members.each do |member|
|
|
18
|
+
DeepMemberIterator.new(member).each do |deep_member|
|
|
19
|
+
yield deep_member
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
##
|
|
25
|
+
# Small decorator to ensure that #members isn't undefined.
|
|
26
|
+
class HasMembers < SimpleDelegator
|
|
27
|
+
def members
|
|
28
|
+
__getobj__.try(:members) || []
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -1,79 +1,42 @@
|
|
|
1
|
-
require 'active_fedora/aggregation'
|
|
2
|
-
|
|
3
1
|
module Hydra::PCDM
|
|
2
|
+
|
|
3
|
+
# behavior:
|
|
4
|
+
# 1) Hydra::PCDM::Collection can aggregate (pcdm:hasMember) Hydra::PCDM::Collection (no infinite loop, e.g., A -> B -> C -> A)
|
|
5
|
+
# 2) Hydra::PCDM::Collection can aggregate (pcdm:hasMember) Hydra::PCDM::Object
|
|
6
|
+
# 3) Hydra::PCDM::Collection can aggregate (ore:aggregates) Hydra::PCDM::Object (Object related to the Collection)
|
|
7
|
+
|
|
8
|
+
# 4) Hydra::PCDM::Collection can NOT aggregate non-PCDM object
|
|
9
|
+
# 5) Hydra::PCDM::Collection can NOT contain (pcdm:hasFile) Hydra::PCDM::File
|
|
10
|
+
|
|
11
|
+
# 6) Hydra::PCDM::Collection can have descriptive metadata
|
|
12
|
+
# 7) Hydra::PCDM::Collection can have access metadata
|
|
13
|
+
#
|
|
4
14
|
module CollectionBehavior
|
|
5
15
|
extend ActiveSupport::Concern
|
|
6
16
|
|
|
7
17
|
included do
|
|
8
18
|
type RDFVocabularies::PCDMTerms.Collection
|
|
19
|
+
include ::Hydra::PCDM::PcdmBehavior
|
|
9
20
|
|
|
10
|
-
|
|
11
|
-
class_name: "ActiveFedora::Base"
|
|
12
|
-
|
|
13
|
-
indirectly_contains :related_objects, has_member_relation: RDF::Vocab::ORE.aggregates,
|
|
14
|
-
inserted_content_relation: RDF::Vocab::ORE.proxyFor, class_name: "ActiveFedora::Base",
|
|
15
|
-
through: 'ActiveFedora::Aggregation::Proxy', foreign_key: :target
|
|
21
|
+
filters_association :members, as: :child_collections, condition: :pcdm_collection?
|
|
16
22
|
end
|
|
17
23
|
|
|
18
24
|
module ClassMethods
|
|
19
25
|
def indexer
|
|
20
26
|
Hydra::PCDM::CollectionIndexer
|
|
21
27
|
end
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
# behavior:
|
|
25
|
-
# 1) Hydra::PCDM::Collection can aggregate (pcdm:hasMember) Hydra::PCDM::Collection (no infinite loop, e.g., A -> B -> C -> A)
|
|
26
|
-
# 2) Hydra::PCDM::Collection can aggregate (pcdm:hasMember) Hydra::PCDM::Object
|
|
27
|
-
# 3) Hydra::PCDM::Collection can aggregate (ore:aggregates) Hydra::PCDM::Object (Object related to the Collection)
|
|
28
|
-
|
|
29
|
-
# 4) Hydra::PCDM::Collection can NOT aggregate non-PCDM object
|
|
30
|
-
# 5) Hydra::PCDM::Collection can NOT contain (pcdm:hasFile) Hydra::PCDM::File
|
|
31
|
-
|
|
32
|
-
# 6) Hydra::PCDM::Collection can have descriptive metadata
|
|
33
|
-
# 7) Hydra::PCDM::Collection can have access metadata
|
|
34
|
-
|
|
35
|
-
def child_collections= collections
|
|
36
|
-
raise ArgumentError, "each collection must be a pcdm collection" unless collections.all? { |c| Hydra::PCDM.collection? c }
|
|
37
|
-
raise ArgumentError, "a collection can't be an ancestor of itself" if collection_ancestor?(collections)
|
|
38
|
-
self.members = objects + collections
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def child_collections
|
|
42
|
-
members.to_a.select { |m| Hydra::PCDM.collection? m }
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def objects= objects
|
|
46
|
-
raise ArgumentError, "each object must be a pcdm object" unless objects.all? { |o| Hydra::PCDM.object? o }
|
|
47
|
-
self.members = child_collections + objects
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def objects
|
|
51
|
-
members.to_a.select { |m| Hydra::PCDM.object? m }
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def collection_ancestor? collections
|
|
55
|
-
collections.each do |check|
|
|
56
|
-
return true if check.id == self.id
|
|
57
|
-
return true if ancestor?(check)
|
|
28
|
+
|
|
29
|
+
def type_validator
|
|
58
30
|
end
|
|
59
|
-
false
|
|
60
31
|
end
|
|
61
32
|
|
|
62
|
-
def
|
|
63
|
-
return true if collection.id == self.id
|
|
64
|
-
return false if collection.child_collections.empty?
|
|
65
|
-
current_collections = collection.child_collections
|
|
66
|
-
next_batch = []
|
|
67
|
-
while !current_collections.empty? do
|
|
68
|
-
current_collections.each do |c|
|
|
69
|
-
return true if c.id == self.id
|
|
70
|
-
next_batch += c.child_collections
|
|
71
|
-
end
|
|
72
|
-
current_collections = next_batch
|
|
73
|
-
end
|
|
33
|
+
def pcdm_object?
|
|
74
34
|
false
|
|
75
35
|
end
|
|
76
36
|
|
|
37
|
+
def pcdm_collection?
|
|
38
|
+
true
|
|
39
|
+
end
|
|
77
40
|
end
|
|
78
41
|
end
|
|
79
42
|
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
require 'active_fedora/aggregation'
|
|
2
|
-
|
|
3
1
|
module Hydra::PCDM
|
|
4
2
|
|
|
5
3
|
# behavior:
|
|
@@ -16,56 +14,34 @@ module Hydra::PCDM
|
|
|
16
14
|
|
|
17
15
|
included do
|
|
18
16
|
type RDFVocabularies::PCDMTerms.Object
|
|
19
|
-
|
|
20
|
-
aggregates :members, predicate: RDFVocabularies::PCDMTerms.hasMember,
|
|
21
|
-
class_name: "ActiveFedora::Base"
|
|
22
|
-
|
|
23
|
-
indirectly_contains :related_objects, has_member_relation: RDF::Vocab::ORE.aggregates,
|
|
24
|
-
inserted_content_relation: RDF::Vocab::ORE.proxyFor, class_name: "ActiveFedora::Base",
|
|
25
|
-
through: 'ActiveFedora::Aggregation::Proxy', foreign_key: :target
|
|
17
|
+
include ::Hydra::PCDM::PcdmBehavior
|
|
26
18
|
|
|
27
19
|
directly_contains :files, has_member_relation: RDFVocabularies::PCDMTerms.hasFile,
|
|
28
20
|
class_name: "Hydra::PCDM::File"
|
|
29
|
-
|
|
30
21
|
end
|
|
31
22
|
|
|
32
23
|
module ClassMethods
|
|
33
24
|
def indexer
|
|
34
25
|
Hydra::PCDM::ObjectIndexer
|
|
35
26
|
end
|
|
36
|
-
end
|
|
37
27
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
self.members = objects
|
|
28
|
+
def type_validator
|
|
29
|
+
@type_validator ||= Validators::PCDMObjectValidator
|
|
30
|
+
end
|
|
42
31
|
end
|
|
43
32
|
|
|
44
|
-
|
|
45
|
-
|
|
33
|
+
# @return [Boolean] whether this instance is a PCDM Object.
|
|
34
|
+
def pcdm_object?
|
|
35
|
+
true
|
|
46
36
|
end
|
|
47
37
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
return true if check.id == self.id
|
|
51
|
-
return true if ancestor?(check)
|
|
52
|
-
end
|
|
38
|
+
# @return [Boolean] whether this instance is a PCDM Collection.
|
|
39
|
+
def pcdm_collection?
|
|
53
40
|
false
|
|
54
41
|
end
|
|
55
42
|
|
|
56
|
-
def
|
|
57
|
-
|
|
58
|
-
return false if object.objects.empty?
|
|
59
|
-
current_objects = object.objects
|
|
60
|
-
next_batch = []
|
|
61
|
-
while !current_objects.empty? do
|
|
62
|
-
current_objects.each do |c|
|
|
63
|
-
return true if c.id == self.id
|
|
64
|
-
next_batch += c.objects
|
|
65
|
-
end
|
|
66
|
-
current_objects = next_batch
|
|
67
|
-
end
|
|
68
|
-
false
|
|
43
|
+
def parent_objects
|
|
44
|
+
aggregated_by.select(&:pcdm_object?)
|
|
69
45
|
end
|
|
70
46
|
|
|
71
47
|
def contains= files
|
|
@@ -81,7 +57,7 @@ module Hydra::PCDM
|
|
|
81
57
|
# filter_files_by_type(::RDF::URI("http://pcdm.org/ExtractedText"))
|
|
82
58
|
def filter_files_by_type uri
|
|
83
59
|
self.files.reject do |file|
|
|
84
|
-
file.metadata_node.
|
|
60
|
+
!file.metadata_node.type.include?(uri)
|
|
85
61
|
end
|
|
86
62
|
end
|
|
87
63
|
|
|
@@ -98,7 +74,6 @@ module Hydra::PCDM
|
|
|
98
74
|
return matching_files.first
|
|
99
75
|
end
|
|
100
76
|
end
|
|
101
|
-
|
|
102
77
|
end
|
|
103
78
|
end
|
|
104
79
|
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module Hydra::PCDM
|
|
2
|
+
module PcdmBehavior
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
included do
|
|
5
|
+
aggregates :members, predicate: RDFVocabularies::PCDMTerms.hasMember,
|
|
6
|
+
class_name: "ActiveFedora::Base",
|
|
7
|
+
type_validator: type_validator
|
|
8
|
+
filters_association :members, as: :child_objects, condition: :pcdm_object?
|
|
9
|
+
indirectly_contains :related_objects, has_member_relation: RDF::Vocab::ORE.aggregates,
|
|
10
|
+
inserted_content_relation: RDF::Vocab::ORE.proxyFor, class_name: "ActiveFedora::Base",
|
|
11
|
+
through: 'ActiveFedora::Aggregation::Proxy', foreign_key: :target,
|
|
12
|
+
type_validator: Validators::PCDMObjectValidator
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
module ClassMethods
|
|
16
|
+
def type_validator
|
|
17
|
+
@type_validator ||= Validators::CompositeValidator.new(
|
|
18
|
+
super,
|
|
19
|
+
Validators::PCDMValidator,
|
|
20
|
+
Validators::AncestorValidator
|
|
21
|
+
)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def parents
|
|
26
|
+
aggregated_by
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def parent_collections
|
|
30
|
+
aggregated_by.select(&:pcdm_collection?)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
end
|