# Libraries

## Authentication

* [Devise](https://github.com/plataformatec/devise) - Flexible and modular authentication solution.
* [OmniAuth](https://github.com/omniauth/omniauth) - Flexible authentication solution for multi-provider auth (e.g. Sign in with GitHub or Google).

## Authorization

* [Pundit](https://github.com/varvet/pundit) - Minimal authorization through OO design and pure Ruby classes.

## ActiveJob

* [job-iteration](https://github.com/Shopify/job-iteration) - Make background jobs interruptible and resumable by design.

## Countries

* [countries](https://github.com/hexorx/countries) - All sorts of useful information about every country packaged as convenient little country objects. It includes data from ISO 3166 (countries and states/subdivisions ), ISO 4217 (currency), and E.164 (phone numbers).

## Payments

* [ActiveMerchant](https://github.com/activemerchant/active_merchant) - Payment abstraction library extracted from Shopify.

## Phones

* [phony\_rails](https://github.com/joost/phony_rails) - This Gem adds useful methods to your Rails app to validate, display and save phone numbers. It uses the super awesome Phony gem ([floere/phony](https://github.com/floere/phony)).

## Event-Driven Architecture

* [rails\_event\_store](https://github.com/RailsEventStore/rails_event_store) - A Ruby implementation of an Event Store based on Active Record.
* [sequent](https://github.com/zilverline/sequent) - CQRS & event sourcing framework for Ruby.
* [Eventide](https://eventide-project.org/) - Microservices, Autonomous Services, Service-Oriented Architecture, and Event Sourcing Toolkit for Ruby with Support for Event Store and Postgres.

## Enums

* [Enumerize](https://github.com/brainspec/enumerize) - Enumerated attributes with I18n and ActiveRecord/Mongoid/MongoMapper/Sequel support.

## Database

* [paranoia](https://github.com/rubysherpas/paranoia) - Overriding ActiveRecord `delete` and `destroy` to act as soft deletion.
* [scenic](https://github.com/scenic-views/scenic) - Versioned database views for Rails.
  * See also ["Effectively Using Materialized Views in Ruby on Rails"](https://pganalyze.com/blog/materialized-views-ruby-rails).

## Auditing

* [audited](https://github.com/collectiveidea/audited) - An ORM extension that logs all changes to your Rails models.
* [paper\_trail](https://github.com/paper-trail-gem/paper_trail) - Track changes to your models, for auditing or versioning. See how a model looked at any stage in its lifecycle, revert it to any version, or restore it after it has been destroyed.

## Localization

* [globalize](https://github.com/globalize/globalize) - Rails I18n de-facto standard library for ActiveRecord model/data translation.

## Forms

* [simple\_form](https://github.com/plataformatec/simple_form) - Forms made easy for Rails! It's tied to a simple DSL, with no opinion on markup.&#x20;

## Views

* [view\_component](https://github.com/github/view_component) - A framework for building reusable, testable & encapsulated view components in Ruby on Rails.

## PDF

* [wicked\_pdf](https://github.com/mileszs/wicked_pdf) - PDF generator (from HTML) plugin for Ruby on Rails.

## Monitoring

* [Bullet](https://github.com/flyerhzm/bullet) - Helps to kill N+1 queries and unused eager loading.

## Testing

* [shoulda-matchers](https://github.com/thoughtbot/shoulda-matchers) - Simple one-liner tests for common Rails functionality.
* [letter\_opener](https://github.com/ryanb/letter_opener) - Preview mail in the browser instead of sending.
