Note: This post is intended as a supplement to WTF Just Happened? A Quick Tour of Your First Rails App.
Rails: A Gem of Gems
In a previous article, Gems and Bundler, I described Rails as a gem for building web applications. To be totally correct, Rails is more accurately described as a gem of gems.
A standard Rails application depends on several gems, specifically:
- actionmailer A framework for designing email service layers. You could think of it as a wrapper around Action Controller and the Mail gem.
- actionpack A framework for handling and responding to web requests. It provides mechanisms for routing (mapping request URLs to actions), defining controllers that implement actions, and generating responses by rendering views, which are templates of various formats. In short, Action Pack provides the view and controller layers in the MVC paradigm.
- actionview A framework for handling view template lookup and rendering, and provides view helpers that assist when building HTML forms.
- activemodel Provides a known set of interfaces for usage in model classes.
- activerecord Connects classes to relational database tables to establish an almost zero-configuration persistence layer for applications.
- activesupport A collection of utility classes and standard library extensions that are useful for the Rails framework.
- activejob A framework for declaring jobs and making them run on a variety of queueing backends.
- arel It represents SQL queries as objects rather than strings.
- builder Provides a simple way to create XML markup and data structures.
- bundler A gem dependency manager.
- erubis An alternative to ERB for rendering views.
- i18n A set of common locale data and translations to internationalise and/or localise your application.
- mail An internet library for Ruby that is designed to handle the generation, parsing and sending of emails.
- mime-types p\Provides a library and registry for information about MIME content type definitions.
- rack An interface for developing web applications in Ruby. By wrapping HTTP requests and responses, it unifies and distills the API for web servers, web frameworks, and software in between (the so-called middleware) into a single method call.
- rack-cache Enables HTTP caching for Rack-based applications that produce freshness (Expires, Cache-Control) and/or validation (Last-Modified, ETag) information.
- rack-mount A stackable dynamic tree based Rack router.
- rack-test A testing API for Rack apps.
- rails A full-stack web framework optimised for programmer happiness and sustainable productivity.
- railties The core of the Rails framework and provides hooks to extend Rails and/or modify the initialization process. Every major component of Rails (Action Mailer, Action Controller, Active Record, etc.) implements a railtie. Each of them is responsible for their own initialization.
- rake A standalone Ruby utility that replaces the Unix utility 'make', and uses a 'Rakefile' and .rake files to build up a list of tasks.
- sqlite3 Allows Ruby programs to interface with the SQLite3 database engine.
- thor A tool for building self-documenting command line utilities.
- tzinfo Provides transformations between times in different timezones, allowing for daylight savings where applicable.