Sha256: 0f4beb601140aec57253fc65010ff525a3488e542873c39c8f749aaf31768de7

Contents?: true

Size: 1.79 KB

Versions: 1

Compression:

Stored size: 1.79 KB

Contents

# frozen_string_literal: true

module Phlexi
  module Form
    module FieldOptions
      module Errors
        def custom_error(error)
          options[:error] = error
          self
        end

        def error
          error_text if has_errors?
        end

        def full_error
          full_error_text if has_errors?
        end

        def has_errors?
          object_with_errors? || !object && has_custom_error?
        end

        def show_errors?
          options[:error] != false
        end

        def valid?
          !has_errors? && has_value?
        end

        protected

        def error_text
          text = has_custom_error? ? options[:error] : errors.send(error_method)

          "#{options[:error_prefix]} #{text}".lstrip
        end

        def full_error_text
          has_custom_error? ? options[:error] : full_errors.send(error_method)
        end

        def object_with_errors?
          object&.respond_to?(:errors) && errors.present?
        end

        def error_method
          options[:error_method] || :first
        end

        def errors
          @errors ||= (errors_on_attribute + errors_on_association).compact
        end

        def full_errors
          @full_errors ||= (full_errors_on_attribute + full_errors_on_association).compact
        end

        def errors_on_attribute
          object.errors[key] || []
        end

        def full_errors_on_attribute
          object.errors.full_messages_for(key)
        end

        def errors_on_association
          reflection ? object.errors[reflection.name] : []
        end

        def full_errors_on_association
          reflection ? object.errors.full_messages_for(reflection.name) : []
        end

        def has_custom_error?
          options[:error].is_a?(String)
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
phlexi-form-0.2.0 lib/phlexi/form/field_options/errors.rb