Backports Library

Would you like to use features of Ruby 1.8.7 without the need of having 1.8.7 installed? Simply

require 'backports/1.8.7'

All 1.8.7 features are now available! Some of the features of 1.9 are also available with

require 'backports/1.9'

Finally, some features of rails’ active-support are also available with

require 'backports/rails'

If you want them all:

require 'backports'

What’s inside

All features of 1.8.7 are backported (well, almost all, see the exception list bellow).

Conditions for inclusion of ruby 1.9 and activesupport features:

  1. Won’t break older code

  2. Simple and self-contained

For example, Module::instance_methods returns strings in 1.8 and symbols in 1.9; no change can be made without the risk of breaking existing code. Such incompatibilities between 1.8 and 1.9 methods are left unchanged.

More complex features of active-support (even things like String::pluralize), won’t be included. require 'activesupport' if you need them and are not in rails!

Installation & compatibility

backports is mirrored on Rubyforge and can thus be installed with:

sudo gem install backports

To use:

require 'rubygems'
require 'backports'   # or a subset like "backports/1.8.7"
# and off you go!

Compatible with Ruby 1.8 & 1.9, jruby and rubinius.

Complete List of backports

Ruby 1.8.7

Complete Ruby 1.8.7 backporting. Refer to the official list of changes.

Only exceptions:

  • String#gsub

  • GC.stress=

  • Process.exec

  • Array#choice (use Array#sample instead)

  • recursive data handling (Array and Hash)

Ruby 1.9

Additionally, the following Ruby 1.9 have been backported:

  • Array

    • try_convert

  • Enumerable

    • each_with_object

  • Enumerator

    • new (with block)

  • File

    • binread

    • to_path

    • All class methods accepting filenames will accept files or anything with a #to_path method.

  • Hash

    • try_convert

    • default_proc=

  • Kernel

    • require_relative

  • Object

    • define_singleton_method

  • Proc

    • yield

  • String

    • try_convert

    • ascii_only?

    • chr

    • clear

    • codepoints, each_codepoint

Enumerator can be accessed directly (instead of Enumerable::Enumerator)

Moreover, a pretty good imitation of BasicObject is available, but it must be required explicitely:

require 'backports/basic_object'

Rails

Some generic methods from Rails methods have been copied:

  • Enumerable

    • sum

  • Hash

    • symbolize_keys, symbolize_keys!

    • reverse_merge, reverse_merge!

  • Module

    • alias_method_chain

  • Object

    • try

    • returning

  • String

    • camelize, underscore

    • dasherize, demodulize

    • constantize

License

backports is released under the terms of the MIT License, see the included LICENSE file.

Author

Marc-André Lafortune