# ReformErrorsObjects

If you need nested errors objects instead of dotted errors using trailblazer/reform gem you came to right place.
For more details, take a look at use case example under [usage](#usage) section

## Installation

Add this line to your application's Gemfile:

```ruby
gem 'reform_errors_objects'
```

And then execute:

    $ bundle

Or install it yourself as:

    $ gem install reform_errors_objects

## Usage

For instance you have some declared form with nested objects/collections and so on...
You got request with invalid data.
And you need to return the same way structured error messages, let's say, in json response.

### so your form looks like:
```ruby
require 'dry-validation'
require 'reform/form/dry'
require 'reform'

class DevicesForm < Reform::Form
  feature Reform::Form::Dry

  property :id

  collection :devices, default: [], populate_if_empty: OpenStruct do

    property :imei

    validation do
      required(:imei).filled
    end
  end
end

form = DevicesForm.new(OpenStruct.new)
```

### incomming hash is:
```ruby
incomming_hash = { id: 22, devices: [{ imei: 21 }, { imei: nil }] }
```

### you do validation:
```ruby
form.validate(incomming_hash)
```

### then you can call #objects method on errors instance
```ruby
# reform validation errors format
form.errors.objects
```

### and it returns stuctured nested errors according you form schema
```ruby
{:devices=>{1=>{:imei=>["must be filled"]}}}
```

## Development

After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).

## Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/reform_errors_objects. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.

## License

The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).

## Code of Conduct

Everyone interacting in the ReformErrorsObjects project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/reform_errors_objects/blob/master/CODE_OF_CONDUCT.md).