module Formalism::R18nErrors::ValidationHelpers

Helper methods for validations

Private Instance Methods

add_error_for_uniqueness_validation(fields) click to toggle source
# File lib/formalism/r18n_errors/validation_helpers.rb, line 131
def add_error_for_uniqueness_validation(fields)
        if fields.count == 1
                add_error fields.first, :already_taken
        else
                add_error :itself, :already_exists, fields.join('_and_')
        end
end
field_changed?(_field) click to toggle source
# File lib/formalism/r18n_errors/validation_helpers.rb, line 139
def field_changed?(_field)
        true ## can be redefined, for example, in update forms
end
field_valid?(field) click to toggle source

Private methods for this module

# File lib/formalism/r18n_errors/validation_helpers.rb, line 110
def field_valid?(field)
        result = true
        if (nested_form = nested_forms[field])
                result = nested_form.valid?
                return result unless result

                nested_form.run
        end
        result && !public_send(field).blank?
end
unique_by_fields_combination?(fields_combination) click to toggle source
# File lib/formalism/r18n_errors/validation_helpers.rb, line 121
def unique_by_fields_combination?(fields_combination)
        dataset = model.where(
                fields_combination
                        .map { |field| field_condition(field, send(field)) }
                        .reduce(:&)
        )
        dataset = dataset.exclude(instance.pk_hash) if instance&.pk_hash
        dataset.empty?
end
validate_choice(*validation_fields) click to toggle source
# File lib/formalism/r18n_errors/validation_helpers.rb, line 29
def validate_choice(*validation_fields)
        validate_provision(*validation_fields, error_key: :not_chosen)
end
validate_email(*validation_fields) click to toggle source

Requires `email_address` gem

# File lib/formalism/r18n_errors/validation_helpers.rb, line 67
def validate_email(*validation_fields)
        valid = true
        validation_fields.flatten.each do |validation_field|
                next unless field_changed?(validation_field)
                next if EmailAddress.valid? public_send(validation_field)

                valid = false
                add_error validation_field, :not_valid_email
        end
        valid
end
validate_entry(*validation_fields) click to toggle source
# File lib/formalism/r18n_errors/validation_helpers.rb, line 25
def validate_entry(*validation_fields)
        validate_provision(*validation_fields, error_key: :not_entered)
end
validate_max_length(validation_field, max_length) click to toggle source
# File lib/formalism/r18n_errors/validation_helpers.rb, line 33
def validate_max_length(validation_field, max_length)
        return unless field_changed?(validation_field)

        value = public_send(validation_field)
        return true if value && value.length <= max_length

        add_error validation_field, :greater_than, args: max_length
        false
end
validate_min_length(validation_field, min_length) click to toggle source
# File lib/formalism/r18n_errors/validation_helpers.rb, line 43
def validate_min_length(validation_field, min_length)
        return unless field_changed?(validation_field)

        value = public_send(validation_field)
        return true if value && value.length >= min_length

        add_error validation_field, :less_than, args: min_length
        false
end
validate_provision(*validation_fields, error_key: :not_provided) click to toggle source
# File lib/formalism/r18n_errors/validation_helpers.rb, line 13
def validate_provision(*validation_fields, error_key: :not_provided)
        valid = true
        validation_fields.flatten.each do |validation_field|
                next unless field_changed?(validation_field)
                next if field_valid?(validation_field)

                valid = false
                add_error validation_field, error_key
        end
        valid
end
validate_range_entry(validation_field, range) click to toggle source
# File lib/formalism/r18n_errors/validation_helpers.rb, line 53
def validate_range_entry(validation_field, range)
        return unless field_changed?(validation_field)

        value = public_send(validation_field).to_f

        add_error validation_field, :less_than, args: range.begin if value < range.begin

        return unless range.end
        return if value.public_send (range.exclude_end? ? :< : :<=), range.end

        add_error validation_field, :greater_than, args: range.end
end
validate_uniqueness(*fields_combinations) click to toggle source

Requires `formalism-model_form` gem

# File lib/formalism/r18n_errors/validation_helpers.rb, line 93
def validate_uniqueness(*fields_combinations)
        valid = true
        fields_combinations.each do |*fields_combination|
                fields_combination.flatten!

                next if fields_combination.none? { |field| field_changed?(field) }

                next if unique_by_fields_combination? fields_combination

                valid = false
                add_error_for_uniqueness_validation fields_combination
        end
        valid
end
validate_uuid(*validation_fields) click to toggle source

Requires `uuid` gem

# File lib/formalism/r18n_errors/validation_helpers.rb, line 80
def validate_uuid(*validation_fields)
        valid = true
        validation_fields.flatten.each do |validation_field|
                next unless field_changed?(validation_field)
                next if UUID.validate public_send(validation_field)

                valid = false
                add_error validation_field, :not_valid_uuid
        end
        valid
end