Class: Repository::Base::Internals::RecordSaver

Inherits:
Object
  • Object
show all
Includes:
Support
Defined in:
lib/repository/base/internals/record_saver.rb

Overview

Reports on the success or failure of saving a *DAO record*, using the `Repository::Support::StoreResult` instance returned from `#result`.

Since:

  • 0.0.1

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(record:, factory:) ⇒ RecordSaver

Sets instance variable(s) on a new `RecordSaver` instanace.

Parameters:

  • record

    DAO record to attempt to save.

Since:

  • 0.0.1



19
20
21
22
# File 'lib/repository/base/internals/record_saver.rb', line 19

def initialize(record:, factory:)
  @record = record
  @factory = factory
end

Instance Attribute Details

#factoryObject (readonly, private)

Since:

  • 0.0.1



39
40
41
# File 'lib/repository/base/internals/record_saver.rb', line 39

def factory
  @factory
end

#recordObject (readonly, private)

Since:

  • 0.0.1



39
40
41
# File 'lib/repository/base/internals/record_saver.rb', line 39

def record
  @record
end

Instance Method Details

#error_hashesObject (private)

Represent error data sourced from an `ActiveModel::Errors` object as an Array of `'field', message: 'message'` hashes.

Since:

  • 0.0.1



43
44
45
# File 'lib/repository/base/internals/record_saver.rb', line 43

def error_hashes
  ErrorFactory.create record.errors
end

#failed_resultObject (private)

Since:

  • 0.0.1



47
48
49
# File 'lib/repository/base/internals/record_saver.rb', line 47

def failed_result
  StoreResult::Failure.new error_hashes
end

#resultObject

Command-pattern method returning indication of success or failure of attempt to save record.

Returns:

  • Repository::Support::StoreResult

See Also:

Since:

  • 0.0.1



29
30
31
32
33
34
35
# File 'lib/repository/base/internals/record_saver.rb', line 29

def result
  if record.save
    successful_result
  else
    failed_result
  end
end

#successful_resultObject (private)

Since:

  • 0.0.1



51
52
53
54
# File 'lib/repository/base/internals/record_saver.rb', line 51

def successful_result
  entity = factory.create record
  StoreResult::Success.new entity
end