3
0
Fork 0
forked from mirrors/nixpkgs
nixpkgs/pkgs/development/interpreters/ruby/load-ruby-env.nix

52 lines
1.4 KiB
Nix
Raw Normal View History

2014-10-28 01:22:17 +00:00
{rubyLibsWith, callPackage, lib, fetchurl, fetchgit}:
let
sourceInstantiators = {
# Many ruby people use `git ls-files` to compose their gemspecs.
git = (attrs: fetchgit { inherit (attrs) url rev sha256 leaveDotGit; });
url = (attrs: fetchurl { inherit (attrs) url sha256; });
};
in
{
# Loads a set containing a ruby environment definition. The set's `gemset`
# key is expected to contain a set of gems. A gemset definition looks like this:
#
# {
# gemset = {
# rack-test = {
# version = "0.6.2";
# src = {
# type = "url";
# url = "https://rubygems.org/downloads/rack-test-0.6.2.gem";
# sha256 = "01mk715ab5qnqf6va8k3hjsvsmplrfqpz6g58qw4m3l8mim0p4ky";
# };
# dependencies = [ "rack" ];
# };
# };
# }
loadRubyEnv = expr: config:
let
expr' =
if builtins.isAttrs expr
then expr
else import expr;
gemset = lib.mapAttrs (name: attrs:
attrs // {
src = (sourceInstantiators."${attrs.src.type}") attrs.src;
dontBuild = !(attrs.src.type == "git");
}
) expr'.gemset;
ruby = config.ruby;
rubyLibs = rubyLibsWith ruby;
gems = rubyLibs.importGems gemset (config.gemOverrides or (gemset: {}));
gemPath = map (drv: "${drv}") (
builtins.filter lib.isDerivation (lib.attrValues gems)
);
in {
inherit ruby gems gemPath;
};
}