summary refs log tree commit diff
path: root/pkgs/development/ruby-modules/bundler-env
diff options
context:
space:
mode:
authorJudson <nyarly@gmail.com>2017-05-03 20:27:42 -0700
committerJudson <nyarly@gmail.com>2017-05-03 20:27:42 -0700
commit66fed6d28f70263f6a4105e6e8504742618932cb (patch)
tree8d8de9512cc89c211442cb25881afcebe3761eee /pkgs/development/ruby-modules/bundler-env
parent2b414e1c1553c1ff678d172f99da227670b8f68e (diff)
downloadnixpkgs-66fed6d28f70263f6a4105e6e8504742618932cb.tar
nixpkgs-66fed6d28f70263f6a4105e6e8504742618932cb.tar.gz
nixpkgs-66fed6d28f70263f6a4105e6e8504742618932cb.tar.bz2
nixpkgs-66fed6d28f70263f6a4105e6e8504742618932cb.tar.lz
nixpkgs-66fed6d28f70263f6a4105e6e8504742618932cb.tar.xz
nixpkgs-66fed6d28f70263f6a4105e6e8504742618932cb.tar.zst
nixpkgs-66fed6d28f70263f6a4105e6e8504742618932cb.zip
Basically working. Checking against actual use cases.
Diffstat (limited to 'pkgs/development/ruby-modules/bundler-env')
-rw-r--r--pkgs/development/ruby-modules/bundler-env/basic.nix8
-rw-r--r--pkgs/development/ruby-modules/bundler-env/default.nix12
-rw-r--r--pkgs/development/ruby-modules/bundler-env/functions.nix2
-rw-r--r--pkgs/development/ruby-modules/bundler-env/test.nix37
-rw-r--r--pkgs/development/ruby-modules/bundler-env/test/Gemfile0
-rw-r--r--pkgs/development/ruby-modules/bundler-env/test/Gemfile.lock0
6 files changed, 43 insertions, 16 deletions
diff --git a/pkgs/development/ruby-modules/bundler-env/basic.nix b/pkgs/development/ruby-modules/bundler-env/basic.nix
index 7f96a8ce0e7..4557a7500f6 100644
--- a/pkgs/development/ruby-modules/bundler-env/basic.nix
+++ b/pkgs/development/ruby-modules/bundler-env/basic.nix
@@ -82,15 +82,15 @@ let
     paths = envPaths;
     pathsToLink = [ "/lib" ];
 
-    postBuild = genStubsScript defs // args // {
-      inherit confFiles bundler;
+    postBuild = genStubsScript (defs // args // {
+      inherit confFiles bundler groups;
       binPaths = envPaths;
-    } + lib.optionalString (postBuild != null) postBuild;
+    }) + lib.optionalString (postBuild != null) postBuild;
 
     meta = { platforms = ruby.meta.platforms; } // meta;
 
     passthru = rec {
-      inherit ruby bundler gems; # drvName;
+      inherit ruby bundler gems mainGem confFiles; # drvName;
 
       wrappedRuby = stdenv.mkDerivation {
         name = "wrapped-ruby-${pname}";
diff --git a/pkgs/development/ruby-modules/bundler-env/default.nix b/pkgs/development/ruby-modules/bundler-env/default.nix
index d1fa4785c06..30896a598e4 100644
--- a/pkgs/development/ruby-modules/bundler-env/default.nix
+++ b/pkgs/development/ruby-modules/bundler-env/default.nix
@@ -24,7 +24,7 @@
 }@args:
 
 let
-  inherit (import ./functions.nix (defs // args)) genStubsScript;
+  inherit (import ./functions.nix {inherit lib ruby gemConfig groups; }) genStubsScript;
 
   drvName =
     if name != null then name
@@ -62,21 +62,21 @@ let
 
   # The basicEnv should be put into passthru so that e.g. nix-shell can use it.
 in
-  if builtins.trace "pname: ${toString pname}" pname == null then
+  if pname == null then
     basicEnv // { inherit name; }
   else
     (buildEnv {
       inherit ignoreCollisions;
 
-      name = builtins.trace "name: ${toString drvName}" drvName;
+      name = drvName;
 
       paths = envPaths;
       pathsToLink = [ "/lib" ];
 
-      postBuild = genStubsScript defs // args // {
-        inherit bundler;
+      postBuild = genStubsScript {
+        inherit lib ruby bundler groups;
         confFiles = basicEnv.confFiles;
-        binPaths = [ basicEnv.mainGem ];
+        binPaths = [ basicEnv.gems."${pname}" ];
       } + lib.optionalString (postBuild != null) postBuild;
 
       meta = { platforms = ruby.meta.platforms; } // meta;
diff --git a/pkgs/development/ruby-modules/bundler-env/functions.nix b/pkgs/development/ruby-modules/bundler-env/functions.nix
index 75dd276f663..21efcacff8a 100644
--- a/pkgs/development/ruby-modules/bundler-env/functions.nix
+++ b/pkgs/development/ruby-modules/bundler-env/functions.nix
@@ -20,7 +20,7 @@ rec {
     then attrs // gemConfig."${attrs.gemName}" attrs
     else attrs);
 
-  genStubsScript = { lib, ruby, confFiles, bundler, groups, binPaths }: ''
+  genStubsScript = { lib, ruby, confFiles, bundler, groups, binPaths, ... }: ''
       ${ruby}/bin/ruby ${./gen-bin-stubs.rb} \
         "${ruby}/bin/ruby" \
         "${confFiles}/Gemfile" \
diff --git a/pkgs/development/ruby-modules/bundler-env/test.nix b/pkgs/development/ruby-modules/bundler-env/test.nix
index 3f77eb1fb43..cb06d1012d2 100644
--- a/pkgs/development/ruby-modules/bundler-env/test.nix
+++ b/pkgs/development/ruby-modules/bundler-env/test.nix
@@ -1,9 +1,17 @@
+/*
+Run with:
+nix-build -E 'with import <nixpkgs> { }; callPackage ./test.nix {}' --show-trace; and cat result
+
+Confusingly, the ideal result ends with something like:
+error: build of ‘/nix/store/3245f3dcl2wxjs4rci7n069zjlz8qg85-test-results.tap.drv’ failed
+*/
 { writeText, lib, ruby, defaultGemConfig, callPackage }:
 let
   test = import ./testing.nix;
   tap = import ./tap-support.nix;
 
   bundlerEnv = callPackage ./default.nix {};
+  basicEnv = callPackage ./basic.nix {};
 
   testConfigs = {
     groups = ["default"];
@@ -22,6 +30,18 @@ let
     if builtins.isAttrs actual then
     (test.passed "is a set") else
     (test.failed "is not a set, was ${builtins.typeOf actual}: ${toString actual}");
+
+    haveKeys = expected: actual:
+    if builtins.all
+      (ex: builtins.any (ac: ex == ac) (builtins.attrNames actual))
+      expected then
+      (test.passed "has expected keys") else
+      (test.failed "keys differ: expected [${lib.concatStringsSep ";" expected}] have [${lib.concatStringsSep ";" (builtins.attrNames actual)}]");
+
+    havePrefix = expected: actual:
+    if lib.hasPrefix expected actual then
+    (test.passed "has prefix '${expected}'") else
+    (test.failed "prefix '${expected}' not found in '${actual}'");
   };
 
   justName = bundlerEnv {
@@ -29,9 +49,12 @@ let
     gemset = ./test/gemset.nix;
   };
 
-  pnamed = bundlerEnv {
+  pnamed = basicEnv {
     pname = "test";
+    gemdir = ./test;
     gemset = ./test/gemset.nix;
+    gemfile = ./test/Gemfile;
+    lockfile = ./test/Gemfile.lock;
   };
 
   results = builtins.concatLists [
@@ -40,10 +63,14 @@ let
       name = should.equal "test";
     })
     (test.run "bundlerEnv { pname }" pnamed
-     {
-      name = should.equal "test-0.1.2";
-      env = should.beASet;
-    })
+    [
+      (should.haveKeys [ "name" "env" "postBuild" ])
+      {
+        name = should.equal "test-0.1.2";
+        env = should.beASet;
+        postBuild = should.havePrefix "nananana";
+      }
+    ])
   ];
 in
   writeText "test-results.tap" (tap.output results)
diff --git a/pkgs/development/ruby-modules/bundler-env/test/Gemfile b/pkgs/development/ruby-modules/bundler-env/test/Gemfile
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/pkgs/development/ruby-modules/bundler-env/test/Gemfile
diff --git a/pkgs/development/ruby-modules/bundler-env/test/Gemfile.lock b/pkgs/development/ruby-modules/bundler-env/test/Gemfile.lock
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/pkgs/development/ruby-modules/bundler-env/test/Gemfile.lock