class NiftyServices::BaseCreateService

Public Class Methods

new(options = {}) click to toggle source
Calls superclass method
# File lib/nifty_services/base_create_service.rb, line 4
def initialize(options = {})
  super(nil, options)
end

Public Instance Methods

execute() click to toggle source
# File lib/nifty_services/base_create_service.rb, line 8
def execute
  execute_action do
    with_before_and_after_callbacks(:create) do
      if can_execute_action?
        @record = with_before_and_after_callbacks(:build_record) { build_record }

        if try_to_save_record
          after_execute_success_response
        else
          errors = create_error_response(@record)
          after_error_response(errors)
        end
      end
    end
  end
end

Private Instance Methods

after_error_response(errors) click to toggle source
# File lib/nifty_services/base_create_service.rb, line 52
def after_error_response(errors)
  unprocessable_entity_error(errors) if @errors.empty?
end
after_execute_success_response() click to toggle source
# File lib/nifty_services/base_create_service.rb, line 56
def after_execute_success_response
  success_created_response
end
build_from_record_type(attributes) click to toggle source
# File lib/nifty_services/base_create_service.rb, line 73
def build_from_record_type(attributes)
  scope = record_type

  if !build_record_scope.nil? && build_record_scope.respond_to?(:new)
    scope = build_record_scope
  end

  scope.new(attributes)
end
build_record() click to toggle source
# File lib/nifty_services/base_create_service.rb, line 60
def build_record
  unless record_type.nil?
    # initialize @temp_record to be used in after_build_record callback
    return @temp_record = build_from_record_type(record_allowed_attributes)
  end

  @temp_record = record_type.public_send(:new, record_allowed_attributes)
end
build_record_scope() click to toggle source
# File lib/nifty_services/base_create_service.rb, line 69
def build_record_scope
  nil
end
can_create_record?() click to toggle source
# File lib/nifty_services/base_create_service.rb, line 87
def can_create_record?
  not_implemented_exception(__method__)
end
can_execute?() click to toggle source
# File lib/nifty_services/base_create_service.rb, line 83
def can_execute?
  return true
end
can_execute_action?() click to toggle source
# File lib/nifty_services/base_create_service.rb, line 91
def can_execute_action?
  unless can_create_record?
    return (valid? ? forbidden_error!(cant_create_error_key) : false)
  end

  return true
end
cant_create_error_key() click to toggle source
# File lib/nifty_services/base_create_service.rb, line 99
def cant_create_error_key
  "#{record_error_key}.cant_create"
end
create_error_response(record) click to toggle source
# File lib/nifty_services/base_create_service.rb, line 48
def create_error_response(record)
  record.errors
end
on_save_record_error(error) click to toggle source
# File lib/nifty_services/base_create_service.rb, line 44
def on_save_record_error(error)
  return unprocessable_entity_error!(error)
end
save_record() click to toggle source
# File lib/nifty_services/base_create_service.rb, line 26
def save_record
  save_method = NiftyServices.configuration.save_record_method

  return save_method.call(@record) if save_method.respond_to?(:call)

  @record.public_send(save_method)
end
try_to_save_record() click to toggle source
# File lib/nifty_services/base_create_service.rb, line 34
def try_to_save_record
  begin
    save_record
  rescue => e
    on_save_record_error(e)
  ensure
    return @record.valid?
  end
end