Module: EasyTalk::ErrorFormatter

Defined in:
lib/easy_talk/error_formatter.rb,
lib/easy_talk/error_formatter/base.rb,
lib/easy_talk/error_formatter/flat.rb,
lib/easy_talk/error_formatter/jsonapi.rb,
lib/easy_talk/error_formatter/rfc7807.rb,
lib/easy_talk/error_formatter/json_pointer.rb,
lib/easy_talk/error_formatter/path_converter.rb,
lib/easy_talk/error_formatter/error_code_mapper.rb

Overview

Module for formatting ActiveModel validation errors into standardized formats.

Provides multiple output formats for API responses:

  • :flat - Simple flat array of field/message/code objects
  • :json_pointer - Array with JSON Pointer (RFC 6901) paths
  • :rfc7807 - RFC 7807 Problem Details format
  • :jsonapi - JSON:API specification error format

Examples:

Using via model instance methods

user = User.new(name: '')
user.valid?

user.validation_errors                    # Uses default format from config
user.validation_errors_flat               # Flat format
user.validation_errors_json_pointer       # JSON Pointer format
user.validation_errors_rfc7807            # RFC 7807 format
user.validation_errors_jsonapi            # JSON:API format

Using the format method directly

EasyTalk::ErrorFormatter.format(user.errors, format: :rfc7807, title: 'Custom Title')

Defined Under Namespace

Modules: InstanceMethods Classes: Base, ErrorCodeMapper, Flat, JsonPointer, Jsonapi, PathConverter, Rfc7807

Constant Summary collapse

FORMATTERS =

Map of format symbols to formatter classes

{
  flat: Flat,
  json_pointer: JsonPointer,
  rfc7807: Rfc7807,
  jsonapi: Jsonapi
}.freeze

Class Method Summary collapse

Class Method Details

.format(errors, format: nil, **options) ⇒ Hash, Array

Format validation errors using the specified format.

Examples:

EasyTalk::ErrorFormatter.format(user.errors, format: :flat)
EasyTalk::ErrorFormatter.format(user.errors, format: :rfc7807, title: 'Validation Error')

Parameters:

  • errors (ActiveModel::Errors)

    The errors object to format

  • format (Symbol) (defaults to: nil)

    The output format (:flat, :json_pointer, :rfc7807, :jsonapi)

  • options (Hash)

    Format-specific options

Returns:

  • (Hash, Array)

    The formatted errors

Raises:

  • (ArgumentError)

    If the format is not recognized



54
55
56
57
58
59
60
61
# File 'lib/easy_talk/error_formatter.rb', line 54

def format(errors, format: nil, **options)
  format ||= EasyTalk.configuration.default_error_format
  formatter_class = FORMATTERS[format.to_sym]

  raise ArgumentError, "Unknown error format: #{format}. Valid formats: #{FORMATTERS.keys.join(', ')}" unless formatter_class

  formatter_class.new(errors, options).format
end