class Cuprum::Rails::Actions::Create

Action to build and insert a resource instance.

Private Instance Methods

create_resource() click to toggle source
# File lib/cuprum/rails/actions/create.rb, line 13
def create_resource
  entity = nil

  result = steps do
    attributes = step { resource_params }
    entity     = step { collection.build_one.call(attributes: attributes) }

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

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

    { singular_resource_name => entity }
  end

  [entity, result]
end
failed_validation?(result) click to toggle source
# File lib/cuprum/rails/actions/create.rb, line 30
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/create.rb, line 35
def process(request:)
  super

  entity, result = create_resource

  return result unless failed_validation?(result)

  Cuprum::Result.new(
    error:  result.error,
    status: :failure,
    value:  { singular_resource_name => entity }
  )
end