summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--pkgs/development/ruby-modules/bundled-common/default.nix2
-rw-r--r--pkgs/development/ruby-modules/bundled-common/functions.nix20
-rw-r--r--pkgs/development/ruby-modules/bundled-common/test.nix29
-rw-r--r--pkgs/development/ruby-modules/bundler-env/default.nix8
-rw-r--r--pkgs/development/ruby-modules/testing/assertions.nix8
-rw-r--r--pkgs/development/ruby-modules/testing/tap-support.nix2
-rw-r--r--pkgs/development/ruby-modules/tool/default.nix32
7 files changed, 90 insertions, 11 deletions
diff --git a/pkgs/development/ruby-modules/bundled-common/default.nix b/pkgs/development/ruby-modules/bundled-common/default.nix
index 33a379c0275..e532224195f 100644
--- a/pkgs/development/ruby-modules/bundled-common/default.nix
+++ b/pkgs/development/ruby-modules/bundled-common/default.nix
@@ -7,10 +7,10 @@
 {
   name
 , pname ? name
+, gemdir
 , gemfile
 , lockfile
 , gemset
-, gemdir
 , ruby ? defs.ruby
 , gemConfig ? defaultGemConfig
 , postBuild ? null
diff --git a/pkgs/development/ruby-modules/bundled-common/functions.nix b/pkgs/development/ruby-modules/bundled-common/functions.nix
index ce8a1b69c74..1d7c4878e13 100644
--- a/pkgs/development/ruby-modules/bundled-common/functions.nix
+++ b/pkgs/development/ruby-modules/bundled-common/functions.nix
@@ -1,5 +1,25 @@
 { lib, gemConfig, ... }:
 rec {
+  bundlerFiles = {
+    gemfile ? null
+  , lockfile ? null
+  , gemset ? null
+  , gemdir ? null
+  , ...
+  }: {
+    gemfile =
+    if gemfile == null then assert gemdir != null; gemdir + "/Gemfile"
+    else gemfile;
+
+    lockfile =
+    if lockfile == null then assert gemdir != null; gemdir + "/Gemfile.lock"
+    else lockfile;
+
+    gemset =
+    if gemset == null then assert gemdir != null; gemdir + "/gemset.nix"
+    else gemset;
+  };
+
   filterGemset = {ruby, groups,...}@env: gemset: lib.filterAttrs (name: attrs: platformMatches ruby attrs && groupMatches groups attrs) gemset;
 
   platformMatches = {rubyEngine, version, ...}@ruby: attrs: (
diff --git a/pkgs/development/ruby-modules/bundled-common/test.nix b/pkgs/development/ruby-modules/bundled-common/test.nix
index b24a620ed50..ee3754595f3 100644
--- a/pkgs/development/ruby-modules/bundled-common/test.nix
+++ b/pkgs/development/ruby-modules/bundled-common/test.nix
@@ -7,7 +7,34 @@ let
   functions = (import ./functions.nix testConfigs);
 in
   builtins.concatLists [
-    (test.run "Filter empty gemset" {} (set: functions.filterGemset {inherit ruby; groups = ["default"]; } set == {}))
+    ( test.run "All set, no gemdir" (functions.bundlerFiles {
+      gemfile  = test/Gemfile;
+      lockfile = test/Gemfile.lock;
+      gemset   = test/gemset.nix;
+    }) {
+      gemfile  = should.equal test/Gemfile;
+      lockfile = should.equal test/Gemfile.lock;
+      gemset   = should.equal test/gemset.nix;
+    })
+
+    ( test.run "Just gemdir" (functions.bundlerFiles {
+      gemdir = test/.;
+    }) {
+      gemfile  = should.equal test/Gemfile;
+      lockfile = should.equal test/Gemfile.lock;
+      gemset   = should.equal test/gemset.nix;
+    })
+
+    ( test.run "Gemset and dir" (functions.bundlerFiles {
+      gemdir = test/.;
+      gemset = test/extraGemset.nix;
+    }) {
+      gemfile  = should.equal test/Gemfile;
+      lockfile = should.equal test/Gemfile.lock;
+      gemset   = should.equal test/extraGemset.nix;
+    })
+
+    ( test.run "Filter empty gemset" {} (set: functions.filterGemset {inherit ruby; groups = ["default"]; } set == {}))
     ( let gemSet = { test = { groups = ["x" "y"]; }; };
       in
       test.run "Filter matches a group" gemSet (set: functions.filterGemset {inherit ruby; groups = ["y" "z"];} set == gemSet))
diff --git a/pkgs/development/ruby-modules/bundler-env/default.nix b/pkgs/development/ruby-modules/bundler-env/default.nix
index 46d9e99f671..89fafb5f230 100644
--- a/pkgs/development/ruby-modules/bundler-env/default.nix
+++ b/pkgs/development/ruby-modules/bundler-env/default.nix
@@ -1,10 +1,6 @@
 { stdenv, runCommand, writeText, writeScript, writeScriptBin, ruby, lib
 , callPackage, defaultGemConfig, fetchurl, fetchgit, buildRubyGem, buildEnv
-, linkFarm
-, git
-, makeWrapper
-, bundler
-, tree
+, linkFarm, git, makeWrapper, bundler, tree
 }@defs:
 
 { name ? null
@@ -13,12 +9,12 @@
 , gemfile ? null
 , lockfile ? null
 , gemset ? null
+, groups ? ["default"]
 , ruby ? defs.ruby
 , gemConfig ? defaultGemConfig
 , postBuild ? null
 , document ? []
 , meta ? {}
-, groups ? ["default"]
 , ignoreCollisions ? false
 , ...
 }@args:
diff --git a/pkgs/development/ruby-modules/testing/assertions.nix b/pkgs/development/ruby-modules/testing/assertions.nix
index 3cf67d6f3eb..f28cfcd508d 100644
--- a/pkgs/development/ruby-modules/testing/assertions.nix
+++ b/pkgs/development/ruby-modules/testing/assertions.nix
@@ -3,7 +3,11 @@
   equal = expected: actual:
     if actual == expected then
       (test.passed "= ${toString expected}") else
-      (test.failed "'${toString actual}'(${builtins.typeOf actual}) != '${toString expected}'(${builtins.typeOf expected})");
+      (test.failed (
+      "expected '${toString expected}'(${builtins.typeOf expected})"
+      + " !=  "+
+      "actual '${toString actual}'(${builtins.typeOf actual})"
+      ));
 
   beASet = actual:
     if builtins.isAttrs actual then
@@ -15,7 +19,7 @@
     (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)}]");
+      (test.failed "keys differ: expected: [${lib.concatStringsSep ";" expected}] actual: [${lib.concatStringsSep ";" (builtins.attrNames actual)}]");
 
   havePrefix = expected: actual:
     if lib.hasPrefix expected actual then
diff --git a/pkgs/development/ruby-modules/testing/tap-support.nix b/pkgs/development/ruby-modules/testing/tap-support.nix
index ba576683d37..3147ed066c1 100644
--- a/pkgs/development/ruby-modules/testing/tap-support.nix
+++ b/pkgs/development/ruby-modules/testing/tap-support.nix
@@ -2,7 +2,7 @@ with builtins;
 let
   withIndexes = list: genList (idx: (elemAt list idx) // {index = idx;}) (length list);
 
-  testLine = report: "${okStr report} ${toString report.index} ${report.description}" + testDirective report + testYaml report;
+  testLine = report: "${okStr report} ${toString (report.index + 1)} ${report.description}" + testDirective report + testYaml report;
 
   testDirective = report: "";
 
diff --git a/pkgs/development/ruby-modules/tool/default.nix b/pkgs/development/ruby-modules/tool/default.nix
new file mode 100644
index 00000000000..02bf3b96a26
--- /dev/null
+++ b/pkgs/development/ruby-modules/tool/default.nix
@@ -0,0 +1,32 @@
+{ stdenv }@defs:
+
+{
+  name
+, gemdir
+, exes ? []
+, scripts ? []
+, postBuild
+}@args:
+
+let
+  basicEnv = (callPackage ../bundled-common {}) (args // { inherit name gemdir;
+    gemfile = gemfile';
+    lockfile  = lockfile';
+    gemset = gemset';
+  });
+
+  args = removeAttrs args_ [ "name" "postBuild" ]
+  // { inherit preferLocalBuild allowSubstitutes; }; # pass the defaults
+in
+   runCommand name args ''
+    mkdir -p $out; cd $out;
+      ${(lib.concatMapStrings (x: "ln -s '${basicEnv}/bin/${x}' '${x}';\n") exes)}
+      ${(lib.concatMapStrings (s: "makeWrapper ${out}/bin/$(basename ${s}) $srcdir/${s} " +
+              "--set BUNDLE_GEMFILE ${basicEnv.confFiles}/Gemfile "+
+              "--set BUNDLE_PATH ${basicEnv}/${ruby.gemPath} "+
+              "--set BUNDLE_FROZEN 1 "+
+              "--set GEM_HOME ${basicEnv}/${ruby.gemPath} "+
+              "--set GEM_PATH ${basicEnv}/${ruby.gemPath} "+
+              "--run \"cd $srcdir\";\n") scripts)}
+    ${postBuild}
+  ''