summary refs log tree commit diff
path: root/pkgs/development/interpreters/ruby
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/interpreters/ruby')
-rw-r--r--pkgs/development/interpreters/ruby/bundix/Gemfile4
-rw-r--r--pkgs/development/interpreters/ruby/bundix/Gemfile.lock19
-rw-r--r--pkgs/development/interpreters/ruby/bundix/default.nix9
-rw-r--r--pkgs/development/interpreters/ruby/bundix/gemset.nix22
-rw-r--r--pkgs/development/interpreters/ruby/bundler-env/default-gem-config.nix142
-rw-r--r--pkgs/development/interpreters/ruby/bundler-env/default.nix312
-rw-r--r--pkgs/development/interpreters/ruby/bundler-env/mkrf_conf_xapian.rb14
-rw-r--r--pkgs/development/interpreters/ruby/bundler-env/monkey_patches.rb238
-rw-r--r--pkgs/development/interpreters/ruby/bundler-env/package-1.8.rb29
-rw-r--r--pkgs/development/interpreters/ruby/bundler-env/xapian-Rakefile38
-rw-r--r--pkgs/development/interpreters/ruby/bundler-head.nix18
-rw-r--r--pkgs/development/interpreters/ruby/bundler.nix13
-rw-r--r--pkgs/development/interpreters/ruby/fix-gem-nix-versions.patch35
-rw-r--r--pkgs/development/interpreters/ruby/gem.nix181
-rw-r--r--pkgs/development/interpreters/ruby/generated.nix2615
-rw-r--r--pkgs/development/interpreters/ruby/libs.nix45
-rw-r--r--pkgs/development/interpreters/ruby/load-ruby-env.nix69
-rw-r--r--pkgs/development/interpreters/ruby/overrides.nix5
-rw-r--r--pkgs/development/interpreters/ruby/ruby-1.8.7.nix15
-rw-r--r--pkgs/development/interpreters/ruby/ruby-1.9.3.nix15
-rw-r--r--pkgs/development/interpreters/ruby/ruby-2.0.0.nix15
-rw-r--r--pkgs/development/interpreters/ruby/ruby-2.1.0.nix16
-rw-r--r--pkgs/development/interpreters/ruby/ruby-2.1.1.nix15
-rw-r--r--pkgs/development/interpreters/ruby/ruby-2.1.2.nix15
-rw-r--r--pkgs/development/interpreters/ruby/ruby-2.1.3.nix15
-rw-r--r--pkgs/development/interpreters/ruby/ruby-2.2.0.nix15
-rw-r--r--pkgs/development/interpreters/ruby/rubygems.nix8
27 files changed, 1147 insertions, 2790 deletions
diff --git a/pkgs/development/interpreters/ruby/bundix/Gemfile b/pkgs/development/interpreters/ruby/bundix/Gemfile
new file mode 100644
index 00000000000..b9ae407c4d4
--- /dev/null
+++ b/pkgs/development/interpreters/ruby/bundix/Gemfile
@@ -0,0 +1,4 @@
+source "http://rubygems.org"
+gem "bundix",
+  :git => "https://github.com/cstrahan/bundix.git",
+  :ref => "5df25b11b5b86e636754d54c2a8859c7c6ec78c7"
diff --git a/pkgs/development/interpreters/ruby/bundix/Gemfile.lock b/pkgs/development/interpreters/ruby/bundix/Gemfile.lock
new file mode 100644
index 00000000000..c8869fdb1e3
--- /dev/null
+++ b/pkgs/development/interpreters/ruby/bundix/Gemfile.lock
@@ -0,0 +1,19 @@
+GIT
+  remote: https://github.com/cstrahan/bundix.git
+  revision: 5df25b11b5b86e636754d54c2a8859c7c6ec78c7
+  ref: 5df25b11b5b86e636754d54c2a8859c7c6ec78c7
+  specs:
+    bundix (0.1.0)
+      bundler (~> 1.7.9)
+      thor (~> 0.19.1)
+
+GEM
+  remote: http://rubygems.org/
+  specs:
+    thor (0.19.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  bundix!
diff --git a/pkgs/development/interpreters/ruby/bundix/default.nix b/pkgs/development/interpreters/ruby/bundix/default.nix
new file mode 100644
index 00000000000..0196adb8f4c
--- /dev/null
+++ b/pkgs/development/interpreters/ruby/bundix/default.nix
@@ -0,0 +1,9 @@
+{ ruby, bundlerEnv }:
+
+bundlerEnv {
+  name = "bundix";
+  inherit ruby;
+  gemset = ./gemset.nix;
+  gemfile = ./Gemfile;
+  lockfile = ./Gemfile.lock;
+}
diff --git a/pkgs/development/interpreters/ruby/bundix/gemset.nix b/pkgs/development/interpreters/ruby/bundix/gemset.nix
new file mode 100644
index 00000000000..a2c633f903c
--- /dev/null
+++ b/pkgs/development/interpreters/ruby/bundix/gemset.nix
@@ -0,0 +1,22 @@
+{
+  "bundix" = {
+    version = "0.1.0";
+    source = {
+      type = "git";
+      url = "https://github.com/cstrahan/bundix.git";
+      rev = "5df25b11b5b86e636754d54c2a8859c7c6ec78c7";
+      fetchSubmodules = false;
+      sha256 = "0334jsavpzkikcs7wrx7a3r0ilvr5vsnqd34lhc58b8cgvgll47p";
+    };
+    dependencies = [
+      "thor"
+    ];
+  };
+  "thor" = {
+    version = "0.19.1";
+    source = {
+      type = "gem";
+      sha256 = "08p5gx18yrbnwc6xc0mxvsfaxzgy2y9i78xq7ds0qmdm67q39y4z";
+    };
+  };
+}
diff --git a/pkgs/development/interpreters/ruby/bundler-env/default-gem-config.nix b/pkgs/development/interpreters/ruby/bundler-env/default-gem-config.nix
new file mode 100644
index 00000000000..eba2a0b0a10
--- /dev/null
+++ b/pkgs/development/interpreters/ruby/bundler-env/default-gem-config.nix
@@ -0,0 +1,142 @@
+# The standard set of gems in nixpkgs including potential fixes.
+#
+# The gemset is derived from two points of entry:
+# - An attrset describing a gem, including version, source and dependencies
+#   This is just meta data, most probably automatically generated by a tool
+#   like Bundix (https://github.com/aflatter/bundix).
+#   {
+#     name = "bundler";
+#     version = "1.6.5";
+#     sha256 = "1s4x0f5by9xs2y24jk6krq5ky7ffkzmxgr4z1nhdykdmpsi2zd0l";
+#     dependencies = [ "rake" ];
+#   }
+# - An optional derivation that may override how the gem is built. For popular
+#   gems that don't behave correctly, fixes are already provided in the form of
+#   derivations.
+#
+# This seperates "what to build" (the exact gem versions) from "how to build"
+# (to make gems behave if necessary).
+
+{ lib, fetchurl, writeScript, ruby, libxml2, libxslt, python, stdenv, which
+, libiconv, postgresql, v8, v8_3_16_14, clang, sqlite, zlib, imagemagick
+, pkgconfig , ncurses, xapian, gpgme, utillinux, fetchpatch, tzdata, icu, libffi
+, cmake, libssh2, openssl, mysql
+}:
+
+let
+  v8 = v8_3_16_14;
+  mysql = (import <nixpkgs> {}).mysql;
+
+in
+
+{
+  charlock_holmes = attrs: {
+    buildInputs = [ which icu ];
+  };
+
+  ffi = attrs: {
+    buildInputs = [ libffi pkgconfig ];
+  };
+
+  gpgme = attrs: {
+    buildInputs = [ gpgme ];
+  };
+
+  libv8 = attrs: {
+    buildInputs = [ which v8 python ];
+    buildFlags = [
+      "--with-system-v8=true"
+    ];
+    patches = [
+      # see: https://github.com/cowboyd/libv8/pull/161
+      (fetchpatch {
+        url = https://github.com/cstrahan/libv8/commit/c79378bf346d4ed2429af36d745d17c478ffbe96.patch;
+        sha256 = "1l6572cmigc22g249jj8h0xlbig88mj43kdqdbimhw2pmpv3q0rs";
+      })
+    ];
+  };
+
+  mysql2 = attrs: {
+    buildInputs = [ mysql zlib openssl ];
+  };
+
+  ncursesw = attrs: {
+    buildInputs = [ ncurses ];
+    buildFlags = [
+      "--with-cflags=-I${ncurses}/include"
+      "--with-ldflags=-L${ncurses}/lib"
+    ];
+  };
+
+  nokogiri = attrs: {
+    buildFlags = [
+      "--use-system-libraries"
+      "--with-zlib-dir=${zlib}"
+      "--with-xml2-lib=${libxml2}/lib"
+      "--with-xml2-include=${libxml2}/include/libxml2"
+      "--with-xslt-lib=${libxslt}/lib"
+      "--with-xslt-include=${libxslt}/include"
+      "--with-exslt-lib=${libxslt}/lib"
+      "--with-exslt-include=${libxslt}/include"
+    ] ++ lib.optional stdenv.isDarwin "--with-iconv-dir=${libiconv}";
+  };
+
+  pg = attrs: {
+    buildFlags = [
+      "--with-pg-config=${postgresql}/bin/pg_config"
+    ];
+  };
+
+  rmagick = attrs: {
+    buildInputs = [ imagemagick pkgconfig ];
+  };
+
+  rugged = attrs: {
+    buildInputs = [ cmake pkgconfig openssl libssh2 zlib ];
+  };
+
+  sqlite3 = attrs: {
+    buildFlags = [
+      "--with-sqlite3-include=${sqlite}/include"
+      "--with-sqlite3-lib=${sqlite}/lib"
+    ];
+  };
+
+  sup = attrs: {
+    # prevent sup from trying to dynamically install `xapian-ruby`.
+    postPatch = ''
+      cp ${./mkrf_conf_xapian.rb} ext/mkrf_conf_xapian.rb
+
+      substituteInPlace lib/sup/crypto.rb \
+        --replace 'which gpg2' \
+                  '${which}/bin/which gpg2'
+    '';
+  };
+
+  therubyracer = attrs: {
+    buildFlags = [
+      "--with-v8-dir=${v8}"
+      "--with-v8-include=${v8}/include"
+      "--with-v8-lib=${v8}/lib"
+    ];
+  };
+
+  tzinfo = attrs: {
+    postPatch = ''
+      substituteInPlace lib/tzinfo/zoneinfo_data_source.rb \
+        --replace "/usr/share/zoneinfo" "${tzdata}/share/zoneinfo"
+    '';
+  };
+
+  xapian-ruby = attrs: {
+    # use the system xapian
+    buildInputs = [ xapian pkgconfig zlib ];
+    postPatch = ''
+      cp ${./xapian-Rakefile} Rakefile
+    '';
+    preInstall = ''
+      export XAPIAN_CONFIG=${xapian}/bin/xapian-config
+    '';
+  };
+}
+
diff --git a/pkgs/development/interpreters/ruby/bundler-env/default.nix b/pkgs/development/interpreters/ruby/bundler-env/default.nix
new file mode 100644
index 00000000000..f90e756030f
--- /dev/null
+++ b/pkgs/development/interpreters/ruby/bundler-env/default.nix
@@ -0,0 +1,312 @@
+{ stdenv, runCommand, writeText, writeScript, writeScriptBin, ruby, lib
+, callPackage, defaultGemConfig, fetchurl, fetchgit, buildRubyGem , bundler_HEAD
+, git
+}@defs:
+
+# This is a work-in-progress.
+# The idea is that his will replace load-ruby-env.nix.
+
+{ name, gemset, gemfile, lockfile, ruby ? defs.ruby, gemConfig ? defaultGemConfig
+, enableParallelBuilding ? false # TODO: this might not work, given the env-var shinanigans.
+, postInstall ? null
+, documentation ? false
+, meta ? {}
+}@args:
+
+let
+
+  shellEscape = x: "'${lib.replaceChars ["'"] [("'\\'" + "'")] x}'";
+  const = x: y: x;
+  bundler = bundler_HEAD.override { inherit ruby; };
+  inherit (builtins) attrValues;
+
+  gemName = attrs: "${attrs.name}-${attrs.version}.gem";
+
+  fetchers.path = attrs: attrs.source.path;
+  fetchers.gem = attrs: fetchurl {
+    url = "${attrs.source.source or "https://rubygems.org"}/downloads/${gemName attrs}";
+    inherit (attrs.source) sha256;
+  };
+  fetchers.git = attrs: fetchgit {
+    inherit (attrs.source) url rev sha256 fetchSubmodules;
+    leaveDotGit = true;
+  };
+
+  applySrc = attrs:
+    attrs // {
+      src = (fetchers."${attrs.source.type}" attrs);
+    };
+
+  applyGemConfigs = attrs:
+    if gemConfig ? "${attrs.name}"
+    then attrs // gemConfig."${attrs.name}" attrs
+    else attrs;
+
+  needsPatch = attrs:
+    (attrs ? patches) || (attrs ? prePatch) || (attrs ? postPatch);
+
+  # patch a gem or source tree.
+  # for gems, the gem is unpacked, patched, and then repacked.
+  # see: https://github.com/fedora-ruby/gem-patch/blob/master/lib/rubygems/patcher.rb
+  applyPatches = attrs:
+    if !needsPatch attrs
+    then attrs
+    else attrs // { src =
+      stdenv.mkDerivation {
+        name = gemName attrs;
+        phases = [ "unpackPhase" "patchPhase" "installPhase" ];
+        buildInputs = [ ruby ] ++ attrs.buildInputs or [];
+        patches = attrs.patches or [ ];
+        prePatch = attrs.prePatch or "true";
+        postPatch = attrs.postPatch or "true";
+        unpackPhase = ''
+          runHook preUnpack
+
+          if [[ -f ${attrs.src} ]]; then
+            isGem=1
+            # we won't know the name of the directory that RubyGems creates,
+            # so we'll just use a glob to find it and move it over.
+            gem unpack ${attrs.src} --target=container
+            cp -r container/* contents
+            rm -r container
+          else
+            cp -r ${attrs.src} contents
+            chmod -R +w contents
+          fi
+
+          cd contents
+          runHook postUnpack
+        '';
+        installPhase = ''
+          runHook preInstall
+
+          if [[ -n "$isGem" ]]; then
+            ${writeScript "repack.rb" ''
+              #!${ruby}/bin/ruby
+              require 'rubygems'
+              require 'rubygems/package'
+              require 'fileutils'
+
+              if defined?(Encoding.default_internal)
+                Encoding.default_internal = Encoding::UTF_8
+                Encoding.default_external = Encoding::UTF_8
+              end
+
+              if Gem::VERSION < '2.0'
+                load "${./package-1.8.rb}"
+              end
+
+              out = ENV['out']
+              files = Dir['**/{.[^\.]*,*}']
+
+              package = Gem::Package.new("${attrs.src}")
+              patched_package = Gem::Package.new(package.spec.file_name)
+              patched_package.spec = package.spec.clone
+              patched_package.spec.files = files
+
+              patched_package.build(false)
+
+              FileUtils.cp(patched_package.spec.file_name, out)
+            ''}
+          else
+            cp -r . $out
+          fi
+
+          runHook postInstall
+        '';
+      };
+    };
+
+  instantiate = (attrs:
+    applyPatches (applyGemConfigs (applySrc attrs))
+  );
+
+  instantiated = lib.flip lib.mapAttrs (import gemset) (name: attrs:
+    instantiate (attrs // { inherit name; })
+  );
+
+  needsPreInstall = attrs:
+    (attrs ? preInstall) || (attrs ? buildInputs) || (attrs ? nativeBuildInputs);
+
+  # TODO: support cross compilation? look at stdenv/generic/default.nix.
+  runPreInstallers = lib.fold (next: acc:
+    if !needsPreInstall next
+    then acc
+    else acc + ''
+      ${writeScript "${next.name}-pre-install" ''
+        #!${stdenv.shell}
+
+        export nativeBuildInputs="${toString ((next.nativeBuildInputs or []) ++ (next.buildInputs or []))}"
+
+        source ${stdenv}/setup
+
+        header "running pre-install script for ${next.name}"
+
+        ${next.preInstall or ""}
+
+        ${ruby}/bin/ruby -e 'print ENV.inspect' > env/${next.name}
+
+        stopNest
+      ''}
+    ''
+  ) "" (attrValues instantiated);
+
+  # copy *.gem to ./gems
+  copyGems = lib.fold (next: acc:
+    if next.source.type == "gem"
+    then acc + "cp ${next.src} gems/${gemName next}\n"
+    else acc
+  ) "" (attrValues instantiated);
+
+  runRuby = name: env: command:
+    runCommand name env ''
+      ${ruby}/bin/ruby ${writeText name command}
+    '';
+
+  # TODO: include json_pure, so the version of ruby doesn't matter.
+  # not all rubies have support for JSON built-in,
+  # so we'll convert JSON to ruby expressions.
+  json2rb = writeScript "json2rb" ''
+    #!${ruby}/bin/ruby
+    begin
+      require 'json'
+    rescue LoadError => ex
+      require 'json_pure'
+    end
+
+    puts JSON.parse(STDIN.read).inspect
+  '';
+
+  # dump the instantiated gemset as a ruby expression.
+  serializedGemset = runCommand "gemset.rb" { json = builtins.toJSON instantiated; } ''
+    printf '%s' "$json" | ${json2rb} > $out
+  '';
+
+  # this is a mapping from a source type and identifier (uri/path/etc)
+  # to the pure store path.
+  # we'll use this from the patched bundler to make fetching sources pure.
+  sources = runRuby "sources.rb" { gemset = serializedGemset; } ''
+    out    = ENV['out']
+    gemset = eval(File.read(ENV['gemset']))
+
+    sources = {
+      "git"  => { },
+      "path" => { },
+      "gem"  => { },
+      "svn"  => { }
+    }
+
+    gemset.each_value do |spec|
+      type = spec["source"]["type"]
+      val = spec["src"]
+      key =
+        case type
+        when "gem"
+          spec["name"]
+        when "git"
+          spec["source"]["url"]
+        when "path"
+          spec["source"]["originalPath"]
+        when "svn"
+          nil # TODO
+        end
+
+      sources[type][key] = val if key
+    end
+
+    File.open(out, "wb") do |f|
+      f.print sources.inspect
+    end
+  '';
+
+  # rewrite PATH sources to point into the nix store.
+  purifiedLockfile = runRuby "purifiedLockfile" {} ''
+    out     = ENV['out']
+    sources = eval(File.read("${sources}"))
+    paths   = sources["path"]
+
+    lockfile = File.read("${lockfile}")
+
+    paths.each_pair do |impure, pure|
+      lockfile.gsub!(/^  remote: #{Regexp.escape(impure)}/, "  remote: #{pure}")
+    end
+
+    File.open(out, "wb") do |f|
+      f.print lockfile
+    end
+  '';
+
+  needsBuildFlags = attrs: attrs ? buildFlags;
+
+  mkBuildFlags = spec:
+    "export BUNDLE_BUILD__${lib.toUpper spec.name}='${lib.concatStringsSep " " (map shellEscape spec.buildFlags)}'";
+
+  allBuildFlags =
+    lib.concatStringsSep "\n"
+      (map mkBuildFlags
+        (lib.filter needsBuildFlags (attrValues instantiated)));
+
+in
+
+stdenv.mkDerivation {
+  inherit name;
+
+  buildInputs = [
+    ruby
+    bundler
+    git
+  ];
+
+  phases = [ "installPhase" "fixupPhase" ];
+
+  outputs = [
+    "out"    # the installed libs/bins
+    "bundle" # supporting files for bundler
+  ];
+
+  installPhase = ''
+    mkdir -p $bundle
+    export BUNDLE_GEMFILE=$bundle/Gemfile
+    cp ${gemfile} $BUNDLE_GEMFILE
+    cp ${purifiedLockfile} $BUNDLE_GEMFILE.lock
+
+    export NIX_GEM_SOURCES=${sources}
+    export NIX_BUNDLER_GEMPATH=${bundler}/${ruby.gemPath}
+
+    export GEM_HOME=$out/${ruby.gemPath}
+    export GEM_PATH=$NIX_BUNDLER_GEMPATH:$GEM_HOME
+    mkdir -p $GEM_HOME
+
+    ${allBuildFlags}
+
+    mkdir gems
+    cp ${bundler}/${bundler.ruby.gemPath}/cache/bundler-*.gem gems
+    ${copyGems}
+
+    ${lib.optionalString (!documentation) ''
+      mkdir home
+      HOME="$(pwd -P)/home"
+      echo "gem: --no-rdoc --no-ri" > $HOME/.gemrc
+    ''}
+
+    mkdir env
+    ${runPreInstallers}
+
+    mkdir $out/bin
+    cp ${./monkey_patches.rb} monkey_patches.rb
+    export RUBYOPT="-rmonkey_patches.rb -I $(pwd -P)"
+    bundler install --frozen --binstubs ${lib.optionalString enableParallelBuilding "--jobs $NIX_BUILD_CORES"}
+    RUBYOPT=""
+
+    runHook postInstall
+  '';
+
+  inherit postInstall;
+
+  passthru = {
+    inherit ruby;
+    inherit bundler;
+  };
+
+  inherit meta;
+}
diff --git a/pkgs/development/interpreters/ruby/bundler-env/mkrf_conf_xapian.rb b/pkgs/development/interpreters/ruby/bundler-env/mkrf_conf_xapian.rb
new file mode 100644
index 00000000000..e19f06e23ac
--- /dev/null
+++ b/pkgs/development/interpreters/ruby/bundler-env/mkrf_conf_xapian.rb
@@ -0,0 +1,14 @@
+require 'rubygems'
+require 'rubygems/command.rb'
+require 'rubygems/dependency_installer.rb'
+require 'rbconfig'
+
+begin
+  Gem::Command.build_args = ARGV
+rescue NoMethodError
+end
+
+# create dummy rakefile to indicate success
+f = File.open(File.join(File.dirname(__FILE__), "Rakefile"), "w")
+f.write("task :default\n")
+f.close
diff --git a/pkgs/development/interpreters/ruby/bundler-env/monkey_patches.rb b/pkgs/development/interpreters/ruby/bundler-env/monkey_patches.rb
new file mode 100644
index 00000000000..f3849446fe6
--- /dev/null
+++ b/pkgs/development/interpreters/ruby/bundler-env/monkey_patches.rb
@@ -0,0 +1,238 @@
+require 'bundler'
+
+# Undo the RUBYOPT trickery.
+opt = ENV['RUBYOPT'].dup
+opt.gsub!(/-rmonkey_patches.rb -I [^ ]*/, '')
+ENV['RUBYOPT'] = opt
+
+Bundler.module_eval do
+  class << self
+    # mappings from original uris to store paths.
+    def nix_gem_sources
+      @nix_gem_sources ||=
+        begin
+          src = ENV['NIX_GEM_SOURCES']
+          eval(Bundler.read_file(src))
+        end
+    end
+
+    # extract the gemspecs from the gems pulled from Rubygems.
+    def nix_gemspecs
+      @nix_gemspecs ||= Dir.glob("gems/*.gem").map do |path|
+        Bundler.rubygems.spec_from_gem(path)
+      end
+    end
+
+    # swap out ENV
+    def nix_with_env(env, &block)
+      if env
+        old_env = ENV.to_hash
+        begin
+          ENV.replace(env)
+          block.call
+        ensure
+          ENV.replace(old_env)
+        end
+      else
+        block.call
+      end
+    end
+
+    # map a git uri to a fetchgit store path.
+    def nix_git(uri)
+      Pathname.new(nix_gem_sources["git"][uri])
+    end
+  end
+end
+
+Bundler::Source::Git::GitProxy.class_eval do
+  def checkout
+    unless path.exist?
+      FileUtils.mkdir_p(path.dirname)
+      FileUtils.cp_r(Bundler.nix_git(@uri).join(".git"), path)
+      system("chmod -R +w #{path}")
+    end
+  end
+
+  def copy_to(destination, submodules=false)
+    unless File.exist?(destination.join(".git"))
+      FileUtils.mkdir_p(destination.dirname)
+      FileUtils.cp_r(Bundler.nix_git(@uri), destination)
+      system("chmod -R +w #{destination}")
+    end
+  end
+end
+
+Bundler::Fetcher.class_eval do
+  def use_api
+    true
+  end
+
+  def fetch_dependency_remote_specs(gem_names)
+    Bundler.ui.debug "Query Gemcutter Dependency Endpoint API: #{gem_names.join(',')}"
+    deps_list = []
+
+    spec_list = gem_names.map do |name|
+      spec = Bundler.nix_gemspecs.detect {|spec| spec.name == name }
+      dependencies = spec.dependencies.
+        select {|dep| dep.type != :development}.
+        map do |dep|
+          deps_list << dep.name
+          dep
+        end
+
+      [spec.name, spec.version, spec.platform, dependencies]
+    end
+
+    [spec_list, deps_list.uniq]
+  end
+end
+
+Bundler::Source::Rubygems.class_eval do
+  # We copy all gems into $PWD/gems, and this allows RubyGems to find those
+  # gems during installation.
+  def fetchers
+    @fetchers ||= [
+      Bundler::Fetcher.new(URI.parse("file://#{File.expand_path(Dir.pwd)}"))
+    ]
+  end
+
+  # Look-up gems that were originally from RubyGems.
+  def remote_specs
+    @remote_specs ||=
+      begin
+        lockfile = Bundler::LockfileParser.new(Bundler.read_file(Bundler.default_lockfile))
+        gem_names = lockfile.specs.
+          select {|spec| spec.source.is_a?(Bundler::Source::Rubygems)}.
+          map {|spec| spec.name}
+        idx = Bundler::Index.new
+        api_fetchers.each do |f|
+          Bundler.ui.info "Fetching source index from #{f.uri}"
+          idx.use f.specs(gem_names, self)
+        end
+        idx
+      end
+  end
+end
+
+Bundler::Installer.class_eval do
+
+  # WHY:
+  # This allows us to provide a typical Nix experience, where
+  # `buildInputs` and/or `preInstall` may set up the $PATH and other env-vars
+  # as needed. By swapping out the environment per install, we can have finer
+  # grained control than we would have otherwise.
+  #
+  # HOW:
+  # This is a wrapper around the original `install_gem_from_spec`.
+  # We expect that a "pre-installer" might exist at `pre-installers/<gem-name>`,
+  # and if it does, we execute it.
+  # The pre-installer is expected to dump its environment variables as a Ruby
+  # hash to `env/<gem-name>`.
+  # We then swap out the environment for the duration of the install,
+  # and then set it back to what it was originally.
+  alias original_install_gem_from_spec install_gem_from_spec
+  def install_gem_from_spec(spec, standalone = false, worker = 0)
+    env_dump = "env/#{spec.name}"
+    if File.exist?(env_dump)
+      env = eval(Bundler.read_file(env_dump))
+      unless env
+        Bundler.ui.error "The environment variables for #{spec.name} could not be loaded!"
+        exit 1
+      end
+      Bundler.nix_with_env(env) do
+        original_install_gem_from_spec(spec, standalone, worker)
+      end
+    else
+      original_install_gem_from_spec(spec, standalone, worker)
+    end
+  end
+
+  def generate_bundler_executable_stubs(spec, options = {})
+    return if spec.executables.empty?
+
+    out = ENV['out']
+
+    spec.executables.each do |executable|
+      next if executable == "bundle" || executable == "bundler"
+
+      binstub_path = "#{out}/bin/#{executable}"
+
+      File.open(binstub_path, 'w', 0777 & ~File.umask) do |f|
+        f.print <<-TEXT
+#!#{RbConfig.ruby}
+
+old_gemfile  = ENV["BUNDLE_GEMFILE"]
+old_gem_home = ENV["GEM_HOME"]
+old_gem_path = ENV["GEM_PATH"]
+
+ENV["BUNDLE_GEMFILE"] =
+  "#{ENV["BUNDLE_GEMFILE"]}"
+ENV["GEM_HOME"] =
+  "#{ENV["GEM_HOME"]}"
+ENV["GEM_PATH"] =
+  "#{ENV["NIX_BUNDLER_GEMPATH"]}:\#{ENV["GEM_HOME"]}\#{old_gem_path ? ":\#{old_gem_path}" : ""}}"
+
+require 'rubygems'
+require 'bundler/setup'
+
+ENV["BUNDLE_GEMFILE"] = old_gemfile
+ENV["GEM_HOME"]       = old_gem_home
+ENV["GEM_PATH"]       = old_gem_path
+
+load Gem.bin_path('#{spec.name}', '#{executable}')
+TEXT
+      end
+    end
+  end
+end
+
+Gem::Installer.class_eval do
+  # Make the wrappers automagically use bundler.
+  #
+  # Stage 1.
+  #   Set $BUNDLE_GEMFILE so bundler knows what gems to load.
+  #   Set $GEM_HOME to the installed gems, because bundler looks there for
+  #     non-Rubygems installed gems (e.g. git/svn/path sources).
+  #   Set $GEM_PATH to include both bundler and installed gems.
+  #
+  # Stage 2.
+  #   Setup bundler, locking down the gem versions.
+  #
+  # Stage 3.
+  #   Reset $BUNDLE_GEMFILE, $GEM_HOME, $GEM_PATH.
+  #
+  # Stage 4.
+  #   Run the actual executable.
+  def app_script_text(bin_file_name)
+    return <<-TEXT
+#!#{RbConfig.ruby}
+#
+# This file was generated by Nix's RubyGems.
+#
+# The application '#{spec.name}' is installed as part of a gem, and
+# this file is here to facilitate running it.
+#
+
+old_gemfile  = ENV["BUNDLE_GEMFILE"]
+old_gem_home = ENV["GEM_HOME"]
+old_gem_path = ENV["GEM_PATH"]
+
+ENV["BUNDLE_GEMFILE"] =
+  "#{ENV["BUNDLE_GEMFILE"]}"
+ENV["GEM_HOME"] =
+  "#{ENV["GEM_HOME"]}"
+ENV["GEM_PATH"] =
+  "#{ENV["NIX_BUNDLER_GEMPATH"]}:\#{ENV["GEM_HOME"]}\#{old_gem_path ? ":\#{old_gem_path}" : ""}}"
+
+require 'rubygems'
+require 'bundler/setup'
+
+ENV["BUNDLE_GEMFILE"] = old_gemfile
+ENV["GEM_HOME"]       = old_gem_home
+ENV["GEM_PATH"]       = old_gem_path
+
+load Gem.bin_path('#{spec.name}', '#{bin_file_name}')
+TEXT
+  end
+end
diff --git a/pkgs/development/interpreters/ruby/bundler-env/package-1.8.rb b/pkgs/development/interpreters/ruby/bundler-env/package-1.8.rb
new file mode 100644
index 00000000000..079b65f97ec
--- /dev/null
+++ b/pkgs/development/interpreters/ruby/bundler-env/package-1.8.rb
@@ -0,0 +1,29 @@
+require 'rubygems/installer'
+require 'rubygems/builder'
+
+# Simulate RubyGems 2.0 behavior.
+
+module Gem::Package
+  def self.new(gem)
+    @gem = gem
+    self
+  end
+
+  def self.extract_files(dir)
+    installer = Gem::Installer.new @gem
+    installer.unpack(dir)
+  end
+
+  def self.build(skip_validation=false)
+    builder = Gem::Builder.new(spec)
+    builder.build
+  end
+
+  def self.spec=(spec)
+    @spec = spec
+  end
+
+  def self.spec
+    @spec ||= Gem::Installer.new(@gem).spec
+  end
+end
diff --git a/pkgs/development/interpreters/ruby/bundler-env/xapian-Rakefile b/pkgs/development/interpreters/ruby/bundler-env/xapian-Rakefile
new file mode 100644
index 00000000000..9f0b8e72f08
--- /dev/null
+++ b/pkgs/development/interpreters/ruby/bundler-env/xapian-Rakefile
@@ -0,0 +1,38 @@
+# encoding: utf-8
+# Install the xapian binaries into the lib folder of the gem
+require 'rbconfig'
+
+c = RbConfig::CONFIG
+
+def system!(cmd)
+  puts cmd
+  system(cmd) or raise
+end
+
+source_dir = 'xapian_source'
+bindings = Dir["#{source_dir}/xapian-bindings-*"].first
+bindings = File.basename(bindings, ".tar.xz")
+
+task :default do
+  system! "tar -xJf #{source_dir}/#{bindings}.tar.xz"
+
+  prefix = Dir.pwd
+  ENV['LDFLAGS'] = "-L#{prefix}/lib"
+
+  system! "mkdir -p lib"
+
+  Dir.chdir bindings do
+    ENV['RUBY'] ||= "#{c['bindir']}/#{c['RUBY_INSTALL_NAME']}"
+    system! "./configure --prefix=#{prefix} --exec-prefix=#{prefix} --with-ruby"
+    system! "make clean all"
+  end
+
+  system! "cp -r #{bindings}/ruby/.libs/_xapian.* lib"
+  system! "cp #{bindings}/ruby/xapian.rb lib"
+
+  system! "rm lib/*.la"
+  system! "rm lib/*.lai"
+
+  system! "rm -R #{bindings}"
+  system! "rm -R #{source_dir}"
+end
diff --git a/pkgs/development/interpreters/ruby/bundler-head.nix b/pkgs/development/interpreters/ruby/bundler-head.nix
new file mode 100644
index 00000000000..2e8cfc8cbf1
--- /dev/null
+++ b/pkgs/development/interpreters/ruby/bundler-head.nix
@@ -0,0 +1,18 @@
+{ buildRubyGem, coreutils, fetchgit }:
+
+buildRubyGem {
+  name = "bundler-HEAD";
+  src = fetchgit {
+    url = "https://github.com/bundler/bundler.git";
+    rev = "a2343c9eabf5403d8ffcbca4dea33d18a60fc157";
+    sha256 = "1l4r55n1wzr817l225l6pm97li1mxg9icd8s51cpfihh91nkdz68";
+    leaveDotGit = true;
+  };
+  dontPatchShebangs = true;
+  postInstall = ''
+    find $out -type f -perm +0100 | while read f; do
+      substituteInPlace $f \
+         --replace "/usr/bin/env" "${coreutils}/bin/env"
+    done
+  '';
+}
diff --git a/pkgs/development/interpreters/ruby/bundler.nix b/pkgs/development/interpreters/ruby/bundler.nix
new file mode 100644
index 00000000000..cbec8d0ad75
--- /dev/null
+++ b/pkgs/development/interpreters/ruby/bundler.nix
@@ -0,0 +1,13 @@
+{ buildRubyGem, coreutils }:
+
+buildRubyGem {
+  name = "bundler-1.7.9";
+  sha256 = "1gd201rh17xykab9pbqp0dkxfm7b9jri02llyvmrc0c5bz2vhycm";
+  dontPatchShebangs = true;
+  postInstall = ''
+    find $out -type f -perm +0100 | while read f; do
+      substituteInPlace $f \
+         --replace "/usr/bin/env" "${coreutils}/bin/env"
+    done
+  '';
+}
diff --git a/pkgs/development/interpreters/ruby/fix-gem-nix-versions.patch b/pkgs/development/interpreters/ruby/fix-gem-nix-versions.patch
deleted file mode 100644
index c67eaff2ac5..00000000000
--- a/pkgs/development/interpreters/ruby/fix-gem-nix-versions.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-diff --git a/lib/nix/gem-nix-command.rb b/lib/nix/gem-nix-command.rb
-index 8d3733e..ba942ff 100644
---- a/lib/nix/gem-nix-command.rb
-+++ b/lib/nix/gem-nix-command.rb
-@@ -108,11 +108,12 @@ class Gem::Commands::NixCommand < Gem::Command
- 
-       # args to dep informations
-       args.each { |arg|
--        if arg =~ /(.+)-?(.*)?/ then
-+        if arg =~ /(.+)-([0-9][^-]+)/ then
-           gem_name = $1
--          version =  $2.empty? ?  Gem::Requirement.default : Gem::Version.new($2)
-+          version =  Gem::Version.new($2)
-         else
--          raise Gem::CommandLineError, "couldn't parse arg. expected: name or name-version"
-+          gem_name = arg
-+          version =  Gem::Requirement.default
-         end
- 
-         adddep(Gem::Dependency.new gem_name, version)
-@@ -162,7 +163,13 @@ class Gem::Commands::NixCommand < Gem::Command
-     spec, source_uri = find_gem_with_source(dep)
-     full_name = spec.full_name
- 
--    return if @gems_with_deps.key?(full_name)
-+    if @gems_with_deps.key?(full_name)
-+      unless @gems_with_deps[full_name].nil?
-+        return @gems_with_deps[full_name][0]
-+      else
-+        return nil
-+      end
-+    end
-     @gems_with_deps[full_name] = nil # there maybe circular dependencies. thus mark this gem seen as early as possible
- 
-     # development deps can't be found. Some are old. Thus only add rutime dependencies
diff --git a/pkgs/development/interpreters/ruby/gem.nix b/pkgs/development/interpreters/ruby/gem.nix
index b5be8cf2b65..dd6338cd813 100644
--- a/pkgs/development/interpreters/ruby/gem.nix
+++ b/pkgs/development/interpreters/ruby/gem.nix
@@ -1,63 +1,136 @@
-{stdenv, fetchurl, ruby, rubygems, makeWrapper, patches, overrides}:
-
-let
-  gemDefaults = { name, basename, requiredGems, sha256, meta }:
-  {
-    buildInputs = [rubygems makeWrapper];
-    unpackPhase = ":";
-    configurePhase=":";
-    bulidPhase=":";
-
-    src = fetchurl {
-      url = "http://rubygems.org/downloads/${name}.gem";
-      inherit sha256;
+{ lib, ruby, rubygemsFun, fetchurl, makeWrapper, git } @ defs:
+
+lib.makeOverridable (
+
+{ name
+, ruby ? defs.ruby
+, rubygems ? (rubygemsFun ruby)
+, stdenv ? ruby.stdenv
+, namePrefix ? "${ruby.name}" + "-"
+, buildInputs ? []
+, doCheck ? false
+, dontBuild ? true
+, meta ? {}
+, gemPath ? []
+, ...} @ attrs:
+
+stdenv.mkDerivation (attrs // {
+  inherit ruby rubygems;
+  inherit doCheck;
+
+  buildInputs = [ ruby rubygems makeWrapper git ] ++ buildInputs;
+
+  name = namePrefix + name;
+
+  src = if attrs ? src
+    then attrs.src
+    else fetchurl {
+      url = "http://rubygems.org/downloads/${attrs.name}.gem";
+      inherit (attrs) sha256;
     };
 
-    name = "ruby-${name}";
+  phases = [ "unpackPhase" "patchPhase" "buildPhase" "checkPhase" "installPhase" "fixupPhase" ];
+
+  # The source is expected to either be a gem package or a directory.
+  #
+  # - Gem packages are already built, so they don't even need to be unpacked.
+  #   They will skip the buildPhase.
+  # - A directory containing the sources will need to go through all of the
+  #   usual phases.
+  unpackPhase= ''
+    gemRegex="\.gem"
+    if [[ $src =~ $gemRegex ]]
+    then
+      runHook preUnpack
+      echo "source is a gem package, won't unpack"
+      gempkg=$src
+      dontBuild=1
+      runHook postUnpack
+    else
+      # Fall back to the original thing for everything else.
+      unpackPhase
+    fi
+  '';
+
+  checkPhase = "true";
+
+  buildPhase = ''
+    runHook preBuild
+
+    # TODO: Investigate. The complete working tree is touched by fetchgit.
+    if [ -d .git ]; then
+      git reset
+    fi
+
+    gemspec=$(find . -name '*.gemspec')
+    echo "found the following gemspecs:"
+    echo "$gemspec"
 
-    propagatedBuildInputs = requiredGems ++ [ruby];
+    gemspec=$(echo "$gemspec" | head -n1)
+    echo "building $gemspec"
 
-    inherit meta;
+    exec 3>&1
+    output=$(gem build $gemspec | tee >(cat - >&3))
+    exec 3>&-
 
-    installPhase = ''
-      export HOME=$TMP/home; mkdir -pv "$HOME"
+    gempkg=$(echo "$output" | grep -oP 'File: \K(.*)')
 
-      gem install -V --ignore-dependencies \
-      -i "$out/${ruby.gemPath}" -n "$out/bin" "$src" $gemFlags -- $buildFlags
-      rm -frv $out/${ruby.gemPath}/cache # don't keep the .gem file here
+    echo "gem package built: $gempkg"
 
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    # NOTE: This does NOT build the unpacked gem, but installs $src directly.
+    #       Gems that have not been downloaded from rubygems.org may need a
+    #       separate buildPhase.
+    #       --ignore-dependencies is necessary as rubygems otherwise always
+    #       connects to the repository, thus breaking pure builds.
+    GEM_HOME=$out/${ruby.gemPath} \
+      gem install \
+      --local \
+      --force \
+      --http-proxy "http://nodtd.invalid" \
+      --ignore-dependencies \
+      --build-root "/" \
+      --backtrace \
+      $gempkg $gemFlags -- $buildFlags
+
+    # Yes, we really do need the $out/${ruby.gemPath}/cache.
+    # This is very important in order for many parts of RubyGems/Bundler to not blow up.
+    # See https://github.com/bundler/bundler/issues/3327
+
+    mkdir -p $out/bin
+    for prog in $out/${ruby.gemPath}/gems/*/bin/*; do
+      makeWrapper $prog $out/bin/$(basename $prog) \
+        --prefix GEM_PATH : "$out/${ruby.gemPath}:$GEM_PATH" \
+        --prefix RUBYLIB : "${rubygems}/lib" \
+        $extraWrapperFlags ''${extraWrapperFlagsArray[@]}
+    done
+        #--prefix RUBYOPT rubygems \
+
+    # looks like useless files which break build repeatability and consume space
+    rm -fv $out/${ruby.gemPath}/doc/*/*/created.rid || true
+    rm -fv $out/${ruby.gemPath}/gems/*/ext/*/mkmf.log || true
+
+    mkdir -p $out/nix-support
+
+    cat > $out/nix-support/setup-hook <<EOF
+    if [[ "\$GEM_PATH" != *$out* ]]; then
       addToSearchPath GEM_PATH $out/${ruby.gemPath}
+    fi
+    EOF
+
+    runHook postInstall
+  '';
+
+  propagatedBuildInputs = gemPath;
+  propagatedUserEnvPkgs = gemPath;
+
+  passthru.isRubyGem = true;
+  inherit meta;
+})
 
-      for prog in $out/bin/*; do
-        wrapProgram "$prog" \
-          --prefix GEM_PATH : "$GEM_PATH" \
-          --prefix RUBYLIB : "${rubygems}/lib" \
-          --set RUBYOPT rubygems \
-          $extraWrapperFlags ''${extraWrapperFlagsArray[@]}
-      done
-
-      for prog in $out/gems/*/bin/*; do
-        [[ -e "$out/bin/$(basename $prog)" ]]
-      done
-
-      # looks like useless files which break build repeatability and consume space
-      rm $out/${ruby.gemPath}/doc/*/*/created.rid || true
-      rm $out/${ruby.gemPath}/gems/*/ext/*/mkmf.log || true
-
-      runHook postInstall
-    '';
-
-    propagatedUserEnvPkgs = requiredGems;
-
-    passthru.isRubyGem = true;
-
-  };
-  mb = stdenv.lib.maybeAttr;
-  patchedGem = a: stdenv.mkDerivation (removeAttrs (stdenv.lib.mergeAttrsByFuncDefaults
-      ([ (gemDefaults a) ]
-      ++ (stdenv.lib.concatMap (p: [(mb a.basename {} p) (mb a.name {} p)] )
-      patches)))
-    [ "mergeAttrBy" ]);
-in
-aName: a@{ name, basename, requiredGems, sha256, meta }:
-  stdenv.lib.foldl (d: o: mb name (mb basename d o) o) (patchedGem a) overrides
+)
diff --git a/pkgs/development/interpreters/ruby/generated.nix b/pkgs/development/interpreters/ruby/generated.nix
deleted file mode 100644
index 85e66dc4faa..00000000000
--- a/pkgs/development/interpreters/ruby/generated.nix
+++ /dev/null
@@ -1,2615 +0,0 @@
-# WARNING: automatically generated file
-# Generated by 'gem nix' command that comes from 'nix' gem
-g: # Get dependencies from patched gems
-{
-  aliases = {
-    ZenTest = g.ZenTest_4_11_0;
-    actionmailer = g.actionmailer_4_1_8;
-    actionpack = g.actionpack_4_1_8;
-    actionview = g.actionview_4_1_8;
-    activemodel = g.activemodel_4_1_8;
-    activerecord = g.activerecord_4_1_8;
-    activesupport = g.activesupport_4_1_8;
-    addressable = g.addressable_2_3_6;
-    arel = g.arel_5_0_1_20140414130214;
-    atoulme_Antwrap = g.atoulme_Antwrap_0_7_5;
-    autotest_rails = g.autotest_rails_4_2_1;
-    aws_sdk = g.aws_sdk_1_59_1;
-    aws_sdk_v1 = g.aws_sdk_v1_1_59_1;
-    backports = g.backports_3_6_4;
-    bitbucket_backup = g.bitbucket_backup_0_3_1;
-    blankslate = g.blankslate_2_1_2_4;
-    builder = g.builder_3_2_2;
-    buildr = g.buildr_1_4_21;
-    bundler = g.bundler_1_7_9;
-    celluloid = g.celluloid_0_16_0;
-    childprocess = g.childprocess_0_5_5;
-    chronic = g.chronic_0_10_2;
-    chunky_png = g.chunky_png_1_3_3;
-    classifier_reborn = g.classifier_reborn_2_0_2;
-    coderay = g.coderay_1_1_0;
-    coffee_script = g.coffee_script_2_3_0;
-    coffee_script_source = g.coffee_script_source_1_8_0;
-    colorator = g.colorator_0_1;
-    compass = g.compass_1_0_1;
-    compass_core = g.compass_core_1_0_1;
-    compass_import_once = g.compass_import_once_1_0_5;
-    cucumber = g.cucumber_1_3_17;
-    daemons = g.daemons_1_1_9;
-    diff_lcs = g.diff_lcs_1_2_5;
-    dimensions = g.dimensions_1_2_0;
-    domain_name = g.domain_name_0_5_22;
-    dotenv = g.dotenv_1_0_2;
-    em_resolv_replace = g.em_resolv_replace_1_1_3;
-    erubis = g.erubis_2_7_0;
-    ethon = g.ethon_0_7_1;
-    eventmachine = g.eventmachine_1_0_3;
-    eventmachine_tail = g.eventmachine_tail_0_6_4;
-    excon = g.excon_0_42_1;
-    execjs = g.execjs_2_2_2;
-    fakes3 = g.fakes3_0_1_6_1;
-    faraday = g.faraday_0_9_0;
-    faraday_middleware = g.faraday_middleware_0_9_1;
-    fast_stemmer = g.fast_stemmer_1_0_2;
-    ffi = g.ffi_1_9_6;
-    file_tail = g.file_tail_1_1_0;
-    foreman = g.foreman_0_76_0;
-    gettext = g.gettext_3_1_4;
-    gh = g.gh_0_13_2;
-    gherkin = g.gherkin_2_12_2;
-    heroku = g.heroku_3_20_0;
-    heroku_api = g.heroku_api_0_3_21;
-    highline = g.highline_1_6_21;
-    hike = g.hike_1_2_3;
-    hitimes = g.hitimes_1_2_2;
-    hoe = g.hoe_3_7_1;
-    http_cookie = g.http_cookie_1_0_2;
-    i18n = g.i18n_0_6_11;
-    iconv = g.iconv_1_0_4;
-    jekyll = g.jekyll_2_5_2;
-    jekyll_coffeescript = g.jekyll_coffeescript_1_0_1;
-    jekyll_gist = g.jekyll_gist_1_1_0;
-    jekyll_paginate = g.jekyll_paginate_1_1_0;
-    jekyll_sass_converter = g.jekyll_sass_converter_1_3_0;
-    jekyll_watch = g.jekyll_watch_1_2_0;
-    jsduck = g.jsduck_5_3_4;
-    json = g.json_1_8_1;
-    json_pure = g.json_pure_1_8_0;
-    kitchen_ansible = g.kitchen_ansible_0_0_4;
-    kitchen_vagrant = g.kitchen_vagrant_0_15_0;
-    kramdown = g.kramdown_1_5_0;
-    launchy = g.launchy_2_4_3;
-    liquid = g.liquid_2_6_1;
-    listen = g.listen_2_8_3;
-    locale = g.locale_2_1_0;
-    lockfile = g.lockfile_2_1_3;
-    macaddr = g.macaddr_1_7_1;
-    mail = g.mail_2_6_3;
-    mechanize = g.mechanize_2_7_3;
-    mercenary = g.mercenary_0_3_5;
-    method_source = g.method_source_0_8_2;
-    mime_types = g.mime_types_2_4_3;
-    mini_portile = g.mini_portile_0_6_1;
-    minitar = g.minitar_0_5_4;
-    minitest = g.minitest_5_5_0;
-    mixlib_shellout = g.mixlib_shellout_1_6_1;
-    multi_json = g.multi_json_1_10_1;
-    multi_test = g.multi_test_0_1_1;
-    multipart_post = g.multipart_post_2_0_0;
-    net_http_digest_auth = g.net_http_digest_auth_1_4;
-    net_http_persistent = g.net_http_persistent_2_9_4;
-    net_http_pipeline = g.net_http_pipeline_1_0_1;
-    net_scp = g.net_scp_1_2_1;
-    net_sftp = g.net_sftp_2_1_2;
-    net_ssh = g.net_ssh_2_9_1;
-    netrc = g.netrc_0_10_1;
-    newrelic_plugin = g.newrelic_plugin_1_3_1;
-    nix = g.nix_0_1_1;
-    nokogiri = g.nokogiri_1_6_5;
-    ntlm_http = g.ntlm_http_0_1_1;
-    orderedhash = g.orderedhash_0_0_6;
-    papertrail = g.papertrail_0_9_11;
-    papertrail_cli = g.papertrail_cli_0_9_3;
-    parallel = g.parallel_0_7_1;
-    parslet = g.parslet_1_5_0;
-    posix_spawn = g.posix_spawn_0_3_9;
-    pry = g.pry_0_9_12_6;
-    pusher_client = g.pusher_client_0_6_0;
-    pygments_rb = g.pygments_rb_0_6_0;
-    rabbitmq_manager = g.rabbitmq_manager_0_1_0;
-    rack = g.rack_1_5_2;
-    rack_protection = g.rack_protection_1_5_3;
-    rack_test = g.rack_test_0_6_2;
-    rails = g.rails_4_1_8;
-    railties = g.railties_4_1_8;
-    rake = g.rake_10_4_2;
-    rb_fsevent = g.rb_fsevent_0_9_4;
-    rb_inotify = g.rb_inotify_0_9_5;
-    rdiscount = g.rdiscount_2_1_7_1;
-    rdoc = g.rdoc_4_2_0;
-    redcarpet = g.redcarpet_3_2_2;
-    redis = g.redis_3_2_0;
-    remote_syslog = g.remote_syslog_1_6_14;
-    rest_client = g.rest_client_1_6_7;
-    riemann_dash = g.riemann_dash_0_2_9;
-    right_aws = g.right_aws_3_1_0;
-    right_http_connection = g.right_http_connection_1_5_0;
-    rjb = g.rjb_1_5_2;
-    rkelly_remix = g.rkelly_remix_0_0_6;
-    rmail = g.rmail_1_0_0;
-    rspec = g.rspec_2_14_1;
-    rspec_core = g.rspec_core_2_14_8;
-    rspec_expectations = g.rspec_expectations_2_14_5;
-    rspec_mocks = g.rspec_mocks_2_14_6;
-    rubyzip = g.rubyzip_1_1_6;
-    safe_yaml = g.safe_yaml_1_0_4;
-    sass = g.sass_3_4_9;
-    selenium_webdriver = g.selenium_webdriver_2_44_0;
-    servolux = g.servolux_0_10_0;
-    sinatra = g.sinatra_1_4_5;
-    slop = g.slop_3_6_0;
-    sprockets = g.sprockets_2_12_3;
-    sprockets_rails = g.sprockets_rails_2_2_2;
-    syslog_protocol = g.syslog_protocol_0_9_2;
-    systemu = g.systemu_2_6_4;
-    taskjuggler = g.taskjuggler_3_5_0;
-    term_ansicolor = g.term_ansicolor_1_3_0;
-    terminal_notifier = g.terminal_notifier_1_6_2;
-    test_kitchen = g.test_kitchen_1_2_1;
-    text = g.text_1_3_0;
-    thin = g.thin_1_6_3;
-    thor = g.thor_0_19_1;
-    thread_safe = g.thread_safe_0_3_4;
-    tilt = g.tilt_1_4_1;
-    timers = g.timers_4_0_1;
-    tins = g.tins_1_3_3;
-    tmuxinator = g.tmuxinator_0_6_9;
-    toml = g.toml_0_1_2;
-    travis = g.travis_1_7_4;
-    trollop = g.trollop_2_0;
-    typhoeus = g.typhoeus_0_6_9;
-    tzinfo = g.tzinfo_1_2_2;
-    uglifier = g.uglifier_2_6_0;
-    unf = g.unf_0_1_4;
-    unf_ext = g.unf_ext_0_0_6;
-    uuid = g.uuid_2_3_7;
-    webrick = g.webrick_1_3_1;
-    webrobots = g.webrobots_0_1_1;
-    websocket = g.websocket_1_2_1;
-    xapian_full = g.xapian_full_1_2_3;
-    xapian_ruby = g.xapian_ruby_1_2_17;
-    xml_simple = g.xml_simple_1_1_2;
-    yajl_ruby = g.yajl_ruby_1_2_1;
-  };
-  gem_nix_args = [ ''autotest-rails'' ''aws-sdk'' ''bitbucket-backup'' ''buildr'' ''compass'' ''cucumber'' ''erubis'' ''execjs'' ''fakes3'' ''foreman'' ''gettext'' ''heroku'' ''iconv'' ''jekyll'' ''jsduck'' ''kitchen-ansible'' ''kitchen-vagrant'' ''lockfile'' ''mechanize'' ''newrelic_plugin'' ''nix'' ''papertrail-cli'' ''rabbitmq_manager-0.1.0'' ''rails'' ''rake'' ''rb-fsevent'' ''rdoc'' ''redis'' ''remote_syslog'' ''riemann-dash'' ''right_aws'' ''rmail'' ''sass'' ''selenium-webdriver'' ''sinatra-1.3.2'' ''taskjuggler'' ''terminal-notifier'' ''test-kitchen'' ''thin'' ''tmuxinator'' ''travis'' ''trollop'' ''uglifier'' ''uuid'' ''xapian-full'' ''xapian-ruby'' ''yajl-ruby'' ];
-  gems = {
-    ZenTest_4_11_0 = {
-      basename = ''ZenTest'';
-      meta = {
-        description = ''ZenTest provides 4 different tools: zentest, unit_diff, autotest, and multiruby'';
-        homepage = ''https://github.com/seattlerb/zentest'';
-        longDescription = ''ZenTest provides 4 different tools: zentest, unit_diff, autotest, and
-multiruby.
-
-zentest scans your target and unit-test code and writes your missing
-code based on simple naming rules, enabling XP at a much quicker pace.
-zentest only works with Ruby and Minitest or Test::Unit. There is
-enough evidence to show that this is still proving useful to users, so
-it stays.
-
-unit_diff is a command-line filter to diff expected results from
-actual results and allow you to quickly see exactly what is wrong.
-Do note that minitest 2.2+ provides an enhanced assert_equal obviating
-the need for unit_diff
-
-autotest is a continous testing facility meant to be used during
-development. As soon as you save a file, autotest will run the
-corresponding dependent tests.
-
-multiruby runs anything you want on multiple versions of ruby. Great
-for compatibility checking! Use multiruby_setup to manage your
-installed versions.'';
-      };
-      name = ''ZenTest-4.11.0'';
-      requiredGems = [  ];
-      sha256 = ''0pm0kxrcbcg787jgd9z6cq0p0mg1v2m27n6sgs3pj0v219f526y8'';
-    };
-    actionmailer_4_1_8 = {
-      basename = ''actionmailer'';
-      meta = {
-        description = ''Email composition, delivery, and receiving framework (part of Rails).'';
-        homepage = ''http://www.rubyonrails.org'';
-        longDescription = ''Email on Rails. Compose, deliver, receive, and test emails using the familiar controller/view pattern. First-class support for multipart email and attachments.'';
-      };
-      name = ''actionmailer-4.1.8'';
-      requiredGems = [ g.actionpack_4_1_8 g.actionview_4_1_8 g.mail_2_6_3 ];
-      sha256 = ''1x2jd4vbymkvikdaribgi12mbhbxnfvy54bi4wcilh2a0222m46s'';
-    };
-    actionpack_4_1_8 = {
-      basename = ''actionpack'';
-      meta = {
-        description = ''Web-flow and rendering framework putting the VC in MVC (part of Rails).'';
-        homepage = ''http://www.rubyonrails.org'';
-        longDescription = ''Web apps on Rails. Simple, battle-tested conventions for building and testing MVC web applications. Works with any Rack-compatible server.'';
-      };
-      name = ''actionpack-4.1.8'';
-      requiredGems = [ g.activesupport_4_1_8 g.rack_1_5_2 g.rack_test_0_6_2 g.actionview_4_1_8 ];
-      sha256 = ''19q0z7rkc7mrqapikyi4qzcxkl8bzy8dxipqq19gskrk2aqyrbsg'';
-    };
-    actionview_4_1_8 = {
-      basename = ''actionview'';
-      meta = {
-        description = ''Rendering framework putting the V in MVC (part of Rails).'';
-        homepage = ''http://www.rubyonrails.org'';
-        longDescription = ''Simple, battle-tested conventions and helpers for building web pages.'';
-      };
-      name = ''actionview-4.1.8'';
-      requiredGems = [ g.activesupport_4_1_8 g.builder_3_2_2 g.erubis_2_7_0 ];
-      sha256 = ''1a870vq2r6q4rxand0nwvq52rwakp9l4p6a834i2rjz5rildmigk'';
-    };
-    activemodel_4_1_8 = {
-      basename = ''activemodel'';
-      meta = {
-        description = ''A toolkit for building modeling frameworks (part of Rails).'';
-        homepage = ''http://www.rubyonrails.org'';
-        longDescription = ''A toolkit for building modeling frameworks like Active Record. Rich support for attributes, callbacks, validations, serialization, internationalization, and testing.'';
-      };
-      name = ''activemodel-4.1.8'';
-      requiredGems = [ g.activesupport_4_1_8 g.builder_3_2_2 ];
-      sha256 = ''1zvj66715rmfzf2zwwc8jyk4s21gggxvykvb6fqsny3hlhc1axq5'';
-    };
-    activerecord_4_1_8 = {
-      basename = ''activerecord'';
-      meta = {
-        description = ''Object-relational mapper framework (part of Rails).'';
-        homepage = ''http://www.rubyonrails.org'';
-        longDescription = ''Databases on Rails. Build a persistent domain model by mapping database tables to Ruby classes. Strong conventions for associations, validations, aggregations, migrations, and testing come baked-in.'';
-      };
-      name = ''activerecord-4.1.8'';
-      requiredGems = [ g.activesupport_4_1_8 g.activemodel_4_1_8 g.arel_5_0_1_20140414130214 ];
-      sha256 = ''0nmgyskdpp59jpq51bc5jnahxs30ik08qld57p1hmy0arh39yc2g'';
-    };
-    activesupport_4_1_8 = {
-      basename = ''activesupport'';
-      meta = {
-        description = ''A toolkit of support libraries and Ruby core extensions extracted from the Rails framework.'';
-        homepage = ''http://www.rubyonrails.org'';
-        longDescription = ''A toolkit of support libraries and Ruby core extensions extracted from the Rails framework. Rich support for multibyte strings, internationalization, time zones, and testing.'';
-      };
-      name = ''activesupport-4.1.8'';
-      requiredGems = [ g.i18n_0_6_11 g.json_1_8_1 g.tzinfo_1_2_2 g.minitest_5_5_0 g.thread_safe_0_3_4 ];
-      sha256 = ''012w64jqmkkhcah4rzmcmmd53ihrxdn81nifi6dgrg8i40cxqb8r'';
-    };
-    addressable_2_3_6 = {
-      basename = ''addressable'';
-      meta = {
-        description = ''URI Implementation'';
-        homepage = ''http://addressable.rubyforge.org/'';
-        longDescription = ''Addressable is a replacement for the URI implementation that is part of
-Ruby's standard library. It more closely conforms to the relevant RFCs and
-adds support for IRIs and URI templates.
-'';
-      };
-      name = ''addressable-2.3.6'';
-      requiredGems = [  ];
-      sha256 = ''137fj0whmn1kvaq8wjalp8x4qbblwzvg3g4bfx8d8lfi6f0w48p8'';
-    };
-    arel_5_0_1_20140414130214 = {
-      basename = ''arel'';
-      meta = {
-        description = ''Arel is a SQL AST manager for Ruby'';
-        homepage = ''http://github.com/rails/arel'';
-        longDescription = ''Arel is a SQL AST manager for Ruby. It
-
-1. Simplifies the generation of complex SQL queries
-2. Adapts to various RDBMSes
-
-It is intended to be a framework framework; that is, you can build your own ORM
-with it, focusing on innovative object and collection modeling as opposed to
-database compatibility and query generation.'';
-      };
-      name = ''arel-5.0.1.20140414130214'';
-      requiredGems = [  ];
-      sha256 = ''0dhnc20h1v8ml3nmkxq92rr7qxxpk6ixhwvwhgl2dbw9mmxz0hf9'';
-    };
-    atoulme_Antwrap_0_7_5 = {
-      basename = ''atoulme_Antwrap'';
-      meta = {
-        description = ''A Ruby module that wraps the Apache Ant build tool. Antwrap can be used to invoke Ant Tasks from a Ruby or a JRuby script.'';
-        homepage = ''http://rubyforge.org/projects/antwrap/'';
-        longDescription = ''	A Ruby module that wraps the Apache Ant build tool. Antwrap can be used to invoke Ant Tasks from a Ruby or a JRuby script.
-
-== FEATURES/PROBLEMS:
-
-	Antwrap runs on the native Ruby interpreter via the RJB (Ruby Java Bridge gem) and on the JRuby interpreter. Antwrap is compatible with Ant versions 1.5.4, 
-	1.6.5 and 1.7.0. For more information, 	see the Project Info (http://rubyforge.org/projects/antwrap/) page. 
-	 
-== SYNOPSIS:
-
-	Antwrap is a Ruby library that can be used to invoke Ant tasks. It is being used in the Buildr (http://incubator.apache.org/buildr/) project to execute 
-	Ant (http://ant.apache.org/) tasks in a Java project. If you are tired of fighting with Ant or Maven XML files in your Java project, take some time to 
-	check out Buildr!'';
-      };
-      name = ''atoulme-Antwrap-0.7.5'';
-      requiredGems = [ g.rjb_1_5_2 ];
-      sha256 = ''05s3iw44lqa81f8nfy5f0xjj808600h82zb9bsh46b9kcq2w2kmz'';
-    };
-    autotest_rails_4_2_1 = {
-      basename = ''autotest_rails'';
-      meta = {
-        description = ''This is an autotest plugin to provide rails support'';
-        homepage = ''https://github.com/seattlerb/autotest-rails'';
-        longDescription = ''This is an autotest plugin to provide rails support. It provides basic
-rails support and extra plugins for migrations and fixtures.'';
-      };
-      name = ''autotest-rails-4.2.1'';
-      requiredGems = [ g.ZenTest_4_11_0 ];
-      sha256 = ''1v1dm9zlhdlrxvk90zs8d439ldar674ix41s7pncddgyswcfgg5l'';
-    };
-    aws_sdk_1_59_1 = {
-      basename = ''aws_sdk'';
-      meta = {
-        description = ''AWS SDK for Ruby V1'';
-        homepage = ''http://aws.amazon.com/sdkforruby'';
-        longDescription = ''Version 1 of the AWS SDK for Ruby. Available as both `aws-sdk` and `aws-sdk-v1`.
-Use `aws-sdk-v1` if you want to load v1 and v2 of the Ruby SDK in the same
-application.'';
-      };
-      name = ''aws-sdk-1.59.1'';
-      requiredGems = [ g.aws_sdk_v1_1_59_1 ];
-      sha256 = ''1g20jj507l98x8nijfy3dwzmagr201rv1wy949bnh1y3hzs83dh4'';
-    };
-    aws_sdk_v1_1_59_1 = {
-      basename = ''aws_sdk_v1'';
-      meta = {
-        description = ''AWS SDK for Ruby V1'';
-        homepage = ''http://aws.amazon.com/sdkforruby'';
-        longDescription = ''Version 1 of the AWS SDK for Ruby. Available as both `aws-sdk` and `aws-sdk-v1`.
-Use `aws-sdk-v1` if you want to load v1 and v2 of the Ruby SDK in the same
-application.'';
-      };
-      name = ''aws-sdk-v1-1.59.1'';
-      requiredGems = [ g.nokogiri_1_6_5 g.json_1_8_1 ];
-      sha256 = ''0wxmzxaly1jkp694wshkyh7rg9lf6ai1amn6mj9ib8azxw7mgcsg'';
-    };
-    backports_3_6_4 = {
-      basename = ''backports'';
-      meta = {
-        description = ''Backports of Ruby features for older Ruby.'';
-        homepage = ''http://github.com/marcandre/backports'';
-        longDescription = ''Essential backports that enable many of the nice features of Ruby 1.8.7 up to 2.1.0 for earlier versions.'';
-      };
-      name = ''backports-3.6.4'';
-      requiredGems = [  ];
-      sha256 = ''0x2i84g14v5k63i1i2hwzpc2i8h1vkcjz7gr6gicdwsxbvnszwsc'';
-    };
-    bitbucket_backup_0_3_1 = {
-      basename = ''bitbucket_backup'';
-      meta = {
-        description = ''A tool to backup Bitbucket repos.'';
-        homepage = ''https://bitbucket.org/seth/bitbucket-backup'';
-        longDescription = ''A tool to backup Bitbucket repos.'';
-      };
-      name = ''bitbucket-backup-0.3.1'';
-      requiredGems = [ g.highline_1_6_21 g.json_1_8_1 ];
-      sha256 = ''17d2pfk0z3cxcx9m90avcp5wxhdbrq23zd665263m3hh9b5qi0fj'';
-    };
-    blankslate_2_1_2_4 = {
-      basename = ''blankslate'';
-      meta = {
-        description = ''BlankSlate extracted from Builder.'';
-        homepage = ''http://github.com/masover/blankslate'';
-      };
-      name = ''blankslate-2.1.2.4'';
-      requiredGems = [  ];
-      sha256 = ''0jnnq5q5dwy2rbfcl769vd9bk1yn0242f6yjlb9mnqdm9627cdcx'';
-    };
-    builder_3_2_2 = {
-      basename = ''builder'';
-      meta = {
-        description = ''Builders for MarkUp.'';
-        homepage = ''http://onestepback.org'';
-        longDescription = ''Builder provides a number of builder objects that make creating structured data
-simple to do.  Currently the following builder objects are supported:
-
-* XML Markup
-* XML Events
-'';
-      };
-      name = ''builder-3.2.2'';
-      requiredGems = [  ];
-      sha256 = ''14fii7ab8qszrvsvhz6z2z3i4dw0h41a62fjr2h1j8m41vbrmyv2'';
-    };
-    buildr_1_4_21 = {
-      basename = ''buildr'';
-      meta = {
-        description = ''Build like you code'';
-        homepage = ''http://buildr.apache.org/'';
-        longDescription = ''Apache Buildr is a build system for Java-based applications, including support
-for Scala, Groovy and a growing number of JVM languages and tools.  We wanted
-something that's simple and intuitive to use, so we only need to tell it what
-to do, and it takes care of the rest.  But also something we can easily extend
-for those one-off tasks, with a language that's a joy to use.
-'';
-      };
-      name = ''buildr-1.4.21'';
-      requiredGems = [ g.rake_0_9_2_2 g.builder_3_2_2 g.net_ssh_2_7_0 g.net_sftp_2_1_2 g.rubyzip_0_9_9 g.json_pure_1_8_0 g.hoe_3_7_1 g.rjb_1_5_1 g.atoulme_Antwrap_0_7_5 g.diff_lcs_1_2_4 g.rspec_expectations_2_14_3 g.rspec_mocks_2_14_3 g.rspec_core_2_14_5 g.rspec_2_14_1 g.xml_simple_1_1_2 g.minitar_0_5_4 g.bundler_1_7_9 g.orderedhash_0_0_6 ];
-      sha256 = ''0a7x5vckpy9f8fdvb1w4swl095g8pw1zim2a19f3bfz9g2nd37i2'';
-    };
-    bundler_1_7_9 = {
-      basename = ''bundler'';
-      meta = {
-        description = ''The best way to manage your application's dependencies'';
-        homepage = ''http://bundler.io'';
-        longDescription = ''Bundler manages an application's dependencies through its entire life, across many machines, systematically and repeatably'';
-      };
-      name = ''bundler-1.7.9'';
-      requiredGems = [  ];
-      sha256 = ''1gd201rh17xykab9pbqp0dkxfm7b9jri02llyvmrc0c5bz2vhycm'';
-    };
-    celluloid_0_16_0 = {
-      basename = ''celluloid'';
-      meta = {
-        description = ''Actor-based concurrent object framework for Ruby'';
-        homepage = ''https://github.com/celluloid/celluloid'';
-        longDescription = ''Celluloid enables people to build concurrent programs out of concurrent objects just as easily as they build sequential programs out of sequential objects'';
-      };
-      name = ''celluloid-0.16.0'';
-      requiredGems = [ g.timers_4_0_1 ];
-      sha256 = ''044xk0y7i1xjafzv7blzj5r56s7zr8nzb619arkrl390mf19jxv3'';
-    };
-    childprocess_0_5_5 = {
-      basename = ''childprocess'';
-      meta = {
-        description = ''This gem aims at being a simple and reliable solution for controlling external programs running in the background on any Ruby / OS combination.'';
-        homepage = ''http://github.com/jarib/childprocess'';
-        longDescription = ''This gem aims at being a simple and reliable solution for controlling external programs running in the background on any Ruby / OS combination.'';
-      };
-      name = ''childprocess-0.5.5'';
-      requiredGems = [ g.ffi_1_9_6 ];
-      sha256 = ''0cxzh17vjlmpqfcas4815x50dc1gzfwgbs51zzpd4chrl6ak4n4v'';
-    };
-    chronic_0_10_2 = {
-      basename = ''chronic'';
-      meta = {
-        description = ''Natural language date/time parsing.'';
-        homepage = ''http://github.com/mojombo/chronic'';
-        longDescription = ''Chronic is a natural language date/time parser written in pure Ruby.'';
-      };
-      name = ''chronic-0.10.2'';
-      requiredGems = [  ];
-      sha256 = ''1hrdkn4g8x7dlzxwb1rfgr8kw3bp4ywg5l4y4i9c2g5cwv62yvvn'';
-    };
-    chunky_png_1_3_3 = {
-      basename = ''chunky_png'';
-      meta = {
-        description = ''Pure ruby library for read/write, chunk-level access to PNG files'';
-        homepage = ''http://wiki.github.com/wvanbergen/chunky_png'';
-        longDescription = ''    This pure Ruby library can read and write PNG images without depending on an external
-    image library, like RMagick. It tries to be memory efficient and reasonably fast.
-
-    It supports reading and writing all PNG variants that are defined in the specification,
-    with one limitation: only 8-bit color depth is supported. It supports all transparency,
-    interlacing and filtering options the PNG specifications allows. It can also read and
-    write textual metadata from PNG files. Low-level read/write access to PNG chunks is
-    also possible.
-
-    This library supports simple drawing on the image canvas and simple operations like
-    alpha composition and cropping. Finally, it can import from and export to RMagick for
-    interoperability.
-
-    Also, have a look at OilyPNG at http://github.com/wvanbergen/oily_png. OilyPNG is a
-    drop in mixin module that implements some of the ChunkyPNG algorithms in C, which
-    provides a massive speed boost to encoding and decoding.
-'';
-      };
-      name = ''chunky_png-1.3.3'';
-      requiredGems = [  ];
-      sha256 = ''1lc25p87ljn9r62wps32bq88d8i292kda9fs2m05x15zjm3r6y20'';
-    };
-    classifier_reborn_2_0_2 = {
-      basename = ''classifier_reborn'';
-      meta = {
-        description = ''A general classifier module to allow Bayesian and other types of classifications.'';
-        homepage = ''https://github.com/jekyll/classifier-reborn'';
-      };
-      name = ''classifier-reborn-2.0.2'';
-      requiredGems = [ g.fast_stemmer_1_0_2 ];
-      sha256 = ''0adp6hchmlhzjkai9z482cyfnbv4ywks4dlly5hhiaxrn1aybpzh'';
-    };
-    coderay_1_1_0 = {
-      basename = ''coderay'';
-      meta = {
-        description = ''Fast syntax highlighting for selected languages.'';
-        homepage = ''http://coderay.rubychan.de'';
-        longDescription = ''Fast and easy syntax highlighting for selected languages, written in Ruby. Comes with RedCloth integration and LOC counter.'';
-      };
-      name = ''coderay-1.1.0'';
-      requiredGems = [  ];
-      sha256 = ''059wkzlap2jlkhg460pkwc1ay4v4clsmg1bp4vfzjzkgwdckr52s'';
-    };
-    coffee_script_2_3_0 = {
-      basename = ''coffee_script'';
-      meta = {
-        description = ''Ruby CoffeeScript Compiler'';
-        homepage = ''http://github.com/josh/ruby-coffee-script'';
-        longDescription = ''    Ruby CoffeeScript is a bridge to the JS CoffeeScript compiler.
-'';
-      };
-      name = ''coffee-script-2.3.0'';
-      requiredGems = [ g.coffee_script_source_1_8_0 g.execjs_2_2_2 ];
-      sha256 = ''0i0p52f2s7hk8sq3q9342and3whjnhjhc7ldg8zmnjjcm44asm3d'';
-    };
-    coffee_script_source_1_8_0 = {
-      basename = ''coffee_script_source'';
-      meta = {
-        description = ''The CoffeeScript Compiler'';
-        homepage = ''http://jashkenas.github.com/coffee-script/'';
-        longDescription = ''    CoffeeScript is a little language that compiles into JavaScript.
-    Underneath all of those embarrassing braces and semicolons,
-    JavaScript has always had a gorgeous object model at its heart.
-    CoffeeScript is an attempt to expose the good parts of JavaScript
-    in a simple way.
-'';
-      };
-      name = ''coffee-script-source-1.8.0'';
-      requiredGems = [  ];
-      sha256 = ''04998xd43z9kqs6kmzvng90s2xn3ybp8918rq7xz6ljhv8yjqm88'';
-    };
-    colorator_0_1 = {
-      basename = ''colorator'';
-      meta = {
-        description = ''String core extensions for terminal coloring.'';
-        homepage = ''https://github.com/octopress/colorator'';
-        longDescription = ''Colorize your text in the terminal.'';
-      };
-      name = ''colorator-0.1'';
-      requiredGems = [  ];
-      sha256 = ''09zp15hyd9wlbgf1kmrf4rnry8cpvh1h9fj7afarlqcy4hrfdpvs'';
-    };
-    compass_1_0_1 = {
-      basename = ''compass'';
-      meta = {
-        description = ''A Real Stylesheet Framework'';
-        homepage = ''http://compass-style.org'';
-        longDescription = ''Compass is a Sass-based Stylesheet Framework that streamlines the creation and maintenance of CSS.'';
-      };
-      name = ''compass-1.0.1'';
-      requiredGems = [ g.sass_3_4_9 g.compass_core_1_0_1 g.compass_import_once_1_0_5 g.chunky_png_1_3_3 g.rb_fsevent_0_9_4 g.rb_inotify_0_9_5 ];
-      sha256 = ''0cxb6nbj37wz2zwwb4pkbvg9pg0ymamxx9v400h9ibvlb5n0ri40'';
-    };
-    compass_core_1_0_1 = {
-      basename = ''compass_core'';
-      meta = {
-        description = ''The Compass core stylesheet library'';
-        homepage = ''http://compass-style.org/reference/compass/'';
-        longDescription = ''The Compass core stylesheet library and minimum required ruby extensions. This library can be used stand-alone without the compass ruby configuration file or compass command line tools.'';
-      };
-      name = ''compass-core-1.0.1'';
-      requiredGems = [ g.sass_3_4_9 g.multi_json_1_10_1 ];
-      sha256 = ''0zhbmgjq6s9j2qdx3cz0v8s216mh8g0ymk4fzmq3c4an9rryl1zx'';
-    };
-    compass_import_once_1_0_5 = {
-      basename = ''compass_import_once'';
-      meta = {
-        description = ''Speed up your Sass compilation by making @import only import each file once.'';
-        homepage = ''https://github.com/chriseppstein/compass/tree/master/import-once'';
-        longDescription = ''Changes the behavior of Sass's @import directive to only import a file once.'';
-      };
-      name = ''compass-import-once-1.0.5'';
-      requiredGems = [ g.sass_3_4_9 ];
-      sha256 = ''0bn7gwbfz7jvvdd0qdfqlx67fcb83gyvxqc7dr9fhcnks3z8z5rq'';
-    };
-    cucumber_1_3_17 = {
-      basename = ''cucumber'';
-      meta = {
-        description = ''cucumber-1.3.17'';
-        homepage = ''http://cukes.info'';
-        longDescription = ''Behaviour Driven Development with elegance and joy'';
-      };
-      name = ''cucumber-1.3.17'';
-      requiredGems = [ g.builder_3_2_2 g.diff_lcs_1_2_5 g.gherkin_2_12_2 g.multi_json_1_10_1 g.multi_test_0_1_1 ];
-      sha256 = ''1gjnxxrcf43mzs5qlg1m0b61g8vwfzjkj1wwi6xbpsqlhcwjjq1x'';
-    };
-    daemons_1_1_9 = {
-      basename = ''daemons'';
-      meta = {
-        description = ''A toolkit to create and control daemons in different ways'';
-        homepage = ''http://daemons.rubyforge.org'';
-        longDescription = ''Daemons provides an easy way to wrap existing ruby scripts (for example a self-written server)  to be run as a daemon and to be controlled by simple start/stop/restart commands.  You can also call blocks as daemons and control them from the parent or just daemonize the current process.  Besides this basic functionality, daemons offers many advanced features like exception  backtracing and logging (in case your ruby script crashes) and monitoring and automatic restarting of your processes if they crash.'';
-      };
-      name = ''daemons-1.1.9'';
-      requiredGems = [  ];
-      sha256 = ''1j1m64pirsldhic6x6sg4lcrmp1bs1ihpd49xm8m1b2rc1c3irzy'';
-    };
-    diff_lcs_1_2_4 = {
-      basename = ''diff_lcs'';
-      meta = {
-        description = ''Diff::LCS computes the difference between two Enumerable sequences using the McIlroy-Hunt longest common subsequence (LCS) algorithm'';
-        homepage = ''http://diff-lcs.rubyforge.org/'';
-        longDescription = ''Diff::LCS computes the difference between two Enumerable sequences using the
-McIlroy-Hunt longest common subsequence (LCS) algorithm. It includes utilities
-to create a simple HTML diff output format and a standard diff-like tool.
-
-This is release 1.2.4, fixing a bug introduced after diff-lcs 1.1.3 that did
-not properly prune common sequences at the beginning of a comparison set.
-Thanks to Paul Kunysch for fixing this issue.
-
-Coincident with the release of diff-lcs 1.2.3, we reported an issue with
-Rubinius in 1.9 mode
-({rubinius/rubinius#2268}[https://github.com/rubinius/rubinius/issues/2268]).
-We are happy to report that this issue has been resolved.'';
-      };
-      name = ''diff-lcs-1.2.4'';
-      requiredGems = [  ];
-      sha256 = ''09xbffjg639y8n43zp88ki0m489vv2c86znmfib2fg1di6svi1xd'';
-    };
-    diff_lcs_1_2_5 = {
-      basename = ''diff_lcs'';
-      meta = {
-        description = ''Diff::LCS computes the difference between two Enumerable sequences using the McIlroy-Hunt longest common subsequence (LCS) algorithm'';
-        homepage = ''http://diff-lcs.rubyforge.org/'';
-        longDescription = ''Diff::LCS computes the difference between two Enumerable sequences using the
-McIlroy-Hunt longest common subsequence (LCS) algorithm. It includes utilities
-to create a simple HTML diff output format and a standard diff-like tool.
-
-This is release 1.2.4, fixing a bug introduced after diff-lcs 1.1.3 that did
-not properly prune common sequences at the beginning of a comparison set.
-Thanks to Paul Kunysch for fixing this issue.
-
-Coincident with the release of diff-lcs 1.2.3, we reported an issue with
-Rubinius in 1.9 mode
-({rubinius/rubinius#2268}[https://github.com/rubinius/rubinius/issues/2268]).
-We are happy to report that this issue has been resolved.'';
-      };
-      name = ''diff-lcs-1.2.5'';
-      requiredGems = [  ];
-      sha256 = ''1vf9civd41bnqi6brr5d9jifdw73j9khc6fkhfl1f8r9cpkdvlx1'';
-    };
-    dimensions_1_2_0 = {
-      basename = ''dimensions'';
-      meta = {
-        description = ''Pure Ruby dimension measurement for GIF, PNG, JPEG and TIFF images'';
-        homepage = ''https://github.com/sstephenson/dimensions'';
-        longDescription = ''A pure Ruby library for measuring the dimensions and rotation angles of GIF, PNG, JPEG and TIFF images.'';
-      };
-      name = ''dimensions-1.2.0'';
-      requiredGems = [  ];
-      sha256 = ''1pqb7yzjcpbgbyi196ifqbd1wy570cn12bkzcvpcha4xilhajja0'';
-    };
-    domain_name_0_5_22 = {
-      basename = ''domain_name'';
-      meta = {
-        description = ''Domain Name manipulation library for Ruby'';
-        homepage = ''https://github.com/knu/ruby-domain_name'';
-        longDescription = ''This is a Domain Name manipulation library for Ruby.
-
-It can also be used for cookie domain validation based on the Public
-Suffix List.
-'';
-      };
-      name = ''domain_name-0.5.22'';
-      requiredGems = [ g.unf_0_1_4 ];
-      sha256 = ''0r3kj0hjibv5y7z3m46xdjrc19pkhnkhzr4xmvq9gypr2h7vz2yb'';
-    };
-    dotenv_1_0_2 = {
-      basename = ''dotenv'';
-      meta = {
-        description = ''Loads environment variables from `.env`.'';
-        homepage = ''https://github.com/bkeepers/dotenv'';
-        longDescription = ''Loads environment variables from `.env`.'';
-      };
-      name = ''dotenv-1.0.2'';
-      requiredGems = [  ];
-      sha256 = ''1g6sdv55842a7iv11wawrbfrx8x5k7gl598nl6my55jb2nbynkmw'';
-    };
-    em_resolv_replace_1_1_3 = {
-      basename = ''em_resolv_replace'';
-      meta = {
-        description = ''EventMachine-aware DNS lookup for Ruby'';
-        homepage = ''http://github.com/mperham/em-resolv-replace'';
-      };
-      name = ''em-resolv-replace-1.1.3'';
-      requiredGems = [  ];
-      sha256 = ''1w5y4rzmp51ni56v05qwgay5wrs2i6i3q92pvlcrghmhxhgsbqg7'';
-    };
-    erubis_2_7_0 = {
-      basename = ''erubis'';
-      meta = {
-        description = ''a fast and extensible eRuby implementation which supports multi-language'';
-        homepage = ''http://www.kuwata-lab.com/erubis/'';
-        longDescription = ''  Erubis is an implementation of eRuby and has the following features:
-
-  * Very fast, almost three times faster than ERB and about 10% faster than eruby.
-  * Multi-language support (Ruby/PHP/C/Java/Scheme/Perl/Javascript)
-  * Auto escaping support
-  * Auto trimming spaces around '&lt;% %&gt;'
-  * Embedded pattern changeable (default '&lt;% %&gt;')
-  * Enable to handle Processing Instructions (PI) as embedded pattern (ex. '&lt;?rb ... ?&gt;')
-  * Context object available and easy to combine eRuby template with YAML datafile
-  * Print statement available
-  * Easy to extend and customize in subclass
-  * Ruby on Rails support
-'';
-      };
-      name = ''erubis-2.7.0'';
-      requiredGems = [  ];
-      sha256 = ''1fj827xqjs91yqsydf0zmfyw9p4l2jz5yikg3mppz6d7fi8kyrb3'';
-    };
-    ethon_0_7_1 = {
-      basename = ''ethon'';
-      meta = {
-        description = ''Libcurl wrapper.'';
-        homepage = ''https://github.com/typhoeus/ethon'';
-        longDescription = ''Very lightweight libcurl wrapper.'';
-      };
-      name = ''ethon-0.7.1'';
-      requiredGems = [ g.ffi_1_9_6 ];
-      sha256 = ''0b762cmnj20fjlrlzk5vsndzv4ac3ybdi4vikx5c11abl7x5wbg6'';
-    };
-    eventmachine_1_0_3 = {
-      basename = ''eventmachine'';
-      meta = {
-        description = ''Ruby/EventMachine library'';
-        homepage = ''http://rubyeventmachine.com'';
-        longDescription = ''EventMachine implements a fast, single-threaded engine for arbitrary network
-communications. It's extremely easy to use in Ruby. EventMachine wraps all
-interactions with IP sockets, allowing programs to concentrate on the
-implementation of network protocols. It can be used to create both network
-servers and clients. To create a server or client, a Ruby program only needs
-to specify the IP address and port, and provide a Module that implements the
-communications protocol. Implementations of several standard network protocols
-are provided with the package, primarily to serve as examples. The real goal
-of EventMachine is to enable programs to easily interface with other programs
-using TCP/IP, especially if custom protocols are required.'';
-      };
-      name = ''eventmachine-1.0.3'';
-      requiredGems = [  ];
-      sha256 = ''09sqlsb6x9ddlgfw5gsw7z0yjg5m2qfjiqkz2fx70zsizj3lqhil'';
-    };
-    eventmachine_tail_0_6_4 = {
-      basename = ''eventmachine_tail'';
-      meta = {
-        description = ''eventmachine tail - a file tail implementation with glob support'';
-        homepage = ''http://code.google.com/p/semicomplete/wiki/EventMachineTail'';
-        longDescription = ''Add file 'tail' implemented with EventMachine. Also includes a 'glob watch' class for watching a directory pattern for new matches, like /var/log/*.log'';
-      };
-      name = ''eventmachine-tail-0.6.4'';
-      requiredGems = [ g.eventmachine_1_0_3 ];
-      sha256 = ''1pvlb34vdzd81kf9f3xyibb4f55xjqm7lqqy28dgyci5cyv50y61'';
-    };
-    excon_0_42_1 = {
-      basename = ''excon'';
-      meta = {
-        description = ''speed, persistence, http(s)'';
-        homepage = ''https://github.com/excon/excon'';
-        longDescription = ''EXtended http(s) CONnections'';
-      };
-      name = ''excon-0.42.1'';
-      requiredGems = [  ];
-      sha256 = ''1za1jmp83149qmykih2bfgxlwyyz3hrpaq4kxww7467fvgwh58xj'';
-    };
-    execjs_2_2_2 = {
-      basename = ''execjs'';
-      meta = {
-        description = ''Run JavaScript code from Ruby'';
-        homepage = ''https://github.com/sstephenson/execjs'';
-        longDescription = ''ExecJS lets you run JavaScript code from Ruby.'';
-      };
-      name = ''execjs-2.2.2'';
-      requiredGems = [  ];
-      sha256 = ''05m41mnxn4b2p133qzbz5cy9cc5rn57aa0pp2943hxmzbk379z1f'';
-    };
-    fakes3_0_1_6_1 = {
-      basename = ''fakes3'';
-      meta = {
-        description = ''FakeS3 is a server that simulates S3 commands so you can test your S3 functionality in your projects'';
-        homepage = ''https://github.com/jubos/fake-s3'';
-        longDescription = ''Use FakeS3 to test basic S3 functionality without actually connecting to S3'';
-      };
-      name = ''fakes3-0.1.6.1'';
-      requiredGems = [ g.thor_0_19_1 g.builder_3_2_2 ];
-      sha256 = ''1s2w06lgwlhsr3q7b58qnjdqqi6x3ksl3hjqq54d57gb0y65s0p3'';
-    };
-    faraday_0_9_0 = {
-      basename = ''faraday'';
-      meta = {
-        description = ''HTTP/REST API client library.'';
-        homepage = ''https://github.com/lostisland/faraday'';
-      };
-      name = ''faraday-0.9.0'';
-      requiredGems = [ g.multipart_post_2_0_0 ];
-      sha256 = ''13wi8y7j6mp0mszps50gqr0fyddiz45wqkvpnnrv797gklr9sh46'';
-    };
-    faraday_middleware_0_9_1 = {
-      basename = ''faraday_middleware'';
-      meta = {
-        description = ''Various middleware for Faraday'';
-        homepage = ''https://github.com/lostisland/faraday_middleware'';
-        longDescription = ''Various middleware for Faraday'';
-      };
-      name = ''faraday_middleware-0.9.1'';
-      requiredGems = [ g.faraday_0_9_0 ];
-      sha256 = ''1kndkrww1biz9j64fnyaqgis1gdiawxfv0ncadsz06gd555fgs6q'';
-    };
-    fast_stemmer_1_0_2 = {
-      basename = ''fast_stemmer'';
-      meta = {
-        description = ''Fast Porter stemmer based on a C version of algorithm'';
-        homepage = ''http://github.com/romanbsd/fast-stemmer'';
-        longDescription = ''Fast Porter stemmer based on a C version of algorithm'';
-      };
-      name = ''fast-stemmer-1.0.2'';
-      requiredGems = [  ];
-      sha256 = ''0688clyk4xxh3kdb18vi089k90mca8ji5fwaknh3da5wrzcrzanh'';
-    };
-    ffi_1_9_6 = {
-      basename = ''ffi'';
-      meta = {
-        description = ''Ruby FFI'';
-        homepage = ''http://wiki.github.com/ffi/ffi'';
-        longDescription = ''Ruby FFI library'';
-      };
-      name = ''ffi-1.9.6'';
-      requiredGems = [  ];
-      sha256 = ''1ckw1336rnyv9yvvl614qgkqqi477g4hljv6xsws2vz14ynlvzhj'';
-    };
-    file_tail_1_1_0 = {
-      basename = ''file_tail'';
-      meta = {
-        description = ''File::Tail for Ruby'';
-        homepage = ''http://github.com/flori/file-tail'';
-        longDescription = ''Library to tail files in Ruby'';
-      };
-      name = ''file-tail-1.1.0'';
-      requiredGems = [ g.tins_1_3_3 ];
-      sha256 = ''0idypaigk7l8kzhhnjfhz84mrvqd905njyycgqdq6v23jgif9n64'';
-    };
-    foreman_0_76_0 = {
-      basename = ''foreman'';
-      meta = {
-        description = ''Process manager for applications with multiple components'';
-        homepage = ''http://github.com/ddollar/foreman'';
-        longDescription = ''Process manager for applications with multiple components'';
-      };
-      name = ''foreman-0.76.0'';
-      requiredGems = [ g.thor_0_19_1 g.dotenv_1_0_2 ];
-      sha256 = ''1akr7gjnzbjpp71gf4hw6hd7hrl9fnm9ggazkkvnz84l9l36cgm2'';
-    };
-    gettext_3_1_4 = {
-      basename = ''gettext'';
-      meta = {
-        description = ''Gettext is a pure Ruby libary and tools to localize messages.'';
-        homepage = ''http://ruby-gettext.github.com/'';
-        longDescription = ''Gettext is a GNU gettext-like program for Ruby.
-The catalog file(po-file) is same format with GNU gettext.
-So you can use GNU gettext tools for maintaining.
-'';
-      };
-      name = ''gettext-3.1.4'';
-      requiredGems = [ g.locale_2_1_0 g.text_1_3_0 ];
-      sha256 = ''0gfnbkj2knpq8jxplkdr18by64kcadqxjhrxr3ncldz2ghm5zhvb'';
-    };
-    gh_0_13_2 = {
-      basename = ''gh'';
-      meta = {
-        description = ''layered github client'';
-        homepage = ''http://gh.rkh.im/'';
-        longDescription = ''multi-layer client for the github api v3'';
-      };
-      name = ''gh-0.13.2'';
-      requiredGems = [ g.faraday_0_9_0 g.backports_3_6_4 g.multi_json_1_10_1 g.addressable_2_3_6 g.net_http_persistent_2_9_4 g.net_http_pipeline_1_0_1 ];
-      sha256 = ''17scqa35j6ghpykzk986gnd6dvbrh8nn60ib04hb2gbyh9dns1dj'';
-    };
-    gherkin_2_12_2 = {
-      basename = ''gherkin'';
-      meta = {
-        description = ''gherkin-2.12.2'';
-        homepage = ''http://github.com/cucumber/gherkin'';
-        longDescription = ''A fast Gherkin lexer/parser based on the Ragel State Machine Compiler.'';
-      };
-      name = ''gherkin-2.12.2'';
-      requiredGems = [ g.multi_json_1_10_1 ];
-      sha256 = ''1mxfgw15pii1jmq00xxbyp77v71mh3bp99ndgwzfwkxvbcisha25'';
-    };
-    heroku_3_20_0 = {
-      basename = ''heroku'';
-      meta = {
-        description = ''Client library and CLI to deploy apps on Heroku.'';
-        homepage = ''http://heroku.com/'';
-        longDescription = ''Client library and command-line tool to deploy and manage apps on Heroku.'';
-      };
-      name = ''heroku-3.20.0'';
-      requiredGems = [ g.heroku_api_0_3_21 g.launchy_2_4_3 g.netrc_0_10_1 g.rest_client_1_6_7 g.rubyzip_0_9_9 g.multi_json_1_10_1 ];
-      sha256 = ''0iw3x413sbc5a5f2r3aicdprghw3vnmj5lrbd9gdh9pm4v7saf8b'';
-    };
-    heroku_api_0_3_21 = {
-      basename = ''heroku_api'';
-      meta = {
-        description = ''Ruby Client for the Heroku API'';
-        homepage = ''http://github.com/heroku/heroku.rb'';
-        longDescription = ''Ruby Client for the Heroku API'';
-      };
-      name = ''heroku-api-0.3.21'';
-      requiredGems = [ g.excon_0_42_1 g.multi_json_1_10_1 ];
-      sha256 = ''0f41zzx4sshpba5p013hmjmk7lxkk5dfasb292zvx1cfi4l60lwd'';
-    };
-    highline_1_6_21 = {
-      basename = ''highline'';
-      meta = {
-        description = ''HighLine is a high-level command-line IO library.'';
-        homepage = ''http://highline.rubyforge.org'';
-        longDescription = ''A high-level IO library that provides validation, type conversion, and more for
-command-line interfaces. HighLine also includes a complete menu system that can
-crank out anything from simple list selection to complete shells with just
-minutes of work.
-'';
-      };
-      name = ''highline-1.6.21'';
-      requiredGems = [  ];
-      sha256 = ''06bml1fjsnrhd956wqq5k3w8cyd09rv1vixdpa3zzkl6xs72jdn1'';
-    };
-    hike_1_2_3 = {
-      basename = ''hike'';
-      meta = {
-        description = ''Find files in a set of paths'';
-        homepage = ''http://github.com/sstephenson/hike'';
-        longDescription = ''A Ruby library for finding files in a set of paths.'';
-      };
-      name = ''hike-1.2.3'';
-      requiredGems = [  ];
-      sha256 = ''0i6c9hrszzg3gn2j41v3ijnwcm8cc2931fnjiv6mnpl4jcjjykhm'';
-    };
-    hitimes_1_2_2 = {
-      basename = ''hitimes'';
-      meta = {
-        description = ''Hitimes is a fast, high resolution timer library for recording performance metrics.  It uses the appropriate low method calls for each system to get the highest granularity time increments possible.'';
-        homepage = ''http://github.com/copiousfreetime/hitimes'';
-        longDescription = ''Hitimes is a fast, high resolution timer library for recording performance metrics.  It uses the appropriate low method calls for each system to get the highest granularity time increments possible.   It currently supports any of the following systems: * any system with the POSIX call `clock_gettime()` * Mac OS X * Windows * JRuby Using Hitimes can be faster than using a series of `Time.new` calls, and it will have a much higher granularity. It is definitely faster than using `Process.times`.'';
-      };
-      name = ''hitimes-1.2.2'';
-      requiredGems = [  ];
-      sha256 = ''17y3ggqxl3m6x9gqpgdn39z0pxpmw666d40r39bs7ngdmy680jn4'';
-    };
-    hoe_3_7_1 = {
-      basename = ''hoe'';
-      meta = {
-        description = ''Hoe is a rake/rubygems helper for project Rakefiles'';
-        homepage = ''http://www.zenspider.com/projects/hoe.html'';
-        longDescription = ''Hoe is a rake/rubygems helper for project Rakefiles. It helps you
-manage, maintain, and release your project and includes a dynamic
-plug-in system allowing for easy extensibility. Hoe ships with
-plug-ins for all your usual project tasks including rdoc generation,
-testing, packaging, deployment, and announcement..
-
-See class rdoc for help. Hint: `ri Hoe` or any of the plugins listed
-below.
-
-For extra goodness, see: http://seattlerb.rubyforge.org/hoe/Hoe.pdf'';
-      };
-      name = ''hoe-3.7.1'';
-      requiredGems = [ g.rake_10_4_2 ];
-      sha256 = ''0lyrdbzxj4isxzyfp93w0q1g9sqw6grkjp91xirzlw1z1714qsw3'';
-    };
-    http_cookie_1_0_2 = {
-      basename = ''http_cookie'';
-      meta = {
-        description = ''A Ruby library to handle HTTP Cookies based on RFC 6265'';
-        homepage = ''https://github.com/sparklemotion/http-cookie'';
-        longDescription = ''HTTP::Cookie is a Ruby library to handle HTTP Cookies based on RFC 6265.  It has with security, standards compliance and compatibility in mind, to behave just the same as today's major web browsers.  It has builtin support for the legacy cookies.txt and the latest cookies.sqlite formats of Mozilla Firefox, and its modular API makes it easy to add support for a new backend store.'';
-      };
-      name = ''http-cookie-1.0.2'';
-      requiredGems = [ g.domain_name_0_5_22 ];
-      sha256 = ''0cz2fdkngs3jc5w32a6xcl511hy03a7zdiy988jk1sf3bf5v3hdw'';
-    };
-    i18n_0_6_11 = {
-      basename = ''i18n'';
-      meta = {
-        description = ''New wave Internationalization support for Ruby'';
-        homepage = ''http://github.com/svenfuchs/i18n'';
-        longDescription = ''New wave Internationalization support for Ruby.'';
-      };
-      name = ''i18n-0.6.11'';
-      requiredGems = [  ];
-      sha256 = ''0fwjlgmgry2blf8zlxn9c555cf4a16p287l599kz5104ncjxlzdk'';
-    };
-    iconv_1_0_4 = {
-      basename = ''iconv'';
-      meta = {
-        description = ''iconv wrapper library'';
-        homepage = ''https://github.com/nurse/iconv'';
-        longDescription = ''iconv wrapper library'';
-      };
-      name = ''iconv-1.0.4'';
-      requiredGems = [  ];
-      sha256 = ''16sgj6gqs4bgwv6q4vv811fb43908psr33dz7sphn1z8la3y7m2v'';
-    };
-    jekyll_2_5_2 = {
-      basename = ''jekyll'';
-      meta = {
-        description = ''A simple, blog aware, static site generator.'';
-        homepage = ''https://github.com/jekyll/jekyll'';
-        longDescription = ''Jekyll is a simple, blog aware, static site generator.'';
-      };
-      name = ''jekyll-2.5.2'';
-      requiredGems = [ g.liquid_2_6_1 g.kramdown_1_5_0 g.mercenary_0_3_5 g.safe_yaml_1_0_4 g.colorator_0_1 g.pygments_rb_0_6_0 g.redcarpet_3_2_2 g.toml_0_1_2 g.jekyll_paginate_1_1_0 g.jekyll_gist_1_1_0 g.jekyll_coffeescript_1_0_1 g.jekyll_sass_converter_1_3_0 g.jekyll_watch_1_2_0 g.classifier_reborn_2_0_2 ];
-      sha256 = ''03ka7jcfk5byvphy5ks35w75i78ahshrrgm3zbnsxj8xvbxg9bgi'';
-    };
-    jekyll_coffeescript_1_0_1 = {
-      basename = ''jekyll_coffeescript'';
-      meta = {
-        description = ''A CoffeeScript converter for Jekyll.'';
-        homepage = ''https://github.com/jekyll/jekyll-coffeescript'';
-      };
-      name = ''jekyll-coffeescript-1.0.1'';
-      requiredGems = [ g.coffee_script_2_3_0 ];
-      sha256 = ''19nkqbaxqbzqbfbi7sgshshj2krp9ap88m9fc5pa6mglb2ypk3hg'';
-    };
-    jekyll_gist_1_1_0 = {
-      basename = ''jekyll_gist'';
-      meta = {
-        description = ''Liquid tag for displaying GitHub Gists in Jekyll sites.'';
-        homepage = ''https://github.com/jekyll/jekyll-gist'';
-      };
-      name = ''jekyll-gist-1.1.0'';
-      requiredGems = [  ];
-      sha256 = ''06d4jwf64fl7x3dqfimnfqzr4d3wbsdz2l4fif35j91mmh37nmq9'';
-    };
-    jekyll_paginate_1_1_0 = {
-      basename = ''jekyll_paginate'';
-      meta = {
-        description = ''Built-in Pagination Generator for Jekyll'';
-        homepage = ''https://github.com/jekyll/jekyll-paginate'';
-      };
-      name = ''jekyll-paginate-1.1.0'';
-      requiredGems = [  ];
-      sha256 = ''0r7bcs8fq98zldih4787zk5i9w24nz5wa26m84ssja95n3sas2l8'';
-    };
-    jekyll_sass_converter_1_3_0 = {
-      basename = ''jekyll_sass_converter'';
-      meta = {
-        description = ''A basic Sass converter for Jekyll.'';
-        homepage = ''https://github.com/jekyll/jekyll-sass-converter'';
-      };
-      name = ''jekyll-sass-converter-1.3.0'';
-      requiredGems = [ g.sass_3_4_9 ];
-      sha256 = ''1xqmlr87xmzpalf846gybkbfqkj48y3fva81r7c7175my9p4ykl1'';
-    };
-    jekyll_watch_1_2_0 = {
-      basename = ''jekyll_watch'';
-      meta = {
-        description = ''Rebuild your Jekyll site when a file changes with the `--watch` switch.'';
-        homepage = ''https://github.com/jekyll/jekyll-watch'';
-      };
-      name = ''jekyll-watch-1.2.0'';
-      requiredGems = [ g.listen_2_8_3 ];
-      sha256 = ''0ivw66jww4wlw067pspapgd8ibw781xfwdi6r5mzswjz4nvyf056'';
-    };
-    jsduck_5_3_4 = {
-      basename = ''jsduck'';
-      meta = {
-        description = ''Simple JavaScript Duckumentation generator'';
-        homepage = ''https://github.com/senchalabs/jsduck'';
-        longDescription = ''Documentation generator for Sencha JS frameworks'';
-      };
-      name = ''jsduck-5.3.4'';
-      requiredGems = [ g.rdiscount_2_1_7_1 g.json_1_8_1 g.parallel_0_7_1 g.rkelly_remix_0_0_6 g.dimensions_1_2_0 ];
-      sha256 = ''0hac7g9g6gg10bigbm8dskwwbv1dfch8ca353gh2bkwf244qq2xr'';
-    };
-    json_1_8_1 = {
-      basename = ''json'';
-      meta = {
-        description = ''JSON Implementation for Ruby'';
-        homepage = ''http://flori.github.com/json'';
-        longDescription = ''This is a JSON implementation as a Ruby extension in C.'';
-      };
-      name = ''json-1.8.1'';
-      requiredGems = [  ];
-      sha256 = ''0002bsycvizvkmk1jyv8px1hskk6wrjfk4f7x5byi8gxm6zzn6wn'';
-    };
-    json_pure_1_8_0 = {
-      basename = ''json_pure'';
-      meta = {
-        description = ''JSON Implementation for Ruby'';
-        homepage = ''http://flori.github.com/json'';
-        longDescription = ''This is a JSON implementation in pure Ruby.'';
-      };
-      name = ''json_pure-1.8.0'';
-      requiredGems = [  ];
-      sha256 = ''0kkn5zhiffav2cffj43wwvzj07825r4j463ilfjgik034vnbjs83'';
-    };
-    kitchen_ansible_0_0_4 = {
-      basename = ''kitchen_ansible'';
-      meta = {
-        description = ''ansible provisioner for test-kitchen'';
-        homepage = ''https://github.com/neillturner/kitchen-ansible'';
-        longDescription = ''== DESCRIPTION:
-
-Ansible Provisioner for Test Kitchen
-
-== FEATURES:
-
-Supports running ansible-playbook
-
-'';
-      };
-      name = ''kitchen-ansible-0.0.4'';
-      requiredGems = [  ];
-      sha256 = ''0wwp7yq2n1jjisy00yiahzpxjdjvk40ry0m9a1rzd56fr9yvck2y'';
-    };
-    kitchen_vagrant_0_15_0 = {
-      basename = ''kitchen_vagrant'';
-      meta = {
-        description = ''Kitchen::Driver::Vagrant - A Vagrant Driver for Test Kitchen.'';
-        homepage = ''https://github.com/test-kitchen/kitchen-vagrant/'';
-        longDescription = ''Kitchen::Driver::Vagrant - A Vagrant Driver for Test Kitchen.'';
-      };
-      name = ''kitchen-vagrant-0.15.0'';
-      requiredGems = [ g.test_kitchen_1_2_1 ];
-      sha256 = ''1blf6qr0j9ab9ajrkb9fx67wnns3hgi9gda2l83hd3zfrjp6vc9w'';
-    };
-    kramdown_1_5_0 = {
-      basename = ''kramdown'';
-      meta = {
-        description = ''kramdown is a fast, pure-Ruby Markdown-superset converter.'';
-        homepage = ''http://kramdown.gettalong.org'';
-        longDescription = ''kramdown is yet-another-markdown-parser but fast, pure Ruby,
-using a strict syntax definition and supporting several common extensions.
-'';
-      };
-      name = ''kramdown-1.5.0'';
-      requiredGems = [  ];
-      sha256 = ''1max2dyap3lwi6ssaqi5gbzpmb0nlx1qy47bwc1bpls3y18hd6hm'';
-    };
-    launchy_2_4_3 = {
-      basename = ''launchy'';
-      meta = {
-        description = ''Launchy is helper class for launching cross-platform applications in a fire and forget manner.'';
-        homepage = ''http://github.com/copiousfreetime/launchy'';
-        longDescription = ''Launchy is helper class for launching cross-platform applications in a fire and forget manner. There are application concepts (browser, email client, etc) that are common across all platforms, and they may be launched differently on each platform. Launchy is here to make a common approach to launching external application from within ruby programs.'';
-      };
-      name = ''launchy-2.4.3'';
-      requiredGems = [ g.addressable_2_3_6 ];
-      sha256 = ''190lfbiy1vwxhbgn4nl4dcbzxvm049jwc158r2x7kq3g5khjrxa2'';
-    };
-    liquid_2_6_1 = {
-      basename = ''liquid'';
-      meta = {
-        description = ''A secure, non-evaling end user template engine with aesthetic markup.'';
-        homepage = ''http://www.liquidmarkup.org'';
-      };
-      name = ''liquid-2.6.1'';
-      requiredGems = [  ];
-      sha256 = ''0fc67cx36x05hsw0cc56la4qr3939g34cdgqmqgdi8yzs72cbv7x'';
-    };
-    listen_2_8_3 = {
-      basename = ''listen'';
-      meta = {
-        description = ''Listen to file modifications'';
-        homepage = ''https://github.com/guard/listen'';
-        longDescription = ''The Listen gem listens to file modifications and notifies you about the changes. Works everywhere!'';
-      };
-      name = ''listen-2.8.3'';
-      requiredGems = [ g.celluloid_0_16_0 g.rb_fsevent_0_9_4 g.rb_inotify_0_9_5 ];
-      sha256 = ''1cvnr8p6kq7z63a32lwcx24ama6rsyh501pzmlpd2gvi891jxbgw'';
-    };
-    locale_2_1_0 = {
-      basename = ''locale'';
-      meta = {
-        description = ''Ruby-Locale is the pure ruby library which provides basic APIs for localization.'';
-        homepage = ''https://github.com/ruby-gettext/locale'';
-        longDescription = ''Ruby-Locale is the pure ruby library which provides basic APIs for localization.
-'';
-      };
-      name = ''locale-2.1.0'';
-      requiredGems = [  ];
-      sha256 = ''18bb0g24flq9dr8qv4j7pm7w9i2vmvmqrbmry95ibf1r1c4s60yj'';
-    };
-    lockfile_2_1_3 = {
-      basename = ''lockfile'';
-      meta = {
-        description = ''lockfile'';
-        homepage = ''https://github.com/ahoward/lockfile'';
-        longDescription = ''a ruby library for creating perfect and NFS safe lockfiles'';
-      };
-      name = ''lockfile-2.1.3'';
-      requiredGems = [  ];
-      sha256 = ''0dij3ijywylvfgrpi2i0k17f6w0wjhnjjw0k9030f54z56cz7jrr'';
-    };
-    macaddr_1_7_1 = {
-      basename = ''macaddr'';
-      meta = {
-        description = ''macaddr'';
-        homepage = ''https://github.com/ahoward/macaddr'';
-        longDescription = ''cross platform mac address determination for ruby'';
-      };
-      name = ''macaddr-1.7.1'';
-      requiredGems = [ g.systemu_2_6_4 ];
-      sha256 = ''1clii8mvhmh5lmnm95ljnjygyiyhdpja85c5vy487rhxn52scn0b'';
-    };
-    mail_2_6_3 = {
-      basename = ''mail'';
-      meta = {
-        description = ''Mail provides a nice Ruby DSL for making, sending and reading emails.'';
-        homepage = ''https://github.com/mikel/mail'';
-        longDescription = ''A really Ruby Mail handler.'';
-      };
-      name = ''mail-2.6.3'';
-      requiredGems = [ g.mime_types_2_4_3 ];
-      sha256 = ''1nbg60h3cpnys45h7zydxwrl200p7ksvmrbxnwwbpaaf9vnf3znp'';
-    };
-    mechanize_2_7_3 = {
-      basename = ''mechanize'';
-      meta = {
-        description = ''The Mechanize library is used for automating interaction with websites'';
-        homepage = ''http://mechanize.rubyforge.org'';
-        longDescription = ''The Mechanize library is used for automating interaction with websites.
-Mechanize automatically stores and sends cookies, follows redirects,
-and can follow links and submit forms.  Form fields can be populated and
-submitted.  Mechanize also keeps track of the sites that you have visited as
-a history.'';
-      };
-      name = ''mechanize-2.7.3'';
-      requiredGems = [ g.net_http_digest_auth_1_4 g.net_http_persistent_2_9_4 g.mime_types_2_4_3 g.http_cookie_1_0_2 g.nokogiri_1_6_5 g.ntlm_http_0_1_1 g.webrobots_0_1_1 g.domain_name_0_5_22 ];
-      sha256 = ''00jkazj8fqnynaxca0lnwx5a084irxrnw8n8i0kppq4vg71g7rrx'';
-    };
-    mercenary_0_3_5 = {
-      basename = ''mercenary'';
-      meta = {
-        description = ''Lightweight and flexible library for writing command-line apps in Ruby.'';
-        homepage = ''https://github.com/jekyll/mercenary'';
-        longDescription = ''Lightweight and flexible library for writing command-line apps in Ruby.'';
-      };
-      name = ''mercenary-0.3.5'';
-      requiredGems = [  ];
-      sha256 = ''0ls7z086v4xl02g4ia5jhl9s76d22crgmplpmj0c383liwbqi9pb'';
-    };
-    method_source_0_8_2 = {
-      basename = ''method_source'';
-      meta = {
-        description = ''retrieve the sourcecode for a method'';
-        homepage = ''http://banisterfiend.wordpress.com'';
-        longDescription = ''retrieve the sourcecode for a method'';
-      };
-      name = ''method_source-0.8.2'';
-      requiredGems = [  ];
-      sha256 = ''1g5i4w0dmlhzd18dijlqw5gk27bv6dj2kziqzrzb7mpgxgsd1sf2'';
-    };
-    mime_types_2_4_3 = {
-      basename = ''mime_types'';
-      meta = {
-        description = ''The mime-types library provides a library and registry for information about MIME content type definitions'';
-        homepage = ''https://github.com/halostatue/mime-types/'';
-        longDescription = ''The mime-types library provides a library and registry for information about
-MIME content type definitions. It can be used to determine defined filename
-extensions for MIME types, or to use filename extensions to look up the likely
-MIME type definitions.
-
-MIME content types are used in MIME-compliant communications, as in e-mail or
-HTTP traffic, to indicate the type of content which is transmitted. The
-mime-types library provides the ability for detailed information about MIME
-entities (provided as an enumerable collection of MIME::Type objects) to be
-determined and used programmatically. There are many types defined by RFCs and
-vendors, so the list is long but by definition incomplete; don't hesitate to to
-add additional type definitions (see Contributing.rdoc). The primary sources
-for MIME type definitions found in mime-types is the IANA collection of
-registrations (see below for the link), RFCs, and W3C recommendations.
-
-This is release 2.4.3, restoring full compatibility with Ruby 1.9.2 (which will
-be dropped in mime-types 3.0). It also includes the performance improvements
-from mime-types 2.4.2 (since yanked because of the broken Ruby 1.9.2 support)
-and the 2.4.1 fix of a bug in observed use of the mime-types library where
-extensions were not previously sorted, such that
-
-    MIME::Types.of('image.jpg').first.extensions.first
-
-returned a value of +jpeg+ in mime-types 1, but +jpe+ in mime-types 2. This was
-introduced because extensions were sorted during assignment
-(MIME::Type#extensions=). This behaviour has been reverted to protect clients
-that work as noted above. The preferred way to express this is the new method:
-
-    MIME::Type.of('image.jpg').first.preferred_extension
-
-Łukasz Śliwa created the
-{friendly_mime}[https://github.com/lukaszsliwa/friendly_mime] gem, which offers
-friendly descriptive names for MIME types. This functionality and
-English-language data has been added to mime-types as MIME::Type#friendly. To
-make it easy for internationalization, MIME::Type#i18n_key has been added,
-which will return a key suitable for use with the
-{I18n}[https://github.com/svenfuchs/i18n] library.
-
-As a reminder, mime-types 2.x is no longer compatible with Ruby 1.8 and
-mime-types 1.x is only being maintained for security issues. No new MIME types
-or features will be added.
-
-mime-types (previously called MIME::Types for Ruby) was originally based on
-MIME::Types for Perl by Mark Overmeer, copyright 2001 - 2009. It is built to
-conform to the MIME types of RFCs 2045 and 2231. It tracks the {IANA Media
-Types registry}[https://www.iana.org/assignments/media-types/media-types.xhtml]
-with some types added by the users of mime-types.'';
-      };
-      name = ''mime-types-2.4.3'';
-      requiredGems = [  ];
-      sha256 = ''16nissnb31wj7kpcaynx4gr67i7pbkzccfg8k7xmplbkla4rmwiq'';
-    };
-    mini_portile_0_6_1 = {
-      basename = ''mini_portile'';
-      meta = {
-        description = ''Simplistic port-like solution for developers'';
-        homepage = ''http://github.com/luislavena/mini_portile'';
-        longDescription = ''Simplistic port-like solution for developers. It provides a standard and simplified way to compile against dependency libraries without messing up your system.'';
-      };
-      name = ''mini_portile-0.6.1'';
-      requiredGems = [  ];
-      sha256 = ''07gah4k84sar9d850v9gip9b323pw74vwwndh3bbzxpw5iiwsd3l'';
-    };
-    minitar_0_5_4 = {
-      basename = ''minitar'';
-      meta = {
-        description = ''Provides POSIX tarchive management from Ruby programs.'';
-        homepage = ''http://www.github.com/atoulme/minitar'';
-        longDescription = ''Archive::Tar::Minitar is a pure-Ruby library and command-line utility that provides the ability to deal with POSIX tar(1) archive files. The implementation is based heavily on Mauricio Ferna'ndez's implementation in rpa-base, but has been reorganised to promote reuse in other projects. Antoine Toulme forked the original project on rubyforge to place it on github, under http://www.github.com/atoulme/minitar'';
-      };
-      name = ''minitar-0.5.4'';
-      requiredGems = [  ];
-      sha256 = ''1vpdjfmdq1yc4i620frfp9af02ia435dnpj8ybsd7dc3rypkvbka'';
-    };
-    minitest_5_5_0 = {
-      basename = ''minitest'';
-      meta = {
-        description = ''minitest provides a complete suite of testing facilities supporting TDD, BDD, mocking, and benchmarking'';
-        homepage = ''https://github.com/seattlerb/minitest'';
-        longDescription = ''minitest provides a complete suite of testing facilities supporting
-TDD, BDD, mocking, and benchmarking.
-
-    "I had a class with Jim Weirich on testing last week and we were
-     allowed to choose our testing frameworks. Kirk Haines and I were
-     paired up and we cracked open the code for a few test
-     frameworks...
-
-     I MUST say that minitest is *very* readable / understandable
-     compared to the 'other two' options we looked at. Nicely done and
-     thank you for helping us keep our mental sanity."
-
-    -- Wayne E. Seguin
-
-minitest/unit is a small and incredibly fast unit testing framework.
-It provides a rich set of assertions to make your tests clean and
-readable.
-
-minitest/spec is a functionally complete spec engine. It hooks onto
-minitest/unit and seamlessly bridges test assertions over to spec
-expectations.
-
-minitest/benchmark is an awesome way to assert the performance of your
-algorithms in a repeatable manner. Now you can assert that your newb
-co-worker doesn't replace your linear algorithm with an exponential
-one!
-
-minitest/mock by Steven Baker, is a beautifully tiny mock (and stub)
-object framework.
-
-minitest/pride shows pride in testing and adds coloring to your test
-output. I guess it is an example of how to write IO pipes too. :P
-
-minitest/unit is meant to have a clean implementation for language
-implementors that need a minimal set of methods to bootstrap a working
-test suite. For example, there is no magic involved for test-case
-discovery.
-
-    "Again, I can't praise enough the idea of a testing/specing
-     framework that I can actually read in full in one sitting!"
-
-    -- Piotr Szotkowski
-
-Comparing to rspec:
-
-    rspec is a testing DSL. minitest is ruby.
-
-    -- Adam Hawkins, "Bow Before MiniTest"
-
-minitest doesn't reinvent anything that ruby already provides, like:
-classes, modules, inheritance, methods. This means you only have to
-learn ruby to use minitest and all of your regular OO practices like
-extract-method refactorings still apply.'';
-      };
-      name = ''minitest-5.5.0'';
-      requiredGems = [  ];
-      sha256 = ''1kzq25l8fh2ngshlwy7k535ncb15n2piqmha86272frh71vw0xq2'';
-    };
-    mixlib_shellout_1_6_1 = {
-      basename = ''mixlib_shellout'';
-      meta = {
-        description = ''Run external commands on Unix or Windows'';
-        homepage = ''http://wiki.opscode.com/'';
-        longDescription = ''Run external commands on Unix or Windows'';
-      };
-      name = ''mixlib-shellout-1.6.1'';
-      requiredGems = [  ];
-      sha256 = ''0awwll2gbsvsz7g6j473f0xrjzyxq755vl260lmki6p937d33f7a'';
-    };
-    multi_json_1_10_1 = {
-      basename = ''multi_json'';
-      meta = {
-        description = ''A common interface to multiple JSON libraries.'';
-        homepage = ''http://github.com/intridea/multi_json'';
-        longDescription = ''A common interface to multiple JSON libraries, including Oj, Yajl, the JSON gem (with C-extensions), the pure-Ruby JSON gem, NSJSONSerialization, gson.rb, JrJackson, and OkJson.'';
-      };
-      name = ''multi_json-1.10.1'';
-      requiredGems = [  ];
-      sha256 = ''1ll21dz01jjiplr846n1c8yzb45kj5hcixgb72rz0zg8fyc9g61c'';
-    };
-    multi_json_1_3_6 = {
-      basename = ''multi_json'';
-      meta = {
-        description = ''A gem to provide swappable JSON backends.'';
-        homepage = ''http://github.com/intridea/multi_json'';
-        longDescription = ''A gem to provide easy switching between different JSON backends, including Oj, Yajl, the JSON gem (with C-extensions), the pure-Ruby JSON gem, and OkJson.'';
-      };
-      name = ''multi_json-1.3.6'';
-      requiredGems = [  ];
-      sha256 = ''0q2zjfvd2ibds9g9nzf2p1b47fc1wqliwfywv5pw85w15lmy91yr'';
-    };
-    multi_test_0_1_1 = {
-      basename = ''multi_test'';
-      meta = {
-        description = ''multi-test-0.1.1'';
-        homepage = ''http://cukes.info'';
-        longDescription = ''Wafter-thin gem to help control rogue test/unit/autorun requires'';
-      };
-      name = ''multi_test-0.1.1'';
-      requiredGems = [  ];
-      sha256 = ''1dd810limbdc8k7ss83g83krrsjjqs79nicbdxk74l1a2sp2jhwv'';
-    };
-    multipart_post_2_0_0 = {
-      basename = ''multipart_post'';
-      meta = {
-        description = ''A multipart form post accessory for Net::HTTP.'';
-        homepage = ''https://github.com/nicksieger/multipart-post'';
-        longDescription = ''Use with Net::HTTP to do multipart form posts.  IO values that have #content_type, #original_filename, and #local_path will be posted as a binary file.'';
-      };
-      name = ''multipart-post-2.0.0'';
-      requiredGems = [  ];
-      sha256 = ''09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x'';
-    };
-    net_http_digest_auth_1_4 = {
-      basename = ''net_http_digest_auth'';
-      meta = {
-        description = ''An implementation of RFC 2617 - Digest Access Authentication'';
-        homepage = ''http://github.com/drbrain/net-http-digest_auth'';
-        longDescription = ''An implementation of RFC 2617 - Digest Access Authentication.  At this time
-the gem does not drop in to Net::HTTP and can be used for with other HTTP
-clients.
-
-In order to use net-http-digest_auth you'll need to perform some request
-wrangling on your own.  See the class documentation at Net::HTTP::DigestAuth
-for an example.'';
-      };
-      name = ''net-http-digest_auth-1.4'';
-      requiredGems = [  ];
-      sha256 = ''14801gr34g0rmqz9pv4rkfa3crfdbyfk6r48vpg5a5407v0sixqi'';
-    };
-    net_http_persistent_2_9_4 = {
-      basename = ''net_http_persistent'';
-      meta = {
-        description = ''Manages persistent connections using Net::HTTP plus a speed fix for Ruby 1.8'';
-        homepage = ''http://docs.seattlerb.org/net-http-persistent'';
-        longDescription = ''Manages persistent connections using Net::HTTP plus a speed fix for Ruby 1.8.
-It's thread-safe too!
-
-Using persistent HTTP connections can dramatically increase the speed of HTTP.
-Creating a new HTTP connection for every request involves an extra TCP
-round-trip and causes TCP congestion avoidance negotiation to start over.
-
-Net::HTTP supports persistent connections with some API methods but does not
-handle reconnection gracefully.  Net::HTTP::Persistent supports reconnection
-and retry according to RFC 2616.'';
-      };
-      name = ''net-http-persistent-2.9.4'';
-      requiredGems = [  ];
-      sha256 = ''1y9fhaax0d9kkslyiqi1zys6cvpaqx9a0y0cywp24rpygwh4s9r4'';
-    };
-    net_http_pipeline_1_0_1 = {
-      basename = ''net_http_pipeline'';
-      meta = {
-        description = ''An HTTP/1.1 pipelining implementation atop Net::HTTP'';
-        homepage = ''http://docs.seattlerb.org/net-http-pipeline'';
-        longDescription = ''An HTTP/1.1 pipelining implementation atop Net::HTTP.  A pipelined connection
-sends multiple requests to the HTTP server without waiting for the responses.
-The server will respond in-order.'';
-      };
-      name = ''net-http-pipeline-1.0.1'';
-      requiredGems = [  ];
-      sha256 = ''0bxjy33yhxwsbnld8xj3zv64ibgfjn9rjpiqkyd5ipmz50pww8v9'';
-    };
-    net_scp_1_2_1 = {
-      basename = ''net_scp'';
-      meta = {
-        description = ''A pure Ruby implementation of the SCP client protocol'';
-        homepage = ''https://github.com/net-ssh/net-scp'';
-        longDescription = ''A pure Ruby implementation of the SCP client protocol'';
-      };
-      name = ''net-scp-1.2.1'';
-      requiredGems = [ g.net_ssh_2_9_1 ];
-      sha256 = ''0b0jqrcsp4bbi4n4mzyf70cp2ysyp6x07j8k8cqgxnvb4i3a134j'';
-    };
-    net_sftp_2_1_2 = {
-      basename = ''net_sftp'';
-      meta = {
-        description = ''A pure Ruby implementation of the SFTP client protocol'';
-        homepage = ''https://github.com/net-ssh/net-sftp'';
-        longDescription = ''A pure Ruby implementation of the SFTP client protocol'';
-      };
-      name = ''net-sftp-2.1.2'';
-      requiredGems = [ g.net_ssh_2_9_1 ];
-      sha256 = ''04674g4n6mryjajlcd82af8g8k95la4b1bj712dh71hw1c9vhw1y'';
-    };
-    net_ssh_2_7_0 = {
-      basename = ''net_ssh'';
-      meta = {
-        description = ''Net::SSH: a pure-Ruby implementation of the SSH2 client protocol.'';
-        homepage = ''https://github.com/net-ssh/net-ssh'';
-        longDescription = ''Net::SSH: a pure-Ruby implementation of the SSH2 client protocol. It allows you to write programs that invoke and interact with processes on remote servers, via SSH2.'';
-      };
-      name = ''net-ssh-2.7.0'';
-      requiredGems = [  ];
-      sha256 = ''14v0cq2fws54kxpgz249xmjlajynhcs4s2szl8kjxgn4c78lrkmr'';
-    };
-    net_ssh_2_9_1 = {
-      basename = ''net_ssh'';
-      meta = {
-        description = ''Net::SSH: a pure-Ruby implementation of the SSH2 client protocol.'';
-        homepage = ''https://github.com/net-ssh/net-ssh'';
-        longDescription = ''Net::SSH: a pure-Ruby implementation of the SSH2 client protocol. It allows you to write programs that invoke and interact with processes on remote servers, via SSH2.'';
-      };
-      name = ''net-ssh-2.9.1'';
-      requiredGems = [  ];
-      sha256 = ''1vscp4r58jisiigqc6d6752w19m1m6hmi3jkzmp3ydxai7h3jb2j'';
-    };
-    netrc_0_10_1 = {
-      basename = ''netrc'';
-      meta = {
-        description = ''Library to read and write netrc files.'';
-        homepage = ''https://github.com/geemus/netrc'';
-        longDescription = ''This library can read and update netrc files, preserving formatting including comments and whitespace.'';
-      };
-      name = ''netrc-0.10.1'';
-      requiredGems = [  ];
-      sha256 = ''1f7ba1zadvydjh0vs16b0spsxpqq2y9jim4h38wahd3sqygiwifc'';
-    };
-    newrelic_plugin_1_3_1 = {
-      basename = ''newrelic_plugin'';
-      meta = {
-        description = ''New Relic Ruby Plugin SDK'';
-        homepage = ''http://newrelic.com'';
-        longDescription = ''The New Relic Plugin Gem is used to send plugin data to New Relic from non-application sources.'';
-      };
-      name = ''newrelic_plugin-1.3.1'';
-      requiredGems = [ g.json_1_8_1 ];
-      sha256 = ''0vmm82mjb9spbs6sb9b94yk8b58dzhflzvgzpyhv7jb3rfdng7ak'';
-    };
-    nix_0_1_1 = {
-      basename = ''nix'';
-      meta = {
-        description = ''Nix package manager interface'';
-        homepage = ''http://gitorious.org/ruby-nix'';
-        longDescription = ''Adds 'gem nix' command that dumps given set of gems to format suitable for Nix package manager'';
-      };
-      name = ''nix-0.1.1'';
-      requiredGems = [  ];
-      sha256 = ''0kwrbkkg0gxibhsz9dpd5zabcf2wqsicg28yiazyb3dc9dslk26k'';
-    };
-    nokogiri_1_6_5 = {
-      basename = ''nokogiri'';
-      meta = {
-        description = ''Nokogiri (鋸) is an HTML, XML, SAX, and Reader parser'';
-        homepage = ''http://nokogiri.org'';
-        longDescription = ''Nokogiri (鋸) is an HTML, XML, SAX, and Reader parser.  Among Nokogiri's
-many features is the ability to search documents via XPath or CSS3 selectors.
-
-XML is like violence - if it doesn’t solve your problems, you are not using
-enough of it.'';
-      };
-      name = ''nokogiri-1.6.5'';
-      requiredGems = [ g.mini_portile_0_6_1 ];
-      sha256 = ''1xmxz6fa0m4p7c7ngpgz6gjgv65lzz63dsf0b6vh7gs2fkiw8j7l'';
-    };
-    ntlm_http_0_1_1 = {
-      basename = ''ntlm_http'';
-      meta = {
-        description = ''Ruby/NTLM HTTP library.'';
-        homepage = ''http://www.mindflowsolutions.net'';
-        longDescription = ''Ruby/NTLM HTTP provides NTLM authentication over http.'';
-      };
-      name = ''ntlm-http-0.1.1'';
-      requiredGems = [  ];
-      sha256 = ''0yx01ffrw87wya1syivqzf8hz02axk7jdpw6aw221xwvib767d36'';
-    };
-    orderedhash_0_0_6 = {
-      basename = ''orderedhash'';
-      meta = {
-        description = ''orderedhash'';
-        homepage = ''http://codeforpeople.com/lib/ruby/orderedhash/'';
-      };
-      name = ''orderedhash-0.0.6'';
-      requiredGems = [  ];
-      sha256 = ''0fryy7f9jbpx33jq5m402yqj01zcg563k9fsxlqbhmq638p4bzd7'';
-    };
-    papertrail_0_9_11 = {
-      basename = ''papertrail'';
-      meta = {
-        description = ''Command-line client for Papertrail hosted log management service.'';
-        homepage = ''http://github.com/papertrail/papertrail-cli'';
-        longDescription = ''Command-line client for Papertrail hosted log management service. Tails and searches app server logs and system syslog. Supports Boolean search and works with grep and pipe output (Unix).'';
-      };
-      name = ''papertrail-0.9.11'';
-      requiredGems = [ g.chronic_0_10_2 ];
-      sha256 = ''15wbj0yik5j853r1cap8s9f08z5slvx83lxaq6bsvh5kb47hbb0i'';
-    };
-    papertrail_cli_0_9_3 = {
-      basename = ''papertrail_cli'';
-      meta = {
-        description = ''Placeholder gem to point to new papertrail gem'';
-        homepage = ''http://github.com/papertrail/papertrail-cli-gem'';
-        longDescription = ''Placeholder gem to point to new papertrail gem.'';
-      };
-      name = ''papertrail-cli-0.9.3'';
-      requiredGems = [ g.papertrail_0_9_11 ];
-      sha256 = ''1914dcfqsmw5rl4xd1zwjrfbgwglyncxm8km06bgxaqn4wnaq5iv'';
-    };
-    parallel_0_7_1 = {
-      basename = ''parallel'';
-      meta = {
-        description = ''Run any kind of code in parallel processes'';
-        homepage = ''https://github.com/grosser/parallel'';
-      };
-      name = ''parallel-0.7.1'';
-      requiredGems = [  ];
-      sha256 = ''1kzz6ydg7r23ks2b7zbpx4vz3h186n19vhgnjcwi7xwd6h2f1fsq'';
-    };
-    parslet_1_5_0 = {
-      basename = ''parslet'';
-      meta = {
-        description = ''Parser construction library with great error reporting in Ruby.'';
-        homepage = ''http://kschiess.github.com/parslet'';
-      };
-      name = ''parslet-1.5.0'';
-      requiredGems = [ g.blankslate_2_1_2_4 ];
-      sha256 = ''0qp1m8n3m6k6g22nn1ivcfkvccq5jmbkw53vvcjw5xssq179l9z3'';
-    };
-    posix_spawn_0_3_9 = {
-      basename = ''posix_spawn'';
-      meta = {
-        description = ''posix_spawnp(2) for ruby'';
-        homepage = ''http://github.com/rtomayko/posix-spawn'';
-        longDescription = ''posix-spawn uses posix_spawnp(2) for faster process spawning'';
-      };
-      name = ''posix-spawn-0.3.9'';
-      requiredGems = [  ];
-      sha256 = ''042i1afggy1sv2jmdjjjhyffas28xp2r1ylj5xfv3hchy3b4civ3'';
-    };
-    pry_0_9_12_6 = {
-      basename = ''pry'';
-      meta = {
-        description = ''An IRB alternative and runtime developer console'';
-        homepage = ''http://pry.github.com'';
-        longDescription = ''An IRB alternative and runtime developer console'';
-      };
-      name = ''pry-0.9.12.6'';
-      requiredGems = [ g.coderay_1_1_0 g.slop_3_6_0 g.method_source_0_8_2 ];
-      sha256 = ''0wmgamn83m1zb1fbqc22hiszjf2a2xij5jd95w2gvm5x6l5p61q1'';
-    };
-    pusher_client_0_6_0 = {
-      basename = ''pusher_client'';
-      meta = {
-        description = ''Client for consuming WebSockets from http://pusher.com'';
-        homepage = ''http://github.com/pusher/pusher-ruby-client'';
-        longDescription = ''Client for consuming WebSockets from http://pusher.com'';
-      };
-      name = ''pusher-client-0.6.0'';
-      requiredGems = [ g.websocket_1_2_1 g.json_1_8_1 ];
-      sha256 = ''0n7l630qg6wgzak45b6gfjg9a0fmpbrs7mwchqqbja9mjs95r8qy'';
-    };
-    pygments_rb_0_6_0 = {
-      basename = ''pygments_rb'';
-      meta = {
-        description = ''pygments wrapper for ruby'';
-        homepage = ''https://github.com/tmm1/pygments.rb'';
-        longDescription = ''pygments.rb exposes the pygments syntax highlighter to Ruby'';
-      };
-      name = ''pygments.rb-0.6.0'';
-      requiredGems = [ g.yajl_ruby_1_1_0 g.posix_spawn_0_3_9 ];
-      sha256 = ''0jszj99cirbkxaqllbgnp9718v32xhvg08rfldvr10gy8i7bhy2s'';
-    };
-    rabbitmq_manager_0_1_0 = {
-      basename = ''rabbitmq_manager'';
-      meta = {
-        description = ''Ruby wrapper for RabbitMQ management HTTP API'';
-        homepage = ''https://github.com/carlhoerberg/rabbitmq_manager'';
-        longDescription = ''Ruby wrapper for RabbitMQ management HTTP API'';
-      };
-      name = ''rabbitmq_manager-0.1.0'';
-      requiredGems = [ g.faraday_0_9_0 g.faraday_middleware_0_9_1 ];
-      sha256 = ''0364ljnk9y13b7lj0i2mks62g6c9ywv4py4v17p6fzrfx693mmbc'';
-    };
-    rack_1_5_2 = {
-      basename = ''rack'';
-      meta = {
-        description = ''a modular Ruby webserver interface'';
-        homepage = ''http://rack.github.com/'';
-        longDescription = ''Rack provides a minimal, modular and adaptable interface for developing
-web applications in Ruby.  By wrapping HTTP requests and responses in
-the simplest way possible, it unifies and distills the API for web
-servers, web frameworks, and software in between (the so-called
-middleware) into a single method call.
-
-Also see http://rack.github.com/.
-'';
-      };
-      name = ''rack-1.5.2'';
-      requiredGems = [  ];
-      sha256 = ''19szfw76cscrzjldvw30jp3461zl00w4xvw1x9lsmyp86h1g0jp6'';
-    };
-    rack_protection_1_5_3 = {
-      basename = ''rack_protection'';
-      meta = {
-        description = ''You should use protection!'';
-        homepage = ''http://github.com/rkh/rack-protection'';
-        longDescription = ''You should use protection!'';
-      };
-      name = ''rack-protection-1.5.3'';
-      requiredGems = [ g.rack_1_5_2 ];
-      sha256 = ''0cvb21zz7p9wy23wdav63z5qzfn4nialik22yqp6gihkgfqqrh5r'';
-    };
-    rack_test_0_6_2 = {
-      basename = ''rack_test'';
-      meta = {
-        description = ''Simple testing API built on Rack'';
-        homepage = ''http://github.com/brynary/rack-test'';
-        longDescription = ''Rack::Test is a small, simple testing API for Rack apps. It can be used on its
-own or as a reusable starting point for Web frameworks and testing libraries
-to build on. Most of its initial functionality is an extraction of Merb 1.0's
-request helpers feature.'';
-      };
-      name = ''rack-test-0.6.2'';
-      requiredGems = [ g.rack_1_5_2 ];
-      sha256 = ''01mk715ab5qnqf6va8k3hjsvsmplrfqpz6g58qw4m3l8mim0p4ky'';
-    };
-    rails_4_1_8 = {
-      basename = ''rails'';
-      meta = {
-        description = ''Full-stack web application framework.'';
-        homepage = ''http://www.rubyonrails.org'';
-        longDescription = ''Ruby on Rails is a full-stack web framework optimized for programmer happiness and sustainable productivity. It encourages beautiful code by favoring convention over configuration.'';
-      };
-      name = ''rails-4.1.8'';
-      requiredGems = [ g.activesupport_4_1_8 g.actionpack_4_1_8 g.actionview_4_1_8 g.activemodel_4_1_8 g.activerecord_4_1_8 g.actionmailer_4_1_8 g.railties_4_1_8 g.bundler_1_7_9 g.sprockets_rails_2_2_2 ];
-      sha256 = ''17ar4gvnvkcw233cn77x4ps3q6ln3i5kpbqwfa2hbi6s61na9x10'';
-    };
-    railties_4_1_8 = {
-      basename = ''railties'';
-      meta = {
-        description = ''Tools for creating, working with, and running Rails applications.'';
-        homepage = ''http://www.rubyonrails.org'';
-        longDescription = ''Rails internals: application bootup, plugins, generators, and rake tasks.'';
-      };
-      name = ''railties-4.1.8'';
-      requiredGems = [ g.activesupport_4_1_8 g.actionpack_4_1_8 g.rake_10_4_2 g.thor_0_19_1 ];
-      sha256 = ''171h23zr4135qynz74n61zly2pr0pzvspdi48dwxvc9xrzgzhznm'';
-    };
-    rake_0_9_2_2 = {
-      basename = ''rake'';
-      meta = {
-        description = ''Ruby based make-like utility.'';
-        homepage = ''http://rake.rubyforge.org'';
-        longDescription = ''Rake is a Make-like program implemented in Ruby. Tasks and dependencies arespecified in standard Ruby syntax.'';
-      };
-      name = ''rake-0.9.2.2'';
-      requiredGems = [  ];
-      sha256 = ''19n4qp5gzbcqy9ajh56kgwqv9p9w2hnczhyvaqz0nlvk9diyng6q'';
-    };
-    rake_10_4_2 = {
-      basename = ''rake'';
-      meta = {
-        description = ''Rake is a Make-like program implemented in Ruby'';
-        homepage = ''https://github.com/ruby/rake'';
-        longDescription = ''Rake is a Make-like program implemented in Ruby. Tasks and dependencies are
-specified in standard Ruby syntax.
-
-Rake has the following features:
-
-* Rakefiles (rake's version of Makefiles) are completely defined in
-  standard Ruby syntax.  No XML files to edit.  No quirky Makefile
-  syntax to worry about (is that a tab or a space?)
-
-* Users can specify tasks with prerequisites.
-
-* Rake supports rule patterns to synthesize implicit tasks.
-
-* Flexible FileLists that act like arrays but know about manipulating
-  file names and paths.
-
-* A library of prepackaged tasks to make building rakefiles easier. For example,
-  tasks for building tarballs and publishing to FTP or SSH sites.  (Formerly
-  tasks for building RDoc and Gems were included in rake but they're now
-  available in RDoc and RubyGems respectively.)
-
-* Supports parallel execution of tasks.'';
-      };
-      name = ''rake-10.4.2'';
-      requiredGems = [  ];
-      sha256 = ''1rn03rqlf1iv6n87a78hkda2yqparhhaivfjpizblmxvlw2hk5r8'';
-    };
-    rb_fsevent_0_9_4 = {
-      basename = ''rb_fsevent'';
-      meta = {
-        description = ''Very simple &amp; usable FSEvents API'';
-        homepage = ''http://rubygems.org/gems/rb-fsevent'';
-        longDescription = ''FSEvents API with Signals catching (without RubyCocoa)'';
-      };
-      name = ''rb-fsevent-0.9.4'';
-      requiredGems = [  ];
-      sha256 = ''12if5xsik64kihxf5awsyavlp595y47g9qz77vfp2zvkxgglaka7'';
-    };
-    rb_inotify_0_9_5 = {
-      basename = ''rb_inotify'';
-      meta = {
-        description = ''A Ruby wrapper for Linux's inotify, using FFI'';
-        homepage = ''http://github.com/nex3/rb-inotify'';
-        longDescription = ''A Ruby wrapper for Linux's inotify, using FFI'';
-      };
-      name = ''rb-inotify-0.9.5'';
-      requiredGems = [ g.ffi_1_9_6 ];
-      sha256 = ''0kddx2ia0qylw3r52nhg83irkaclvrncgy2m1ywpbhlhsz1rymb9'';
-    };
-    rdiscount_2_1_7_1 = {
-      basename = ''rdiscount'';
-      meta = {
-        description = ''Fast Implementation of Gruber's Markdown in C'';
-        homepage = ''http://dafoster.net/projects/rdiscount/'';
-      };
-      name = ''rdiscount-2.1.7.1'';
-      requiredGems = [  ];
-      sha256 = ''1g70vsgv7mdwcyk9rxja7wm4qqap67prqwkj335c460vlzs6pqii'';
-    };
-    rdoc_4_2_0 = {
-      basename = ''rdoc'';
-      meta = {
-        description = ''RDoc produces HTML and command-line documentation for Ruby projects'';
-        homepage = ''http://docs.seattlerb.org/rdoc'';
-        longDescription = ''RDoc produces HTML and command-line documentation for Ruby projects.  RDoc
-includes the +rdoc+ and +ri+ tools for generating and displaying documentation
-from the command-line.'';
-      };
-      name = ''rdoc-4.2.0'';
-      requiredGems = [ g.json_1_8_1 ];
-      sha256 = ''1k4hfa26r06ib1sxcig67arphy0a07cywcpsl37v57d6hhsgw6rr'';
-    };
-    redcarpet_3_2_2 = {
-      basename = ''redcarpet'';
-      meta = {
-        description = ''Markdown that smells nice'';
-        homepage = ''http://github.com/vmg/redcarpet'';
-        longDescription = ''A fast, safe and extensible Markdown to (X)HTML parser'';
-      };
-      name = ''redcarpet-3.2.2'';
-      requiredGems = [  ];
-      sha256 = ''1yf93kxnyk8dy3cdzq1lbdv8f47svns0k042w81kn8ilj1w88zhg'';
-    };
-    redis_3_2_0 = {
-      basename = ''redis'';
-      meta = {
-        description = ''A Ruby client library for Redis'';
-        homepage = ''https://github.com/redis/redis-rb'';
-        longDescription = ''    A Ruby client that tries to match Redis' API one-to-one, while still
-    providing an idiomatic interface. It features thread-safety,
-    client-side sharding, pipelining, and an obsession for performance.
-'';
-      };
-      name = ''redis-3.2.0'';
-      requiredGems = [  ];
-      sha256 = ''10h6a0dsh7yk1x6q6g75z5dlpbn8qg8z3wk9ymwqm3zv0r3himh6'';
-    };
-    remote_syslog_1_6_14 = {
-      basename = ''remote_syslog'';
-      meta = {
-        description = ''Monitor plain text log file(s) for new entries and send to remote syslog collector'';
-        homepage = ''http://github.com/papertrail/remote_syslog'';
-        longDescription = ''Lightweight daemon to tail one or more log files and transmit UDP syslog messages to a remote syslog host (centralized log aggregation). Generates UDP packets itself instead of depending on a system syslog daemon, so it doesn't affect system-wide logging configuration.'';
-      };
-      name = ''remote_syslog-1.6.14'';
-      requiredGems = [ g.servolux_0_10_0 g.file_tail_1_1_0 g.eventmachine_1_0_3 g.eventmachine_tail_0_6_4 g.syslog_protocol_0_9_2 g.em_resolv_replace_1_1_3 ];
-      sha256 = ''1f2yjyqhbdc4vlx52zli1b33f6yn8qc1kd4n0dpv27zswj9qfdkr'';
-    };
-    rest_client_1_6_7 = {
-      basename = ''rest_client'';
-      meta = {
-        description = ''Simple HTTP and REST client for Ruby, inspired by microframework syntax for specifying actions.'';
-        homepage = ''http://github.com/archiloque/rest-client'';
-        longDescription = ''A simple HTTP and REST client for Ruby, inspired by the Sinatra microframework style of specifying actions: get, put, post, delete.'';
-      };
-      name = ''rest-client-1.6.7'';
-      requiredGems = [ g.mime_types_2_4_3 ];
-      sha256 = ''0nn7zalgidz2yj0iqh3xvzh626krm2al79dfiij19jdhp0rk8853'';
-    };
-    riemann_dash_0_2_9 = {
-      basename = ''riemann_dash'';
-      meta = {
-        description = ''HTTP dashboard for the distributed event system Riemann.'';
-        homepage = ''https://github.com/aphyr/riemann-dash'';
-        longDescription = ''HTTP dashboard for the distributed event system Riemann.'';
-      };
-      name = ''riemann-dash-0.2.9'';
-      requiredGems = [ g.erubis_2_7_0 g.sinatra_1_4_5 g.sass_3_4_9 g.webrick_1_3_1 g.multi_json_1_3_6 ];
-      sha256 = ''0ws5wmjbv8w9lcr3i2mdinj2qm91p6c85k6c067i67cf0p90jxq3'';
-    };
-    right_aws_3_1_0 = {
-      basename = ''right_aws'';
-      meta = {
-        description = ''The RightScale AWS gems have been designed to provide a robust, fast, and secure interface to Amazon EC2, EBS, S3, SQS, SDB, and CloudFront.'';
-        longDescription = ''== DESCRIPTION:
-
-The RightScale AWS gems have been designed to provide a robust, fast, and secure interface to Amazon EC2, EBS, S3, SQS, SDB, and CloudFront.
-These gems have been used in production by RightScale since late 2006 and are being maintained to track enhancements made by Amazon.
-The RightScale AWS gems comprise:
-
-- RightAws::Ec2 -- interface to Amazon EC2 (Elastic Compute Cloud) and the
-  associated EBS (Elastic Block Store)
-- RightAws::S3 and RightAws::S3Interface -- interface to Amazon S3 (Simple Storage Service)
-- RightAws::Sqs and RightAws::SqsInterface -- interface to first-generation Amazon SQS (Simple Queue Service) (API version 2007-05-01)
-- RightAws::SqsGen2 and RightAws::SqsGen2Interface -- interface to second-generation Amazon SQS (Simple Queue Service) (API version 2008-01-01)
-- RightAws::SdbInterface and RightAws::ActiveSdb -- interface to Amazon SDB (SimpleDB)
-- RightAws::AcfInterface -- interface to Amazon CloudFront, a content distribution service
-
-== FEATURES:
-
-- Full programmmatic access to EC2, EBS, S3, SQS, SDB, and CloudFront.
-- Complete error handling: all operations check for errors and report complete
-  error information by raising an AwsError.
-- Persistent HTTP connections with robust network-level retry layer using
-  RightHttpConnection).  This includes socket timeouts and retries.
-- Robust HTTP-level retry layer.  Certain (user-adjustable) HTTP errors returned
-  by Amazon's services are classified as temporary errors.
-  These errors are automaticallly retried using exponentially increasing intervals.
-  The number of retries is user-configurable.
-- Fast REXML-based parsing of responses (as fast as a pure Ruby solution allows).
-- Uses libxml (if available) for faster response parsing.
-- Support for large S3 list operations.  Buckets and key subfolders containing
-  many (&gt; 1000) keys are listed in entirety.  Operations based on list (like
-  bucket clear) work on arbitrary numbers of keys.
-- Support for streaming GETs from S3, and streaming PUTs to S3 if the data source is a file.
-- Support for single-threaded usage, multithreaded usage, as well as usage with multiple
-  AWS accounts.
-- Support for both first- and second-generation SQS (API versions 2007-05-01
-  and 2008-01-01).  These versions of SQS are not compatible.
-- Support for signature versions 0 and 1 on SQS, SDB, and EC2.
-- Interoperability with any cloud running Eucalyptus (http://eucalyptus.cs.ucsb.edu)
-- Test suite (requires AWS account to do "live" testing).
-'';
-      };
-      name = ''right_aws-3.1.0'';
-      requiredGems = [ g.right_http_connection_1_5_0 ];
-      sha256 = ''1a3l5vyvq078nq976rzkrd6fbj522sbgrxpdq3p9z373h0awha09'';
-    };
-    right_http_connection_1_5_0 = {
-      basename = ''right_http_connection'';
-      meta = {
-        description = ''RightScale's robust HTTP/S connection module'';
-        homepage = ''http://rightscale.rubyforge.org/'';
-        longDescription = ''Rightscale::HttpConnection is a robust HTTP/S library.  It implements a retry
-algorithm for low-level network errors.
-
-== FEATURES:
-
-- provides put/get streaming
-- does configurable retries on connect and read timeouts, DNS failures, etc.
-- HTTPS certificate checking
-'';
-      };
-      name = ''right_http_connection-1.5.0'';
-      requiredGems = [  ];
-      sha256 = ''0shd8v24aqxdvim1gdqzwxpanjhfgkhdaw0m0lzz7sybkb02j8qf'';
-    };
-    rjb_1_5_1 = {
-      basename = ''rjb'';
-      meta = {
-        description = ''Ruby Java bridge'';
-        homepage = ''http://rjb.rubyforge.org/'';
-        longDescription = ''RJB is a bridge program that connect between Ruby and Java with Java Native Interface.
-'';
-      };
-      name = ''rjb-1.5.1'';
-      requiredGems = [  ];
-      sha256 = ''1mfmx80r00ka5zn4qa3bnwsvapsnn4g0xr13g1kf95f2fgymy0yv'';
-    };
-    rjb_1_5_2 = {
-      basename = ''rjb'';
-      meta = {
-        description = ''Ruby Java bridge'';
-        homepage = ''http://rjb.rubyforge.org/'';
-        longDescription = ''RJB is a bridge program that connect between Ruby and Java with Java Native Interface.
-'';
-      };
-      name = ''rjb-1.5.2'';
-      requiredGems = [  ];
-      sha256 = ''1adg5bxdb7f95cw3mazj596d9zn2laz7l0wygcabkzrxbkbfif3r'';
-    };
-    rkelly_remix_0_0_6 = {
-      basename = ''rkelly_remix'';
-      meta = {
-        description = ''RKelly Remix is a fork of the RKelly[https://github.com/tenderlove/rkelly] JavaScript parser.'';
-        homepage = ''https://github.com/nene/rkelly-remix'';
-        longDescription = ''RKelly Remix is a fork of the
-RKelly[https://github.com/tenderlove/rkelly] JavaScript parser.'';
-      };
-      name = ''rkelly-remix-0.0.6'';
-      requiredGems = [  ];
-      sha256 = ''1ihsns5v8nx96gvj7sqw5m8d6dsnmpfzpd07y860bldjhkjsxp1z'';
-    };
-    rmail_1_0_0 = {
-      basename = ''rmail'';
-      meta = {
-        description = ''A MIME mail parsing and generation library.'';
-        homepage = ''http://www.rfc20.org/rubymail'';
-        longDescription = ''RMail is a lightweight mail library containing various utility classes and modules that allow ruby scripts to parse, modify, and generate MIME mail messages.'';
-      };
-      name = ''rmail-1.0.0'';
-      requiredGems = [  ];
-      sha256 = ''0nsg7yda1gdwa96j4hlrp2s0m06vrhcc4zy5mbq7gxmlmwf9yixp'';
-    };
-    rspec_2_14_1 = {
-      basename = ''rspec'';
-      meta = {
-        description = ''rspec-2.14.1'';
-        homepage = ''http://github.com/rspec'';
-        longDescription = ''BDD for Ruby'';
-      };
-      name = ''rspec-2.14.1'';
-      requiredGems = [ g.rspec_core_2_14_8 g.rspec_expectations_2_14_5 g.rspec_mocks_2_14_6 ];
-      sha256 = ''134y4wzk1prninb5a0bhxgm30kqfzl8dg06af4js5ylnhv2wd7sg'';
-    };
-    rspec_core_2_14_5 = {
-      basename = ''rspec_core'';
-      meta = {
-        description = ''rspec-core-2.14.5'';
-        homepage = ''http://github.com/rspec/rspec-core'';
-        longDescription = ''BDD for Ruby. RSpec runner and example groups.'';
-      };
-      name = ''rspec-core-2.14.5'';
-      requiredGems = [  ];
-      sha256 = ''18zk2y5agzj4ps16hh1jlcqmyj0bmlcr24bl0m8gyhwf0gk1xmcr'';
-    };
-    rspec_core_2_14_8 = {
-      basename = ''rspec_core'';
-      meta = {
-        description = ''rspec-core-2.14.8'';
-        homepage = ''http://github.com/rspec/rspec-core'';
-        longDescription = ''BDD for Ruby. RSpec runner and example groups.'';
-      };
-      name = ''rspec-core-2.14.8'';
-      requiredGems = [  ];
-      sha256 = ''0psjy5kdlz3ph39br0m01w65i1ikagnqlg39f8p65jh5q7dz8hwc'';
-    };
-    rspec_expectations_2_14_3 = {
-      basename = ''rspec_expectations'';
-      meta = {
-        description = ''rspec-expectations-2.14.3'';
-        homepage = ''http://github.com/rspec/rspec-expectations'';
-        longDescription = ''rspec expectations (should[_not] and matchers)'';
-      };
-      name = ''rspec-expectations-2.14.3'';
-      requiredGems = [ g.diff_lcs_1_2_5 ];
-      sha256 = ''0gv5sqizmw0hdj1gl57mynp5i27kj4i0gpksrwwg9gazciq898n2'';
-    };
-    rspec_expectations_2_14_5 = {
-      basename = ''rspec_expectations'';
-      meta = {
-        description = ''rspec-expectations-2.14.5'';
-        homepage = ''http://github.com/rspec/rspec-expectations'';
-        longDescription = ''rspec expectations (should[_not] and matchers)'';
-      };
-      name = ''rspec-expectations-2.14.5'';
-      requiredGems = [ g.diff_lcs_1_2_5 ];
-      sha256 = ''1ni8kw8kjv76jvwjzi4jba00k3qzj9f8wd94vm6inz0jz3gwjqf9'';
-    };
-    rspec_mocks_2_14_3 = {
-      basename = ''rspec_mocks'';
-      meta = {
-        description = ''rspec-mocks-2.14.3'';
-        homepage = ''http://github.com/rspec/rspec-mocks'';
-        longDescription = ''RSpec's 'test double' framework, with support for stubbing and mocking'';
-      };
-      name = ''rspec-mocks-2.14.3'';
-      requiredGems = [  ];
-      sha256 = ''1xfhjisvpmb212jhb3k4r1ji3rrlv509mphcf345ij5b75gaybzr'';
-    };
-    rspec_mocks_2_14_6 = {
-      basename = ''rspec_mocks'';
-      meta = {
-        description = ''rspec-mocks-2.14.6'';
-        homepage = ''http://github.com/rspec/rspec-mocks'';
-        longDescription = ''RSpec's 'test double' framework, with support for stubbing and mocking'';
-      };
-      name = ''rspec-mocks-2.14.6'';
-      requiredGems = [  ];
-      sha256 = ''1fwsmijd6w6cmqyh4ky2nq89jrpzh56hzmndx9wgkmdgfhfakv30'';
-    };
-    rubyzip_0_9_9 = {
-      basename = ''rubyzip'';
-      meta = {
-        description = ''rubyzip is a ruby module for reading and writing zip files'';
-        homepage = ''http://github.com/aussiegeek/rubyzip'';
-      };
-      name = ''rubyzip-0.9.9'';
-      requiredGems = [  ];
-      sha256 = ''1khf6d903agnwd8965f5f8b353rzmfvygxp53z1199rqzw8h46q2'';
-    };
-    rubyzip_1_1_6 = {
-      basename = ''rubyzip'';
-      meta = {
-        description = ''rubyzip is a ruby module for reading and writing zip files'';
-        homepage = ''http://github.com/rubyzip/rubyzip'';
-      };
-      name = ''rubyzip-1.1.6'';
-      requiredGems = [  ];
-      sha256 = ''17ha7kmgcnhnxyfp9wgyrd2synp17v9g8j1pknhfd2v9x5g475m9'';
-    };
-    safe_yaml_1_0_4 = {
-      basename = ''safe_yaml'';
-      meta = {
-        description = ''SameYAML provides an alternative implementation of YAML.load suitable for accepting user input in Ruby applications.'';
-        homepage = ''https://github.com/dtao/safe_yaml'';
-        longDescription = ''Parse YAML safely'';
-      };
-      name = ''safe_yaml-1.0.4'';
-      requiredGems = [  ];
-      sha256 = ''1hly915584hyi9q9vgd968x2nsi5yag9jyf5kq60lwzi5scr7094'';
-    };
-    sass_3_4_9 = {
-      basename = ''sass'';
-      meta = {
-        description = ''A powerful but elegant CSS compiler that makes CSS fun again.'';
-        homepage = ''http://sass-lang.com/'';
-        longDescription = ''      Sass makes CSS fun again. Sass is an extension of CSS3, adding
-      nested rules, variables, mixins, selector inheritance, and more.
-      It's translated to well-formatted, standard CSS using the
-      command line tool or a web-framework plugin.
-'';
-      };
-      name = ''sass-3.4.9'';
-      requiredGems = [  ];
-      sha256 = ''0vg81irnrlgsgf1xl2cvh7nx7qbq6wbi8qq7avqzzfh9bx8mp7ff'';
-    };
-    selenium_webdriver_2_44_0 = {
-      basename = ''selenium_webdriver'';
-      meta = {
-        description = ''The next generation developer focused tool for automated testing of webapps'';
-        homepage = ''http://selenium.googlecode.com'';
-        longDescription = ''WebDriver is a tool for writing automated tests of websites. It aims to mimic the behaviour of a real user, and as such interacts with the HTML of the application.'';
-      };
-      name = ''selenium-webdriver-2.44.0'';
-      requiredGems = [ g.multi_json_1_10_1 g.rubyzip_1_1_6 g.childprocess_0_5_5 g.websocket_1_2_1 ];
-      sha256 = ''06bm0c5cdskbcv27j60ff4cgxa5jwdvw2ys2sca9ycvyd4a5s44w'';
-    };
-    servolux_0_10_0 = {
-      basename = ''servolux'';
-      meta = {
-        description = ''* {Homepage}[http://rubygems.'';
-        homepage = ''http://gemcutter.org/gems/servolux'';
-        longDescription = ''Serv-O-Lux is a collection of Ruby classes that are useful for daemon and
-process management, and for writing your own Ruby services. The code is well
-documented and tested. It works with Ruby and JRuby supporting both 1.8 and 1.9
-interpreters.'';
-      };
-      name = ''servolux-0.10.0'';
-      requiredGems = [  ];
-      sha256 = ''08jdrk35f61ab8b48ffm85p9lgfpbnzq3n4is00gqhpcrrq72dhs'';
-    };
-    sinatra_1_3_2 = {
-      basename = ''sinatra'';
-      meta = {
-        description = ''Classy web-development dressed in a DSL'';
-        homepage = ''http://www.sinatrarb.com/'';
-        longDescription = ''Sinatra is a DSL for quickly creating web applications in Ruby with minimal effort.'';
-      };
-      name = ''sinatra-1.3.2'';
-      requiredGems = [ g.rack_1_5_2 g.rack_protection_1_5_3 g.tilt_1_4_1 ];
-      sha256 = ''05blf915zpiwyz7agcn9rwdmddwxz0z4l3gd4qlqmrgd2vkw4sxc'';
-    };
-    sinatra_1_4_5 = {
-      basename = ''sinatra'';
-      meta = {
-        description = ''Classy web-development dressed in a DSL'';
-        homepage = ''http://www.sinatrarb.com/'';
-        longDescription = ''Sinatra is a DSL for quickly creating web applications in Ruby with minimal effort.'';
-      };
-      name = ''sinatra-1.4.5'';
-      requiredGems = [ g.rack_1_5_2 g.tilt_1_4_1 g.rack_protection_1_5_3 ];
-      sha256 = ''0qyna3wzlnvsz69d21lxcm3ixq7db08mi08l0a88011qi4qq701s'';
-    };
-    slop_3_6_0 = {
-      basename = ''slop'';
-      meta = {
-        description = ''Simple Lightweight Option Parsing'';
-        homepage = ''http://github.com/leejarvis/slop'';
-        longDescription = ''A simple DSL for gathering options and parsing the command line'';
-      };
-      name = ''slop-3.6.0'';
-      requiredGems = [  ];
-      sha256 = ''00w8g3j7k7kl8ri2cf1m58ckxk8rn350gp4chfscmgv6pq1spk3n'';
-    };
-    sprockets_2_12_3 = {
-      basename = ''sprockets'';
-      meta = {
-        description = ''Rack-based asset packaging system'';
-        homepage = ''http://getsprockets.org/'';
-        longDescription = ''Sprockets is a Rack-based asset packaging system that concatenates and serves JavaScript, CoffeeScript, CSS, LESS, Sass, and SCSS.'';
-      };
-      name = ''sprockets-2.12.3'';
-      requiredGems = [ g.hike_1_2_3 g.multi_json_1_10_1 g.rack_1_5_2 g.tilt_1_4_1 ];
-      sha256 = ''1bn2drr8bc2af359dkfraq0nm0p1pib634kvhwn5lvj3r4vllnn2'';
-    };
-    sprockets_rails_2_2_2 = {
-      basename = ''sprockets_rails'';
-      meta = {
-        description = ''Sprockets Rails integration'';
-        homepage = ''https://github.com/rails/sprockets-rails'';
-      };
-      name = ''sprockets-rails-2.2.2'';
-      requiredGems = [ g.sprockets_2_12_3 g.actionpack_4_1_8 g.activesupport_4_1_8 ];
-      sha256 = ''192d4vfl1gjz6phli6sqk98364x6v4jkpl5imajvimsinvgyv81b'';
-    };
-    syslog_protocol_0_9_2 = {
-      basename = ''syslog_protocol'';
-      meta = {
-        description = ''Syslog protocol parser and generator'';
-        homepage = ''https://github.com/eric/syslog_protocol'';
-        longDescription = ''Syslog protocol parser and generator'';
-      };
-      name = ''syslog_protocol-0.9.2'';
-      requiredGems = [  ];
-      sha256 = ''1yb2cmbyj0zmb2yhkgnmghcngrkhcxs4g1svcmgfj90l2hs23nmc'';
-    };
-    systemu_2_6_4 = {
-      basename = ''systemu'';
-      meta = {
-        description = ''systemu'';
-        homepage = ''https://github.com/ahoward/systemu'';
-        longDescription = ''universal capture of stdout and stderr and handling of child process pid for windows, *nix, etc.'';
-      };
-      name = ''systemu-2.6.4'';
-      requiredGems = [  ];
-      sha256 = ''16k94azpsy1r958r6ysk4ksnpp54rqmh5hyamad9kwc3lk83i32z'';
-    };
-    taskjuggler_3_5_0 = {
-      basename = ''taskjuggler'';
-      meta = {
-        description = ''A Project Management Software'';
-        homepage = ''http://www.taskjuggler.org'';
-        longDescription = ''TaskJuggler is a modern and powerful, Free and Open Source Software project
-management tool. Its new approach to project planing and tracking is more
-flexible and superior to the commonly used Gantt chart editing tools.
-
-TaskJuggler is project management software for serious project managers. It
-covers the complete spectrum of project management tasks from the first idea
-to the completion of the project. It assists you during project scoping,
-resource assignment, cost and revenue planing, risk and communication
-management.
-'';
-      };
-      name = ''taskjuggler-3.5.0'';
-      requiredGems = [ g.mail_2_6_3 g.term_ansicolor_1_3_0 ];
-      sha256 = ''0r84rlc7a6w7p9nc9mgycbs5h0hq0kzscjq7zj3296xyf0afiwj2'';
-    };
-    term_ansicolor_1_3_0 = {
-      basename = ''term_ansicolor'';
-      meta = {
-        description = ''Ruby library that colors strings using ANSI escape sequences'';
-        homepage = ''http://flori.github.com/term-ansicolor'';
-        longDescription = ''This library uses ANSI escape sequences to control the attributes of terminal output'';
-      };
-      name = ''term-ansicolor-1.3.0'';
-      requiredGems = [ g.tins_1_3_3 ];
-      sha256 = ''1a2gw7gmpmx57sdpyhjwl0zn4bqp7jyjz7aslpvvphd075layp4b'';
-    };
-    terminal_notifier_1_6_2 = {
-      basename = ''terminal_notifier'';
-      meta = {
-        description = ''Send User Notifications on Mac OS X 10.8 or higher.'';
-        homepage = ''https://github.com/alloy/terminal-notifier'';
-      };
-      name = ''terminal-notifier-1.6.2'';
-      requiredGems = [  ];
-      sha256 = ''0v0bqpmnyivn0dqqkbzq0xcmas2l1msbwlpp2iclkninkmcqg9sf'';
-    };
-    test_kitchen_1_2_1 = {
-      basename = ''test_kitchen'';
-      meta = {
-        description = ''Test Kitchen is an integration tool for developing and testing infrastructure code and software on isolated target platforms.'';
-        homepage = ''http://kitchen.ci'';
-        longDescription = ''Test Kitchen is an integration tool for developing and testing infrastructure code and software on isolated target platforms.'';
-      };
-      name = ''test-kitchen-1.2.1'';
-      requiredGems = [ g.mixlib_shellout_1_6_1 g.net_scp_1_2_1 g.net_ssh_2_9_1 g.safe_yaml_1_0_4 g.thor_0_19_1 ];
-      sha256 = ''1pmjzvmcvlfhk6l8p665dvx7qw6kypcbhwshkq999wjhbwmjq1nk'';
-    };
-    text_1_3_0 = {
-      basename = ''text'';
-      meta = {
-        description = ''A collection of text algorithms'';
-        homepage = ''http://github.com/threedaymonk/text'';
-        longDescription = ''A collection of text algorithms: Levenshtein, Soundex, Metaphone, Double Metaphone, Porter Stemming'';
-      };
-      name = ''text-1.3.0'';
-      requiredGems = [  ];
-      sha256 = ''1bfn0rm2a7gpsxplx3dii3a7q16hi7idsqp54fh92b3j9sqgidj7'';
-    };
-    thin_1_6_3 = {
-      basename = ''thin'';
-      meta = {
-        description = ''A thin and fast web server'';
-        homepage = ''http://code.macournoyer.com/thin/'';
-        longDescription = ''A thin and fast web server'';
-      };
-      name = ''thin-1.6.3'';
-      requiredGems = [ g.rack_1_5_2 g.eventmachine_1_0_3 g.daemons_1_1_9 ];
-      sha256 = ''1m56aygh5rh8ncp3s2gnn8ghn5ibkk0bg6s3clmh1vzaasw2lj4i'';
-    };
-    thor_0_19_1 = {
-      basename = ''thor'';
-      meta = {
-        description = ''Thor is a toolkit for building powerful command-line interfaces.'';
-        homepage = ''http://whatisthor.com/'';
-        longDescription = ''Thor is a toolkit for building powerful command-line interfaces.'';
-      };
-      name = ''thor-0.19.1'';
-      requiredGems = [  ];
-      sha256 = ''08p5gx18yrbnwc6xc0mxvsfaxzgy2y9i78xq7ds0qmdm67q39y4z'';
-    };
-    thread_safe_0_3_4 = {
-      basename = ''thread_safe'';
-      meta = {
-        description = ''A collection of data structures and utilities to make thread-safe programming in Ruby easier'';
-        homepage = ''https://github.com/headius/thread_safe'';
-        longDescription = ''Thread-safe collections and utilities for Ruby'';
-      };
-      name = ''thread_safe-0.3.4'';
-      requiredGems = [  ];
-      sha256 = ''1cil2zcdzqkyr8zrwhlg7gywryg36j4mxlxw0h0x0j0wjym5nc8n'';
-    };
-    tilt_1_4_1 = {
-      basename = ''tilt'';
-      meta = {
-        description = ''Generic interface to multiple Ruby template engines'';
-        homepage = ''http://github.com/rtomayko/tilt/'';
-        longDescription = ''Generic interface to multiple Ruby template engines'';
-      };
-      name = ''tilt-1.4.1'';
-      requiredGems = [  ];
-      sha256 = ''00sr3yy7sbqaq7cb2d2kpycajxqf1b1wr1yy33z4bnzmqii0b0ir'';
-    };
-    timers_4_0_1 = {
-      basename = ''timers'';
-      meta = {
-        description = ''Schedule procs to run after a certain time, or at periodic intervals, using any API that accepts a timeout'';
-        homepage = ''https://github.com/celluloid/timers'';
-        longDescription = ''Pure Ruby one-shot and periodic timers'';
-      };
-      name = ''timers-4.0.1'';
-      requiredGems = [ g.hitimes_1_2_2 ];
-      sha256 = ''03ahv07wn1f2g3c5843q7sf03a81518lq5624s9f49kbrswa2p7l'';
-    };
-    tins_1_3_3 = {
-      basename = ''tins'';
-      meta = {
-        description = ''Useful stuff.'';
-        homepage = ''http://flori.github.com/tins'';
-        longDescription = ''All the stuff that isn't good/big enough for a real library.'';
-      };
-      name = ''tins-1.3.3'';
-      requiredGems = [  ];
-      sha256 = ''14jnsg15wakdk1ljh2iv9yvzk8nb7gpzd2zw4yvjikmffqjyqvna'';
-    };
-    tmuxinator_0_6_9 = {
-      basename = ''tmuxinator'';
-      meta = {
-        description = ''Create and manage complex tmux sessions easily.'';
-        homepage = ''https://github.com/aziz/tmuxinator'';
-        longDescription = ''Create and manage complex tmux sessions easily.'';
-      };
-      name = ''tmuxinator-0.6.9'';
-      requiredGems = [ g.thor_0_19_1 g.erubis_2_7_0 ];
-      sha256 = ''0q0ld82dznjsan7ciblfsxz59brcc16fwmvr9n3c7vdcndj8rd27'';
-    };
-    toml_0_1_2 = {
-      basename = ''toml'';
-      meta = {
-        description = ''Parse your TOML.'';
-        homepage = ''http://github.com/jm/toml'';
-        longDescription = ''Parse your TOML, seriously.'';
-      };
-      name = ''toml-0.1.2'';
-      requiredGems = [ g.parslet_1_5_0 ];
-      sha256 = ''1wnvi1g8id1sg6776fvzf98lhfbscchgiy1fp5pvd58a8ds2fq9v'';
-    };
-    travis_1_7_4 = {
-      basename = ''travis'';
-      meta = {
-        description = ''Travis CI client'';
-        homepage = ''https://github.com/travis-ci/travis.rb'';
-        longDescription = ''CLI and Ruby client library for Travis CI'';
-      };
-      name = ''travis-1.7.4'';
-      requiredGems = [ g.faraday_0_9_0 g.faraday_middleware_0_9_1 g.highline_1_6_21 g.backports_3_6_4 g.gh_0_13_2 g.launchy_2_4_3 g.pry_0_9_12_6 g.typhoeus_0_6_9 g.pusher_client_0_6_0 g.addressable_2_3_6 ];
-      sha256 = ''12c1ghki28qs45j1aw5ihcblh5s45wkzayfv6zjpj282z3q0ygnz'';
-    };
-    trollop_2_0 = {
-      basename = ''trollop'';
-      meta = {
-        description = ''Trollop is a commandline option parser for Ruby that just gets out of your way.'';
-        homepage = ''http://trollop.rubyforge.org'';
-        longDescription = ''Trollop is a commandline option parser for Ruby that just
-gets out of your way. One line of code per option is all you need to write.
-For that, you get a nice automatically-generated help page, robust option
-parsing, command subcompletion, and sensible defaults for everything you don't
-specify.'';
-      };
-      name = ''trollop-2.0'';
-      requiredGems = [  ];
-      sha256 = ''0iz5k7ax7a5jm9x6p81k6f4mgp48wxxb0j55ypnwxnznih8fsghz'';
-    };
-    typhoeus_0_6_9 = {
-      basename = ''typhoeus'';
-      meta = {
-        description = ''Parallel HTTP library on top of libcurl multi.'';
-        homepage = ''https://github.com/typhoeus/typhoeus'';
-        longDescription = ''Like a modern code version of the mythical beast with 100 serpent heads, Typhoeus runs HTTP requests in parallel while cleanly encapsulating handling logic.'';
-      };
-      name = ''typhoeus-0.6.9'';
-      requiredGems = [ g.ethon_0_7_1 ];
-      sha256 = ''1j4l2zwx821hzsfqskcq47xpk6b7yzl30mhzmdrfrsrhsigmayar'';
-    };
-    tzinfo_1_2_2 = {
-      basename = ''tzinfo'';
-      meta = {
-        description = ''Daylight savings aware timezone library'';
-        homepage = ''http://tzinfo.github.io'';
-        longDescription = ''TZInfo provides daylight savings aware transformations between times in different time zones.'';
-      };
-      name = ''tzinfo-1.2.2'';
-      requiredGems = [ g.thread_safe_0_3_4 ];
-      sha256 = ''1c01p3kg6xvy1cgjnzdfq45fggbwish8krd0h864jvbpybyx7cgx'';
-    };
-    uglifier_2_6_0 = {
-      basename = ''uglifier'';
-      meta = {
-        description = ''Ruby wrapper for UglifyJS JavaScript compressor'';
-        homepage = ''http://github.com/lautis/uglifier'';
-        longDescription = ''Uglifier minifies JavaScript files by wrapping UglifyJS to be accessible in Ruby'';
-      };
-      name = ''uglifier-2.6.0'';
-      requiredGems = [ g.execjs_2_2_2 g.json_1_8_1 ];
-      sha256 = ''1lih36zfw8bclsbgrh2ai0b923716lv12qzpfd27i3889gfsq2xb'';
-    };
-    unf_0_1_4 = {
-      basename = ''unf'';
-      meta = {
-        description = ''A wrapper library to bring Unicode Normalization Form support to Ruby/JRuby'';
-        homepage = ''https://github.com/knu/ruby-unf'';
-        longDescription = ''This is a wrapper library to bring Unicode Normalization Form support
-to Ruby/JRuby.
-'';
-      };
-      name = ''unf-0.1.4'';
-      requiredGems = [ g.unf_ext_0_0_6 ];
-      sha256 = ''0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9'';
-    };
-    unf_ext_0_0_6 = {
-      basename = ''unf_ext'';
-      meta = {
-        description = ''Unicode Normalization Form support library for CRuby'';
-        homepage = ''https://github.com/knu/ruby-unf_ext'';
-        longDescription = ''Unicode Normalization Form support library for CRuby'';
-      };
-      name = ''unf_ext-0.0.6'';
-      requiredGems = [  ];
-      sha256 = ''07zbmkzcid6pzdqgla3456ipfdka7j1v4hsx1iaa8rbnllqbmkdg'';
-    };
-    uuid_2_3_7 = {
-      basename = ''uuid'';
-      meta = {
-        description = ''UUID generator'';
-        homepage = ''http://github.com/assaf/uuid'';
-        longDescription = ''UUID generator for producing universally unique identifiers based on RFC 4122
-(http://www.ietf.org/rfc/rfc4122.txt).
-'';
-      };
-      name = ''uuid-2.3.7'';
-      requiredGems = [ g.macaddr_1_7_1 ];
-      sha256 = ''04q10an3v40zwjihvdwm23fw6vl39fbkhdiwfw78a51ym9airnlp'';
-    };
-    webrick_1_3_1 = {
-      basename = ''webrick'';
-      meta = {
-        description = ''WEBrick is an HTTP server toolkit that can be configured as an HTTPS server,'';
-        homepage = ''http://github.com/nahi/webrick'';
-      };
-      name = ''webrick-1.3.1'';
-      requiredGems = [  ];
-      sha256 = ''0s42mxihcl2bx0h9q0v2syl70qndydfkl39a06h9il17p895ya8g'';
-    };
-    webrobots_0_1_1 = {
-      basename = ''webrobots'';
-      meta = {
-        description = ''A Ruby library to help write robots.txt compliant web robots'';
-        homepage = ''https://github.com/knu/webrobots'';
-        longDescription = ''This library helps write robots.txt compliant web robots in Ruby.
-'';
-      };
-      name = ''webrobots-0.1.1'';
-      requiredGems = [  ];
-      sha256 = ''1jlnhhpa1mkrgsmihs2qx13z3n6xhswjnlk5a2ypyplw2id5x32n'';
-    };
-    websocket_1_2_1 = {
-      basename = ''websocket'';
-      meta = {
-        description = ''Universal Ruby library to handle WebSocket protocol'';
-        homepage = ''http://github.com/imanel/websocket-ruby'';
-        longDescription = ''Universal Ruby library to handle WebSocket protocol'';
-      };
-      name = ''websocket-1.2.1'';
-      requiredGems = [  ];
-      sha256 = ''17mf28xp6h4gglbn1606jjrhdz9r6kyb2pr603ckadsrx31wh9p6'';
-    };
-    xapian_full_1_2_3 = {
-      basename = ''xapian_full'';
-      meta = {
-        description = ''xapian-core + Ruby xapian-bindings'';
-        longDescription = ''Xapian bindings for Ruby without dependency on system Xapian library'';
-      };
-      name = ''xapian-full-1.2.3'';
-      requiredGems = [  ];
-      sha256 = ''02z0wsir38jsp5d6sqrkgv5prk8s6sdf6g2h718j2374kpnkyrxv'';
-    };
-    xapian_ruby_1_2_17 = {
-      basename = ''xapian_ruby'';
-      meta = {
-        description = ''xapian libraries and ruby bindings'';
-        homepage = ''https://github.com/garaio/xapian-ruby'';
-      };
-      name = ''xapian-ruby-1.2.17'';
-      requiredGems = [  ];
-      sha256 = ''1vhqykr0b877pb8x5n3v4fb4znm92mqhijinss7mvqzfimwfbxfg'';
-    };
-    xml_simple_1_1_2 = {
-      basename = ''xml_simple'';
-      meta = {
-        description = ''A simple API for XML processing.'';
-        homepage = ''https://github.com/maik/xml-simple'';
-      };
-      name = ''xml-simple-1.1.2'';
-      requiredGems = [  ];
-      sha256 = ''0ni8cbkj7l2k5pc4fs2jzp1ymxy4xqa2jc681l4y9iy9chrayddb'';
-    };
-    yajl_ruby_1_1_0 = {
-      basename = ''yajl_ruby'';
-      meta = {
-        description = ''Ruby C bindings to the excellent Yajl JSON stream-based parser library.'';
-        homepage = ''http://github.com/brianmario/yajl-ruby'';
-      };
-      name = ''yajl-ruby-1.1.0'';
-      requiredGems = [  ];
-      sha256 = ''0sj46j47icb12hdhcfh76rnvddyiic5ifqzkh3kla1vcr505kf4m'';
-    };
-    yajl_ruby_1_2_1 = {
-      basename = ''yajl_ruby'';
-      meta = {
-        description = ''Ruby C bindings to the excellent Yajl JSON stream-based parser library.'';
-        homepage = ''http://github.com/brianmario/yajl-ruby'';
-      };
-      name = ''yajl-ruby-1.2.1'';
-      requiredGems = [  ];
-      sha256 = ''0zvvb7i1bl98k3zkdrnx9vasq0rp2cyy5n7p9804dqs4fz9xh9vf'';
-    };
-  };
-}
diff --git a/pkgs/development/interpreters/ruby/libs.nix b/pkgs/development/interpreters/ruby/libs.nix
deleted file mode 100644
index 1b4b7aec2b1..00000000000
--- a/pkgs/development/interpreters/ruby/libs.nix
+++ /dev/null
@@ -1,45 +0,0 @@
-{ stdenv, config, fetchurl, callPackage }:
-
-let
-  inherit (stdenv.lib) fold optional;
-  gemsMergeableFun = { generatedFuns ? [], patchFuns ? [], overrideFuns ? [] }:
-  let
-    generatedAttrs = map (f: f customGems) generatedFuns;
-    generatedGems = map (a: a.gems) generatedAttrs;
-    gem = callPackage ./gem.nix {
-      patches = map (f: callPackage f { inherit gems; }) patchFuns;
-      overrides = map (f: callPackage f { }) overrideFuns;
-    };
-    customGems = stdenv.lib.mapAttrs gem (fold (x: y: x // y) { } generatedGems);
-    gems = fold (x: y: x // y) customGems (map (a: a.aliases) generatedAttrs);
-  in
-  gems // {
-    merge = { generated ? null, patches ? null, overrides ? null }:
-      gemsMergeableFun {
-        generatedFuns = generatedFuns ++ optional (generated != null) generated;
-        patchFuns = patchFuns ++ optional (patches != null) patches;
-        overrideFuns = overrideFuns ++ optional (overrides != null) overrides;
-      };
-  };
-in
-((gemsMergeableFun { }).merge {
-  generated = import ./generated.nix;
-  patches = import ./patches.nix;
-  overrides = import ./overrides.nix;
-}).merge (
-  let
-    localGemDir = (builtins.getEnv "HOME") + "/.nixpkgs/gems/";
-    getLocalGemFun = name:
-      let
-        file = localGemDir + name + ".nix";
-        fallback =
-          if builtins.pathExists file then import (builtins.toPath file)
-          else null;
-      in
-      stdenv.lib.attrByPath [ "gems" name ] fallback config;
-  in
-{
-  generated = getLocalGemFun "generated";
-  patches = getLocalGemFun "patches";
-  overrides = getLocalGemFun "overrides";
-})
diff --git a/pkgs/development/interpreters/ruby/load-ruby-env.nix b/pkgs/development/interpreters/ruby/load-ruby-env.nix
new file mode 100644
index 00000000000..c4356ed5f50
--- /dev/null
+++ b/pkgs/development/interpreters/ruby/load-ruby-env.nix
@@ -0,0 +1,69 @@
+{ ruby, lib, callPackage, gemFixes, fetchurl, fetchgit, buildRubyGem }@defs:
+
+# This function builds a set of gems. You first convert your Gemfile to an attrset
+# called a "gemset", and then use this function to build the gemset.
+#
+# A gemset looks like the following:
+#
+#   {
+#     libv8 = {
+#       version = "3.16.14.7";
+#       src = {
+#         type = "gem";
+#         sha256 = "...";
+#       };
+#     };
+#     therubyracer = {
+#       version = "0.12.1";
+#       dependencies = [ "libv8" ];
+#       src = {
+#         type = "gem";
+#         sha256 = "...";
+#       };
+#     };
+#   }
+#
+# If you use these gems as build inputs, the GEM_PATH will be updated
+# appropriately, and command like `bundle exec` should work out of the box.
+
+{ gemset, ruby ? defs.ruby, fixes ? gemFixes }@args:
+
+let
+  const = x: y: x;
+
+  fetchers.path = attrs: attrs.src.path;
+  fetchers.gem = attrs: fetchurl {
+    url = "${attrs.src.source or "https://rubygems.org"}/downloads/${attrs.name}-${attrs.version}.gem";
+    inherit (attrs.src) sha256;
+  };
+  fetchers.git = attrs: fetchgit {
+    inherit (attrs.src) url rev sha256 fetchSubmodules;
+    leaveDotGit = true;
+  };
+
+  instantiate = (attrs:
+    let
+      defaultAttrs = {
+        name = "${attrs.name}-${attrs.version}";
+        inherit ruby gemPath;
+      };
+      gemPath = map (name: gemset''."${name}") (attrs.dependencies or []);
+      fixedAttrs = attrs // (fixes."${attrs.name}" or (const {})) attrs;
+      withSource = fixedAttrs //
+        (if (lib.isDerivation fixedAttrs.src || builtins.isString fixedAttrs.src)
+           then {}
+           else { src = (fetchers."${fixedAttrs.src.type}" fixedAttrs); });
+
+    in
+      buildRubyGem (withSource // defaultAttrs)
+  );
+
+  gemset' = if builtins.isAttrs gemset then gemset else import gemset;
+
+  gemset'' = lib.flip lib.mapAttrs gemset' (name: attrs:
+    if (lib.isDerivation attrs)
+      then attrs
+      else instantiate (attrs // { inherit name; })
+  );
+
+in gemset''
diff --git a/pkgs/development/interpreters/ruby/overrides.nix b/pkgs/development/interpreters/ruby/overrides.nix
deleted file mode 100644
index 01d73a19d64..00000000000
--- a/pkgs/development/interpreters/ruby/overrides.nix
+++ /dev/null
@@ -1,5 +0,0 @@
-{ xapianBindings }:
-
-{
-  xapian_full = xapianBindings.merge { cfg = { rubySupport = true; }; };
-}
diff --git a/pkgs/development/interpreters/ruby/ruby-1.8.7.nix b/pkgs/development/interpreters/ruby/ruby-1.8.7.nix
index 9f2945dfb76..3c2ea71ecf2 100644
--- a/pkgs/development/interpreters/ruby/ruby-1.8.7.nix
+++ b/pkgs/development/interpreters/ruby/ruby-1.8.7.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchurl, fetchFromGitHub
+{ stdenv, lib, fetchurl, fetchFromGitHub
 , zlib, zlibSupport ? true
 , openssl, opensslSupport ? true
 , gdbm, gdbmSupport ? true
-, ncurses, readline, cursesSupport ? false
+, ncurses, readline, cursesSupport ? true
 , groff, docSupport ? false
 , ruby_1_8_7, autoreconfHook, bison, useRailsExpress ? true
 }:
@@ -75,6 +75,12 @@ stdenv.mkDerivation rec {
 
     envHooks+=(addGemPath)
     EOF
+  '' + lib.optionalString useRailsExpress ''
+    rbConfig=$(find $out/lib/ruby -name rbconfig.rb)
+
+    # Prevent the baseruby from being included in the closure.
+    sed -i '/^  CONFIG\["BASERUBY"\]/d' $rbConfig
+    sed -i "s|'--with-baseruby=${baseruby}/bin/ruby'||" $rbConfig
   '';
 
   meta = {
@@ -88,7 +94,8 @@ stdenv.mkDerivation rec {
     minorVersion = "8";
     teenyVersion = "7";
     patchLevel = "374";
-    libPath = "lib/ruby/${majorVersion}.${minorVersion}";
-    gemPath = "lib/ruby/gems/${majorVersion}.${minorVersion}";
+    rubyEngine = "ruby";
+    libPath = "lib/${rubyEngine}/${majorVersion}.${minorVersion}.${teenyVersion}";
+    gemPath = "lib/${rubyEngine}/gems/${majorVersion}.${minorVersion}.${teenyVersion}";
   };
 }
diff --git a/pkgs/development/interpreters/ruby/ruby-1.9.3.nix b/pkgs/development/interpreters/ruby/ruby-1.9.3.nix
index c812abc70fe..db807ebbd8b 100644
--- a/pkgs/development/interpreters/ruby/ruby-1.9.3.nix
+++ b/pkgs/development/interpreters/ruby/ruby-1.9.3.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchurl, fetchFromGitHub
+{ stdenv, lib, fetchurl, fetchFromGitHub
 , zlib, zlibSupport ? true
 , openssl, opensslSupport ? true
 , gdbm, gdbmSupport ? true
-, ncurses, readline, cursesSupport ? false
+, ncurses, readline, cursesSupport ? true
 , groff, docSupport ? false
 , libyaml, yamlSupport ? true
 , ruby_1_9_3, autoreconfHook, bison, useRailsExpress ? true
@@ -93,6 +93,12 @@ stdenv.mkDerivation rec {
 
     envHooks+=(addGemPath)
     EOF
+  '' + lib.optionalString useRailsExpress ''
+    rbConfig=$(find $out/lib/ruby -name rbconfig.rb)
+
+    # Prevent the baseruby from being included in the closure.
+    sed -i '/^  CONFIG\["BASERUBY"\]/d' $rbConfig
+    sed -i "s|'--with-baseruby=${baseruby}/bin/ruby'||" $rbConfig
   '';
 
   meta = {
@@ -108,7 +114,8 @@ stdenv.mkDerivation rec {
     minorVersion = "9";
     teenyVersion = "3";
     patchLevel = "547";
-    libPath = "lib/ruby/${majorVersion}.${minorVersion}";
-    gemPath = "lib/ruby/gems/${majorVersion}.${minorVersion}";
+    rubyEngine = "ruby";
+    libPath = "lib/${rubyEngine}/${majorVersion}.${minorVersion}.${teenyVersion}";
+    gemPath = "lib/${rubyEngine}/gems/${majorVersion}.${minorVersion}.${teenyVersion}";
   };
 }
diff --git a/pkgs/development/interpreters/ruby/ruby-2.0.0.nix b/pkgs/development/interpreters/ruby/ruby-2.0.0.nix
index ea8fcc327ee..31408b73807 100644
--- a/pkgs/development/interpreters/ruby/ruby-2.0.0.nix
+++ b/pkgs/development/interpreters/ruby/ruby-2.0.0.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchurl, fetchFromGitHub
+{ stdenv, lib, fetchurl, fetchFromGitHub
 , zlib, zlibSupport ? true
 , openssl, opensslSupport ? true
 , gdbm, gdbmSupport ? true
-, ncurses, readline, cursesSupport ? false
+, ncurses, readline, cursesSupport ? true
 , groff, docSupport ? false
 , libyaml, yamlSupport ? true
 , libffi, fiddleSupport ? true
@@ -77,6 +77,12 @@ stdenv.mkDerivation rec {
 
     envHooks+=(addGemPath)
     EOF
+  '' + lib.optionalString useRailsExpress ''
+    rbConfig=$(find $out/lib/ruby -name rbconfig.rb)
+
+    # Prevent the baseruby from being included in the closure.
+    sed -i '/^  CONFIG\["BASERUBY"\]/d' $rbConfig
+    sed -i "s|'--with-baseruby=${baseruby}/bin/ruby'||" $rbConfig
   '';
 
   meta = {
@@ -91,7 +97,8 @@ stdenv.mkDerivation rec {
     minorVersion = "0";
     teenyVersion = "0";
     patchLevel = "481";
-    libPath = "lib/ruby/${majorVersion}.${minorVersion}";
-    gemPath = "lib/ruby/gems/${majorVersion}.${minorVersion}";
+    rubyEngine = "ruby";
+    libPath = "lib/${rubyEngine}/${majorVersion}.${minorVersion}.${teenyVersion}";
+    gemPath = "lib/${rubyEngine}/gems/${majorVersion}.${minorVersion}.${teenyVersion}";
   };
 }
diff --git a/pkgs/development/interpreters/ruby/ruby-2.1.0.nix b/pkgs/development/interpreters/ruby/ruby-2.1.0.nix
index 8467bc4eb38..95ab84eedb8 100644
--- a/pkgs/development/interpreters/ruby/ruby-2.1.0.nix
+++ b/pkgs/development/interpreters/ruby/ruby-2.1.0.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchurl, fetchgit, fetchFromGitHub
+{ stdenv, lib, fetchurl, fetchgit, fetchFromGitHub
 , zlib, zlibSupport ? true
 , openssl, opensslSupport ? true
 , gdbm, gdbmSupport ? true
-, ncurses, readline, cursesSupport ? false
+, ncurses, readline, cursesSupport ? true
 , groff, docSupport ? false
 , libyaml, yamlSupport ? true
 , libffi, fiddleSupport ? true
@@ -92,8 +92,15 @@ stdenv.mkDerivation rec {
 
     envHooks+=(addGemPath)
     EOF
+  '' + lib.optionalString useRailsExpress ''
+    rbConfig=$(find $out/lib/ruby -name rbconfig.rb)
+
+    # Prevent the baseruby from being included in the closure.
+    sed -i '/^  CONFIG\["BASERUBY"\]/d' $rbConfig
+    sed -i "s|'--with-baseruby=${baseruby}/bin/ruby'||" $rbConfig
   '';
 
+
   meta = {
     license = stdenv.lib.licenses.ruby;
     homepage = "http://www.ruby-lang.org/en/";
@@ -106,7 +113,8 @@ stdenv.mkDerivation rec {
     minorVersion = "1";
     teenyVersion = "0";
     patchLevel = "0";
-    libPath = "lib/ruby/${majorVersion}.${minorVersion}";
-    gemPath = "lib/ruby/gems/${majorVersion}.${minorVersion}";
+    rubyEngine = "ruby";
+    libPath = "lib/${rubyEngine}/${majorVersion}.${minorVersion}.${teenyVersion}";
+    gemPath = "lib/${rubyEngine}/gems/${majorVersion}.${minorVersion}.${teenyVersion}";
   };
 }
diff --git a/pkgs/development/interpreters/ruby/ruby-2.1.1.nix b/pkgs/development/interpreters/ruby/ruby-2.1.1.nix
index 6a53c2d93ea..abd09c0f276 100644
--- a/pkgs/development/interpreters/ruby/ruby-2.1.1.nix
+++ b/pkgs/development/interpreters/ruby/ruby-2.1.1.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchurl, fetchgit, fetchFromGitHub
+{ stdenv, lib, fetchurl, fetchgit, fetchFromGitHub
 , zlib, zlibSupport ? true
 , openssl, opensslSupport ? true
 , gdbm, gdbmSupport ? true
-, ncurses, readline, cursesSupport ? false
+, ncurses, readline, cursesSupport ? true
 , groff, docSupport ? false
 , libyaml, yamlSupport ? true
 , libffi, fiddleSupport ? true
@@ -91,6 +91,12 @@ stdenv.mkDerivation rec {
 
     envHooks+=(addGemPath)
     EOF
+  '' + lib.optionalString useRailsExpress ''
+    rbConfig=$(find $out/lib/ruby -name rbconfig.rb)
+
+    # Prevent the baseruby from being included in the closure.
+    sed -i '/^  CONFIG\["BASERUBY"\]/d' $rbConfig
+    sed -i "s|'--with-baseruby=${baseruby}/bin/ruby'||" $rbConfig
   '';
 
   meta = {
@@ -105,7 +111,8 @@ stdenv.mkDerivation rec {
     minorVersion = "1";
     teenyVersion = "1";
     patchLevel = "0";
-    libPath = "lib/ruby/${majorVersion}.${minorVersion}";
-    gemPath = "lib/ruby/gems/${majorVersion}.${minorVersion}";
+    rubyEngine = "ruby";
+    libPath = "lib/${rubyEngine}/${majorVersion}.${minorVersion}.${teenyVersion}";
+    gemPath = "lib/${rubyEngine}/gems/${majorVersion}.${minorVersion}.${teenyVersion}";
   };
 }
diff --git a/pkgs/development/interpreters/ruby/ruby-2.1.2.nix b/pkgs/development/interpreters/ruby/ruby-2.1.2.nix
index fe03b86d86d..8612cd6bd43 100644
--- a/pkgs/development/interpreters/ruby/ruby-2.1.2.nix
+++ b/pkgs/development/interpreters/ruby/ruby-2.1.2.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchurl, fetchgit, fetchFromGitHub
+{ stdenv, lib, fetchurl, fetchgit, fetchFromGitHub
 , zlib, zlibSupport ? true
 , openssl, opensslSupport ? true
 , gdbm, gdbmSupport ? true
-, ncurses, readline, cursesSupport ? false
+, ncurses, readline, cursesSupport ? true
 , groff, docSupport ? false
 , libyaml, yamlSupport ? true
 , libffi, fiddleSupport ? true
@@ -90,6 +90,12 @@ stdenv.mkDerivation rec {
 
     envHooks+=(addGemPath)
     EOF
+  '' + lib.optionalString useRailsExpress ''
+    rbConfig=$(find $out/lib/ruby -name rbconfig.rb)
+
+    # Prevent the baseruby from being included in the closure.
+    sed -i '/^  CONFIG\["BASERUBY"\]/d' $rbConfig
+    sed -i "s|'--with-baseruby=${baseruby}/bin/ruby'||" $rbConfig
   '';
 
   meta = {
@@ -104,7 +110,8 @@ stdenv.mkDerivation rec {
     minorVersion = "1";
     teenyVersion = "2";
     patchLevel = "353";
-    libPath = "lib/ruby/${majorVersion}.${minorVersion}";
-    gemPath = "lib/ruby/gems/${majorVersion}.${minorVersion}";
+    rubyEngine = "ruby";
+    libPath = "lib/${rubyEngine}/${majorVersion}.${minorVersion}.${teenyVersion}";
+    gemPath = "lib/${rubyEngine}/gems/${majorVersion}.${minorVersion}.${teenyVersion}";
   };
 }
diff --git a/pkgs/development/interpreters/ruby/ruby-2.1.3.nix b/pkgs/development/interpreters/ruby/ruby-2.1.3.nix
index 9609a8758f9..1ba97daac04 100644
--- a/pkgs/development/interpreters/ruby/ruby-2.1.3.nix
+++ b/pkgs/development/interpreters/ruby/ruby-2.1.3.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchurl, fetchgit, fetchFromGitHub
+{ stdenv, lib, fetchurl, fetchgit, fetchFromGitHub
 , zlib, zlibSupport ? true
 , openssl, opensslSupport ? true
 , gdbm, gdbmSupport ? true
-, ncurses, readline, cursesSupport ? false
+, ncurses, readline, cursesSupport ? true
 , groff, docSupport ? false
 , libyaml, yamlSupport ? true
 , libffi, fiddleSupport ? true
@@ -94,6 +94,12 @@ stdenv.mkDerivation rec {
 
     envHooks+=(addGemPath)
     EOF
+  '' + lib.optionalString useRailsExpress ''
+    rbConfig=$(find $out/lib/ruby -name rbconfig.rb)
+
+    # Prevent the baseruby from being included in the closure.
+    sed -i '/^  CONFIG\["BASERUBY"\]/d' $rbConfig
+    sed -i "s|'--with-baseruby=${baseruby}/bin/ruby'||" $rbConfig
   '';
 
   meta = {
@@ -108,7 +114,8 @@ stdenv.mkDerivation rec {
     minorVersion = "1";
     teenyVersion = "3";
     patchLevel = "0";
-    libPath = "lib/ruby/${majorVersion}.${minorVersion}";
-    gemPath = "lib/ruby/gems/${majorVersion}.${minorVersion}";
+    rubyEngine = "ruby";
+    libPath = "lib/${rubyEngine}/${majorVersion}.${minorVersion}.${teenyVersion}";
+    gemPath = "lib/${rubyEngine}/gems/${majorVersion}.${minorVersion}.${teenyVersion}";
   };
 }
diff --git a/pkgs/development/interpreters/ruby/ruby-2.2.0.nix b/pkgs/development/interpreters/ruby/ruby-2.2.0.nix
index 908d8a566b6..0fb01a5a535 100644
--- a/pkgs/development/interpreters/ruby/ruby-2.2.0.nix
+++ b/pkgs/development/interpreters/ruby/ruby-2.2.0.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchurl, fetchgit, fetchFromGitHub
+{ stdenv, lib, fetchurl, fetchgit, fetchFromGitHub
 , zlib, zlibSupport ? true
 , openssl, opensslSupport ? true
 , gdbm, gdbmSupport ? true
-, ncurses, readline, cursesSupport ? false
+, ncurses, readline, cursesSupport ? true
 , groff, docSupport ? false
 , libyaml, yamlSupport ? true
 , libffi, fiddleSupport ? true
@@ -85,6 +85,12 @@ stdenv.mkDerivation rec {
 
     envHooks+=(addGemPath)
     EOF
+  '' + lib.optionalString useRailsExpress ''
+    rbConfig=$(find $out/lib/ruby -name rbconfig.rb)
+
+    # Prevent the baseruby from being included in the closure.
+    sed -i '/^  CONFIG\["BASERUBY"\]/d' $rbConfig
+    sed -i "s|'--with-baseruby=${baseruby}/bin/ruby'||" $rbConfig
   '';
 
   meta = {
@@ -99,7 +105,8 @@ stdenv.mkDerivation rec {
     minorVersion = "2";
     teenyVersion = "0";
     patchLevel = "0";
-    libPath = "lib/ruby/${majorVersion}.${minorVersion}";
-    gemPath = "lib/ruby/gems/${majorVersion}.${minorVersion}";
+    rubyEngine = "ruby";
+    libPath = "lib/${rubyEngine}/${majorVersion}.${minorVersion}.${teenyVersion}";
+    gemPath = "lib/${rubyEngine}/gems/${majorVersion}.${minorVersion}.${teenyVersion}";
   };
 }
diff --git a/pkgs/development/interpreters/ruby/rubygems.nix b/pkgs/development/interpreters/ruby/rubygems.nix
index 3b66464ce22..773a752ffef 100644
--- a/pkgs/development/interpreters/ruby/rubygems.nix
+++ b/pkgs/development/interpreters/ruby/rubygems.nix
@@ -1,10 +1,11 @@
 args : with args; 
-rec {
 
-  version = "1.8.25";
+rec {
+  name = "rubygems-" + version;
+  version = "2.4.1";
   src = fetchurl {
     url = "http://production.cf.rubygems.org/rubygems/${name}.tgz";
-    sha256 = "1j0wiy829nsfrpdzr9xzs39jf1lga3f5b7773vxqfs3lz3fli4v4";
+    sha256 = "0cpr6cx3h74ykpb0cp4p4xg7a8j0bhz3sk271jq69l4mm4zy4h4f";
   };
 
   buildInputs = [ruby makeWrapper];
@@ -23,7 +24,6 @@ rec {
   /* doConfigure should be specified separately */
   phaseNames = ["doPatch" "doInstall"];
       
-  name = "rubygems-" + version;
   meta = {
     description = "Ruby gems package collection";
     longDescription = ''