summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichael Fellinger <michael.fellinger@iohk.io>2019-05-18 17:45:38 +0000
committerAlyssa Ross <hi@alyssa.is>2019-09-03 19:44:49 +0000
commit1f49035aca52303abb2e09976baf36f297eb68a6 (patch)
tree32b26f3234324bc1789347857258e44e879da795
parent92665777fd403eb62fe77d6d6f2196d61ce959de (diff)
downloadnixpkgs-1f49035aca52303abb2e09976baf36f297eb68a6.tar
nixpkgs-1f49035aca52303abb2e09976baf36f297eb68a6.tar.gz
nixpkgs-1f49035aca52303abb2e09976baf36f297eb68a6.tar.bz2
nixpkgs-1f49035aca52303abb2e09976baf36f297eb68a6.tar.lz
nixpkgs-1f49035aca52303abb2e09976baf36f297eb68a6.tar.xz
nixpkgs-1f49035aca52303abb2e09976baf36f297eb68a6.tar.zst
nixpkgs-1f49035aca52303abb2e09976baf36f297eb68a6.zip
ruby.withPackages: init
Co-authored-by: Alyssa Ross <hi@alyssa.is>
-rw-r--r--doc/languages-frameworks/ruby.section.md365
-rwxr-xr-xmaintainers/scripts/update-ruby-packages13
-rw-r--r--pkgs/development/interpreters/ruby/default.nix8
-rw-r--r--pkgs/development/ruby-modules/gem-config/default.nix107
-rw-r--r--pkgs/development/ruby-modules/gem/gem-post-build.rb2
-rw-r--r--pkgs/development/ruby-modules/with-packages/Gemfile159
-rw-r--r--pkgs/development/ruby-modules/with-packages/default.nix75
-rw-r--r--pkgs/development/ruby-modules/with-packages/require_exceptions.nix84
-rw-r--r--pkgs/development/ruby-modules/with-packages/test.nix48
-rwxr-xr-xpkgs/development/ruby-modules/with-packages/test.rb76
-rw-r--r--pkgs/top-level/all-packages.nix5
-rw-r--r--pkgs/top-level/ruby-packages.nix2666
12 files changed, 3581 insertions, 27 deletions
diff --git a/doc/languages-frameworks/ruby.section.md b/doc/languages-frameworks/ruby.section.md
new file mode 100644
index 00000000000..e4c4ffce043
--- /dev/null
+++ b/doc/languages-frameworks/ruby.section.md
@@ -0,0 +1,365 @@
+---
+title: Ruby
+author: Michael Fellinger
+date: 2019-05-23
+---
+
+# Ruby
+
+## User Guide
+
+### Using Ruby
+
+#### Overview
+
+Several versions of Ruby interpreters are available on Nix, as well as over 250 gems and many applications written in Ruby.
+The attribute `ruby` refers to the default Ruby interpreter, which is currently
+MRI 2.5. It's also possible to refer to specific versions, e.g. `ruby_2_6`, `jruby`, or `mruby`.
+
+In the nixpkgs tree, Ruby packages can be found throughout, depending on what
+they do, and are called from the main package set. Ruby gems, however are
+separate sets, and there's one default set for each interpreter (currently MRI
+only).
+
+There are two main approaches for using Ruby with gems.
+One is to use a specifically locked `Gemfile` for an application that has very strict dependencies.
+The other is to depend on the common gems, which we'll explain further down, and
+rely on them being updated regularly.
+
+The interpreters have common attributes, namely `gems`, and `withPackages`. So
+you can refer to `ruby.gems.nokogiri`, or `ruby_2_5.gems.nokogiri` to get the
+Nokogiri gem already compiled and ready to use.
+
+Since not all gems have executables like `nokogiri`, it's usually more
+convenient to use the `withPackages` function like this:
+`ruby.withPackages (p: with p; [ nokogiri ])`. This will also make sure that the
+Ruby in your environment will be able to find the gem and it can be used in your
+Ruby code (for example via `ruby` or `irb` executables) via `require "nokogiri"`
+as usual.
+
+#### Temporary Ruby environment with `nix-shell`
+
+Rather than having a single Ruby environment shared by all Ruby
+development projects on a system, Nix allows you to create separate
+environments per project.  `nix-shell` gives you the possibility to
+temporarily load another environment akin to a combined `chruby` or
+`rvm` and `bundle exec`.
+
+There are two methods for loading a shell with Ruby packages. The first and
+recommended method is to create an environment with `ruby.withPackages` and load
+that.
+
+```shell
+nix-shell -p "ruby.withPackages (ps: with ps; [ nokogiri pry ])"
+```
+
+The other method, which is not recommended, is to create an environment and list
+all the packages directly.
+
+```shell
+nix-shell -p ruby.gems.nokogiri ruby.gems.pry
+```
+
+Again, it's possible to launch the interpreter from the shell. The Ruby
+interpreter has the attribute `gems` which contains all Ruby gems for that
+specific interpreter.
+
+##### Load environment from `.nix` expression
+
+As explained in the Nix manual, `nix-shell` can also load an expression from a
+`.nix` file. Say we want to have Ruby 2.5, `nokogori`, and `pry`. Consider a
+`shell.nix` file with:
+
+```nix
+with import <nixpkgs> {};
+ruby.withPackages (ps: with ps; [ nokogiri pry ])
+```
+
+What's happening here?
+
+1. We begin with importing the Nix Packages collections. `import <nixpkgs>`
+   imports the `<nixpkgs>` function, `{}` calls it and the `with` statement
+   brings all attributes of `nixpkgs` in the local scope. These attributes form
+   the main package set.
+2. Then we create a Ruby environment with the `withPackages` function.
+3. The `withPackages` function expects us to provide a function as an argument
+   that takes the set of all ruby gems and returns a list of packages to include
+   in the environment. Here, we select the packages `nokogiri` and `pry` from
+   the package set.
+
+##### Execute command with `--run`
+
+A convenient flag for `nix-shell` is `--run`. It executes a command in the
+`nix-shell`. We can e.g. directly open a `pry` REPL:
+
+```shell
+nix-shell -p "ruby.withPackages (ps: with ps; [ nokogiri pry ])" --run "pry"
+```
+
+Or immediately require `nokogiri` in pry:
+
+```shell
+nix-shell -p "ruby.withPackages (ps: with ps; [ nokogiri pry ])" --run "pry -rnokogiri"
+```
+
+Or run a script using this environment:
+
+```shell
+nix-shell -p "ruby.withPackages (ps: with ps; [ nokogiri pry ])" --run "ruby example.rb"
+```
+
+##### Using `nix-shell` as shebang
+
+In fact, for the last case, there is a more convenient method. You can add a
+[shebang](https://en.wikipedia.org/wiki/Shebang_(Unix)) to your script
+specifying which dependencies `nix-shell` needs. With the following shebang, you
+can just execute `./example.rb`, and it will run with all dependencies.
+
+```ruby
+#! /usr/bin/env nix-shell
+#! nix-shell -i ruby -p "ruby.withPackages (ps: with ps; [ nokogiri rest-client ])"
+
+require 'nokogiri'
+require 'rest-client'
+
+body = RestClient.get('http://example.com').body
+puts Nokogiri::HTML(body).at('h1').text
+```
+
+### Developing with Ruby
+
+#### Using an existing Gemfile
+
+In most cases, you'll already have a `Gemfile.lock` listing all your dependencies.
+This can be used to generate a `gemset.nix` which is used to fetch the gems and
+combine them into a single environment.
+The reason why you need to have a separate file for this, is that Nix requires
+you to have a checksum for each input to your build.
+Since the `Gemfile.lock` that `bundler` generates doesn't provide us with
+checksums, we have to first download each gem, calculate its SHA256, and store
+it in this separate file.
+
+So the steps from having just a `Gemfile` to a `gemset.nix` are:
+
+```shell
+bundle lock
+bundix
+```
+
+If you already have a `Gemfile.lock`, you can simply run `bundix` and it will
+work the same.
+
+To update the gems in your `Gemfile.lock`, you may use the `bundix -l` flag,
+which will create a new `Gemfile.lock` in case the `Gemfile` has a more recent
+time of modification.
+
+Once the `gemset.nix` is generated, it can be used in a
+`bundlerEnv` derivation. Here is an example you could use for your `shell.nix`:
+
+```nix
+# ...
+let
+  gems = bundlerEnv {
+    name = "gems-for-some-project";
+    gemdir = ./.;
+  };
+in mkShell { buildInputs = [ gems gems.wrappedRuby ]; }
+```
+
+With this file in your directory, you can run `nix-shell` to build and use the gems.
+The important parts here are `bundlerEnv` and `wrappedRuby`.
+
+The `bundlerEnv` is a wrapper over all the gems in your gemset. This means that
+all the `/lib` and `/bin` directories will be available, and the executables of
+all gems (even of indirect dependencies) will end up in your `$PATH`.
+The `wrappedRuby` provides you with all executables that come with Ruby itself,
+but wrapped so they can easily find the gems in your gemset.
+
+One common issue that you might have is that you have Ruby 2.6, but also
+`bundler` in your gemset. That leads to a conflict for `/bin/bundle` and
+`/bin/bundler`. You can resolve this by wrapping either your Ruby or your gems
+in a `lowPrio` call. So in order to give the `bundler` from your gemset
+priority, it would be used like this:
+
+```nix
+# ...
+mkShell { buildInputs = [ gems (lowPrio gems.wrappedRuby) ]; }
+```
+
+
+#### Gem-specific configurations and workarounds
+
+In some cases, especially if the gem has native extensions, you might need to
+modify the way the gem is built.
+
+This is done via a common configuration file that includes all of the
+workarounds for each gem.
+
+This file lives at `/pkgs/development/ruby-modules/gem-config/default.nix`,
+since it already contains a lot of entries, it should be pretty easy to add the
+modifications you need for your needs.
+
+In the meanwhile, or if the modification is for a private gem, you can also add
+the configuration to only your own environment.
+
+Two places that allow this modification are the `ruby` derivation, or `bundlerEnv`.
+
+Here's the `ruby` one:
+
+```nix
+{ pg_version ? "10", pkgs ? import <nixpkgs> { } }:
+let
+  myRuby = pkgs.ruby.override {
+    defaultGemConfig = pkgs.defaultGemConfig // {
+      pg = attrs: {
+        buildFlags =
+        [ "--with-pg-config=${pkgs."postgresql_${pg_version}"}/bin/pg_config" ];
+      };
+    };
+  };
+in myRuby.withPackages (ps: with ps; [ pg ])
+```
+
+And an example with `bundlerEnv`:
+
+```nix
+{ pg_version ? "10", pkgs ? import <nixpkgs> { } }:
+let
+  gems = pkgs.bundlerEnv {
+    name = "gems-for-some-project";
+    gemdir = ./.;
+    gemConfig = pkgs.defaultGemConfig // {
+      pg = attrs: {
+        buildFlags =
+        [ "--with-pg-config=${pkgs."postgresql_${pg_version}"}/bin/pg_config" ];
+      };
+    };
+  };
+in mkShell { buildInputs = [ gems gems.wrappedRuby ]; }
+```
+
+And finally via overlays:
+
+```nix
+{ pg_version ? "10" }:
+let
+  pkgs = import <nixpkgs> {
+    overlays = [
+      (self: super: {
+        defaultGemConfig = super.defaultGemConfig // {
+          pg = attrs: {
+            buildFlags = [
+              "--with-pg-config=${
+                pkgs."postgresql_${pg_version}"
+              }/bin/pg_config"
+            ];
+          };
+        };
+      })
+    ];
+  };
+in pkgs.ruby.withPackages (ps: with ps; [ pg ])
+```
+
+Then we can get whichever postgresql version we desire and the `pg` gem will
+always reference it correctly:
+
+```shell
+$ nix-shell --argstr pg_version 9_4 --run 'ruby -rpg -e "puts PG.library_version"'
+90421
+
+$ nix-shell --run 'ruby -rpg -e "puts PG.library_version"'
+100007
+```
+
+Of course for this use-case one could also use overlays since the configuration
+for `pg` depends on the `postgresql` alias, but for demonstration purposes this
+has to suffice.
+
+#### Adding a gem to the default gemset
+
+Now that you know how to get a working Ruby environment with Nix, it's time to
+go forward and start actually developing with Ruby.
+We will first have a look at how Ruby gems are packaged on Nix. Then, we will
+look at how you can use development mode with your code.
+
+All gems in the standard set are automatically generated from a single
+`Gemfile`. The dependency resolution is done with `bundler` and makes it more
+likely that all gems are compatible to each other.
+
+In order to add a new gem to nixpkgs, you can put it into the
+`/pkgs/development/ruby-modules/with-packages/Gemfile` and run
+`./maintainers/scripts/update-ruby-packages`.
+
+To test that it works, you can then try using the gem with:
+
+```shell
+NIX_PATH=nixpkgs=$PWD nix-shell -p "ruby.withPackages (ps: with ps; [ name-of-your-gem ])"
+```
+
+#### Packaging applications
+
+A common task is to add a ruby executable to nixpkgs, popular examples would be
+`chef`, `jekyll`, or `sass`. A good way to do that is to use the `bundlerApp`
+function, that allows you to make a package that only exposes the listed
+executables, otherwise the package may cause conflicts through common paths like
+`bin/rake` or `bin/bundler` that aren't meant to be used.
+
+The absolute easiest way to do that is to write a
+`Gemfile` along these lines:
+
+```ruby
+source 'https://rubygems.org' do
+  gem 'mdl'
+end
+```
+
+If you want to package a specific version, you can use the standard Gemfile
+syntax for that, e.g. `gem 'mdl', '0.5.0'`, but if you want the latest stable
+version anyway, it's easier to update by simply running the `bundle lock` and
+`bundix` steps again.
+
+Now you can also also make a `default.nix` that looks like this:
+
+```nix
+{ lib, bundlerApp }:
+
+bundlerApp {
+  pname = "mdl";
+  gemdir = ./.;
+  exes = [ "mdl" ];
+}
+```
+
+All that's left to do is to generate the corresponding `Gemfile.lock` and
+`gemset.nix` as described above in the `Using an existing Gemfile` section.
+
+##### Packaging executables that require wrapping
+
+Sometimes your app will depend on other executables at runtime, and tries to
+find it through the `PATH` environment variable.
+
+In this case, you can provide a `postBuild` hook to `bundlerApp` that wraps the
+gem in another script that prefixes the `PATH`.
+
+Of course you could also make a custom `gemConfig` if you know exactly how to
+patch it, but it's usually much easier to maintain with a simple wrapper so the
+patch doesn't have to be adjusted for each version.
+
+Here's another example:
+
+```nix
+{ lib, bundlerApp, makeWrapper, git, gnutar, gzip }:
+
+bundlerApp {
+  pname = "r10k";
+  gemdir = ./.;
+  exes = [ "r10k" ];
+
+  buildInputs = [ makeWrapper ];
+
+  postBuild = ''
+    wrapProgram $out/bin/r10k --prefix PATH : ${lib.makeBinPath [ git gnutar gzip ]}
+  '';
+}
+```
diff --git a/maintainers/scripts/update-ruby-packages b/maintainers/scripts/update-ruby-packages
new file mode 100755
index 00000000000..fef6b75ded0
--- /dev/null
+++ b/maintainers/scripts/update-ruby-packages
@@ -0,0 +1,13 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p bundler bundix
+
+set -euf -o pipefail
+
+(
+  cd pkgs/development/ruby-modules/with-packages
+  rm -f gemset.nix Gemfile.lock
+  bundle lock
+  bundix
+  mv gemset.nix ../../../top-level/ruby-packages.nix
+  rm -f Gemfile.lock
+)
diff --git a/pkgs/development/interpreters/ruby/default.nix b/pkgs/development/interpreters/ruby/default.nix
index 02e76d5e127..cfe76a2caa1 100644
--- a/pkgs/development/interpreters/ruby/default.nix
+++ b/pkgs/development/interpreters/ruby/default.nix
@@ -3,6 +3,7 @@
 , zlib, openssl, gdbm, ncurses, readline, groff, libyaml, libffi, autoreconfHook, bison
 , autoconf, libiconv, libobjc, libunwind, Foundation
 , buildEnv, bundler, bundix
+, makeWrapper, buildRubyGem, defaultGemConfig
 } @ args:
 
 let
@@ -44,6 +45,7 @@ let
       , autoreconfHook, bison, autoconf
       , buildEnv, bundler, bundix
       , libiconv, libobjc, libunwind, Foundation
+      , makeWrapper, buildRubyGem, defaultGemConfig
       }:
       stdenv.mkDerivation rec {
         pname = "ruby";
@@ -195,6 +197,12 @@ let
             ruby = self;
           };
 
+          inherit (import ../../ruby-modules/with-packages {
+            inherit lib stdenv makeWrapper buildRubyGem buildEnv;
+            gemConfig = defaultGemConfig;
+            ruby = self;
+          }) withPackages gems;
+
           # deprecated 2016-09-21
           majorVersion = ver.major;
           minorVersion = ver.minor;
diff --git a/pkgs/development/ruby-modules/gem-config/default.nix b/pkgs/development/ruby-modules/gem-config/default.nix
index 4e9bd0538a9..7f6ca505fc1 100644
--- a/pkgs/development/ruby-modules/gem-config/default.nix
+++ b/pkgs/development/ruby-modules/gem-config/default.nix
@@ -19,13 +19,13 @@
 
 { lib, fetchurl, writeScript, ruby, kerberos, libxml2, libxslt, python, stdenv, which
 , libiconv, postgresql, v8_3_16_14, clang, sqlite, zlib, imagemagick
-, pkgconfig , ncurses, xapian_1_2_22, gpgme, utillinux, fetchpatch, tzdata, icu, libffi
+, pkgconfig , ncurses, xapian, gpgme, utillinux, fetchpatch, tzdata, icu, libffi
 , cmake, libssh2, openssl, mysql, darwin, git, perl, pcre, gecode_3, curl
 , msgpack, qt59, libsodium, snappy, libossp_uuid, lxc, libpcap, xorg, gtk2, buildRubyGem
 , cairo, re2, rake, gobject-introspection, gdk-pixbuf, zeromq, czmq, graphicsmagick, libcxx
 , file, libvirt, glib, vips, taglib, libopus, linux-pam, libidn, protobuf, fribidi, harfbuzz
-, bison, flex, pango, python3, patchelf
-, libselinux ? null, libsepol ? null
+, bison, flex, pango, python3, patchelf, binutils, freetds, wrapGAppsHook, atk
+, bundler, libsass, libselinux ? null, libsepol ? null
 }@args:
 
 let
@@ -42,8 +42,9 @@ in
 
 {
   atk = attrs: {
-    nativeBuildInputs = [ pkgconfig ];
-    buildInputs = [ gtk2 pcre rake ];
+    dependencies = attrs.dependencies ++ [ "gobject-introspection" ];
+    nativeBuildInputs = [ rake bundler pkgconfig ];
+    propagatedBuildInputs = [ gobject-introspection wrapGAppsHook atk ];
   };
 
   bundler = attrs:
@@ -85,6 +86,38 @@ in
     buildInputs = [ protobuf ];
   };
 
+  cocoapods-acknowledgements = attrs: {
+    dependencies = attrs.dependencies ++ [ "cocoapods" ];
+  };
+
+  cocoapods-deploy = attrs: {
+    dependencies = [ "cocoapods" ];
+  };
+
+  cocoapods-disable-podfile-validations = attrs: {
+    dependencies = [ "cocoapods" ];
+  };
+
+  cocoapods-generate = attrs: {
+    dependencies = attrs.dependencies ++ [ "cocoapods" ];
+  };
+
+  cocoapods-git_url_rewriter = attrs: {
+    dependencies = [ "cocoapods" ];
+  };
+
+  cocoapods-keys = attrs: {
+    dependencies = attrs.dependencies ++ [ "cocoapods" ];
+  };
+
+  cocoapods-open = attrs: {
+    dependencies = [ "cocoapods" ];
+  };
+
+  cocoapods-try-release-fix = attrs: {
+    dependencies = [ "cocoapods" ];
+  };
+
   curb = attrs: {
     buildInputs = [ curl ];
   };
@@ -113,12 +146,13 @@ in
     '';
   };
 
-  fog-dnsimple = attrs: {
-    postInstall = ''
-      cd $(cat $out/nix-support/gem-meta/install-path)
-      rm {$out/bin,bin,../../bin}/{setup,console}
-    '';
-  };
+  fog-dnsimple = attrs:
+    lib.optionalAttrs (lib.versionOlder attrs.version "1.0.1") {
+      postInstall = ''
+        cd $(cat $out/nix-support/gem-meta/install-path)
+        rm {$out/bin,bin,../../bin}/{setup,console}
+      '';
+    };
 
   redis-rack = attrs: {
     dontBuild = false;
@@ -158,8 +192,8 @@ in
   };
 
   gdk_pixbuf2 = attrs: {
-    nativeBuildInputs = [ pkgconfig ];
-    buildInputs = [ rake gdk-pixbuf ];
+    nativeBuildInputs = [ pkgconfig bundler rake ];
+    propagatedBuildInputs = [ gobject-introspection wrapGAppsHook gdk-pixbuf ];
   };
 
   gpgme = attrs: {
@@ -179,8 +213,14 @@ in
   };
 
   gtk2 = attrs: {
-    nativeBuildInputs = [ pkgconfig ] ++ lib.optionals stdenv.isLinux [ utillinux libselinux libsepol ];
-    buildInputs = [
+    nativeBuildInputs = [
+      binutils pkgconfig
+    ] ++ lib.optionals stdenv.isLinux [
+      utillinux libselinux libsepol
+    ];
+    propagatedBuildInputs = [
+      atk
+      gdk-pixbuf
       fribidi
       gobject-introspection
       gtk2
@@ -194,8 +234,8 @@ in
   };
 
   gobject-introspection = attrs: {
-    nativeBuildInputs = [ pkgconfig ];
-    buildInputs = [ gobject-introspection gtk2 pcre ];
+    nativeBuildInputs = [ pkgconfig pcre ];
+    propagatedBuildInputs = [ gobject-introspection wrapGAppsHook glib ];
   };
 
   grpc = attrs: {
@@ -239,6 +279,10 @@ in
     buildFlags = [ "--with-system-v8=true" ];
   };
 
+  execjs = attrs: {
+    propagatedBuildInputs = [ v8 ];
+  };
+
   libxml-ruby = attrs: {
     buildFlags = [
       "--with-xml2-lib=${libxml2.out}/lib"
@@ -333,16 +377,15 @@ in
   };
 
   pango = attrs: {
-    nativeBuildInputs = [ pkgconfig ];
-    buildInputs = [
+    nativeBuildInputs = [
+      pkgconfig
       fribidi
-      gobject-introspection
-      gtk2
       harfbuzz
       pcre
       xorg.libpthreadstubs
       xorg.libXdmcp
     ];
+    propagatedBuildInputs = [ gobject-introspection wrapGAppsHook gtk2 ];
   };
 
   patron = attrs: {
@@ -380,7 +423,12 @@ in
         "
       '';
     } else {
-      buildInputs = [ libsodium ];
+      dontBuild = false;
+      postPatch = ''
+        substituteInPlace lib/rbnacl/sodium.rb \
+          --replace 'ffi_lib ["sodium"' \
+                    'ffi_lib ["${libsodium}/lib/libsodium${stdenv.hostPlatform.extensions.sharedLibrary}"'
+      '';
     };
 
   re2 = attrs: {
@@ -439,6 +487,12 @@ in
 
   sassc = attrs: {
     nativeBuildInputs = [ rake ];
+    dontBuild = false;
+    SASS_LIBSASS_PATH = "${libsass}";
+    postPatch = ''
+      substituteInPlace lib/sassc/native.rb \
+        --replace 'gem_root = spec.gem_dir' 'gem_root = File.join(__dir__, "../../")'
+    '';
   };
 
   scrypt = attrs:
@@ -471,7 +525,7 @@ in
   sup = attrs: {
     dontBuild = false;
     # prevent sup from trying to dynamically install `xapian-ruby`.
-    nativeBuildInputs = [ rake ];
+    nativeBuildInputs = [ bundler rake ];
     postPatch = ''
       cp ${./mkrf_conf_xapian.rb} ext/mkrf_conf_xapian.rb
 
@@ -506,6 +560,7 @@ in
 
   tiny_tds = attrs: {
     nativeBuildInputs = [ pkgconfig openssl ];
+    buildInputs = [ freetds ];
   };
 
   therubyracer = attrs: {
@@ -541,13 +596,13 @@ in
   xapian-ruby = attrs: {
     # use the system xapian
     dontBuild = false;
-    nativeBuildInputs = [ rake pkgconfig ];
-    buildInputs = [ xapian_1_2_22 zlib ];
+    nativeBuildInputs = [ rake pkgconfig bundler ];
+    buildInputs = [ xapian zlib ];
     postPatch = ''
       cp ${./xapian-Rakefile} Rakefile
     '';
     preInstall = ''
-      export XAPIAN_CONFIG=${xapian_1_2_22}/bin/xapian-config
+      export XAPIAN_CONFIG=${xapian}/bin/xapian-config
     '';
   };
 
diff --git a/pkgs/development/ruby-modules/gem/gem-post-build.rb b/pkgs/development/ruby-modules/gem/gem-post-build.rb
index f0322b67f61..b754f945986 100644
--- a/pkgs/development/ruby-modules/gem/gem-post-build.rb
+++ b/pkgs/development/ruby-modules/gem/gem-post-build.rb
@@ -7,7 +7,7 @@ ruby = File.join(ENV["ruby"], "bin", RbConfig::CONFIG['ruby_install_name'])
 out = ENV["out"]
 bin_path = File.join(ENV["out"], "bin")
 gem_home = ENV["GEM_HOME"]
-gem_path = ENV["GEM_PATH"].split(File::PATH_SEPARATOR)
+gem_path = ENV["GEM_PATH"].split(File::PATH_SEPARATOR).uniq
 install_path = Dir.glob("#{gem_home}/gems/*").first
 gemspec_path = ARGV[0]
 
diff --git a/pkgs/development/ruby-modules/with-packages/Gemfile b/pkgs/development/ruby-modules/with-packages/Gemfile
new file mode 100644
index 00000000000..0cd04f07b94
--- /dev/null
+++ b/pkgs/development/ruby-modules/with-packages/Gemfile
@@ -0,0 +1,159 @@
+source 'https://rubygems.org' do
+  gem 'addressable'
+  gem 'atk'
+  gem 'awesome_print'
+  gem 'bacon'
+  # gem 'bundler' already got a package for that
+  gem 'byebug'
+  gem 'cairo'
+  gem 'cairo-gobject'
+  gem 'camping'
+  # gem 'capybara-webkit' takes too long to build right now since webkit depends on ruby
+  gem 'charlock_holmes'
+  gem 'cld3'
+  gem 'cocoapods'
+  gem 'cocoapods-acknowledgements'
+  gem 'cocoapods-art'
+  gem 'cocoapods-bin'
+  gem 'cocoapods-browser'
+  gem 'cocoapods-bugsnag'
+  gem 'cocoapods-check'
+  gem 'cocoapods-clean'
+  gem 'cocoapods-clean_build_phases_scripts'
+  gem 'cocoapods-core'
+  gem 'cocoapods-coverage'
+  gem 'cocoapods-deintegrate'
+  gem 'cocoapods-dependencies'
+  gem 'cocoapods-deploy'
+  gem 'cocoapods-downloader'
+  gem 'cocoapods-expert-difficulty'
+  gem 'cocoapods-fix-react-native'
+  gem 'cocoapods-generate'
+  gem 'cocoapods-git_url_rewriter'
+  gem 'cocoapods-keys'
+  gem 'cocoapods-no-dev-schemes'
+  gem 'cocoapods-open'
+  gem 'cocoapods-packager'
+  gem 'cocoapods-playgrounds'
+  gem 'cocoapods-plugins'
+  gem 'cocoapods-prune-localizations'
+  gem 'cocoapods-rome'
+  gem 'cocoapods-search'
+  gem 'cocoapods-sorted-search'
+  gem 'cocoapods-static-swift-framework'
+  gem 'cocoapods-stats'
+  gem 'cocoapods-tdfire-binary'
+  gem 'cocoapods-testing'
+  gem 'cocoapods-trunk'
+  gem 'cocoapods-try'
+  gem 'cocoapods-try-release-fix'
+  gem 'cocoapods-update-if-you-dare'
+  gem 'cocoapods-whitelist'
+  gem 'cocoapods-wholemodule'
+  gem 'coderay'
+  gem 'concurrent-ruby'
+  gem 'curb'
+  gem 'curses'
+  gem 'daemons'
+  gem 'dep-selector-libgecode'
+  gem 'digest-sha3'
+  gem 'domain_name'
+  gem 'do_sqlite3'
+  gem 'ethon'
+  gem 'eventmachine'
+  gem 'excon'
+  gem 'faraday'
+  gem 'ffi'
+  gem 'ffi-rzmq-core'
+  gem 'fog-dnsimple'
+  gem 'gdk_pixbuf2'
+  gem 'gio2'
+  gem 'gitlab-markup'
+  gem 'glib2'
+  # gem 'gobject-introspection' fails on require
+  gem 'gpgme'
+  # gem 'grpc' fails to build
+  gem 'gtk2'
+  gem 'hashie'
+  gem 'highline'
+  gem 'hike'
+  gem 'hitimes'
+  gem 'hpricot'
+  gem 'httpclient'
+  gem 'http-cookie'
+  gem 'iconv'
+  gem 'idn-ruby'
+  gem 'jbuilder'
+  gem 'jekyll'
+  gem 'jmespath'
+  gem 'jwt'
+  gem 'libv8'
+  gem 'libxml-ruby'
+  gem 'magic'
+  gem 'markaby'
+  gem 'method_source'
+  gem 'mini_magick'
+  gem 'msgpack'
+  gem 'mysql2'
+  # gem 'mysql' deprecated
+  gem 'ncursesw'
+  gem 'netrc'
+  gem 'net-scp'
+  gem 'net-ssh'
+  gem 'nokogiri'
+  gem 'opus-ruby'
+  gem 'ovirt-engine-sdk'
+  gem 'pango'
+  gem 'patron'
+  gem 'pcaprub'
+  gem 'pg'
+  gem 'pry'
+  gem 'pry-byebug'
+  gem 'pry-doc'
+  gem 'public_suffix'
+  gem 'puma'
+  gem 'rails'
+  gem 'rainbow'
+  # gem 'rbczmq' deprecated
+  gem 'rbnacl'
+  gem 'rb-readline'
+  gem 're2'
+  gem 'redis'
+  gem 'redis-rack'
+  gem 'rest-client'
+  gem 'rmagick'
+  gem 'rpam2'
+  gem 'rspec'
+  gem 'rubocop'
+  gem 'rubocop-performance'
+  gem 'ruby-libvirt'
+  gem 'ruby-lxc'
+  gem 'ruby-progressbar'
+  gem 'ruby-terminfo'
+  gem 'ruby-vips'
+  gem 'rubyzip'
+  gem 'rugged'
+  gem 'sassc'
+  gem 'scrypt'
+  gem 'semian'
+  gem 'sequel'
+  gem 'sequel_pg'
+  gem 'simplecov'
+  gem 'sinatra'
+  gem 'slop'
+  gem 'snappy'
+  gem 'sqlite3'
+  gem 'taglib-ruby'
+  gem 'therubyracer'
+  gem 'thrift'
+  gem 'tilt'
+  gem 'tiny_tds'
+  gem 'treetop'
+  gem 'typhoeus'
+  gem 'tzinfo'
+  gem 'unf_ext'
+  gem 'uuid4r'
+  gem 'whois'
+  # gem 'xapian-ruby' doesn't contain ruby code
+  gem 'zookeeper'
+end
diff --git a/pkgs/development/ruby-modules/with-packages/default.nix b/pkgs/development/ruby-modules/with-packages/default.nix
new file mode 100644
index 00000000000..ac0a33f4561
--- /dev/null
+++ b/pkgs/development/ruby-modules/with-packages/default.nix
@@ -0,0 +1,75 @@
+{ stdenv, lib, buildEnv, buildRubyGem, ruby, gemConfig, makeWrapper }:
+
+/*
+Example usage:
+nix-shell -E "(import <nixpkgs> {}).ruby.withPackages (pkgs: with pkgs; [ pry nokogiri ])"
+
+You can also use this for writing ruby scripts that run anywhere that has nix
+using a nix-shell shebang:
+  #!/usr/bin/env nix-shell
+  #!nix-shell -i ruby -p "ruby.withPackages (pkgs: with pkgs; [ pry nokogiri ])"
+
+
+Run the following in the nixpkgs root directory to update the ruby-packages.nix:
+./maintainers/scripts/update-ruby-packages
+*/
+
+let
+  functions = import ../bundled-common/functions.nix { inherit lib gemConfig; };
+
+  buildGems = gemset:
+    let
+      realGemset = if builtins.isAttrs gemset then gemset else import gemset;
+      builtGems =
+        lib.mapAttrs (name: initialAttrs:
+          let
+            attrs = functions.applyGemConfigs ({ inherit ruby; gemName = name; } // initialAttrs);
+          in
+            buildRubyGem (functions.composeGemAttrs ruby builtGems name attrs)
+        ) realGemset;
+    in builtGems;
+
+  gems = buildGems (import ../../../top-level/ruby-packages.nix);
+
+  withPackages = selector:
+    let
+      selected = selector gems;
+
+      gemEnv = buildEnv {
+        name = "ruby-gems";
+        paths = selected;
+        pathsToLink = [ "/lib" "/bin" "/nix-support" ];
+      };
+
+      wrappedRuby = stdenv.mkDerivation {
+        name = "wrapped-${ruby.name}";
+        nativeBuildInputs = [ makeWrapper ];
+        buildCommand = ''
+          mkdir -p $out/bin
+          for i in ${ruby}/bin/*; do
+            makeWrapper "$i" $out/bin/$(basename "$i") --set GEM_PATH ${gemEnv}/${ruby.gemPath}
+          done
+        '';
+      };
+
+    in stdenv.mkDerivation {
+      name = "${ruby.name}-with-packages";
+      nativeBuildInputs = [ makeWrapper ];
+      buildInputs = [ selected ruby ];
+
+      unpackPhase = ":";
+
+      installPhase = ''
+        for i in ${ruby}/bin/* ${gemEnv}/bin/*; do
+          rm -f $out/bin/$(basename "$i")
+          makeWrapper "$i" $out/bin/$(basename "$i") --set GEM_PATH ${gemEnv}/${ruby.gemPath}
+        done
+      '';
+
+      passthru = {
+        inherit wrappedRuby;
+        gems = selected;
+      };
+    };
+
+in { inherit withPackages gems buildGems; }
diff --git a/pkgs/development/ruby-modules/with-packages/require_exceptions.nix b/pkgs/development/ruby-modules/with-packages/require_exceptions.nix
new file mode 100644
index 00000000000..e6ae3b5013f
--- /dev/null
+++ b/pkgs/development/ruby-modules/with-packages/require_exceptions.nix
@@ -0,0 +1,84 @@
+let
+  cocoapod-plugin = name: ''
+    require "cocoapods"
+    require "#{Gem::Specification.find_by_name(%(${name})).gem_dir}/lib/cocoapods_plugin"
+  '';
+in {
+  actioncable = [ "action_cable" ];
+  actionmailer = [ "action_mailer" ];
+  actionpack = [ "action_pack" ];
+  actionview = [ "action_view" ];
+  activejob = [ "active_job" ];
+  activemodel = [ "active_model" ];
+  activerecord = [ "active_record" ];
+  activestorage = [ "active_storage" ];
+  activesupport = [ "active_support" ];
+  atk = [ "atk" ];
+  CFPropertyList = [ "cfpropertylist" ];
+  cocoapods-acknowledgements = [ "cocoapods" "cocoapods_acknowledgements" ];
+  cocoapods-art = [ "cocoapods_art" ];
+  cocoapods-browser = [ "cocoapods" "cocoapods_plugin" ];
+  cocoapods-bugsnag = cocoapod-plugin "cocoapods-bugsnag";
+  cocoapods-clean = [ "cocoapods_clean" ];
+  cocoapods-coverage = [ "cocoapods_coverage" ];
+  cocoapods-deintegrate = [ ]; # used by cocoapods
+  cocoapods-dependencies = [ "cocoapods_dependencies" ];
+  cocoapods-deploy = cocoapod-plugin "cocoapods-deploy";
+  cocoapods-generate = cocoapod-plugin "cocoapods-generate";
+  cocoapods-git_url_rewriter = cocoapod-plugin "cocoapods-git_url_rewriter";
+  cocoapods-keys = []; # osx only cocoapod-plugin "cocoapods-keys";
+  cocoapods-open = [ "cocoapods" "cocoapods_plugin" ];
+  cocoapods-packager = [ "cocoapods_packager" ];
+  cocoapods-packager-pro = [ ]; # requires osx
+  cocoapods-plugins = [ "cocoapods_plugins" ];
+  cocoapods-sorted-search = [ ]; # requires osx
+  cocoapods-check = cocoapod-plugin "cocoapods-check";
+  cocoapods-disable-podfile-validations = cocoapod-plugin "cocoapods-disable-podfile-validations";
+  cocoapods-stats = [ "cocoapods_stats" ];
+  cocoapods-testing = [ "cocoapods_testing" ];
+  cocoapods-trunk = [ "cocoapods_trunk" ];
+  cocoapods-try = [ "cocoapods_try" ];
+  cocoapods-try-release-fix = cocoapod-plugin "cocoapods-try-release-fix";
+  digest-sha3 = [ "digest/sha3" ];
+  ffi-compiler = [ "ffi-compiler/loader" ];
+  fog-core = [ "fog/core" ];
+  fog-dnsimple = [ "fog/dnsimple" ];
+  fog-json = [ "fog/json" ];
+  forwardable-extended = [ "forwardable/extended" ];
+  gdk_pixbuf2 = [ "gdk_pixbuf2" ];
+  gitlab-markup = [ "github/markup" ];
+  gobject-introspection = [ "gobject-introspection" ];
+  gtk2 = [ ]; # requires display
+  idn-ruby = [ "idn" ];
+  jekyll-sass-converter = []; # tested through jekyll
+  libxml-ruby = [ "libxml" ];
+  multipart-post = [ "multipart_post" ];
+  unicode-display_width = [ "unicode/display_width" ];
+  nap = [ "rest" ];
+  net-scp = [ "net/scp" ];
+  net-ssh = [ "net/ssh" ];
+  nio4r = [ "nio" ];
+  osx_keychain = [ ]; # requires osx
+  ovirt-engine-sdk = [ "ovirtsdk4" ];
+  pango = [ "pango" ];
+  rack-test = [ "rack/test" ];
+  railties = [ "rails" ];
+  rspec-core = [ "rspec/core" ];
+  rspec-expectations = [ "rspec/expectations" ];
+  rspec-mocks = [ "rspec/mocks" ];
+  rspec-support = [ "rspec/support" ];
+  RubyInline = [ "inline" ];
+  ruby-libvirt = [ "libvirt" ];
+  ruby-lxc = [ "lxc" ];
+  ruby-macho = [ "macho" ];
+  ruby-terminfo = [ "terminfo" ];
+  rubyzip = [ "zip" ];
+  sequel_pg = [ "pg" "sequel" "sequel/adapters/postgresql" "sequel_pg" ];
+  simplecov-html = [ ]; # tested through simplecov
+  sinatra = [ "sinatra/base" ];
+  sprockets-rails = [ "sprockets/rails" ];
+  taglib-ruby = [ "taglib" ];
+  websocket-driver = [ "websocket/driver" ];
+  websocket-extensions = [ "websocket/extensions" ];
+  ZenTest = [ "zentest" ];
+}
diff --git a/pkgs/development/ruby-modules/with-packages/test.nix b/pkgs/development/ruby-modules/with-packages/test.nix
new file mode 100644
index 00000000000..92ded1004e3
--- /dev/null
+++ b/pkgs/development/ruby-modules/with-packages/test.nix
@@ -0,0 +1,48 @@
+# a generic test suite for all gems for all ruby versions.
+# use via nix-build.
+let
+  pkgs = import ../../../.. {};
+  lib = pkgs.lib;
+  stdenv = pkgs.stdenv;
+
+  rubyVersions = with pkgs; [
+    ruby_2_4
+    ruby_2_5
+    ruby_2_6
+  ];
+
+  gemTests =
+    (lib.mapAttrs
+      (name: gem: [ name ])
+      pkgs.ruby.gems) //
+    (import ./require_exceptions.nix);
+
+  tests = ruby:
+    lib.mapAttrs (name: gem:
+      let
+        test =
+          if builtins.isList gemTests."${name}"
+          then pkgs.writeText "${name}.rb" ''
+                puts "${name} GEM_HOME: #{ENV['GEM_HOME']}"
+                ${lib.concatStringsSep "\n" (map (n: "require '${n}'") gemTests."${name}")}
+              ''
+          else pkgs.writeText "${name}.rb" gemTests."${name}";
+
+        deps = ruby.withPackages (g: [ g."${name}" ]);
+      in stdenv.mkDerivation {
+        name = "test-gem-${ruby.name}-${name}";
+        buildInputs = [ deps ];
+        buildCommand = ''
+          INLINEDIR=$PWD ruby ${test}
+          touch $out
+        '';
+      }
+    ) ruby.gems;
+in
+  stdenv.mkDerivation {
+    name = "test-all-ruby-gems";
+    buildInputs = builtins.foldl' (sum: ruby: sum ++ ( builtins.attrValues (tests ruby) )) [] rubyVersions;
+    buildCommand = ''
+      touch $out
+    '';
+  }
diff --git a/pkgs/development/ruby-modules/with-packages/test.rb b/pkgs/development/ruby-modules/with-packages/test.rb
new file mode 100755
index 00000000000..760402d070c
--- /dev/null
+++ b/pkgs/development/ruby-modules/with-packages/test.rb
@@ -0,0 +1,76 @@
+#!/usr/bin/env ruby
+
+# this is a quick and dirty test suite for easier analyzing of breakages in a
+# manual testing.
+# For automated testing use the test.nix
+
+require 'fileutils'
+
+class FakeGemfile
+  attr_reader :gems
+
+  def initialize
+    @gems = []
+  end
+
+  def source(_source, &block)
+    instance_exec(&block)
+  end
+
+  def gem(name)
+    @gems << name
+  end
+end
+
+gemfile = File.expand_path(File.join(__dir__, 'Gemfile'))
+packages = FakeGemfile.new.instance_eval(File.read(gemfile), gemfile)
+
+test_cases = packages.map { |pkg| [pkg, "require '#{pkg}'"] }.to_h
+
+test_cases.merge!(
+  'digest-sha3' => "require 'digest/sha3'",
+  'gitlab-markup' => "require 'github/markup'",
+  'idn-ruby' => "require 'idn'",
+  'net-scp' => "require 'net/scp'",
+  'taglib-ruby' => "require 'taglib'",
+  'net-ssh' => "require 'net/ssh'",
+  'ruby-libvirt' => "require 'libvirt'",
+  'ruby-lxc' => "require 'lxc'",
+  'rubyzip' => "require 'zip'",
+  'sinatra' => "require 'sinatra/base'",
+  'libxml-ruby' => "require 'libxml'",
+  'ruby-terminfo' => "require 'terminfo'",
+  'ovirt-engine-sdk' => "require 'ovirtsdk4'",
+  'fog-dnsimple' => "require 'fog/dnsimple'"
+)
+
+test_cases['sequel_pg'] = <<~TEST
+  require 'pg'
+  require 'sequel'
+  require 'sequel/adapters/postgresql'
+  require 'sequel_pg'
+TEST
+
+tmpdir = File.expand_path(File.join(__dir__, 'tests'))
+FileUtils.rm_rf(tmpdir)
+FileUtils.mkdir_p(tmpdir)
+
+failing = test_cases.reject do |name, test_case|
+  test_case = <<~SHELL
+    #!/usr/bin/env nix-shell
+    #!nix-shell -i ruby -E "(import ../../../.. {}).ruby.withPackages (r: [ r.#{name} ] )"
+    #{test_case}
+  SHELL
+
+  file = File.join(tmpdir, "#{name}_test.rb")
+  File.write(file, test_case)
+  FileUtils.chmod('u=wrx', file)
+
+  system(file) && FileUtils.rm(file)
+end
+
+exit if failing.empty?
+
+puts "Following gems failed: #{failing.keys.join(' ')}"
+puts "tests for failing gems remain in #{tmpdir}"
+exit 1
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 5045c8894f2..eccf4850ffe 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -8977,6 +8977,11 @@ in
 
   ruby = ruby_2_5;
 
+  rubyPackages_2_3 = recurseIntoAttrs ruby_2_3.gems;
+  rubyPackages_2_4 = recurseIntoAttrs ruby_2_4.gems;
+  rubyPackages_2_5 = recurseIntoAttrs ruby_2_5.gems;
+  rubyPackages_2_6 = recurseIntoAttrs ruby_2_6.gems;
+
   mruby = callPackage ../development/compilers/mruby { };
 
   scsh = callPackage ../development/interpreters/scsh { };
diff --git a/pkgs/top-level/ruby-packages.nix b/pkgs/top-level/ruby-packages.nix
new file mode 100644
index 00000000000..ed2321887a7
--- /dev/null
+++ b/pkgs/top-level/ruby-packages.nix
@@ -0,0 +1,2666 @@
+{
+  actionmailer = {
+    dependencies = ["actionpack" "actionview" "activejob" "mail" "rails-dom-testing"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18wwlj4f7jffv3vxm80d2z36nwza95l5xfcqc401hvvrls4xzhsy";
+      type = "gem";
+    };
+    version = "4.2.11.1";
+  };
+  actionpack = {
+    dependencies = ["actionview" "activesupport" "rack" "rack-test" "rails-dom-testing" "rails-html-sanitizer"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rmldsk3a4lwxk0lrp6x1nz1v1r2xmbm3300l4ghgfygv3grdwjh";
+      type = "gem";
+    };
+    version = "4.2.11.1";
+  };
+  actionview = {
+    dependencies = ["activesupport" "builder" "erubis" "rails-dom-testing" "rails-html-sanitizer"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0x7vjn8q6blzyf7j3kwg0ciy7vnfh28bjdkd1mp9k4ghp9jn0g9p";
+      type = "gem";
+    };
+    version = "4.2.11.1";
+  };
+  activejob = {
+    dependencies = ["activesupport" "globalid"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jy1c1r6syjqpa0sh9f1p4iaxzvp6qg4n6zs774j9z27q7h407mj";
+      type = "gem";
+    };
+    version = "4.2.11.1";
+  };
+  activemodel = {
+    dependencies = ["activesupport" "builder"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1c1x0rd6wnk1f0gsmxs6x3gx7yf6fs9qqkdv7r4hlbcdd849in33";
+      type = "gem";
+    };
+    version = "4.2.11.1";
+  };
+  activerecord = {
+    dependencies = ["activemodel" "activesupport" "arel"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07ixiwi0zzs9skqarvpfamsnay7npfswymrn28ngxaf8hi279q5p";
+      type = "gem";
+    };
+    version = "4.2.11.1";
+  };
+  activesupport = {
+    dependencies = ["i18n" "minitest" "thread_safe" "tzinfo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vbq7a805bfvyik2q3kl9s3r418f5qzvysqbz2cwy4hr7m2q4ir6";
+      type = "gem";
+    };
+    version = "4.2.11.1";
+  };
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fvchp2rhp2rmigx7qglf69xvjqvzq7x0g49naliw29r2bz656sy";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  arel = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nfcrdiys6q6ylxiblky9jyssrw2xj96fmxmal7f4f0jj3417vj4";
+      type = "gem";
+    };
+    version = "6.0.4";
+  };
+  ast = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "184ssy3w93nkajlz2c70ifm79jp3j737294kbc5fjw69v1w0n9x7";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  atk = {
+    dependencies = ["glib2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0saginz71qy4k1hz3sffrjd6zcw54jsm61f7jks02fxys31ir865";
+      type = "gem";
+    };
+    version = "3.3.7";
+  };
+  atomos = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17vq6sjyswr5jfzwdccw748kgph6bdw30bakwnn6p8sl4hpv4hvx";
+      type = "gem";
+    };
+    version = "0.1.3";
+  };
+  awesome_print = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14arh1ixfsd6j5md0agyzvksm5svfkvchb90fp32nn7y3avcmc2h";
+      type = "gem";
+    };
+    version = "1.8.0";
+  };
+  bacon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1f06gdj77bmwzc1k5iragl1595hbn67yc7sqvs56ca8plrr2vmai";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  builder = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qibi5s67lpdv1wgcj66wcymcr04q6j4mzws6a479n0mlrmh5wr1";
+      type = "gem";
+    };
+    version = "3.2.3";
+  };
+  byebug = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mmkls9n56l4gx2k0dnyianwz36z2zgpxli5bpsbr7jbw7hn2x6j";
+      type = "gem";
+    };
+    version = "11.0.1";
+  };
+  cairo = {
+    dependencies = ["native-package-installer" "pkg-config"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yvv2lcbsybzbw1nrmfivmln23da4rndrs3av6ymjh0x3ww5h7p8";
+      type = "gem";
+    };
+    version = "1.16.4";
+  };
+  cairo-gobject = {
+    dependencies = ["cairo" "glib2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1380dvd5dbnhlvagb9z9cr62kh1knza7bcgr9msqshj55iqk4p0k";
+      type = "gem";
+    };
+    version = "3.3.7";
+  };
+  camping = {
+    dependencies = ["mab" "rack"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1q2a5x97pgnld0b8yziblp9fqkjyib4gfwv9gcyynyhswqwsldpf";
+      type = "gem";
+    };
+    version = "2.1.532";
+  };
+  CFPropertyList = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fr8sdzs2q1969zqh790w223hjidlwx4hfm4c91gj0va5j5pv3n8";
+      type = "gem";
+    };
+    version = "3.0.1";
+  };
+  charlock_holmes = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nf1l31n10yaark2rrg5qzyzcx9w80681449s3j09qmnipsl8rl5";
+      type = "gem";
+    };
+    version = "0.7.6";
+  };
+  claide = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kasxsms24fgcdsq680nz99d5lazl9rmz1qkil2y5gbbssx89g0z";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  clamp = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dka8f3hwzz7p558kiyyrdabljvwp71cbzk46akb3kvnvhcyjx89";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  cld3 = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06p4jgrr0zixqnflmg5dcrbmhlnmll85j7vxkrjmnng293cwvzgw";
+      type = "gem";
+    };
+    version = "3.2.4";
+  };
+  cocoapods = {
+    dependencies = ["activesupport" "claide" "cocoapods-core" "cocoapods-deintegrate" "cocoapods-downloader" "cocoapods-plugins" "cocoapods-search" "cocoapods-stats" "cocoapods-trunk" "cocoapods-try" "colored2" "escape" "fourflusher" "gh_inspector" "molinillo" "nap" "ruby-macho" "xcodeproj"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02gnm6l7f3pxmy7bqns0dhxmanlqp01hkpvng5cxryww17zrq2qz";
+      type = "gem";
+    };
+    version = "1.7.5";
+  };
+  cocoapods-acknowledgements = {
+    dependencies = ["activesupport" "redcarpet"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07n638ijlc4y5vfzs5ykzhmwwsng7njb2nnwn4ravydqqxqgv13m";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  cocoapods-art = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gp7rib26diw4n5gs4dcb8sy0dga9xmdw0i2nwdqn1qm3qp7kbg5";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  cocoapods-bin = {
+    dependencies = ["cocoapods" "cocoapods-generate" "parallel"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03x5grabb8nyky0nq1h78vmlka66pkgdif0f6i6nhjfy96gpil87";
+      type = "gem";
+    };
+    version = "0.1.18";
+  };
+  cocoapods-browser = {
+    dependencies = ["cocoapods"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mq9mcw3xnf2nqkmcjg874sx422dbmfa99vhw31c9jb0cd4j3m9p";
+      type = "gem";
+    };
+    version = "0.1.5";
+  };
+  cocoapods-bugsnag = {
+    dependencies = ["cocoapods"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1r34h66rqswsyhanx69qnhhr02xsqy2y1zp5265gl6m76nyqq5wa";
+      type = "gem";
+    };
+    version = "2.0.1";
+  };
+  cocoapods-check = {
+    dependencies = ["cocoapods"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17wb5xzhjvrqllsjqqbm00w8gnsrwcb6k7wsb36ykbcp0aiagvaf";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  cocoapods-clean = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16zy8xl94clblxivlcrw2jf3dnvmwlr6jni6kz74rnc8wj42sf1w";
+      type = "gem";
+    };
+    version = "0.0.1";
+  };
+  cocoapods-clean_build_phases_scripts = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1b91sfsriizsr08m1vn9j4sf9sb8vgsyr6xjnw18bpy66bpwsqca";
+      type = "gem";
+    };
+    version = "0.0.2";
+  };
+  cocoapods-core = {
+    dependencies = ["activesupport" "fuzzy_match" "nap"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1i53x5lhlvyirls2ch45x9wsrfqk7s3zp85lbnwps9abimxj4nh4";
+      type = "gem";
+    };
+    version = "1.7.5";
+  };
+  cocoapods-coverage = {
+    dependencies = ["cocoapods-testing" "slather"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04bzk1x67pqrmnmz3pdw107j5p9ncwfm7gdv8n4bk4r9nqxdv3wn";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  cocoapods-deintegrate = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bf524f1za92i6rlr4cr6jm3c4vfjszsdc9lsr6wk5125c76ipzn";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
+  cocoapods-dependencies = {
+    dependencies = ["ruby-graphviz"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10ssv98af44698kp4w0wfdrc7x3ccf2w9dhcva6i7hwlffjvcsz3";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  cocoapods-deploy = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qnhl54z0dqyn0sk7rgn3vwmfax0yr3sk2r464h888d2qjxz6v7j";
+      type = "gem";
+    };
+    version = "0.0.12";
+  };
+  cocoapods-disable-podfile-validations = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fxrq0b1x5gr2gr9md6mkwgaj8519gf1sbyqs88yqphbigf5iy75";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  cocoapods-downloader = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09fd4zaqkz8vz3djplacngcs4n0j6j956wgq43s1y6bwl0zyjmd3";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  cocoapods-expert-difficulty = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19shjj4kj9rqg1a3pax568q0w9rkq8jcba2mycvq0szbv7bw6pgl";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  cocoapods-fix-react-native = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01aqxp4d5v8fjbg9f7a61h1b4fnmrqwhrng28ybd80p2z44s186a";
+      type = "gem";
+    };
+    version = "2019.03.19.11";
+  };
+  cocoapods-generate = {
+    dependencies = ["cocoapods-disable-podfile-validations"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hlczv5x4qz60daqb93cis2l5ps86cvx74rrl6qwggwz2hm76adr";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  cocoapods-git_url_rewriter = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cmyrj92d781pkq1b6qbvpmxvfx8k3l36cdqsi46w55icjm1jqbw";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  cocoapods-keys = {
+    dependencies = ["dotenv" "osx_keychain"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14jmfibzvhqxhvhphj3g83d70ya16p7s4i43wir48hnaxkaqrm85";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  cocoapods-no-dev-schemes = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14w8yqs3r6pg06zpv58mc9vzfxhp3ka4mfhnc2p7vmyhy4nmcdza";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  cocoapods-open = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1z9x1cqrz4zc6yd08clawi8gg7ip8vbhkh9lkrdkzw7i6lqyrp0j";
+      type = "gem";
+    };
+    version = "0.0.8";
+  };
+  cocoapods-packager = {
+    dependencies = ["cocoapods"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1083zv9pyqyqal6dk3kvfxdmylbll6078z5zw03m4j5jcz3m8nbm";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  cocoapods-packager-pro = {
+    dependencies = ["cocoapods"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1sjnlnqrc3fvc33c3lg3h6y8n969isjswxg2jdc1kfc3x0cakawl";
+      type = "gem";
+    };
+    version = "1.5.4";
+  };
+  cocoapods-playgrounds = {
+    dependencies = ["cocoapods"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jsc489j6dh3mczzs880vc6jvzd8yjqrszmbbnkz9azndak3mhln";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  cocoapods-plugins = {
+    dependencies = ["nap"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16na82sfyc8801qs1n22nwq486s4j7yj6rj7fcp8cbxmj371fpbj";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  cocoapods-prune-localizations = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hvpl56rnblmdbj40sysvk56j5hx5kdpqry00raw2p184sb5k4cf";
+      type = "gem";
+    };
+    version = "0.3.1";
+  };
+  cocoapods-rome = {
+    dependencies = ["cocoapods" "fourflusher"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1z5z49m5aww7q301bn5dzb6fzq6lcj6fvqibpg5ys1r0c41lsj0l";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  cocoapods-search = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02wmy5rbjk29c65zn62bffxv30qs11slql23qx65snkm0vd93mn6";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  cocoapods-sorted-search = {
+    dependencies = ["cocoapods" "hashie" "osx_keychain" "ruby-progressbar" "typhoeus"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1da86mjq4spfsx6xjk7qylvj5423ai9y39g9xxfl9r6h8i54dmpp";
+      type = "gem";
+    };
+    version = "0.2.4";
+  };
+  cocoapods-static-swift-framework = {
+    dependencies = ["cocoapods"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12hhh25bj5dyz6rwc5jgarlld35vmgn43qk5lq9kfrpcli2ynhp2";
+      type = "gem";
+    };
+    version = "0.5";
+  };
+  cocoapods-stats = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xhdh5v94p6l612rwrk290nd2hdfx8lbaqfbkmj34md218kilqww";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  cocoapods-tdfire-binary = {
+    dependencies = ["cocoapods" "cocoapods-bin" "cocoapods-packager-pro"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10idp7yr2zni6zhpj1pqkj4wkk5g48f5iizjb20i8minj52l64m0";
+      type = "gem";
+    };
+    version = "2.0.9";
+  };
+  cocoapods-testing = {
+    dependencies = ["xctasks"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f7w4gxr45m42ca6fpbq38jfzii00xysz12vcc68myvi8x0krr5l";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  cocoapods-trunk = {
+    dependencies = ["nap" "netrc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1m0p27aij7d0n0b8h7nvyv3q3prcpwisbj7sla0fp2hvn4lqarl5";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  cocoapods-try = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gf2zjmcjhh9psq15yfy82wz5jnlihf5bcw79f8hlv4cnqyspncj";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  cocoapods-try-release-fix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0a7hbc5j0p507cyd9a0rd2mf2d525ia3gcnx7bdspxqnhl0a43bf";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  cocoapods-update-if-you-dare = {
+    dependencies = ["colored2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nqvywrbfxiagip2vl9kj71h39g4idq1lshkxl5bqh1hq57g4k9q";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  cocoapods-whitelist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ln4kywj4bx32qyqvr0byi3g4fk8yj026n00xch782x0147f8lka";
+      type = "gem";
+    };
+    version = "0.0.11";
+  };
+  cocoapods-wholemodule = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03gr4r0aa9mrj8i27dd6l87jzq78sid3jbywmkazg3yrq6y38i21";
+      type = "gem";
+    };
+    version = "0.0.1";
+  };
+  coderay = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15vav4bhcc2x3jmi3izb11l4d9f3xv8hp2fszb7iqmpsccv1pz4y";
+      type = "gem";
+    };
+    version = "1.1.2";
+  };
+  colorator = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f7wvpam948cglrciyqd798gdc6z3cfijciavd0dfixgaypmvy72";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  colored2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jlbqa9q4mvrm73aw9mxh23ygzbjiqwisl32d8szfb5fxvbjng5i";
+      type = "gem";
+    };
+    version = "3.1.2";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1x07r23s7836cpp5z9yrlbpljcxpax14yw4fy4bnp6crhr6x24an";
+      type = "gem";
+    };
+    version = "1.1.5";
+  };
+  crass = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bpxzy6gjw9ggjynlxschbfsgmx8lv3zw1azkjvnb8b9i895dqfi";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
+  curb = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0s27g4nkdf8wipzyxx87nnw43ps8xqg30sqz86ay7dvmmpkd786k";
+      type = "gem";
+    };
+    version = "0.9.10";
+  };
+  curses = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nkh62n5jbkfka8s5sgvhzzpsjkgsr9d3g7b8grhvy92yigkrr7z";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  daemons = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0l5gai3vd4g7aqff0k1mp41j9zcsvm2rbwmqn115a325k9r7pf4w";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  data_objects = {
+    dependencies = ["addressable"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19fw1ckqc5f1wc4r72qrymy2k6cmd8azbxpn61ksbsjqhzc2bgqd";
+      type = "gem";
+    };
+    version = "0.10.17";
+  };
+  dep-selector-libgecode = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nff0nai8h8786xix92f3k5wjb51gqd9gkibmah2bvrcwyn9qiw5";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  diff-lcs = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18w22bjz424gzafv6nzv98h0aqkwz3d9xhm7cbr1wfbyas8zayza";
+      type = "gem";
+    };
+    version = "1.3";
+  };
+  digest-sha3 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "135a8r9nq10wlzbjm74dflls67y9iiwp04aj1089ablbmvbiiq41";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  do_sqlite3 = {
+    dependencies = ["data_objects"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gxz54qjgwg6a2mkqpai28m0i5swbyxpr4qmh9x1nwf20lysrgcf";
+      type = "gem";
+    };
+    version = "0.10.17";
+  };
+  docile = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qrwiyagxzl8zlx3dafb0ay8l14ib7imb2rsmx70i5cp420v8gif";
+      type = "gem";
+    };
+    version = "1.3.2";
+  };
+  domain_name = {
+    dependencies = ["unf"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lcqjsmixjp52bnlgzh4lg9ppsk52x9hpwdjd53k8jnbah2602h0";
+      type = "gem";
+    };
+    version = "0.5.20190701";
+  };
+  dotenv = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17hkd62ig9b0czv192kqdfq7gw0a8hgq07yclri6myc8y5lmfin5";
+      type = "gem";
+    };
+    version = "2.7.5";
+  };
+  em-websocket = {
+    dependencies = ["eventmachine" "http_parser.rb"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bsw8vjz0z267j40nhbmrvfz7dvacq4p0pagvyp17jif6mj6v7n3";
+      type = "gem";
+    };
+    version = "0.5.1";
+  };
+  erubis = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fj827xqjs91yqsydf0zmfyw9p4l2jz5yikg3mppz6d7fi8kyrb3";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  escape = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sa1xkfc9jvkwyw1jbz3jhkq0ms1zrvswi6mmfiwcisg5fp497z4";
+      type = "gem";
+    };
+    version = "0.0.4";
+  };
+  ethon = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gggrgkcq839mamx7a8jbnp2h7x2ykfn34ixwskwb0lzx2ak17g9";
+      type = "gem";
+    };
+    version = "0.12.0";
+  };
+  eventmachine = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wh9aqb0skz80fhfn66lbpr4f86ya2z5rx6gm5xlfhd05bj1ch4r";
+      type = "gem";
+    };
+    version = "1.2.7";
+  };
+  excon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05qmrx7l8abpbvp0z01fdpc731c4k6akk67l424vdp5dywhachpr";
+      type = "gem";
+    };
+    version = "0.66.0";
+  };
+  faraday = {
+    dependencies = ["multipart-post"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0s72m05jvzc1pd6cw1i289chas399q0a14xrwg4rvkdwy7bgzrh0";
+      type = "gem";
+    };
+    version = "0.15.4";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j8pzj8raxbir5w5k6s7a042sb5k02pg0f8s4na1r5lan901j00p";
+      type = "gem";
+    };
+    version = "1.10.0";
+  };
+  ffi-compiler = {
+    dependencies = ["ffi" "rake"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0c2caqm9wqnbidcb8dj4wd3s902z15qmgxplwyfyqbwa0ydki7q1";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  ffi-rzmq-core = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0amkbvljpjfnv0jpdmz71p1i3mqbhyrnhamjn566w0c01xd64hb5";
+      type = "gem";
+    };
+    version = "1.0.7";
+  };
+  fog-core = {
+    dependencies = ["builder" "excon" "formatador" "mime-types"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fsama04wlxhv537bm4b7rr4zzn0mvisy87m3qzv6f0mhlrq3zp8";
+      type = "gem";
+    };
+    version = "2.1.2";
+  };
+  fog-dnsimple = {
+    dependencies = ["fog-core" "fog-json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lbzkc0w96a62ahjw0b7mfbqgg9x2jp7khg5hvpbgw0kfs5xza63";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  fog-json = {
+    dependencies = ["fog-core" "multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zj8llzc119zafbmfa4ai3z5s7c4vp9akfs0f9l2piyvcarmlkyx";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  formatador = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gc26phrwlmlqrmz4bagq1wd5b7g64avpx0ghxr9xdxcvmlii0l0";
+      type = "gem";
+    };
+    version = "0.2.5";
+  };
+  forwardable-extended = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15zcqfxfvsnprwm8agia85x64vjzr2w0xn9vxfnxzgcv8s699v0v";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  fourflusher = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1afabh3g3gwj0ad53fs62waks815xcckf7pkci76l6vrghffcg8v";
+      type = "gem";
+    };
+    version = "2.3.1";
+  };
+  fuzzy_match = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19gw1ifsgfrv7xdi6n61658vffgm1867f4xdqfswb2b5h6alzpmm";
+      type = "gem";
+    };
+    version = "2.0.4";
+  };
+  gdk_pixbuf2 = {
+    dependencies = ["gio2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bvw0xlq0nrvzv559d3kbihc8m3iv3q70cs6xan0n6dywxayizbf";
+      type = "gem";
+    };
+    version = "3.3.7";
+  };
+  gh_inspector = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f8r9byajj3bi2c7c5sqrc7m0zrv3nblfcd4782lw5l73cbsgk04";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  gio2 = {
+    dependencies = ["gobject-introspection"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cv617ad4bhd3qhi5m0638v0mf9kw32g7r89c754xsmmas921igc";
+      type = "gem";
+    };
+    version = "3.3.7";
+  };
+  gitlab-markup = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rqf3jmyn78r3ysy3bjyx7s4yv3xipxlmqlmbyrbksna19rrx08d";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  glib2 = {
+    dependencies = ["native-package-installer" "pkg-config"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08cqwk8valxv4bls891f3ciqa258vbsfgqd3mymf62qdld8m9y3z";
+      type = "gem";
+    };
+    version = "3.3.7";
+  };
+  globalid = {
+    dependencies = ["activesupport"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zkxndvck72bfw235bd9nl2ii0lvs5z88q14706cmn702ww2mxv1";
+      type = "gem";
+    };
+    version = "0.4.2";
+  };
+  gobject-introspection = {
+    dependencies = ["glib2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14kcf8079wmimzy78yysizsl44d6iaw2pp5xj70vdxg342r4a6k5";
+      type = "gem";
+    };
+    version = "3.3.7";
+  };
+  gpgme = {
+    dependencies = ["mini_portile2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12fqirxr964mc8jwsfl5nif6q4wcckrmj7w4c9ci4xg9xy2b9v6m";
+      type = "gem";
+    };
+    version = "2.0.18";
+  };
+  gtk2 = {
+    dependencies = ["atk" "gdk_pixbuf2" "pango"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hgb555j5pimy8pjpf20pzbmhpr1wx59phlwbwsq37zjv89wirva";
+      type = "gem";
+    };
+    version = "3.3.7";
+  };
+  hashie = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13bdzfp25c8k51ayzxqkbzag3wj5gc1jd8h7d985nsq6pn57g5xh";
+      type = "gem";
+    };
+    version = "3.6.0";
+  };
+  highline = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g0zpalfj8wvca86hcnirir5py2zyqrhkgdgv9f87fxkjaw815wr";
+      type = "gem";
+    };
+    version = "2.0.2";
+  };
+  hike = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hbhmchyhm1xf632cczmyg3fsbn7zly988q3fjpi8l3nb4cn40xj";
+      type = "gem";
+    };
+    version = "2.1.3";
+  };
+  hitimes = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1w2lkanmw9was9v6b90vhi23rigdq9nc1brrsdvxczxd3c39b36x";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  hpricot = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jn8x9ch79gqmnzgyz78kppavjh5lqx0y0r6frykga2b86rz9s6z";
+      type = "gem";
+    };
+    version = "0.8.6";
+  };
+  http-accept = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09m1facypsdjynfwrcv19xcb1mqg8z6kk31g8r33pfxzh838c9n6";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  http-cookie = {
+    dependencies = ["domain_name"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "004cgs4xg5n6byjs7qld0xhsjq3n6ydfh897myr2mibvh6fjc49g";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  "http_parser.rb" = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi";
+      type = "gem";
+    };
+    version = "0.6.0";
+  };
+  httpclient = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99";
+      type = "gem";
+    };
+    version = "2.8.3";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "038qvz7kd3cfxk8bvagqhakx68pfbnmghpdkx7573wbf0maqp9a3";
+      type = "gem";
+    };
+    version = "0.9.5";
+  };
+  iconv = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00fppiz9ypy7xpc08xdk6glq842rbc69c7a1p0kmv195271i4yqv";
+      type = "gem";
+    };
+    version = "1.0.8";
+  };
+  idn-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07vblcyk3g72sbq12xz7xj28snpxnh3sbcnxy8bglqbfqqhvmawr";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+  jaro_winkler = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1930v0chc1q4fr7hn0y1j34mw0v032a8kh0by4d4sbz8ksy056kf";
+      type = "gem";
+    };
+    version = "1.5.3";
+  };
+  jbuilder = {
+    dependencies = ["activesupport"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03adzsc2hfd0lvprm45s52bkxpnpnw8r9prcx8zx1aw2a8lzp9r7";
+      type = "gem";
+    };
+    version = "2.9.1";
+  };
+  jekyll = {
+    dependencies = ["addressable" "colorator" "em-websocket" "i18n" "jekyll-sass-converter" "jekyll-watch" "kramdown" "kramdown-parser-gfm" "liquid" "mercenary" "pathutil" "rouge" "safe_yaml" "terminal-table"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fpckw5nf4hfr5vhhdlmaxxp5lkdmc1vyqnmijwvy9fmjn4c87aa";
+      type = "gem";
+    };
+    version = "4.0.0";
+  };
+  jekyll-sass-converter = {
+    dependencies = ["sassc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fbc25p8vqyzmg8wpmgacqjkk3jhrr6kz9y45m43ygck74h2cad2";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  jekyll-watch = {
+    dependencies = ["listen"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qd7hy1kl87fl7l0frw5qbn22x7ayfzlv9a5ca1m59g0ym1ysi5w";
+      type = "gem";
+    };
+    version = "2.2.1";
+  };
+  jmespath = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d4wac0dcd1jf6kc57891glih9w57552zgqswgy74d1xhgnk0ngf";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sx97bm9by389rbzv8r1f43h06xcz8vwi3h5jv074gvparql7lcx";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  jwt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01zg1vp3lyl3flyjdkrcc93ghf833qgfgh2p1biqfhkzz11r129c";
+      type = "gem";
+    };
+    version = "2.2.1";
+  };
+  kramdown = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1dl840bvx8d9nq6lg3mxqyvbiqnr6lk3jfsm6r8zhz7p5srmd688";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  kramdown-parser-gfm = {
+    dependencies = ["kramdown"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0a8pb3v951f4x7h968rqfsa19c8arz21zw1vaj42jza22rap8fgv";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  libv8 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0271i5sfma05gvhmrmxqb0jj667bl6m54yd49ay6yrdbh1g4wpl1";
+      type = "gem";
+    };
+    version = "3.16.14.19";
+  };
+  libxml-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1r7m7zipkpam8ns4ys4qyh7yj3is3dy7ky6qwnw557pvpgx0aqrd";
+      type = "gem";
+    };
+    version = "3.1.0";
+  };
+  liquid = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zhg5ha8zy8zw9qr3fl4wgk4r5940n4128xm2pn4shpbzdbsj5by";
+      type = "gem";
+    };
+    version = "4.0.3";
+  };
+  listen = {
+    dependencies = ["rb-fsevent" "rb-inotify" "ruby_dep"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01v5mrnfqm6sgm8xn2v5swxsn1wlmq7rzh2i48d4jzjsc7qvb6mx";
+      type = "gem";
+    };
+    version = "3.1.5";
+  };
+  loofah = {
+    dependencies = ["crass" "nokogiri"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ccsid33xjajd0im2xv941aywi58z7ihwkvaf1w2bv89vn5bhsjg";
+      type = "gem";
+    };
+    version = "2.2.3";
+  };
+  mab = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0manxbilpx0hdi19lhdsr4ncvbzgmwh279b64j8w60dg0p0i4b4j";
+      type = "gem";
+    };
+    version = "0.0.3";
+  };
+  magic = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18vkdq2748wxg0kr923fbhx92wikh2dwv2hp8xind57qs7gn26pr";
+      type = "gem";
+    };
+    version = "0.2.9";
+  };
+  mail = {
+    dependencies = ["mini_mime"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00wwz6ys0502dpk8xprwcqfwyf3hmnx6lgxaiq6vj43mkx43sapc";
+      type = "gem";
+    };
+    version = "2.7.1";
+  };
+  markaby = {
+    dependencies = ["builder"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1j4jc31ycydbkh5h3q6zwidzpavg3g5mbb5lqyaczd3jrq78rd7i";
+      type = "gem";
+    };
+    version = "0.9.0";
+  };
+  mercenary = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10la0xw82dh5mqab8bl0dk21zld63cqxb1g16fk8cb39ylc4n21a";
+      type = "gem";
+    };
+    version = "0.3.6";
+  };
+  method_source = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pviwzvdqd90gn6y7illcdd9adapw8fczml933p5vl739dkvl3lq";
+      type = "gem";
+    };
+    version = "0.9.2";
+  };
+  mime-types = {
+    dependencies = ["mime-types-data"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fjxy1jm52ixpnv3vg9ld9pr9f35gy0jp66i1njhqjvmnvq0iwwk";
+      type = "gem";
+    };
+    version = "3.2.2";
+  };
+  mime-types-data = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1m00pg19cm47n1qlcxgl91ajh2yq0fszvn1vy8fy0s1jkrp9fw4a";
+      type = "gem";
+    };
+    version = "3.2019.0331";
+  };
+  mini_magick = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qy09qrd5bwh8mkbj514n5vcw9ni73218h9s3zmvbpmdwrnzi8j4";
+      type = "gem";
+    };
+    version = "4.9.5";
+  };
+  mini_mime = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1axm0rxyx3ss93wbmfkm78a6x03l8y4qy60rhkkiq0aza0vwq3ha";
+      type = "gem";
+    };
+    version = "1.0.2";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15zplpfw3knqifj9bpf604rb3wc1vhq6363pd6lvhayng8wql5vy";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  minitest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0icglrhghgwdlnzzp4jf76b0mbc71s80njn5afyfjn4wqji8mqbq";
+      type = "gem";
+    };
+    version = "5.11.3";
+  };
+  molinillo = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hh40z1adl4lw16dj4hxgabx4rr28mgqycih1y1d91bwww0jjdg6";
+      type = "gem";
+    };
+    version = "0.6.6";
+  };
+  msgpack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qr2mkm2i3m76zarvy7qgjl9596hmvjrg7x6w42vx8cfsbf5p0y1";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv";
+      type = "gem";
+    };
+    version = "1.13.1";
+  };
+  multipart-post = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zgw9zlwh2a6i1yvhhc4a84ry1hv824d6g2iw2chs3k5aylpmpfj";
+      type = "gem";
+    };
+    version = "2.1.1";
+  };
+  mysql2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1a2kdjgzwh1p2rkcmxaawy6ibi32b04wbdd5d4wr8i342pq76di4";
+      type = "gem";
+    };
+    version = "0.5.2";
+  };
+  nanaimo = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ajfyaqjw3dzykk612yw8sm21savfqy292hgps8h8l4lvxww1lz6";
+      type = "gem";
+    };
+    version = "0.2.6";
+  };
+  nap = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xm5xssxk5s03wjarpipfm39qmgxsalb46v1prsis14x1xk935ll";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  native-package-installer = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03qrzhk807f98bdwy6c37acksyb5fnairdz4jpl7y3fifh7k7yfn";
+      type = "gem";
+    };
+    version = "1.0.7";
+  };
+  ncursesw = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nc14wls1yiigz593vw7580hb99lf4n485axapiz6sqpg1jnlhcr";
+      type = "gem";
+    };
+    version = "1.4.10";
+  };
+  net-scp = {
+    dependencies = ["net-ssh"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nkf3my587f0izqw0dl3zl24c3lnrw9y5xrq9vb0lhgymmgcav9g";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  net-ssh = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "101wd2px9lady54aqmkibvy4j62zk32w0rjz4vnigyg974fsga40";
+      type = "gem";
+    };
+    version = "5.2.0";
+  };
+  netrc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gzfmcywp1da8nzfqsql2zqi648mfnx6qwkig3cv36n9m0yy676y";
+      type = "gem";
+    };
+    version = "0.11.0";
+  };
+  nio4r = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bi1r1xvlxpkghvmk1js88djlw7vi4ky6ildk8akn73hkf5phd2j";
+      type = "gem";
+    };
+    version = "2.5.1";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nmdrqqz1gs0fwkgzxjl4wr554gr8dc1fkrqjc2jpsvwgm41rygv";
+      type = "gem";
+    };
+    version = "1.10.4";
+  };
+  opus-ruby = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lyf2a8f1w1jk0qrl8h0gsydfalbh19g5k2c6xlq8j1sfzb0ij4d";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  osx_keychain = {
+    dependencies = ["RubyInline"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10hr3lihq7s5fv18dp0g4mfncvapkcwcd6xnn5483ximyd7rhfx0";
+      type = "gem";
+    };
+    version = "1.0.2";
+  };
+  ovirt-engine-sdk = {
+    dependencies = ["json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09lb0a9y4q7946jaf53li1v4cb6ksfb5bq5wb15yn8ja6wf9n427";
+      type = "gem";
+    };
+    version = "4.3.0";
+  };
+  pango = {
+    dependencies = ["cairo-gobject" "gobject-introspection"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03jdjphc5vk9a9rgvkfhz78dfyxi67a20c12h6pcd22r5xq8hzj0";
+      type = "gem";
+    };
+    version = "3.3.7";
+  };
+  parallel = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1x1gzgjrdlkm1aw0hfpyphsxcx90qgs3y4gmp9km3dvf4hc4qm8r";
+      type = "gem";
+    };
+    version = "1.17.0";
+  };
+  parser = {
+    dependencies = ["ast"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1s1plz33jjd0wm0vlspl5hg1rcg772zm5ibbix9binpd03jrbb8c";
+      type = "gem";
+    };
+    version = "2.6.4.0";
+  };
+  pathutil = {
+    dependencies = ["forwardable-extended"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12fm93ljw9fbxmv2krki5k5wkvr7560qy8p4spvb9jiiaqv78fz4";
+      type = "gem";
+    };
+    version = "0.16.2";
+  };
+  patron = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0523gddx88zql2mq6655k60gy2ac8vybpzkcf90lmd9nx7wl3fi9";
+      type = "gem";
+    };
+    version = "0.13.3";
+  };
+  pcaprub = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0h4iarqdych6v4jm5s0ywkc01qspadz8sf6qn7pkqmszq4iqv67q";
+      type = "gem";
+    };
+    version = "0.13.0";
+  };
+  pg = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fmnyxcyrvgdbgq7m09whgn9i8rwfybk0w8aii1nc4g5kqw0k2jy";
+      type = "gem";
+    };
+    version = "1.1.4";
+  };
+  pkg-config = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mvs1hs8ry3s4fh8sd94zhpn2pdasdqwpf5nylgxnp8x3xa2dmnd";
+      type = "gem";
+    };
+    version = "1.3.8";
+  };
+  polyglot = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bqnxwyip623d8pr29rg6m8r0hdg08fpr2yb74f46rn1wgsnxmjr";
+      type = "gem";
+    };
+    version = "0.3.5";
+  };
+  pry = {
+    dependencies = ["coderay" "method_source"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00rm71x0r1jdycwbs83lf9l6p494m99asakbvqxh8rz7zwnlzg69";
+      type = "gem";
+    };
+    version = "0.12.2";
+  };
+  pry-byebug = {
+    dependencies = ["byebug" "pry"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1aqz4gz8z44k6svpvcsfrqbigcpjd2kwvfm77yq3v8yzkhjrx0zi";
+      type = "gem";
+    };
+    version = "3.7.0";
+  };
+  pry-doc = {
+    dependencies = ["pry" "yard"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14lwb5dxfibcqbjygzvnf8ry0mayx48fk20qhg06214sll0sp0kv";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xnfv2j2bqgdpg2yq9i2rxby0w2sc9h5iyjkpaas2xknwrgmhdb0";
+      type = "gem";
+    };
+    version = "4.0.1";
+  };
+  puma = {
+    dependencies = ["nio4r"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d8hnqdr2acrlw5rp1wlyz1lwarfc6my5h9m5a7b3259zc4y9f5q";
+      type = "gem";
+    };
+    version = "4.1.0";
+  };
+  rack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g9926ln2lw12lfxm4ylq1h6nl0rafl10za3xvjzc87qvnqic87f";
+      type = "gem";
+    };
+    version = "1.6.11";
+  };
+  rack-protection = {
+    dependencies = ["rack"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0my0wlw4a5l3hs79jkx2xzv7djhajgf8d28k8ai1ddlnxxb0v7ss";
+      type = "gem";
+    };
+    version = "1.5.5";
+  };
+  rack-test = {
+    dependencies = ["rack"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0h6x5jq24makgv2fq5qqgjlrk74dxfy62jif9blk43llw8ib2q7z";
+      type = "gem";
+    };
+    version = "0.6.3";
+  };
+  rails = {
+    dependencies = ["actionmailer" "actionpack" "actionview" "activejob" "activemodel" "activerecord" "activesupport" "railties" "sprockets-rails"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ywvis59dd3v8qapi9ix6743zgk07l21x1cd6nb1ddpahxhm7dml";
+      type = "gem";
+    };
+    version = "4.2.11.1";
+  };
+  rails-deprecated_sanitizer = {
+    dependencies = ["activesupport"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qxymchzdxww8bjsxj05kbf86hsmrjx40r41ksj0xsixr2gmhbbj";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  rails-dom-testing = {
+    dependencies = ["activesupport" "nokogiri" "rails-deprecated_sanitizer"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wssfqpn00byhvp2372p99mphkcj8qx6pf6646avwr9ifvq0q1x6";
+      type = "gem";
+    };
+    version = "1.0.9";
+  };
+  rails-html-sanitizer = {
+    dependencies = ["loofah"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ilwxzm3a7bql5c9q2n9g9nb1hax7vd8d65a5yp3d967ld97nvrq";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  railties = {
+    dependencies = ["actionpack" "activesupport" "rake" "thor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bjf21z9maiiazc1if56nnh9xmgbkcqlpznv34f40a1hsvgk1d1m";
+      type = "gem";
+    };
+    version = "4.2.11.1";
+  };
+  rainbow = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bb2fpjspydr6x0s8pn1pqkzmxszvkfapv0p4627mywl7ky4zkhk";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  rake = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jcabbgnjc788chx31sihc5pgbqnlc1c75wakmqlbjdm8jns2m9b";
+      type = "gem";
+    };
+    version = "10.5.0";
+  };
+  rb-fsevent = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lm1k7wpz69jx7jrc92w3ggczkjyjbfziq5mg62vjnxmzs383xx8";
+      type = "gem";
+    };
+    version = "0.10.3";
+  };
+  rb-inotify = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fs7hxm9g6ywv2yih83b879klhc4fs8i0p9166z795qmd77dk0a4";
+      type = "gem";
+    };
+    version = "0.10.0";
+  };
+  rb-readline = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14w79a121czmvk1s953qfzww30mqjb2zc0k9qhi0ivxxk3hxg6wy";
+      type = "gem";
+    };
+    version = "0.5.5";
+  };
+  rbnacl = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1s559dxhwmd42n5va4m7h3v04s57a3nm8ff7p5g7hz030kiswyrc";
+      type = "gem";
+    };
+    version = "7.0.0";
+  };
+  re2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00wf9k1hkv3z3nfkrnfyyfq9ah0l7k14awqys3h2hqz4c21pqd2i";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  redcarpet = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0skcyx1h8b5ms0rp2zm3ql6g322b8c1adnkwkqyv7z3kypb4bm7k";
+      type = "gem";
+    };
+    version = "3.5.0";
+  };
+  redis = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mymdx7s5sr4mablklaipz679ckczsiigswm1g2v5mc93yj5amw3";
+      type = "gem";
+    };
+    version = "4.1.2";
+  };
+  redis-rack = {
+    dependencies = ["rack" "redis-store"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03xgdmq4fh187aqlh8z05idbxrmgddcarlb8x1kw4wjfcsf5afqi";
+      type = "gem";
+    };
+    version = "2.0.5";
+  };
+  redis-store = {
+    dependencies = ["redis"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mrcnjgkbmx1zf569mly82agdizqayjvnp2k6055k1iy07in3j8b";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+  ref = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04p4pq4sikly7pvn30dc7v5x2m7fqbfwijci4z1y6a1ilwxzrjii";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  rest-client = {
+    dependencies = ["http-accept" "http-cookie" "mime-types" "netrc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qs74yzl58agzx9dgjhcpgmzfn61fqkk33k1js2y5yhlvc5l19im";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  rmagick = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06ya2zpz2g3g4c90bmd1z11qkajls3srq5b7cswrjq8ima568ja0";
+      type = "gem";
+    };
+    version = "4.0.0";
+  };
+  rouge = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07j29vbgsi9v7kpx4lqpmh0hx59i420jig73dy46wx3id1i7vdqz";
+      type = "gem";
+    };
+    version = "3.10.0";
+  };
+  rpam2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zvli3s4z1hf2l7gyfickm5i3afjrnycc3ihbiax6ji6arpbyf33";
+      type = "gem";
+    };
+    version = "4.0.2";
+  };
+  rspec = {
+    dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15ppasvb9qrscwlyjz67ppw1lnxiqnkzx5vkx1bd8x5n3dhikxc3";
+      type = "gem";
+    };
+    version = "3.8.0";
+  };
+  rspec-core = {
+    dependencies = ["rspec-support"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0spjgmd3yx6q28q950r32bi0cs8h2si53zn6rq8s7n1i4zp4zwbf";
+      type = "gem";
+    };
+    version = "3.8.2";
+  };
+  rspec-expectations = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0x3iddjjaramqb0yb51c79p2qajgi9wb5b59bzv25czddigyk49r";
+      type = "gem";
+    };
+    version = "3.8.4";
+  };
+  rspec-mocks = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12zplnsv4p6wvvxsk8xn6nm87a5qadxlkk497zlxfczd0jfawrni";
+      type = "gem";
+    };
+    version = "3.8.1";
+  };
+  rspec-support = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "139mbhfdr10flm2ffryvxkyqgqs1gjdclc1xhyh7i7njfqayxk7g";
+      type = "gem";
+    };
+    version = "3.8.2";
+  };
+  rubocop = {
+    dependencies = ["jaro_winkler" "parallel" "parser" "rainbow" "ruby-progressbar" "unicode-display_width"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wpyass9qb2wvq8zsc7wdzix5xy2ldiv66wnx8mwwprz2dcvzayk";
+      type = "gem";
+    };
+    version = "0.74.0";
+  };
+  rubocop-performance = {
+    dependencies = ["rubocop"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ssizdnyai2hxdp6nd4b9hqyrc4gwhjlznhrdliz8wj4p8cvas44";
+      type = "gem";
+    };
+    version = "1.4.1";
+  };
+  ruby-graphviz = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jzbs0jhaz77azsc30gsfg89fy44vsr565jcj4axhc65n1fmhs90";
+      type = "gem";
+    };
+    version = "1.2.4";
+  };
+  ruby-libvirt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0d754d6pgdqyq52pl9hp0x38q1vn3vf9nz4nm5gqdj5i4fw7pba6";
+      type = "gem";
+    };
+    version = "0.7.1";
+  };
+  ruby-lxc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08pnghqp15fwylq6w2qh7x1ikkiq87irpy0z03n0gma4gdzzx2qa";
+      type = "gem";
+    };
+    version = "1.2.3";
+  };
+  ruby-macho = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lhdjn91jkifsy2hzq2hgcm0pp8pbik87m58zmw1ifh6hkp9adjb";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  ruby-progressbar = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1k77i0d4wsn23ggdd2msrcwfy0i376cglfqypkk2q77r2l3408zf";
+      type = "gem";
+    };
+    version = "1.10.1";
+  };
+  ruby-terminfo = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rl4ic5pzvrpgd42z0c1s2n3j39c9znksblxxvmhkzrc0ckyg2cm";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  ruby-vips = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12sd0ci3zayrzv1xd5qwa3p9z06ga4xzigpqyk3w52x5acngkld3";
+      type = "gem";
+    };
+    version = "2.0.14";
+  };
+  ruby_dep = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1c1bkl97i9mkcvkn1jks346ksnvnnp84cs22gwl0vd7radybrgy5";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  RubyInline = {
+    dependencies = ["ZenTest"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1q0384afhxcbm6yz74hzk0ypzf1ahgg1w94pnkhmag9dq0abqnr0";
+      type = "gem";
+    };
+    version = "3.12.4";
+  };
+  rubyzip = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1w9gw28ly3zyqydnm8phxchf4ymyjl2r7zf7c12z8kla10cpmhlc";
+      type = "gem";
+    };
+    version = "1.2.3";
+  };
+  rugged = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03w3k7j27kgzpcc3halkd3w0b677sny2lfwm2lwn2n1ac20dzjc6";
+      type = "gem";
+    };
+    version = "0.28.3.1";
+  };
+  safe_yaml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j7qv63p0vqcd838i2iy2f76c3dgwzkiz1d1xkg7n0pbnxj2vb56";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+  sassc = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "178iflma5z4qk2lfzlxk8kh942skj45q6v6xwllkqng9xbjlyzkf";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  scrypt = {
+    dependencies = ["ffi-compiler"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ggwynnlgr3a4l5h4zg2w4xyfvqh86nsvmgxicxkc40igyrwqz73";
+      type = "gem";
+    };
+    version = "3.0.6";
+  };
+  semian = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1w4qv3mcz005lb3wrh55imh6551lhf0qpslb3xw3b6chf746s0rj";
+      type = "gem";
+    };
+    version = "0.8.9";
+  };
+  sequel = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1r920jps2mpvz5ww9rzs3svprfjxz0vsy6dsa1cinsk3qizqbq7a";
+      type = "gem";
+    };
+    version = "5.24.0";
+  };
+  sequel_pg = {
+    dependencies = ["pg" "sequel"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1y010rfdgpkw1yspqchjqdp7n8yahscyw98g3l2pw56nzbqipjb8";
+      type = "gem";
+    };
+    version = "1.12.2";
+  };
+  simplecov = {
+    dependencies = ["docile" "json" "simplecov-html"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dq0nkaxvbsnl70hkimy35g4yjfs3blx4s7nbpzbvgqx72hxgv5v";
+      type = "gem";
+    };
+    version = "0.17.0";
+  };
+  simplecov-html = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lihraa4rgxk8wbfl77fy9sf0ypk31iivly8vl3w04srd7i0clzn";
+      type = "gem";
+    };
+    version = "0.10.2";
+  };
+  sinatra = {
+    dependencies = ["rack" "rack-protection" "tilt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0byxzl7rx3ki0xd7aiv1x8mbah7hzd8f81l65nq8857kmgzj1jqq";
+      type = "gem";
+    };
+    version = "1.4.8";
+  };
+  slather = {
+    dependencies = ["CFPropertyList" "activesupport" "clamp" "nokogiri" "xcodeproj"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0v4wll10mwmynj2v2g71kgr1psck3qglhz2mnrw2n281v30jxyyn";
+      type = "gem";
+    };
+    version = "2.4.7";
+  };
+  slop = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hv64fpbdwyswqhnq8bia66vlsz72yjqm00lvlhh4dnjjivdjcy5";
+      type = "gem";
+    };
+    version = "4.7.0";
+  };
+  snappy = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00zzs25sm78zs3rifc02z54cp3f03r9dq5ilzykyq1ykvbv65vw4";
+      type = "gem";
+    };
+    version = "0.0.17";
+  };
+  sprockets = {
+    dependencies = ["concurrent-ruby" "rack"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "182jw5a0fbqah5w9jancvfmjbk88h8bxdbwnl4d3q809rpxdg8ay";
+      type = "gem";
+    };
+    version = "3.7.2";
+  };
+  sprockets-rails = {
+    dependencies = ["actionpack" "activesupport" "sprockets"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ab42pm8p5zxpv3sfraq45b9lj39cz9mrpdirm30vywzrwwkm5p1";
+      type = "gem";
+    };
+    version = "3.2.1";
+  };
+  sqlite3 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1v903nbcws3ifm6jnxrdfcpgl1qg2x3lbif16mhlbyfn0npzb494";
+      type = "gem";
+    };
+    version = "1.4.1";
+  };
+  taglib-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0r8g7zdncc6243d000jn0grc1n70rn9mx16vggy3q7c4wgsa37xi";
+      type = "gem";
+    };
+    version = "0.7.1";
+  };
+  terminal-table = {
+    dependencies = ["unicode-display_width"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1512cngw35hsmhvw4c05rscihc59mnj09m249sm9p3pik831ydqk";
+      type = "gem";
+    };
+    version = "1.8.0";
+  };
+  therubyracer = {
+    dependencies = ["libv8" "ref"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g95bzs2axjglyjyj6xvsywqgr80bnzlkw7mddxx1fdrak5wni2q";
+      type = "gem";
+    };
+    version = "0.12.3";
+  };
+  thor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yhrnp9x8qcy5vc7g438amd5j9sw83ih7c30dr6g6slgw9zj3g29";
+      type = "gem";
+    };
+    version = "0.20.3";
+  };
+  thread_safe = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
+      type = "gem";
+    };
+    version = "0.3.6";
+  };
+  thrift = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02p107kwx7jnkh6fpdgvaji0xdg6xkaarngkqjml6s4zny4m8slv";
+      type = "gem";
+    };
+    version = "0.11.0.0";
+  };
+  tilt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ca4k0clwf0rkvy7726x4nxpjxkpv67w043i39saxgldxd97zmwz";
+      type = "gem";
+    };
+    version = "2.0.9";
+  };
+  tiny_tds = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0z2n1qwad86zkcmmq883bw8rgidjsqjphrbqf1mwyfi5y22jhxfp";
+      type = "gem";
+    };
+    version = "2.1.2";
+  };
+  treetop = {
+    dependencies = ["polyglot"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0g31pijhnv7z960sd09lckmw9h8rs3wmc8g4ihmppszxqm99zpv7";
+      type = "gem";
+    };
+    version = "1.6.10";
+  };
+  typhoeus = {
+    dependencies = ["ethon"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cni8b1idcp0dk8kybmxydadhfpaj3lbs99w5kjibv8bsmip2zi5";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  tzinfo = {
+    dependencies = ["thread_safe"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fjx9j327xpkkdlxwmkl3a8wqj7i4l4jwlrv3z13mg95z9wl253z";
+      type = "gem";
+    };
+    version = "1.2.5";
+  };
+  unf = {
+    dependencies = ["unf_ext"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9";
+      type = "gem";
+    };
+    version = "0.1.4";
+  };
+  unf_ext = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ll6w64ibh81qwvjx19h8nj7mngxgffg7aigjx11klvf5k2g4nxf";
+      type = "gem";
+    };
+    version = "0.0.7.6";
+  };
+  unicode-display_width = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08kfiniak1pvg3gn5k6snpigzvhvhyg7slmm0s2qx5zkj62c1z2w";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+  uuid4r = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qlcxzn8pnql34pcdrkd20kdla3k6n2sspaxp3lwwx8a87jnzbc3";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  whois = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12dlqsynscin7f0wrhkya505s22i92w9n8padjvjbhylrnja7rwx";
+      type = "gem";
+    };
+    version = "4.1.0";
+  };
+  xcodeproj = {
+    dependencies = ["CFPropertyList" "atomos" "claide" "colored2" "nanaimo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "162gwhrl7ppj6hlmnpp1scvy1ylcv5xqk51826v075sckdqjp8c8";
+      type = "gem";
+    };
+    version = "1.12.0";
+  };
+  xctasks = {
+    dependencies = ["nokogiri" "rake"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1m01vnmdy9m4hn85ajji5v595faqsy8d3a0r646q79vphw1fikj1";
+      type = "gem";
+    };
+    version = "0.6.0";
+  };
+  yard = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rxqwry3h2hjz069f0kfr140wgx1khgljnqf112dk5x9rm4l0xny";
+      type = "gem";
+    };
+    version = "0.9.20";
+  };
+  ZenTest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1h76ym6cx9b3an8hf1n5w85d1sj3anbvcs99vqw51vbamx84fyld";
+      type = "gem";
+    };
+    version = "4.11.2";
+  };
+  zookeeper = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1blww00r5za6vl46psaldxpllsxll78ms8rrs6qfwb1iaa8rla2d";
+      type = "gem";
+    };
+    version = "1.4.11";
+  };
+}
\ No newline at end of file