class Formalism::R18nErrors::Errors

Class for errors collection

Public Class Methods

new() click to toggle source
# File lib/formalism/r18n_errors/errors.rb, line 57
def initialize
        @hash = Hash.new do |hash, model|
                hash[model] = Hash.new do |model_hash, field|
                        model_hash[field] = []
                end
        end
end

Public Instance Methods

add(model_key, field_key, *rest_keys, args: nil, nested_errors: nil) click to toggle source
# File lib/formalism/r18n_errors/errors.rb, line 65
def add(model_key, field_key, *rest_keys, args: nil, nested_errors: nil)
        @hash[model_key][field_key].push(
                if nested_errors
                        { nested_errors: nested_errors }
                else
                        { rest_keys: rest_keys, translation_args: args }
                end
        )
end
to_a(*prefixes)
Alias for: translations
translations(*prefixes) click to toggle source
# File lib/formalism/r18n_errors/errors.rb, line 75
def translations(*prefixes)
        @hash.flat_map do |model_key, field_hash|
                field_hash.flat_map do |field_key, errors_array|
                        errors_array.flat_map do |error|
                                translate prefixes, model_key, field_key, error
                        end
                end
        end
end
Also aliased as: to_a
translations_hash(*prefixes) click to toggle source
# File lib/formalism/r18n_errors/errors.rb, line 87
def translations_hash(*prefixes)
        prefixes.push(@hash.keys.first) if @hash.keys.first
        @hash.transform_values do |errors|
                ErrorTranslator.new(t.error, errors).translate(prefixes)
        end
end

Private Instance Methods

translate(prefixes, model_key, field_key, error) click to toggle source
# File lib/formalism/r18n_errors/errors.rb, line 96
def translate(prefixes, model_key, field_key, error)
        if (nested_errors = error[:nested_errors])
                return nested_errors.translations(*prefixes, model_key)
        end

        rest_keys = error.fetch(:rest_keys)
        t.error
                .dig(*[*prefixes, model_key, field_key].compact, *rest_keys[0..-2])
                .public_send(rest_keys.last, error[:translation_args])
end