-
Notifications
You must be signed in to change notification settings - Fork 10
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #104 from projecthydra-labs/new_service_for_removing
Add remove services for collections, objects, and related objects.
- Loading branch information
Showing
18 changed files
with
965 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
module Hydra::PCDM | ||
class RemoveCollectionFromCollection | ||
|
||
## | ||
# Remove a collection from a collection. | ||
# | ||
# @param [Hydra::PCDM::Collection] :parent_collection from which to remove collection | ||
# @param [Hydra::PCDM::Collection] :child_collection being removed | ||
# | ||
# @return [Hydra::PCDM::Collection] the updated pcdm collection | ||
|
||
def self.call( parent_collection, child_collection ) | ||
raise ArgumentError, "parent_collection must be a pcdm collection" unless Hydra::PCDM.collection? parent_collection | ||
raise ArgumentError, "child_collection must be a pcdm collection" unless Hydra::PCDM.collection? child_collection | ||
|
||
|
||
# TODO FIX when members is empty, members.delete raises ActiveFedora::ObjectNotFoundError "Can't reload an object that hasn't been saved" (activefedora-aggregation issue #35) | ||
|
||
# TODO members.delete should... (issue #103)(activefedora-aggregation issue #34) | ||
# * return child_collection when successful delete (not Array [child_collection]) | ||
# * return nil if child_collection does not exist in parent_collection | ||
# * raise error for any other problems | ||
|
||
# TODO Per issue #103, uncomment the following line when (activefedora-aggregation issue #34) is resolved | ||
# parent_collection.members.delete child_collection | ||
|
||
# TODO Per issue #103, remove the following lines when (activefedora-aggregation issue #34) is resolved | ||
return nil unless Hydra::PCDM::GetCollectionsFromCollection.call( parent_collection ).include? child_collection | ||
removed_collection = parent_collection.members.delete child_collection | ||
removed_collection = removed_collection.first if removed_collection.is_a? Array | ||
removed_collection | ||
# END WORK-AROUND | ||
end | ||
|
||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
module Hydra::PCDM | ||
class RemoveObjectFromCollection | ||
|
||
## | ||
# Remove an object from a collection. | ||
# | ||
# @param [Hydra::PCDM::Collection] :parent_collection from which to remove object | ||
# @param [Hydra::PCDM::Object] :child_object being removed | ||
# @param [Fixnum] :nth_occurrence remove nth occurrence of this object in the list (default=1) | ||
# | ||
# @return [Hydra::PCDM::Collection] the updated pcdm collection | ||
|
||
def self.call( parent_collection, child_object, nth_occurrence=1 ) | ||
raise ArgumentError, "parent_collection must be a pcdm collection" unless Hydra::PCDM.collection? parent_collection | ||
raise ArgumentError, "child_object must be a pcdm object" unless Hydra::PCDM.object? child_object | ||
|
||
|
||
# TODO FIX when members is empty, members.delete raises ActiveFedora::ObjectNotFoundError "Can't reload an object that hasn't been saved" (activefedora-aggregation issue #35) | ||
|
||
# TODO members.delete should... (issue #103)(activefedora-aggregation issue #34) | ||
# * return child_object when successful delete (not Array [child_object]) | ||
# * return nil if child_object does not exist in parent_collection | ||
# * raise error for any other problems | ||
|
||
# TODO Per issue #103, uncomment the following line when (activefedora-aggregation issue #34) is resolved | ||
# parent_collection.members.delete child_object | ||
|
||
# TODO Per issue #103, remove the following lines when (activefedora-aggregation issue #34) is resolved | ||
return nil unless parent_collection.members.include? child_object | ||
removed_object = parent_collection.members.delete child_object | ||
removed_object = removed_object.first if removed_object.is_a? Array | ||
removed_object | ||
# END WORK-AROUND | ||
|
||
|
||
# TODO -- The same object may be in the list multiple times. (issue #102) | ||
# * How to remove nth occurrence? | ||
# * Default to removing 1st occurrence from the beginning of the list. | ||
|
||
end | ||
|
||
end | ||
end |
36 changes: 36 additions & 0 deletions
36
lib/hydra/pcdm/services/collection/remove_related_object.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
module Hydra::PCDM | ||
class RemoveRelatedObjectFromCollection | ||
|
||
## | ||
# Remove an object from a collection. | ||
# | ||
# @param [Hydra::PCDM::Collection] :parent_collection from which to remove the related object | ||
# @param [Hydra::PCDM::Object] :child_related_object being removed | ||
# | ||
# @return [Hydra::PCDM::Collection] the updated pcdm collection | ||
|
||
def self.call( parent_collection, child_related_object ) | ||
raise ArgumentError, "parent_collection must be a pcdm collection" unless Hydra::PCDM.collection? parent_collection | ||
raise ArgumentError, "child_related_object must be a pcdm object" unless Hydra::PCDM.object? child_related_object | ||
|
||
|
||
# TODO FIX when related_objects is empty, related_objects.delete raises ActiveFedora::ObjectNotFoundError "Can't reload an object that hasn't been saved" (activefedora-aggregation issue #805) | ||
|
||
# TODO related_objects.delete should... (issue #103)(activefedora-aggregation issue #805) | ||
# * return child_related_object when successful delete (not Array [child_related_object]) | ||
# * return nil if child_related_object does not exist in parent_collection | ||
# * raise error for any other problems | ||
|
||
# TODO Per issue #103, uncomment the following line when (activefedora issue #805) is resolved | ||
# parent_collection.related_objects.delete child_related_object | ||
|
||
# TODO Per issue #103, remove the following lines when (activefedora issue #805) is resolved | ||
return nil unless Hydra::PCDM::GetRelatedObjectsFromCollection.call( parent_collection ).include? child_related_object | ||
removed_related_object = parent_collection.related_objects.delete child_related_object | ||
removed_related_object = removed_related_object.first if removed_related_object.is_a? Array | ||
removed_related_object | ||
# END WORK-AROUND | ||
end | ||
|
||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
module Hydra::PCDM | ||
class RemoveObjectFromObject | ||
|
||
## | ||
# Remove an object from an object. | ||
# | ||
# @param [Hydra::PCDM::Object] :parent_object from which to remove object | ||
# @param [Hydra::PCDM::Object] :child_object being removed | ||
# @param [Fixnum] :nth_occurrence remove nth occurrence of this object in the list (default=1) | ||
# | ||
# @return [Hydra::PCDM::Object] the updated pcdm object | ||
|
||
def self.call( parent_object, child_object, nth_occurrence=1 ) | ||
raise ArgumentError, "parent_object must be a pcdm object" unless Hydra::PCDM.object? parent_object | ||
raise ArgumentError, "child_object must be a pcdm object" unless Hydra::PCDM.object? child_object | ||
|
||
|
||
# TODO FIX when members is empty, members.delete raises ActiveFedora::ObjectNotFoundError "Can't reload an object that hasn't been saved" (activefedora-aggregation issue #35) | ||
|
||
# TODO members.delete should... (issue #103)(activefedora-aggregation issue #34) | ||
# * return child_object when successful delete (not Array [child_object]) | ||
# * return nil if child_object does not exist in parent_object | ||
# * raise error for any other problems | ||
|
||
# TODO Per issue #103, uncomment the following line when (activefedora-aggregation issue #34) is resolved | ||
# parent_object.members.delete child_object | ||
|
||
# TODO Per issue #103, remove the following lines when (activefedora-aggregation issue #34) is resolved | ||
return nil unless parent_object.members.include? child_object | ||
removed_object = parent_object.members.delete child_object | ||
removed_object = removed_object.first if removed_object.is_a? Array | ||
removed_object | ||
# END WORK-AROUND | ||
|
||
|
||
# TODO -- The same object may be in the list multiple times. (issue #102) | ||
# * How to remove nth occurrence? | ||
# * Default to removing 1st occurrence from the beginning of the list. | ||
|
||
end | ||
|
||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
module Hydra::PCDM | ||
class RemoveRelatedObjectFromObject | ||
|
||
## | ||
# Remove an object from an object. | ||
# | ||
# @param [Hydra::PCDM::Object] :parent_object from which to remove the related object | ||
# @param [Hydra::PCDM::Object] :child_related_object being removed | ||
# | ||
# @return [Hydra::PCDM::Collection] the updated pcdm collection | ||
|
||
def self.call( parent_object, child_related_object ) | ||
raise ArgumentError, "parent_object must be a pcdm object" unless Hydra::PCDM.object? parent_object | ||
raise ArgumentError, "child_related_object must be a pcdm object" unless Hydra::PCDM.object? child_related_object | ||
|
||
|
||
# TODO FIX when related_objects is empty, related_objects.delete raises ActiveFedora::ObjectNotFoundError "Can't reload an object that hasn't been saved" (activefedora-aggregation issue #805) | ||
|
||
# TODO related_objects.delete should... (issue #103)(activefedora-aggregation issue #805) | ||
# * return child_related_object when successful delete (not Array [child_related_object]) | ||
# * return nil if child_related_object does not exist in parent_object | ||
# * raise error for any other problems | ||
|
||
# TODO Per issue #103, uncomment the following line when (activefedora issue #805) is resolved | ||
# parent_object.related_objects.delete child_related_object | ||
|
||
# TODO Per issue #103, remove the following lines when (activefedora issue #805) is resolved | ||
return nil unless Hydra::PCDM::GetRelatedObjectsFromObject.call( parent_object ).include? child_related_object | ||
removed_related_object = parent_object.related_objects.delete child_related_object | ||
removed_related_object = removed_related_object.first if removed_related_object.is_a? Array | ||
removed_related_object | ||
# END WORK-AROUND | ||
end | ||
|
||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.