class Cuprum::Rails::Actions::Update

Action to assign and update a resource instance by primary key.

Private Instance Methods

assign_resource() click to toggle source
# File lib/cuprum/rails/actions/update.rb, line 13
def assign_resource
  primary_key = step { resource_id }
  attributes  = step { resource_params }
  entity      = step do
    collection.find_one.call(primary_key: primary_key)
  end
  step do
    collection.assign_one.call(attributes: attributes, entity: entity)
  end
end
failed_validation?(result) click to toggle source
# File lib/cuprum/rails/actions/update.rb, line 24
def failed_validation?(result)
  result.failure? &&
    result.error.is_a?(Cuprum::Collections::Errors::FailedValidation)
end
process(request:) click to toggle source
Calls superclass method Cuprum::Rails::Action#process
# File lib/cuprum/rails/actions/update.rb, line 29
def process(request:)
  super

  entity, result = update_resource

  return result unless failed_validation?(result)

  Cuprum::Result.new(
    error:  result.error,
    status: :failure,
    value:  { singular_resource_name => entity }
  )
end
update_resource() click to toggle source
# File lib/cuprum/rails/actions/update.rb, line 43
def update_resource
  entity = nil

  result = steps do
    entity = assign_resource

    step { collection.validate_one.call(entity: entity) }

    step { collection.update_one.call(entity: entity) }

    { singular_resource_name => entity }
  end

  [entity, result]
end