Skip to content

Commit

Permalink
Add remove services.
Browse files Browse the repository at this point in the history
New Services:
* RemoveCollectionFromCollection
* RemoveObjectFromCollection
* RemoveRelatedObjectFromCollection
* RemoveObjectFromObject
* RemoveRelatedObjectFromObject

Updated Services:
* GetRelatedObjectsFromCollection - return array
* GetRelatedObjectsFromObject - return array
  • Loading branch information
elrayle committed May 18, 2015
1 parent 1da7004 commit 7b4486c
Show file tree
Hide file tree
Showing 16 changed files with 948 additions and 8 deletions.
5 changes: 5 additions & 0 deletions lib/hydra/pcdm.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ module PCDM
autoload :GetCollectionsFromCollection, 'hydra/pcdm/services/collection/get_collections'
autoload :GetObjectsFromCollection, 'hydra/pcdm/services/collection/get_objects'
autoload :GetRelatedObjectsFromCollection, 'hydra/pcdm/services/collection/get_related_objects'
autoload :RemoveCollectionFromCollection, 'hydra/pcdm/services/collection/remove_collection'
autoload :RemoveObjectFromCollection, 'hydra/pcdm/services/collection/remove_object'
autoload :RemoveRelatedObjectFromCollection, 'hydra/pcdm/services/collection/remove_related_object'

# object services
autoload :AddFileToObject, 'hydra/pcdm/services/object/add_file'
Expand All @@ -33,6 +36,8 @@ module PCDM
autoload :GetObjectsFromObject, 'hydra/pcdm/services/object/get_objects'
autoload :GetRelatedObjectsFromObject, 'hydra/pcdm/services/object/get_related_objects'
autoload :GetFilesFromObject, 'hydra/pcdm/services/object/get_collections'
autoload :RemoveObjectFromObject, 'hydra/pcdm/services/object/remove_object'
autoload :RemoveRelatedObjectFromObject, 'hydra/pcdm/services/object/remove_related_object'


# model validations
Expand Down
3 changes: 1 addition & 2 deletions lib/hydra/pcdm/services/collection/get_related_objects.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@ class GetRelatedObjectsFromCollection

def self.call( parent_collection )
raise ArgumentError, "parent_collection must be a pcdm collection" unless Hydra::PCDM.collection? parent_collection

parent_collection.related_objects
parent_collection.related_objects.to_a
end

end
Expand Down
33 changes: 33 additions & 0 deletions lib/hydra/pcdm/services/collection/remove_collection.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
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
# * return nil if child_collection does not exist in parent_collection
# * raise error for any other problems

# parent_collection.members.delete child_collection # TODO Uncomment

return nil unless Hydra::PCDM::GetCollectionsFromCollection.call( parent_collection ).include? child_collection # TODO Remove
removed_collection = parent_collection.members.delete child_collection # TODO Remove
removed_collection = removed_collection.first if removed_collection.is_a? Array # TODO Remove
removed_collection # TODO Remove
end

end
end
40 changes: 40 additions & 0 deletions lib/hydra/pcdm/services/collection/remove_object.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
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
# * return nil if child_object does not exist in parent_collection
# * raise error for any other problems

# parent_collection.members.delete child_object # TODO Uncomment

return nil unless parent_collection.members.include? child_object # TODO Remove
removed_object = parent_collection.members.delete child_object # TODO Remove
removed_object = removed_object.first if removed_object.is_a? Array # TODO Remove
removed_object # TODO Remove


# 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
33 changes: 33 additions & 0 deletions lib/hydra/pcdm/services/collection/remove_related_object.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
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 #35)

# TODO members.delete should... (issue #103)(activefedora-aggregation issue #34)
# * return child_collection when successful delete
# * return nil if child_collection does not exist in parent_collection
# * raise error for any other problems

# parent_collection.related_objects.delete child_related_object # TODO Uncomment

return nil unless Hydra::PCDM::GetRelatedObjectsFromCollection.call( parent_collection ).include? child_related_object # TODO Remove
removed_related_object = parent_collection.related_objects.delete child_related_object # TODO Remove
removed_related_object = removed_related_object.first if removed_related_object.is_a? Array # TODO Remove
removed_related_object # TODO Remove
end

end
end
3 changes: 1 addition & 2 deletions lib/hydra/pcdm/services/object/get_related_objects.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@ class GetRelatedObjectsFromObject

def self.call( parent_object )
raise ArgumentError, "parent_object must be a pcdm object" unless Hydra::PCDM.object? parent_object

parent_object.related_objects
parent_object.related_objects.to_a
end

end
Expand Down
40 changes: 40 additions & 0 deletions lib/hydra/pcdm/services/object/remove_object.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
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
# * return nil if child_object does not exist in parent_object
# * raise error for any other problems

# parent_object.members.delete child_object # TODO Uncomment

return nil unless parent_object.members.include? child_object # TODO Remove
removed_object = parent_object.members.delete child_object # TODO Remove
removed_object = removed_object.first if removed_object.is_a? Array # TODO Remove
removed_object # TODO Remove


# 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
33 changes: 33 additions & 0 deletions lib/hydra/pcdm/services/object/remove_related_object.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
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 #35)

# TODO members.delete should... (issue #103)(activefedora-aggregation issue #34)
# * return child_related_object when successful delete
# * return nil if child_related_object does not exist in parent_object
# * raise error for any other problems

# parent_object.related_objects.delete child_related_object # TODO Uncomment

return nil unless Hydra::PCDM::GetRelatedObjectsFromObject.call( parent_object ).include? child_related_object # TODO Remove
removed_related_object = parent_object.related_objects.delete child_related_object # TODO Remove
removed_related_object = removed_related_object.first if removed_related_object.is_a? Array # TODO Remove
removed_related_object # TODO Remove
end

end
end
5 changes: 3 additions & 2 deletions spec/hydra/pcdm/services/collection/add_collection_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,14 @@
expect( Hydra::PCDM::GetCollectionsFromCollection.call( collection1 ) ).to eq [collection2]
end

xit 'should allow collections to repeat' do
# TODO Can collections repeat???
it 'should allow collections to repeat' do
skip 'skipping this test because issue #94 needs to be addressed' do
Hydra::PCDM::AddCollectionToCollection.call( subject, collection1 )
Hydra::PCDM::AddCollectionToCollection.call( subject, collection2 )
Hydra::PCDM::AddCollectionToCollection.call( subject, collection1 )
expect( Hydra::PCDM::GetCollectionsFromCollection.call( subject ) ).to eq [collection1,collection2,collection1]
end
end

context 'with collections and objects' do
before do
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,8 @@
let(:object1) { Hydra::PCDM::Object.create }
let(:object2) { Hydra::PCDM::Object.create }

xit 'should NOT allow related objects to repeat' do
it 'should NOT allow related objects to repeat' do
skip 'skipping this test because issue #92 needs to be addressed' do
Hydra::PCDM::AddRelatedObjectToCollection.call( subject, object1 )
Hydra::PCDM::AddRelatedObjectToCollection.call( subject, object2 )
Hydra::PCDM::AddRelatedObjectToCollection.call( subject, object1 )
Expand All @@ -94,6 +95,7 @@
expect( related_objects.include? object2 ).to be true
expect( related_objects.size ).to eq 2
end
end
end
end
end
Loading

0 comments on commit 7b4486c

Please sign in to comment.