0.01
No release in over a year
AwesomeErrors is a simply way to add errors to your Ruby objects and classes.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 2.3
~> 12.3, >= 12.3.3
~> 3.0
~> 1.7

Runtime

~> 2.5
 Project Readme

AwesomeErrors

CI Suite Gem Version

Easily add errors to your service objects and classes. AwesomeErrors is inspired by the ActiveModel::Errors API, but ensures that each error contains an error code attribute and is not concerned with translating error messages.

Installation

Install from RubyGems by adding it to your Gemfile, then bundling.

# Gemfile
gem 'awesome_errors'

Usage

Include AwesomeErrors in your class:

class ApplicationService
  include AwesomeErrors

  # ...
end

service = ApplicationService.new
service.errors # => []

or set up the errors object manually

class ApplicationService
    def errors
      @errors ||= AwesomeErrors::Errors.new
    end
  # ...
end

service = ApplicationService.new
service.errors # => []

By default, errors are added with the an :invalid code and "is invalid" message:

errors = AwesomeErrors::Errors.new
errors.add(:name)
errors.first.key # => :name
errors.first.code # => :invalid
errors.first.message # => "is invalid"

But you can specify a custom code, message and metadata

errors = AwesomeErrors::Errors.new
errors.add(:name, code: :too_long, message: "is too long", metadata: { line: 1, column: 6 })
errors.first.key # => :name
errors.first.code # => :too_long
errors.first.message # => "is too long"
errors.first.metadata # => { line: 1, column: 6 }

Example

class SendApiRequest
    include AwesomeErrors

    def call
        if api_response.success?
          # do something
        else
            errors.add(:api, code: :failed_request, message: "failed request")
        end
    end
end

Why this gem?

I have used ActiveModel::Errors in many service objects and Ruby classes and enjoy its API, but often I am forced to add methods related to the translation of messages that I wouldn't need. Also, ActiveModel::Errors allows you to add errors where the message will be used as the error type, and I wanted to ensure a more consistent experience of always having an error code that is Symbol or an Integer so that services and objects can exchange errors while being able to rely on the code to better construct a user-facing error message.

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec 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 the created tag, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/rodloboz/awesome_errors.

License

The gem is available as open source under the terms of the MIT License.