about summary refs log tree commit diff
path: root/pkgs/development/interpreters/ruby/load-ruby-env.nix
diff options
context:
space:
mode:
authorCharles Strahan <charles.c.strahan@gmail.com>2014-10-28 04:16:14 +0000
committerCharles Strahan <charles.c.strahan@gmail.com>2014-10-28 04:16:14 +0000
commite4a2a7e73e43dc84f9b5f58880efc08b132b9f29 (patch)
treec6fe8170a8254d0dd14f5fd4f82d33aee2e4b083 /pkgs/development/interpreters/ruby/load-ruby-env.nix
parent857f017a0d28a48fce37d8a71a3633b9f48e0950 (diff)
downloadnixlib-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.nix66
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''