diff options
author | Charles Strahan <charles.c.strahan@gmail.com> | 2014-10-28 04:16:14 +0000 |
---|---|---|
committer | Charles Strahan <charles.c.strahan@gmail.com> | 2014-10-28 04:16:14 +0000 |
commit | e4a2a7e73e43dc84f9b5f58880efc08b132b9f29 (patch) | |
tree | c6fe8170a8254d0dd14f5fd4f82d33aee2e4b083 /pkgs/development/interpreters/ruby/load-ruby-env.nix | |
parent | 857f017a0d28a48fce37d8a71a3633b9f48e0950 (diff) | |
download | nixlib-e4a2a7e73e43dc84f9b5f58880efc08b132b9f29.tar nixlib-e4a2a7e73e43dc84f9b5f58880efc08b132b9f29.tar.gz nixlib-e4a2a7e73e43dc84f9b5f58880efc08b132b9f29.tar.bz2 nixlib-e4a2a7e73e43dc84f9b5f58880efc08b132b9f29.tar.lz nixlib-e4a2a7e73e43dc84f9b5f58880efc08b132b9f29.tar.xz nixlib-e4a2a7e73e43dc84f9b5f58880efc08b132b9f29.tar.zst nixlib-e4a2a7e73e43dc84f9b5f58880efc08b132b9f29.zip |
simplification / refactoring
Diffstat (limited to 'pkgs/development/interpreters/ruby/load-ruby-env.nix')
-rw-r--r-- | pkgs/development/interpreters/ruby/load-ruby-env.nix | 66 |
1 files changed, 20 insertions, 46 deletions
diff --git a/pkgs/development/interpreters/ruby/load-ruby-env.nix b/pkgs/development/interpreters/ruby/load-ruby-env.nix index e2f61d82d8bf..b73a9df9f83b 100644 --- a/pkgs/development/interpreters/ruby/load-ruby-env.nix +++ b/pkgs/development/interpreters/ruby/load-ruby-env.nix @@ -1,51 +1,25 @@ -{rubyLibsWith, callPackage, lib, fetchurl, fetchgit}: +{ pkgs, lib, callPackage, gemFixes }: -let +{ gemset, ruby ? pkgs.ruby, fixes ? gemFixes }@args: - 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; }); - }; +let + const = x: y: x; -in + buildRubyGem = callPackage ./gem.nix { inherit ruby; }; -{ - # 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: + instantiate = (name: attrs: 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; - }; -} + gemPath = map (name: gemset''."${name}") (attrs.dependencies or []); + fixedAttrs = attrs // (fixes."${name}" or (const {})) attrs; + in + buildRubyGem (fixedAttrs // { name = "${name}-${attrs.version}"; inherit gemPath; }) + ); + + gemset' = if builtins.isAttrs gemset then gemset else callPackage gemset { }; + + gemset'' = lib.flip lib.mapAttrs gemset' (name: attrs: + if (lib.isDerivation attrs) then attrs + else (instantiate name attrs) + ); + +in gemset'' |