An open API service indexing awesome lists of open source software.

https://github.com/alexwayfer/formalism-r18n_errors

Errors for Formalism via R18n
https://github.com/alexwayfer/formalism-r18n_errors

Last synced: 4 months ago
JSON representation

Errors for Formalism via R18n

Awesome Lists containing this project

README

          

# Formalism R18n Errors

[![Cirrus CI - Base Branch Build Status](https://img.shields.io/cirrus/github/AlexWayfer/formalism-r18n_errors?style=flat-square)](https://cirrus-ci.com/github/AlexWayfer/formalism-r18n_errors)
[![Codecov branch](https://img.shields.io/codecov/c/github/AlexWayfer/formalism-r18n_errors/main.svg?style=flat-square)](https://codecov.io/gh/AlexWayfer/formalism-r18n_errors)
[![Code Climate](https://img.shields.io/codeclimate/maintainability/AlexWayfer/formalism-r18n_errors.svg?style=flat-square)](https://codeclimate.com/github/AlexWayfer/formalism-r18n_errors)
[![Inline docs](https://inch-ci.org/github/AlexWayfer/formalism-r18n_errors.svg?branch=main)](https://inch-ci.org/github/AlexWayfer/formalism-r18n_errors)
[![license](https://img.shields.io/github/license/AlexWayfer/formalism-r18n_errors.svg?style=flat-square)](LICENSE.txt)
[![Gem](https://img.shields.io/gem/v/formalism-r18n_errors.svg?style=flat-square)](https://rubygems.org/gems/formalism-r18n_errors)

Errors for [Formalism](https://github.com/AlexWayfer/formalism)
via [R18n](https://github.com/r18n/r18n).

## Installation

Add this line to your application's Gemfile:

```ruby
gem 'formalism-r18n_errors'
```

And then execute:

```shell
bundle install
```

Or install it yourself as:

```shell
gem install formalism-r18n_errors
```

## Usage

```ruby
require 'formalism/r18n_errors'

module MyProject
module Forms
class Base < Formalism::Form
include Formalism::R18nErrors

def initialize(*)
## This is an example, but some value is required
@errors_key = self.class.name.split('::')[2].underscore.to_sym

super
end
end

class GeoLocation < Base
field :address
end

class User < Base
field :name, String

## `:errors_key` can be changed for nested forms
nested :location, GeoLocation, errors_key: :geolocation

private

def validate
## `add_error` is the alias for `errors.add errors_key, *` (`:user` in this case)
add_error :name, :is_empty if name.to_s.empty?
end
end
end
end
```

### Validation Helpers

```ruby
require 'formalism/r18n_errors/validation_helpers'

module MyProject
module Forms
class Base < Formalism::Form
include Formalism::R18nErrors
include Formalism::R18nErrors::ValidationHelpers

# ...
end

class User < Base
field :name, String
field :country
field :city
field :score, Float
field :email, String

nested :location, GeoLocation

private

def validate
## `errors.user.name.not_entered`
validate_entry :name

## `errors.user.country.not_chosen`
## `errors.user.city.not_chosen`
validate_choice %i[country city]

## `errors.user.location.not_provided`
validate_provision :location

## `errors.user.name.greater_than(20)`
validate_max_length :name, 20

## `errors.user.name.less_than(3)`
validate_min_length :name, 3

## `errors.user.score.greater_than(5)`
## or
## `errors.user.score.less_than(1)`
validate_range_entry :score, 1..5

## Requires `email_address` gem
## `errors.user.email.not_valid_email`
validate_email :email

## `errors.user.key.not_valid_uuid`
validate_uuid :key

## Requires `formalism-model_form` gem
## `errors.user.email.already_taken`
validate_uniqueness :email
## `errors.user.itself.already_exists.country_and_city`
validate_uniqueness %i[country city]
end
end
end
end
```

## Development

After checking out the repo, run `bundle install` to install dependencies.

Then, run `toys rspec` to run the tests.

To install this gem onto your local machine, run `toys gem install`.

To release a new version, run `toys gem release %version%`.
See how it works [here](https://github.com/AlexWayfer/gem_toys#release).

## Contributing

Bug reports and pull requests are welcome on [GitHub](https://github.com/AlexWayfer/formalism-r18n_errors).

## License

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