ARCHIVED. Realms (originally Roll/Rolls, RubyForge #1004) was a pre-Bundler attempt at solving Ruby's library management problem. The idea was a global, filesystem-scoped library ledger driven by a
RUBY_LIBRARYenvironment variable (analogous toPATH), with a customrequirethat consulted the ledger and arealmCLI for inspection, isolation, and locking. It let you develop against any project on disk without installing, vendoring, or bundling.History decided otherwise. Bundler (2010) solved dependency isolation with per-project lockfiles and the community standardized on that. Realms also ran into an unfixable wall: Ruby's
autoloadcannot be hooked by a customrequire, so any library usingautoloadfor cross-library loading silently bypassed Realms. Combined with the death of the.indexmetadata system Realms depended on, the project no longer fits the ecosystem.Preserved here as a historical artifact. No further development is planned.
Homepage /
Documentation /
Report Issue /
Source Code
( 
<|
A
/.\
<| [""M#
A | # Realms
/.\ [""M#
[""M# | # U"U#U
| # | # \ .:/
| # | #___| #
| "--' .-"
|"-"-"-"-"-#-#-##
| # ## ######
\ .::::'/
\ ::::'/
:8a| # # ##
::88a ###
::::888a 8a ##::.
::::::888a88a[]::::
:::::::::SUNDOGa8a::::. ..
:::::8::::888:Y8888:::::::::...
::':::88::::888::Y88a______________________________________________________
:: ::::88a::::88a:Y88a __---__-- __
' .: ::Y88a:::::8a:Y88a __----_-- -------_-__
:' ::::8P::::::::::88aa. _ _- -- --_ --- __ --- __--
.:: :::::::::::::::::::Y88as88a...s88aa.
REALMS is a library management system for Ruby. In fact, the name is an anacronym which stands for Ruby Enhanced Library Management System. Okay, it sounds neat, but what does Realms actually do?
Realms core functionality is to take a list of file system locations, sift
through them to find Ruby projects and make them available via Ruby's require
and load methods. It does this in such a way that is customizable and fast.
Along with some supporting functionality, this bestows a variety of useful possibilities to Ruby developers:
- Work with libraries in an object-oriented manner.
- Develop interdependent projects in real time without installs or vendoring.
- Create isolated library environments based on project requirements.
- Nullify the need for per-project gemsets and multiple copies of the same gem.
- Access libraries anywhere; there is no special "home" path they must reside.
- Serve gem installed libraries faster than RubyGems itself.
Ruby has a "bug" which prevents #autoload from using custom #require
methods. So autoload paths cannot make use of Realms. However, Realms
has a fallback system which allows autoload to work so long as the path
lies within the current library. It is only a show-stopper when autoload
is used to load scripts from outside dependencies. This is not as significant
as it might seem for two reasons. 1) Most uses of autoload are interal;
and 2) autoload is in the process of being deprecated as of Ruby 2.0. So
it is best to discontinue it's use anyway.
Because there is fair amount of information to cover this section will refer you to the project wiki pages for instruction. Most users can follow the Quick Start Guide. For more detailed instruction on how setup Realms and get the most out select from the following links:
- Installation
- System Setup
- Project Conformity
- Run Modes
- Dependency Isolation
- Configuring Locations
- API Usage
Realms was originally called Roll and was RubyForge project #1004. She's actually been around a while! :)
Realms is copyrighted open source software.
Copyright (c) 2006 Rubyworks
It can be modified and redistributable in accordance with the BSD-2-Clause license.
See the LICENSE.txt file details.