Sha256: 55014855fbc4d52c0d81da960a28565519f352d51ba4b8fc92b61e8ad219c790

Contents?: true

Size: 1.22 KB

Versions: 3

Compression:

Stored size: 1.22 KB

Contents

require "reform"
require "reform_errors_objects/version"

module ReformErrorsObjects
  JsonErrorsCollector = ->(form) do
    result = {}

    # skip non-form objects
    return result unless form.is_a?(Reform::Form)
    return result unless form.errors.messages.any?

    # get properties errors
    result.merge!(form.instance_variable_get(:@result).errors || {})

    form.schema.each_pair do |property, definition|
      options = definition.instance_variable_get(:@options)

      if options[:collection] && form.send(property) # ? collection
        nested_errors = form.send(property).each.with_index.inject({}) do |memo, (obj, index)|
          nested_errors = JsonErrorsCollector.call(obj)

          memo[index.to_s.to_sym] = nested_errors if nested_errors.any?

          memo
        end

        result[property.to_sym] = nested_errors if nested_errors.any?
      elsif options[:nested] && form.send(property) # ? nested
        nested_errors = JsonErrorsCollector.call(form.send(property))

        result[property.to_sym] = nested_errors if nested_errors.any?
      end
    end

    result
  end

  def objects
    @objects ||= JsonErrorsCollector.call(@form)
  end
end

Reform::Contract::Result::Errors.include(ReformErrorsObjects)

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
reform_errors_objects-0.1.3 lib/reform_errors_objects.rb
reform_errors_objects-0.1.2 lib/reform_errors_objects.rb
reform_errors_objects-0.1.1 lib/reform_errors_objects.rb