Skip to content

Commit

Permalink
Merge pull request #2169 from samvera/actor_update
Browse files Browse the repository at this point in the history
Actor returns the resource on successful update
  • Loading branch information
cjcolvar authored Nov 13, 2017
2 parents 0a032be + 5f4d5c0 commit 13dcf53
Show file tree
Hide file tree
Showing 16 changed files with 41 additions and 31 deletions.
4 changes: 2 additions & 2 deletions app/actors/hyrax/actors/add_to_work_actor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@ module Hyrax
module Actors
class AddToWorkActor < AbstractActor
# @param [Hyrax::Actors::Environment] env
# @return [Boolean] true if create was successful
# @return [Valkyrie::Resource,FalseClass] the saved resource if create was successful
def create(env)
work_ids = env.attributes.delete(:in_works_ids)
next_actor.create(env) && add_to_works(env, work_ids)
end

# @param [Hyrax::Actors::Environment] env
# @return [Boolean] true if update was successful
# @return [Valkyrie::Resource,FalseClass] the saved resource if update was successful
def update(env)
work_ids = env.attributes.delete(:in_works_ids)
add_to_works(env, work_ids) && next_actor.update(env)
Expand Down
2 changes: 1 addition & 1 deletion app/actors/hyrax/actors/apply_permission_template_actor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ module Actors
# @see Hyrax::AdminSetService for release_date interaction
class ApplyPermissionTemplateActor < Hyrax::Actors::AbstractActor
# @param [Hyrax::Actors::Environment] env
# @return [Boolean] true if create was successful
# @return [Valkyrie::Resource,FalseClass] the saved resource if create was successful
def create(env)
add_edit_users(env)
next_actor.create(env)
Expand Down
2 changes: 1 addition & 1 deletion app/actors/hyrax/actors/attach_members_actor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ module Actors
# writes changes, not the full ordered list.
class AttachMembersActor < Hyrax::Actors::AbstractActor
# @param [Hyrax::Actors::Environment] env
# @return [Boolean] true if update was successful
# @return [Valkyrie::Resource,FalseClass] the saved resource if update was successful
def update(env)
attributes_collection = env.attributes.delete(:work_members_attributes)
assign_nested_attributes_for_collection(env, attributes_collection) &&
Expand Down
10 changes: 6 additions & 4 deletions app/actors/hyrax/actors/base_actor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ module Actors
# @see Hyrax::Actor::AbstractActor
class BaseActor < AbstractActor
# @param [Hyrax::Actors::Environment] env
# @return [Boolean] true if create was successful
# @return [Valkyrie::Resource,FalseClass] the saved resource if create was successful
def create(env)
assign_modified_date(env)
yield env.change_set if block_given?
Expand All @@ -25,12 +25,14 @@ def create(env)
end

# @param [Hyrax::Actors::Environment] env
# @return [Boolean] true if update was successful
# @return [Valkyrie::Resource,FalseClass] the saved resource if update was successful
def update(env)
assign_modified_date(env)
return unless env.change_set.validate(env.attributes)
next_actor.update(env) && save(env) &&
run_callbacks(:after_update_metadata, env.resource, env.user)
next_actor.update(env) &&
(saved_resource = save(env)) &&
run_callbacks(:after_update_metadata, env.resource, env.user) &&
saved_resource
end

# @param [Hyrax::Actors::Environment] env
Expand Down
4 changes: 2 additions & 2 deletions app/actors/hyrax/actors/collections_membership_actor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@ module Actors
# Adds membership to and removes membership from collections
class CollectionsMembershipActor < AbstractActor
# @param [Hyrax::Actors::Environment] env
# @return [Boolean] true if create was successful
# @return [Valkyrie::Resource,FalseClass] the saved resource if create was successful
def create(env)
collection_ids = env.attributes.delete(:member_of_collection_ids)
assign_collections(env, collection_ids) && next_actor.create(env)
end

# @param [Hyrax::Actors::Environment] env
# @return [Boolean] true if update was successful
# @return [Valkyrie::Resource,FalseClass] the saved resource if update was successful
def update(env)
collection_ids = env.attributes.delete(:member_of_collection_ids)
assign_collections(env, collection_ids) && next_actor.update(env)
Expand Down
9 changes: 6 additions & 3 deletions app/actors/hyrax/actors/create_with_files_actor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,22 @@ module Actors
# Creates a work and attaches files to the work
class CreateWithFilesActor < Hyrax::Actors::AbstractActor
# @param [Hyrax::Actors::Environment] env
# @return [Boolean] true if create was successful
# @return [Valkyrie::Resource,FalseClass] the saved resource if create was successful
def create(env)
uploaded_file_ids = filter_file_ids(env.attributes.delete(:uploaded_files))
files = uploaded_files(uploaded_file_ids)
validate_files(files, env) && next_actor.create(env) && attach_files(files, env)
end

# @param [Hyrax::Actors::Environment] env
# @return [Boolean] true if update was successful
# @return [Valkyrie::Resource,FalseClass] the saved resource if update was successful
def update(env)
uploaded_file_ids = filter_file_ids(env.attributes.delete(:uploaded_files))
files = uploaded_files(uploaded_file_ids)
validate_files(files, env) && next_actor.update(env) && attach_files(files, env)
return false unless validate_files(files, env)
saved = next_actor.update(env)
return false unless saved && attach_files(files, env)
saved
end

private
Expand Down
8 changes: 5 additions & 3 deletions app/actors/hyrax/actors/create_with_remote_files_actor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,19 @@ module Actors
# end
class CreateWithRemoteFilesActor < Hyrax::Actors::AbstractActor
# @param [Hyrax::Actors::Environment] env
# @return [Boolean] true if create was successful
# @return [Valkyrie::Resource,FalseClass] the saved resource if create was successful
def create(env)
remote_files = env.attributes.delete(:remote_files)
next_actor.create(env) && attach_files(env, remote_files)
end

# @param [Hyrax::Actors::Environment] env
# @return [Boolean] true if update was successful
# @return [Valkyrie::Resource,FalseClass] the saved resource if update was successful
def update(env)
remote_files = env.attributes.delete(:remote_files)
next_actor.update(env) && attach_files(env, remote_files)
saved = next_actor.update(env)
return saved if saved && attach_files(env, remote_files)
false
end

private
Expand Down
4 changes: 2 additions & 2 deletions app/actors/hyrax/actors/default_admin_set_actor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@ module Actors
# @note Creates AdminSet, Hyrax::PermissionTemplate, Sipity::Workflow (with activation)
class DefaultAdminSetActor < Hyrax::Actors::AbstractActor
# @param [Hyrax::Actors::Environment] env
# @return [Boolean] true if create was successful
# @return [Valkyrie::Resource,FalseClass] the saved resource if create was successful
def create(env)
ensure_admin_set_attribute!(env.attributes)
next_actor.create(env)
end

# @param [Hyrax::Actors::Environment] env
# @return [Boolean] true if update was successful
# @return [Valkyrie::Resource,FalseClass] the saved resource if update was successful
def update(env)
ensure_admin_set_attribute!(env.attributes)
next_actor.update(env)
Expand Down
2 changes: 1 addition & 1 deletion app/actors/hyrax/actors/featured_work_actor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ def destroy(env)
end

# @param [Hyrax::Actors::Environment] env
# @return [Boolean] true if update was successful
# @return [Valkyrie::Resource,FalseClass] the saved resource if update was successful
def update(env)
check_featureability(env.curation_concern)
next_actor.update(env)
Expand Down
2 changes: 1 addition & 1 deletion app/actors/hyrax/actors/initialize_workflow_actor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class InitializeWorkflowActor < AbstractActor
self.workflow_factory = ::Hyrax::Workflow::WorkflowFactory

# @param [Hyrax::Actors::Environment] env
# @return [Boolean] true if create was successful
# @return [Valkyrie::Resource,FalseClass] the saved resource if create was successful
def create(env)
next_actor.create(env) && create_workflow(env)
end
Expand Down
4 changes: 2 additions & 2 deletions app/actors/hyrax/actors/interpret_visibility_actor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ def visibility
end

# @param [Hyrax::Actors::Environment] env
# @return [Boolean] true if create was successful
# @return [Valkyrie::Resource,FalseClass] the saved resource if create was successful
def create(env)
intention = Intention.new(env.attributes)
attributes = intention.sanitize_params
Expand All @@ -90,7 +90,7 @@ def create(env)
end

# @param [Hyrax::Actors::Environment] env
# @return [Boolean] true if update was successful
# @return [Valkyrie::Resource,FalseClass] the saved resource if update was successful
def update(env)
intention = Intention.new(env.attributes)
attributes = intention.sanitize_params
Expand Down
4 changes: 2 additions & 2 deletions app/actors/hyrax/actors/model_actor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ module Actors
# This is a proxy for the model specific actor
class ModelActor < AbstractActor
# @param [Hyrax::Actors::Environment] env
# @return [Boolean] true if update was successful
# @return [Valkyrie::Resource,FalseClass] the saved resource if update was successful
def update(env)
model_actor(env).update(env)
end

# @param [Hyrax::Actors::Environment] env
# @return [Boolean] true if create was successful
# @return [Valkyrie::Resource,FalseClass] the saved resource if create was successful
def create(env)
model_actor(env).create(env)
end
Expand Down
2 changes: 1 addition & 1 deletion app/actors/hyrax/actors/optimistic_lock_validator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ class OptimisticLockValidator < Actors::AbstractActor
self.version_field = 'version'

# @param [Hyrax::Actors::Environment] env
# @return [Boolean] true if update was successful
# @return [Valkyrie::Resource,FalseClass] the saved resource if update was successful
def update(env)
validate_lock(env, version_attribute(env.attributes)) && next_actor.update(env)
end
Expand Down
4 changes: 2 additions & 2 deletions app/actors/hyrax/actors/transactional_request.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@ module Actors
# is an error elsewhere in the actor stack.
class TransactionalRequest < Actors::AbstractActor
# @param [Hyrax::Actors::Environment] env
# @return [Boolean] true if create was successful
# @return [Valkyrie::Resource,FalseClass] the saved resource if create was successful
def create(env)
ActiveRecord::Base.transaction do
next_actor.create(env)
end
end

# @param [Hyrax::Actors::Environment] env
# @return [Boolean] true if update was successful
# @return [Valkyrie::Resource,FalseClass] the saved resource if update was successful
def update(env)
ActiveRecord::Base.transaction do
next_actor.update(env)
Expand Down
2 changes: 1 addition & 1 deletion app/actors/hyrax/actors/transfer_request_actor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ module Actors
# deposit on their behalf
class TransferRequestActor < AbstractActor
# @param [Hyrax::Actors::Environment] env
# @return [Boolean] true if create was successful
# @return [Valkyrie::Resource,FalseClass] the saved resource if create was successful
def create(env)
next_actor.create(env) && create_proxy_deposit_request(env)
end
Expand Down
9 changes: 6 additions & 3 deletions app/controllers/concerns/hyrax/works_controller_behavior.rb
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,11 @@ def create
def update
@change_set = change_set_class.new(find_resource(params[:id]))
authorize! :update, @change_set.resource
if actor.update(actor_environment)
after_update_success(@change_set.resource, @change_set)
@resource = actor.update(actor_environment)
if @resource
after_update_success(@resource, @change_set)
else
after_update_error(@change_set.resource, @change_set)
after_update_error(@resource, @change_set)
end
end

Expand Down Expand Up @@ -227,6 +228,8 @@ def after_create_success(obj, _change_set)
end
end

# @param obj [Valkyrie::Resource]
# @param change_set [Valkyrie::ChangeSet]
def after_update_success(obj, change_set)
# TODO: we could optimize by making a new query that just returns true if any exist.
if Hyrax::Queries.find_members(resource: obj, model: ::FileSet).present?
Expand Down

0 comments on commit 13dcf53

Please sign in to comment.