Class: ElectionBuddy::Validation::Result

Inherits:
Object
  • Object
show all
Defined in:
lib/election_buddy/entities/validation/result.rb

Overview

Represents the result of a validation operation

Examples:

Check if validation passed

result = Result.new(response)
result.valid? #=> true
result.total_errors_count #=> 0

Handle validation errors

result = Result.new(response)
result.valid? #=> false
result.total_errors_count #=> 3
result.list_errors #=> #<ListErrors @total=1>
result.line_errors #=> #<LineErrors @total=2>

Handle API failures

result = Result.new(response)
result.valid? #=> raises UnavailableValidStatus
result.total_errors_count #=> raises UnavailableTotalErrorsCount
result.failure_message #=> "API call has failed - Error: Validation: not found"

Instance Method Summary collapse

Constructor Details

#initialize(response) ⇒ Result

Initializes a new validation result

Parameters:

  • response (Hash)

    The raw response from the validation API



35
36
37
# File 'lib/election_buddy/entities/validation/result.rb', line 35

def initialize(response)
  @result = process_response(response)
end

Instance Method Details

#failure?Boolean (private)

Returns:

  • (Boolean)


99
100
101
# File 'lib/election_buddy/entities/validation/result.rb', line 99

def failure?
  !success?
end

#failure_errorString?

Returns the error message if validation failed

Returns:

  • (String, nil)

    The formatted error message or nil if successful



78
79
80
81
82
# File 'lib/election_buddy/entities/validation/result.rb', line 78

def failure_error
  return if success?

  ::ElectionBuddy::ErrorFormatter.format(@result[:error])
end

#failure_messageString?

Returns a user-friendly failure message

Returns:

  • (String, nil)

    The failure message or nil if successful



87
88
89
90
91
# File 'lib/election_buddy/entities/validation/result.rb', line 87

def failure_message
  return if success?

  "API call has failed - Error: #{failure_error}"
end

#line_errorsLineErrors, Array

Returns the line-by-line validation errors

Returns:

  • (LineErrors, Array)

    Line validation errors or empty array if validation failed



49
50
51
52
53
# File 'lib/election_buddy/entities/validation/result.rb', line 49

def line_errors
  return [] unless success?

  @line_errors ||= LineErrors.new(@result[:data].dig("results", "voter_lines_validation"))
end

#list_errorsListErrors, Array

Returns the list of validation errors related to the voter list

Returns:

  • (ListErrors, Array)

    List validation errors or empty array if validation failed



41
42
43
44
45
# File 'lib/election_buddy/entities/validation/result.rb', line 41

def list_errors
  return [] unless success?

  @list_errors ||= ListErrors.new(@result[:data].dig("results", "voter_list_validations"))
end

#process_response(response) ⇒ Object (private)



103
104
105
106
107
108
109
# File 'lib/election_buddy/entities/validation/result.rb', line 103

def process_response(response)
  if response["error"]
    Failure.call(response["error"])
  else
    Success.call(response)
  end
end

#success?Boolean (private)

Returns:

  • (Boolean)


95
96
97
# File 'lib/election_buddy/entities/validation/result.rb', line 95

def success?
  @result[:success?]
end

#total_errors_countInteger

Returns the total count of all validation errors

Returns:

  • (Integer)

    Total number of validation errors

Raises:



59
60
61
62
63
# File 'lib/election_buddy/entities/validation/result.rb', line 59

def total_errors_count
  raise UnavailableTotalErrorsCount, failure_message if failure?

  list_errors.total + line_errors.total
end

#valid?Boolean

Indicates if the validation passed without errors

Returns:

  • (Boolean)

    true if validation passed, false otherwise

Raises:



69
70
71
72
73
# File 'lib/election_buddy/entities/validation/result.rb', line 69

def valid?
  raise UnavailableValidStatus, failure_message if failure?

  total_errors_count.zero?
end