From 998d011e426c2f8c51946ebbc4931a464f531db9 Mon Sep 17 00:00:00 2001 From: Judson Date: Sat, 27 May 2017 15:19:34 -0700 Subject: Restructuring files --- .../ruby-modules/testing/assertions.nix | 24 ++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 pkgs/development/ruby-modules/testing/assertions.nix (limited to 'pkgs/development/ruby-modules/testing/assertions.nix') diff --git a/pkgs/development/ruby-modules/testing/assertions.nix b/pkgs/development/ruby-modules/testing/assertions.nix new file mode 100644 index 000000000000..3cf67d6f3eb6 --- /dev/null +++ b/pkgs/development/ruby-modules/testing/assertions.nix @@ -0,0 +1,24 @@ +{ test, lib, ...}: +{ + equal = expected: actual: + if actual == expected then + (test.passed "= ${toString expected}") else + (test.failed "'${toString actual}'(${builtins.typeOf actual}) != '${toString expected}'(${builtins.typeOf expected})"); + + beASet = actual: + 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}'"); +} -- cgit 1.4.1 From c4fc70f53cfaf673bde7fd009826d62bececa161 Mon Sep 17 00:00:00 2001 From: Judson Date: Wed, 31 May 2017 09:44:46 -0700 Subject: Starting to add tool builder. Extracting bundler file computation. --- .../ruby-modules/bundled-common/default.nix | 2 +- .../ruby-modules/bundled-common/functions.nix | 20 ++++++++++++++ .../ruby-modules/bundled-common/test.nix | 29 +++++++++++++++++++- .../ruby-modules/bundler-env/default.nix | 8 ++---- .../ruby-modules/testing/assertions.nix | 8 ++++-- .../ruby-modules/testing/tap-support.nix | 2 +- pkgs/development/ruby-modules/tool/default.nix | 32 ++++++++++++++++++++++ 7 files changed, 90 insertions(+), 11 deletions(-) create mode 100644 pkgs/development/ruby-modules/tool/default.nix (limited to 'pkgs/development/ruby-modules/testing/assertions.nix') diff --git a/pkgs/development/ruby-modules/bundled-common/default.nix b/pkgs/development/ruby-modules/bundled-common/default.nix index 33a379c02759..e532224195f9 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 ce8a1b69c749..1d7c4878e13b 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 b24a620ed507..ee3754595f39 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 46d9e99f671e..89fafb5f230b 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 3cf67d6f3eb6..f28cfcd508d4 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 ba576683d372..3147ed066c11 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 000000000000..02bf3b96a267 --- /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} + '' -- cgit 1.4.1