hydra-works 0.0.1

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 (104) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +17 -0
  4. data/.rspec +1 -0
  5. data/.travis.yml +14 -0
  6. data/CONTRIBUTING.md +115 -0
  7. data/Gemfile +14 -0
  8. data/LICENSE +16 -0
  9. data/README.md +80 -0
  10. data/Rakefile +23 -0
  11. data/hydra-works.gemspec +33 -0
  12. data/lib/hydra/works.rb +81 -0
  13. data/lib/hydra/works/models/collection.rb +5 -0
  14. data/lib/hydra/works/models/concerns/aggregates_collections.rb +16 -0
  15. data/lib/hydra/works/models/concerns/aggregates_generic_files.rb +20 -0
  16. data/lib/hydra/works/models/concerns/aggregates_generic_works.rb +20 -0
  17. data/lib/hydra/works/models/concerns/collection_behavior.rb +28 -0
  18. data/lib/hydra/works/models/concerns/generic_file/contained_files.rb +22 -0
  19. data/lib/hydra/works/models/concerns/generic_file/derivatives.rb +32 -0
  20. data/lib/hydra/works/models/concerns/generic_file/mime_types.rb +69 -0
  21. data/lib/hydra/works/models/concerns/generic_file_behavior.rb +25 -0
  22. data/lib/hydra/works/models/concerns/generic_work_behavior.rb +30 -0
  23. data/lib/hydra/works/models/generic_file.rb +17 -0
  24. data/lib/hydra/works/models/generic_work.rb +9 -0
  25. data/lib/hydra/works/processor.rb +9 -0
  26. data/lib/hydra/works/services/collection/add_collection.rb +19 -0
  27. data/lib/hydra/works/services/collection/add_generic_work.rb +19 -0
  28. data/lib/hydra/works/services/collection/add_related_object.rb +19 -0
  29. data/lib/hydra/works/services/collection/get_collections.rb +17 -0
  30. data/lib/hydra/works/services/collection/get_generic_works.rb +17 -0
  31. data/lib/hydra/works/services/collection/get_related_objects.rb +17 -0
  32. data/lib/hydra/works/services/collection/remove_collection.rb +19 -0
  33. data/lib/hydra/works/services/collection/remove_generic_work.rb +20 -0
  34. data/lib/hydra/works/services/collection/remove_related_object.rb +19 -0
  35. data/lib/hydra/works/services/generic_file/add_file.rb +55 -0
  36. data/lib/hydra/works/services/generic_file/add_generic_file.rb +19 -0
  37. data/lib/hydra/works/services/generic_file/add_original_file.rb +11 -0
  38. data/lib/hydra/works/services/generic_file/add_related_object.rb +19 -0
  39. data/lib/hydra/works/services/generic_file/add_versioned_original_file.rb +10 -0
  40. data/lib/hydra/works/services/generic_file/generate/thumbnail.rb +19 -0
  41. data/lib/hydra/works/services/generic_file/get_generic_files.rb +17 -0
  42. data/lib/hydra/works/services/generic_file/get_related_objects.rb +17 -0
  43. data/lib/hydra/works/services/generic_file/remove_generic_file.rb +20 -0
  44. data/lib/hydra/works/services/generic_file/remove_related_object.rb +19 -0
  45. data/lib/hydra/works/services/generic_file/upload_file.rb +32 -0
  46. data/lib/hydra/works/services/generic_work/add_generic_file.rb +19 -0
  47. data/lib/hydra/works/services/generic_work/add_generic_work.rb +19 -0
  48. data/lib/hydra/works/services/generic_work/add_related_object.rb +19 -0
  49. data/lib/hydra/works/services/generic_work/get_generic_files.rb +17 -0
  50. data/lib/hydra/works/services/generic_work/get_generic_works.rb +17 -0
  51. data/lib/hydra/works/services/generic_work/get_related_objects.rb +17 -0
  52. data/lib/hydra/works/services/generic_work/move_generic_file.rb +19 -0
  53. data/lib/hydra/works/services/generic_work/remove_generic_file.rb +20 -0
  54. data/lib/hydra/works/services/generic_work/remove_generic_work.rb +20 -0
  55. data/lib/hydra/works/services/generic_work/remove_related_object.rb +19 -0
  56. data/lib/hydra/works/version.rb +5 -0
  57. data/lib/hydra/works/vocab/works_terms.rb +12 -0
  58. data/spec/fixtures/sample-file.pdf +0 -0
  59. data/spec/fixtures/updated-file.txt +1 -0
  60. data/spec/hydra/works/models/collection_spec.rb +41 -0
  61. data/spec/hydra/works/models/concerns/file/contained_files_spec.rb +113 -0
  62. data/spec/hydra/works/models/concerns/generic_file_behavior_spec.rb +12 -0
  63. data/spec/hydra/works/models/generic_file_spec.rb +45 -0
  64. data/spec/hydra/works/models/generic_work_spec.rb +50 -0
  65. data/spec/hydra/works/services/collection/add_collection_spec.rb +166 -0
  66. data/spec/hydra/works/services/collection/add_generic_work_spec.rb +155 -0
  67. data/spec/hydra/works/services/collection/add_related_object_spec.rb +149 -0
  68. data/spec/hydra/works/services/collection/get_collections_spec.rb +35 -0
  69. data/spec/hydra/works/services/collection/get_generic_works_spec.rb +35 -0
  70. data/spec/hydra/works/services/collection/get_related_objects_spec.rb +49 -0
  71. data/spec/hydra/works/services/collection/remove_collection_spec.rb +133 -0
  72. data/spec/hydra/works/services/collection/remove_generic_work_spec.rb +133 -0
  73. data/spec/hydra/works/services/collection/remove_related_object_spec.rb +128 -0
  74. data/spec/hydra/works/services/generic_file/add_file_spec.rb +28 -0
  75. data/spec/hydra/works/services/generic_file/add_generic_file_spec.rb +174 -0
  76. data/spec/hydra/works/services/generic_file/add_related_object_spec.rb +150 -0
  77. data/spec/hydra/works/services/generic_file/generate/thumbnail_spec.rb +21 -0
  78. data/spec/hydra/works/services/generic_file/get_generic_files_spec.rb +19 -0
  79. data/spec/hydra/works/services/generic_file/get_related_objects_spec.rb +45 -0
  80. data/spec/hydra/works/services/generic_file/remove_generic_file_spec.rb +124 -0
  81. data/spec/hydra/works/services/generic_file/remove_related_object_spec.rb +123 -0
  82. data/spec/hydra/works/services/generic_file/upload_file_spec.rb +82 -0
  83. data/spec/hydra/works/services/generic_work/add_generic_file_spec.rb +156 -0
  84. data/spec/hydra/works/services/generic_work/add_generic_work_spec.rb +157 -0
  85. data/spec/hydra/works/services/generic_work/add_related_object_spec.rb +148 -0
  86. data/spec/hydra/works/services/generic_work/get_generic_files_spec.rb +35 -0
  87. data/spec/hydra/works/services/generic_work/get_generic_works_spec.rb +35 -0
  88. data/spec/hydra/works/services/generic_work/get_related_objects_spec.rb +46 -0
  89. data/spec/hydra/works/services/generic_work/move_generic_file_spec.rb +21 -0
  90. data/spec/hydra/works/services/generic_work/remove_generic_file_spec.rb +132 -0
  91. data/spec/hydra/works/services/generic_work/remove_generic_work_spec.rb +133 -0
  92. data/spec/hydra/works/services/generic_work/remove_related_object_spec.rb +128 -0
  93. data/spec/hydra/works_spec.rb +149 -0
  94. data/spec/spec_helper.rb +40 -0
  95. data/use-cases/conference_event_use_case.md +16 -0
  96. data/use-cases/lafayette_college_geospatial_use_case.md +80 -0
  97. data/use-cases/northwestern_adminset_use-case.md +19 -0
  98. data/use-cases/northwestern_displayset_use_case.md +23 -0
  99. data/use-cases/northwestern_playlist_use_case.md +21 -0
  100. data/use-cases/princeton_book_use_case.md +117 -0
  101. data/use-cases/scholarsphere_use_case.md +32 -0
  102. data/use-cases/stanford_data_model_use_case.md +86 -0
  103. data/use-cases/ucin_linked_resource_use_case.md +21 -0
  104. metadata +338 -0
@@ -0,0 +1,20 @@
1
+ module Hydra::Works
2
+ # Allows instances of a class to aggregate (pcdm:hasMember) hydra-works generic works
3
+ module AggregatesGenericWorks
4
+
5
+ def generic_works= generic_works
6
+ raise ArgumentError, "each generic_work must be a hydra works generic work" unless generic_works.all? { |w| Hydra::Works.generic_work? w }
7
+ raise ArgumentError, "a generic work can't be an ancestor of itself" if self.respond_to?(:object_ancestor?) && object_ancestor?(generic_works)
8
+ if self.respond_to?(:generic_files)
9
+ self.members = self.generic_files + generic_works
10
+ else
11
+ self.members = generic_works
12
+ end
13
+ end
14
+
15
+ def generic_works
16
+ members.to_a.select { |m| Hydra::Works.generic_work? m }
17
+ end
18
+
19
+ end
20
+ end
@@ -0,0 +1,28 @@
1
+ module Hydra::Works
2
+
3
+ # This module provides all of the Behaviors of a Hydra::Works::Collection
4
+ #
5
+ # behavior:
6
+ # 1) Hydra::Works::Collection can aggregate Hydra::Works::Collection
7
+ # 2) Hydra::Works::Collection can aggregate Hydra::Works::GenericWork
8
+
9
+ # 3) Hydra::Works::Collection can NOT aggregate Hydra::PCDM::Collection unless it is also a Hydra::Works::Collection
10
+ # 4) Hydra::Works::Collection can NOT aggregate Hydra::Works::GenericFile
11
+ # 5) Hydra::Works::Collection can NOT aggregate non-PCDM object
12
+ # 6) Hydra::Works::Collection can NOT contain Hydra::PCDM::File
13
+ # 7) Hydra::Works::Collection can NOT contain
14
+
15
+ # 8) Hydra::Works::Collection can have descriptive metadata
16
+ # 9) Hydra::Works::Collection can have access metadata
17
+ module CollectionBehavior
18
+ extend ActiveSupport::Concern
19
+ include Hydra::PCDM::CollectionBehavior
20
+
21
+ included do
22
+ type [RDFVocabularies::PCDMTerms.Collection,WorksVocabularies::WorksTerms.Collection]
23
+ include Hydra::Works::AggregatesGenericWorks
24
+ include Hydra::Works::AggregatesCollections
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,22 @@
1
+ module Hydra::Works::GenericFile::ContainedFiles
2
+ extend ActiveSupport::Concern
3
+
4
+ # HydraWorks supports only one each of original_file, thumbnail, and extracted_text. However
5
+ # you are free to add an unlimited number of addtition types such as different resolutions
6
+ # of images, different derivatives, etc, and use any established vocabulary you choose.
7
+
8
+ # TODO: se PCDM vocab class when projecthydra-labs/hydra-pcdm#80 is merged
9
+
10
+ def original_file
11
+ file_of_type(::RDF::URI("http://pcdm.org/OriginalFile"))
12
+ end
13
+
14
+ def thumbnail
15
+ file_of_type(::RDF::URI("http://pcdm.org/ThumbnailImage"))
16
+ end
17
+
18
+ def extracted_text
19
+ file_of_type(::RDF::URI("http://pcdm.org/ExtractedText"))
20
+ end
21
+
22
+ end
@@ -0,0 +1,32 @@
1
+ module Hydra::Works::GenericFile
2
+ module Derivatives
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ include Hydra::Derivatives
7
+
8
+ # This was taken directly from Sufia's GenericFile::Derivatives and modified to exclude any processing that modified the original file
9
+ makes_derivatives do |obj|
10
+ case obj.mime_type
11
+ when *pdf_mime_types
12
+ obj.transform_file :original_file, { thumbnail: { format: 'jpg', size: '338x493', datastream: 'thumbnail' } }, processor: :work
13
+ when *office_document_mime_types
14
+ obj.transform_file :original_file, { thumbnail: { format: 'jpg', size: '200x150>', datastream: 'thumbnail' } }, processor: :document
15
+ when *video_mime_types
16
+ obj.transform_file :original_file, { thumbnail: { format: 'jpg', datastream: 'thumbnail' } }, processor: :video
17
+ when *image_mime_types
18
+ obj.transform_file :original_file, { thumbnail: { format: 'jpg', size: '200x150>', datastream: 'thumbnail' } }, processor: :work
19
+ end
20
+ end
21
+
22
+ end
23
+
24
+ # This bit was not in Sufia, but needs to be here for derivatives to work
25
+ # TODO: delegate mime type somewhere else?
26
+ def mime_type
27
+ return nil unless self.original_file
28
+ self.original_file.mime_type
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,69 @@
1
+ # This was taken directly from Sufia's GenericFile::MimeTypes
2
+ module Hydra::Works::GenericFile
3
+ module MimeTypes
4
+ extend ActiveSupport::Concern
5
+
6
+ def pdf?
7
+ self.class.pdf_mime_types.include? self.mime_type
8
+ end
9
+
10
+ def image?
11
+ self.class.image_mime_types.include? self.mime_type
12
+ end
13
+
14
+ def video?
15
+ self.class.video_mime_types.include? self.mime_type
16
+ end
17
+
18
+ def audio?
19
+ self.class.audio_mime_types.include? self.mime_type
20
+ end
21
+
22
+ def office_document?
23
+ self.class.office_document_mime_types.include? self.mime_type
24
+ end
25
+
26
+ # TODO: remove?
27
+ def collection?
28
+ false
29
+ end
30
+
31
+ def file_format
32
+ return nil if self.mime_type.blank? and self.format_label.blank?
33
+ return self.mime_type.split('/')[1]+ " ("+self.format_label.join(", ")+")" unless self.mime_type.blank? or self.format_label.blank?
34
+ return self.mime_type.split('/')[1] unless self.mime_type.blank?
35
+ return self.format_label
36
+ end
37
+
38
+ module ClassMethods
39
+ def image_mime_types
40
+ ['image/png', 'image/jpeg', 'image/jpg', 'image/jp2', 'image/bmp', 'image/gif', 'image/tiff']
41
+ end
42
+
43
+ def pdf_mime_types
44
+ ['application/pdf']
45
+ end
46
+
47
+ def video_mime_types
48
+ ['video/mpeg', 'video/mp4', 'video/webm', 'video/x-msvideo', 'video/avi', 'video/quicktime', 'application/mxf']
49
+ end
50
+
51
+ def audio_mime_types
52
+ # audio/x-wave is the mime type that fits 0.6.0 returns for a wav file.
53
+ # audio/mpeg is the mime type that fits 0.6.0 returns for an mp3 file.
54
+ ['audio/mp3', 'audio/mpeg', 'audio/wav', 'audio/x-wave', 'audio/x-wav', 'audio/ogg']
55
+ end
56
+
57
+ def office_document_mime_types
58
+ ['text/rtf',
59
+ 'application/msword',
60
+ 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
61
+ 'application/vnd.oasis.opendocument.text',
62
+ 'application/vnd.ms-excel',
63
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
64
+ 'application/vnd.ms-powerpoint',
65
+ 'application/vnd.openxmlformats-officedocument.presentationml.presentation']
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,25 @@
1
+ module Hydra::Works
2
+ # This module provides all of the Behaviors of a Hydra::Works::GenericFile
3
+ #
4
+ # behavior:
5
+ # 1) Hydra::Works::GenericFile can contain (pcdm:hasFile) Hydra::PCDM::File (inherits from Hydra::PCDM::Object)
6
+ # 2) Hydra::Works::GenericFile can contain (pcdm:hasRelatedFile) Hydra::PCDM::File (inherits from Hydra::PCDM::Object)
7
+ # 3) Hydra::Works::GenericFile can aggregate (pcdm:hasMember) Hydra::Works::GenericFile
8
+ # 4) Hydra::Works::GenericFile can NOT aggregate anything other than Hydra::Works::GenericFiles
9
+ # 5) Hydra::Works::GenericFile can have descriptive metadata
10
+ # 6) Hydra::Works::GenericFile can have access metadata
11
+ module GenericFileBehavior
12
+ extend ActiveSupport::Concern
13
+ include Hydra::PCDM::ObjectBehavior
14
+
15
+ included do
16
+ type [RDFVocabularies::PCDMTerms.Object,WorksVocabularies::WorksTerms.GenericFile]
17
+
18
+ include Hydra::Works::AggregatesGenericFiles
19
+ include Hydra::Works::GenericFile::ContainedFiles
20
+ include Hydra::Works::GenericFile::Derivatives
21
+ include Hydra::Works::GenericFile::MimeTypes
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,30 @@
1
+ module Hydra::Works
2
+ # This module provides all of the Behaviors of a Hydra::Works::GenericWork
3
+ #
4
+ # behavior:
5
+ # 1) Hydra::Works::GenericWork can aggregate Hydra::Works::GenericWork
6
+ # 2) Hydra::Works::GenericWork can aggregate Hydra::Works::GenericFile
7
+ # 3) Hydra::Works::GenericWork can NOT aggregate Hydra::PCDM::Collection
8
+ # 4) Hydra::Works::GenericWork can NOT aggregate Hydra::Works::Collection
9
+ # 5) Hydra::Works::GenericWork can NOT aggregate Works::Object unless it is also a Hydra::Works::GenericFile
10
+ # 6) Hydra::Works::GenericWork can NOT contain PCDM::File
11
+ # 7) Hydra::Works::GenericWork can NOT aggregate non-PCDM object
12
+ # 8) Hydra::Works::GenericWork can NOT contain Hydra::Works::GenericFile
13
+ # 9) Hydra::Works::GenericWork can have descriptive metadata
14
+ # 10) Hydra::Works::GenericWork can have access metadata
15
+ module GenericWorkBehavior
16
+ extend ActiveSupport::Concern
17
+ include Hydra::PCDM::ObjectBehavior
18
+
19
+ included do
20
+ type [RDFVocabularies::PCDMTerms.Object,WorksVocabularies::WorksTerms.GenericWork]
21
+ include Hydra::Works::AggregatesGenericFiles
22
+ include Hydra::Works::AggregatesGenericWorks
23
+ end
24
+
25
+ def contains= files
26
+ raise NoMethodError, "works can not directly contain files. You must add a GenericFile to the work's members and add files to that GenericFile."
27
+ end
28
+
29
+ end
30
+ end
@@ -0,0 +1,17 @@
1
+ module Hydra::Works
2
+ # Namespace for Modules with functionality specific to GenericFiles
3
+ module GenericFile
4
+
5
+ extend ActiveSupport::Concern
6
+
7
+ autoload :Derivatives, 'hydra/works/models/concerns/generic_file/derivatives'
8
+ autoload :MimeTypes, 'hydra/works/models/concerns/generic_file/mime_types'
9
+ autoload :ContainedFiles, 'hydra/works/models/concerns/generic_file/contained_files'
10
+
11
+ # Base class for creating objects that behave like Hydra::Works::GenericFiles
12
+ class Base < ActiveFedora::Base
13
+ include Hydra::Works::GenericFileBehavior
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,9 @@
1
+ module Hydra::Works
2
+ # Namespace for Modules with functionality specific to GenericWorks
3
+ module GenericWork
4
+ # Base class for creating objects that behave like Hydra::Works::GenericWorks
5
+ class Base < ActiveFedora::Base
6
+ include Hydra::Works::GenericWorkBehavior
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Hydra::Derivatives
2
+ class Work < Hydra::Derivatives::Image
3
+
4
+ def source_file
5
+ object.send(source_name.to_s)
6
+ end
7
+
8
+ end
9
+ end
@@ -0,0 +1,19 @@
1
+ module Hydra::Works
2
+ class AddCollectionToCollection
3
+
4
+ ##
5
+ # Add a collection to a collection.
6
+ #
7
+ # @param [Hydra::Works::Collection] :parent_collection to which to add collection
8
+ # @param [Hydra::Works::Collection] :child_collection being added
9
+ #
10
+ # @return [Hydra::Works::Collection] the updated hydra works collection
11
+
12
+ def self.call( parent_collection, child_collection )
13
+ raise ArgumentError, 'parent_collection must be a hydra-works collection' unless Hydra::Works.collection? parent_collection
14
+ raise ArgumentError, 'child_collection must be a hydra-works collection' unless Hydra::Works.collection? child_collection
15
+ Hydra::PCDM::AddCollectionToCollection.call( parent_collection, child_collection )
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ module Hydra::Works
2
+ class AddGenericWorkToCollection
3
+
4
+ ##
5
+ # Add a generic_work to a collection.
6
+ #
7
+ # @param [Hydra::Works::Collection] :parent_collection to which to add generic_work
8
+ # @param [Hydra::Works::GenericWork::Base] :child_generic_work being added
9
+ #
10
+ # @return [Hydra::Works::Collection] the updated hydra works collection
11
+
12
+ def self.call( parent_collection, child_generic_work )
13
+ raise ArgumentError, 'parent_collection must be a hydra-works collection' unless Hydra::Works.collection? parent_collection
14
+ raise ArgumentError, 'child_generic_work must be a hydra-works generic work' unless Hydra::Works.generic_work? child_generic_work
15
+ Hydra::PCDM::AddObjectToCollection.call( parent_collection, child_generic_work )
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ module Hydra::Works
2
+ class AddRelatedObjectToCollection
3
+
4
+ ##
5
+ # Add a related object to a collection.
6
+ #
7
+ # @param [Hydra::Works::Collection] :parent_collection to which to add the related object
8
+ # @param [Hydra::PCDM::Object] :child_related_object being added
9
+ #
10
+ # @return [Hydra::Works::Collection] the updated hydra works collection
11
+
12
+ def self.call( parent_collection, child_related_object )
13
+ raise ArgumentError, 'parent_collection must be a hydra-works collection' unless Hydra::Works.collection? parent_collection
14
+ raise ArgumentError, 'child_related_object must be a pcdm object' unless Hydra::PCDM.object? child_related_object
15
+ Hydra::PCDM::AddRelatedObjectToCollection.call( parent_collection, child_related_object )
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,17 @@
1
+ module Hydra::Works
2
+ class GetCollectionsFromCollection
3
+
4
+ ##
5
+ # Get member collections from a collection in order.
6
+ #
7
+ # @param [Hydra::Works::Collection] :parent_collection in which the child collections are members
8
+ #
9
+ # @return [Array<Hydra::Works::Collection>] all member collections
10
+
11
+ def self.call( parent_collection )
12
+ raise ArgumentError, 'parent_collection must be a hydra-works collection' unless Hydra::Works.collection? parent_collection
13
+ parent_collection.collections
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module Hydra::Works
2
+ class GetGenericWorksFromCollection
3
+
4
+ ##
5
+ # Get member generic works from a collection in order.
6
+ #
7
+ # @param [Hydra::Works::Collection] :parent_collection in which the child generic works are members
8
+ #
9
+ # @return [Array<Hydra::Works::GenericWork::Base>] all member generic works
10
+
11
+ def self.call( parent_collection )
12
+ raise ArgumentError, 'parent_collection must be a hydra-works collection' unless Hydra::Works.collection? parent_collection
13
+ parent_collection.generic_works
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module Hydra::Works
2
+ class GetRelatedObjectsFromCollection
3
+
4
+ ##
5
+ # Get related objects from a collection.
6
+ #
7
+ # @param [Hydra::Works::Collection] :parent_collection to which the child objects are related
8
+ #
9
+ # @return [Array<Hydra::Works::Collection>] all related objects
10
+
11
+ def self.call( parent_collection )
12
+ raise ArgumentError, 'parent_collection must be a hydra-works collection' unless Hydra::Works.collection? parent_collection
13
+ Hydra::PCDM::GetRelatedObjectsFromCollection.call( parent_collection )
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,19 @@
1
+ module Hydra::Works
2
+ class RemoveCollectionFromCollection
3
+
4
+ ##
5
+ # Remove a collection from a collection.
6
+ #
7
+ # @param [Hydra::Works::Collection] :parent_collection from which to remove collection
8
+ # @param [Hydra::Works::Collection] :child_collection being removed
9
+ #
10
+ # @return [Hydra::Works::Collection] the updated hydra works collection
11
+
12
+ def self.call( parent_collection, child_collection )
13
+ raise ArgumentError, 'parent_collection must be a hydra-works collection' unless Hydra::Works.collection? parent_collection
14
+ raise ArgumentError, 'child_collection must be a hydra-works collection' unless Hydra::Works.collection? child_collection
15
+ Hydra::PCDM::RemoveCollectionFromCollection.call( parent_collection, child_collection )
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,20 @@
1
+ module Hydra::Works
2
+ class RemoveGenericWorkFromCollection
3
+
4
+ ##
5
+ # Remove a generic_work from a collection.
6
+ #
7
+ # @param [Hydra::Works::Collection] :parent_collection from which to remove generic_work
8
+ # @param [Hydra::Works::GenericWork::Base] :child_generic_work being removed
9
+ # @param [Fixnum] :nth_occurrence remove nth occurrence of this generic_work in the list (default=1)
10
+ #
11
+ # @return [Hydra::Works::Collection] the updated hydra works collection
12
+
13
+ def self.call( parent_collection, child_generic_work, nth_occurrence=1 )
14
+ raise ArgumentError, 'parent_collection must be a hydra-works collection' unless Hydra::Works.collection? parent_collection
15
+ raise ArgumentError, 'child_generic_work must be a hydra-works generic work' unless Hydra::Works.generic_work? child_generic_work
16
+ Hydra::PCDM::RemoveObjectFromCollection.call( parent_collection, child_generic_work, nth_occurrence )
17
+ end
18
+
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+ module Hydra::Works
2
+ class RemoveRelatedObjectFromCollection
3
+
4
+ ##
5
+ # Remove a related object from a collection.
6
+ #
7
+ # @param [Hydra::Works::Collection] :parent_collection from which to remove the related object
8
+ # @param [Hydra::PCDM::Object] :child_related_object being removed
9
+ #
10
+ # @return [Hydra::Works::Collection] the updated hydra works collection
11
+
12
+ def self.call( parent_collection, child_related_object )
13
+ raise ArgumentError, 'parent_collection must be a hydra-works collection' unless Hydra::Works.collection? parent_collection
14
+ raise ArgumentError, 'child_related_object must be a pcdm object' unless Hydra::PCDM.object? child_related_object
15
+ Hydra::PCDM::RemoveRelatedObjectFromCollection.call( parent_collection, child_related_object )
16
+ end
17
+
18
+ end
19
+ end