diff --git a/doc/languages-frameworks/ruby.section.md b/doc/languages-frameworks/ruby.section.md new file mode 100644 index 000000000000..e4c4ffce0432 --- /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 {}; +ruby.withPackages (ps: with ps; [ nokogiri pry ]) +``` + +What's happening here? + +1. We begin with importing the Nix Packages collections. `import ` + imports the `` 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 { } }: +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 { } }: +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 { + 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 000000000000..fef6b75ded08 --- /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 02e76d5e127a..cfe76a2caa12 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 4e9bd0538a9d..7f6ca505fc11 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 f0322b67f61f..b754f9459861 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 000000000000..0cd04f07b94b --- /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 000000000000..ac0a33f45614 --- /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 {}).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 000000000000..e6ae3b5013fe --- /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 000000000000..92ded1004e37 --- /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 000000000000..760402d070c9 --- /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 5045c8894f24..eccf4850ffe9 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 000000000000..ed2321887a7b --- /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