forked from mirrors/nixpkgs
52 lines
1.4 KiB
Nix
52 lines
1.4 KiB
Nix
|
{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;
|
||
|
};
|
||
|
}
|