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-27 15:19:34 -0700
committerJudson <nyarly@gmail.com>2017-05-27 15:19:34 -0700
commit998d011e426c2f8c51946ebbc4931a464f531db9 (patch)
treef7c29caa5789057980f0627fd4e9435b35e34000 /pkgs/development/ruby-modules/bundler-env
parent022be78eb26de958e50e32ac40574e93ac81bee3 (diff)
downloadnixpkgs-998d011e426c2f8c51946ebbc4931a464f531db9.tar
nixpkgs-998d011e426c2f8c51946ebbc4931a464f531db9.tar.gz
nixpkgs-998d011e426c2f8c51946ebbc4931a464f531db9.tar.bz2
nixpkgs-998d011e426c2f8c51946ebbc4931a464f531db9.tar.lz
nixpkgs-998d011e426c2f8c51946ebbc4931a464f531db9.tar.xz
nixpkgs-998d011e426c2f8c51946ebbc4931a464f531db9.tar.zst
nixpkgs-998d011e426c2f8c51946ebbc4931a464f531db9.zip
Restructuring files
Diffstat (limited to 'pkgs/development/ruby-modules/bundler-env')
-rw-r--r--pkgs/development/ruby-modules/bundler-env/assertions.nix24
-rw-r--r--pkgs/development/ruby-modules/bundler-env/basic.nix140
-rw-r--r--pkgs/development/ruby-modules/bundler-env/default.nix4
-rw-r--r--pkgs/development/ruby-modules/bundler-env/functions.nix53
-rw-r--r--pkgs/development/ruby-modules/bundler-env/gen-bin-stubs.rb47
-rwxr-xr-xpkgs/development/ruby-modules/bundler-env/runtests.sh2
-rw-r--r--pkgs/development/ruby-modules/bundler-env/stubs.nix33
-rw-r--r--pkgs/development/ruby-modules/bundler-env/tap-support.nix20
-rw-r--r--pkgs/development/ruby-modules/bundler-env/test.nix44
-rw-r--r--pkgs/development/ruby-modules/bundler-env/testing.nix62
10 files changed, 7 insertions, 422 deletions
diff --git a/pkgs/development/ruby-modules/bundler-env/assertions.nix b/pkgs/development/ruby-modules/bundler-env/assertions.nix
deleted file mode 100644
index 3cf67d6f3eb..00000000000
--- a/pkgs/development/ruby-modules/bundler-env/assertions.nix
+++ /dev/null
@@ -1,24 +0,0 @@
-{ 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}'");
-}
diff --git a/pkgs/development/ruby-modules/bundler-env/basic.nix b/pkgs/development/ruby-modules/bundler-env/basic.nix
deleted file mode 100644
index 33a379c0275..00000000000
--- a/pkgs/development/ruby-modules/bundler-env/basic.nix
+++ /dev/null
@@ -1,140 +0,0 @@
-{ stdenv, runCommand, ruby, lib
-, defaultGemConfig, buildRubyGem, buildEnv
-, makeWrapper
-, bundler
-}@defs:
-
-{
-  name
-, pname ? name
-, gemfile
-, lockfile
-, gemset
-, gemdir
-, ruby ? defs.ruby
-, gemConfig ? defaultGemConfig
-, postBuild ? null
-, document ? []
-, meta ? {}
-, groups ? ["default"]
-, ignoreCollisions ? false
-, ...
-}@args:
-
-with  import ./functions.nix { inherit lib gemConfig; };
-
-let
-
-  importedGemset = import gemset;
-
-  filteredGemset = filterGemset { inherit ruby groups; } importedGemset;
-
-  configuredGemset = lib.flip lib.mapAttrs filteredGemset (name: attrs:
-    applyGemConfigs (attrs // { inherit ruby; gemName = name; })
-  );
-
-  hasBundler = builtins.hasAttr "bundler" filteredGemset;
-
-  bundler =
-    if hasBundler then gems.bundler
-    else defs.bundler.override (attrs: { inherit ruby; });
-
-  gems = lib.flip lib.mapAttrs configuredGemset (name: attrs: buildGem name attrs);
-
-  copyIfBundledByPath = { bundledByPath ? false, ...}@main:
-  (if bundledByPath then ''
-  cp -a ${gemdir}/* $out/
-  '' else ""
-  );
-
-  maybeCopyAll = pname: if pname == null then "" else
-  let
-    mainGem = gems."${pname}" or (throw "bundlerEnv: gem ${pname} not found");
-  in
-    copyIfBundledByPath mainGem;
-
-  # We have to normalize the Gemfile.lock, otherwise bundler tries to be
-  # helpful by doing so at run time, causing executables to immediately bail
-  # out. Yes, I'm serious.
-  confFiles = runCommand "gemfile-and-lockfile" {} ''
-    mkdir -p $out
-    ${maybeCopyAll pname}
-    cp ${gemfile} $out/Gemfile || ls -l $out/Gemfile
-    cp ${lockfile} $out/Gemfile.lock || ls -l $out/Gemfile.lock
-  '';
-
-  buildGem = name: attrs: (
-    let
-      gemAttrs = composeGemAttrs ruby gems name attrs;
-    in
-    if gemAttrs.type == "path" then
-      pathDerivation gemAttrs
-    else
-      buildRubyGem gemAttrs
-  );
-
-  envPaths = lib.attrValues gems ++ lib.optional (!hasBundler) bundler;
-
-  basicEnv = buildEnv {
-    inherit ignoreCollisions;
-
-    name = if name == null then pname else name;
-
-    #name = pname;
-
-    paths = envPaths;
-    pathsToLink = [ "/lib" ];
-
-    postBuild = genStubsScript (defs // args // {
-      inherit confFiles bundler groups;
-      binPaths = envPaths;
-    }) + lib.optionalString (postBuild != null) postBuild;
-
-    meta = { platforms = ruby.meta.platforms; } // meta;
-
-    passthru = rec {
-      inherit ruby bundler gems mainGem confFiles; # drvName;
-
-      wrappedRuby =
-      stdenv.mkDerivation {
-        name = "wrapped-ruby-${pname}";
-        nativeBuildInputs = [ makeWrapper ];
-        buildCommand = ''
-          mkdir -p $out/bin
-          for i in ${ruby}/bin/*; do
-            makeWrapper "$i" $out/bin/$(basename "$i") \
-              --set BUNDLE_GEMFILE ${confFiles}/Gemfile \
-              --set BUNDLE_PATH ${basicEnv}/${ruby.gemPath} \
-              --set BUNDLE_FROZEN 1 \
-              --set GEM_HOME ${basicEnv}/${ruby.gemPath} \
-              --set GEM_PATH ${basicEnv}/${ruby.gemPath}
-          done
-        '';
-      };
-
-      env = let
-        irbrc = builtins.toFile "irbrc" ''
-          if !(ENV["OLD_IRBRC"].nil? || ENV["OLD_IRBRC"].empty?)
-            require ENV["OLD_IRBRC"]
-          end
-          require 'rubygems'
-          require 'bundler/setup'
-        '';
-        in stdenv.mkDerivation {
-          name = "${pname}-interactive-environment";
-          nativeBuildInputs = [ wrappedRuby basicEnv ];
-          shellHook = ''
-            export OLD_IRBRC="$IRBRC"
-            export IRBRC=${irbrc}
-          '';
-          buildCommand = ''
-            echo >&2 ""
-            echo >&2 "*** Ruby 'env' attributes are intended for interactive nix-shell sessions, not for building! ***"
-            echo >&2 ""
-            exit 1
-          '';
-        };
-    };
-  };
-in
-  basicEnv
diff --git a/pkgs/development/ruby-modules/bundler-env/default.nix b/pkgs/development/ruby-modules/bundler-env/default.nix
index 68267a4aead..46d9e99f671 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 {inherit lib ruby gemConfig groups; }) genStubsScript;
+  inherit (import ../bundled-common/functions.nix {inherit lib ruby gemConfig groups; }) genStubsScript;
 
   drvName =
     if name != null then lib.traceVal name
@@ -43,7 +43,7 @@ let
     if gemset == null then gemdir + "/gemset.nix"
     else gemset;
 
-  basicEnv = (callPackage ./basic.nix {}) (args // { inherit pname name gemdir;
+  basicEnv = (callPackage ../bundled-common {}) (args // { inherit pname name gemdir;
     gemfile = gemfile';
     lockfile  = lockfile';
     gemset = gemset';
diff --git a/pkgs/development/ruby-modules/bundler-env/functions.nix b/pkgs/development/ruby-modules/bundler-env/functions.nix
deleted file mode 100644
index ce8a1b69c74..00000000000
--- a/pkgs/development/ruby-modules/bundler-env/functions.nix
+++ /dev/null
@@ -1,53 +0,0 @@
-{ lib, gemConfig, ... }:
-rec {
-  filterGemset = {ruby, groups,...}@env: gemset: lib.filterAttrs (name: attrs: platformMatches ruby attrs && groupMatches groups attrs) gemset;
-
-  platformMatches = {rubyEngine, version, ...}@ruby: attrs: (
-  !(attrs ? "platforms") ||
-  builtins.length attrs.platforms == 0 ||
-    builtins.any (platform:
-      platform.engine == rubyEngine &&
-        (!(platform ? "version") || platform.version == version.majMin)
-    ) attrs.platforms
-  );
-
-  groupMatches = groups: attrs: (
-  !(attrs ? "groups") ||
-    builtins.any (gemGroup: builtins.any (group: group == gemGroup) groups) attrs.groups
-  );
-
-  applyGemConfigs = attrs:
-    (if gemConfig ? "${attrs.gemName}"
-    then attrs // gemConfig."${attrs.gemName}" attrs
-    else attrs);
-
-  genStubsScript = { lib, ruby, confFiles, bundler, groups, binPaths, ... }: ''
-      ${ruby}/bin/ruby ${./gen-bin-stubs.rb} \
-        "${ruby}/bin/ruby" \
-        "${confFiles}/Gemfile" \
-        "$out/${ruby.gemPath}" \
-        "${bundler}/${ruby.gemPath}" \
-        ${lib.escapeShellArg binPaths} \
-        ${lib.escapeShellArg groups}
-    '';
-
-  pathDerivation = { gemName, version, path, ...  }:
-    let
-      res = {
-          type = "derivation";
-          bundledByPath = true;
-          name = gemName;
-          version = version;
-          outPath = path;
-          outputs = [ "out" ];
-          out = res;
-          outputName = "out";
-        };
-    in res;
-
-  composeGemAttrs = ruby: gems: name: attrs: ((removeAttrs attrs ["source" "platforms"]) // attrs.source // {
-    inherit ruby;
-    gemName = name;
-    gemPath = map (gemName: gems."${gemName}") (attrs.dependencies or []);
-  });
-}
diff --git a/pkgs/development/ruby-modules/bundler-env/gen-bin-stubs.rb b/pkgs/development/ruby-modules/bundler-env/gen-bin-stubs.rb
deleted file mode 100644
index 92321d6427d..00000000000
--- a/pkgs/development/ruby-modules/bundler-env/gen-bin-stubs.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-require 'rbconfig'
-require 'rubygems'
-require 'rubygems/specification'
-require 'fileutils'
-
-# args/settings
-out = ENV["out"]
-ruby = ARGV[0]
-gemfile = ARGV[1]
-bundle_path = ARGV[2]
-bundler_gem_path = ARGV[3]
-paths = ARGV[4].split
-groups = ARGV[5].split
-
-# generate binstubs
-FileUtils.mkdir_p("#{out}/bin")
-paths.each do |path|
-  next unless File.directory?("#{path}/nix-support/gem-meta")
-
-  name = File.read("#{path}/nix-support/gem-meta/name")
-  executables = File.read("#{path}/nix-support/gem-meta/executables").split
-  executables.each do |exe|
-    File.open("#{out}/bin/#{exe}", "w") do |f|
-      f.write(<<-EOF)
-#!#{ruby}
-#
-# This file was generated by Nix.
-#
-# The application '#{exe}' is installed as part of a gem, and
-# this file is here to facilitate running it.
-#
-
-ENV["BUNDLE_GEMFILE"] = #{gemfile.dump}
-ENV["BUNDLE_PATH"] = #{bundle_path.dump}
-ENV['BUNDLE_FROZEN'] = '1'
-
-Gem.use_paths(#{bundler_gem_path.dump}, ENV["GEM_PATH"])
-
-require 'bundler'
-Bundler.setup(#{groups.map(&:dump).join(', ')})
-
-load Gem.bin_path(#{name.dump}, #{exe.dump})
-EOF
-      FileUtils.chmod("+x", "#{out}/bin/#{exe}")
-    end
-  end
-end
diff --git a/pkgs/development/ruby-modules/bundler-env/runtests.sh b/pkgs/development/ruby-modules/bundler-env/runtests.sh
deleted file mode 100755
index c3db8ed34af..00000000000
--- a/pkgs/development/ruby-modules/bundler-env/runtests.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/usr/bin/env bash
-nix-build -E 'with import <nixpkgs> { }; callPackage ./test.nix {}' --show-trace && cat result
diff --git a/pkgs/development/ruby-modules/bundler-env/stubs.nix b/pkgs/development/ruby-modules/bundler-env/stubs.nix
deleted file mode 100644
index 3585681478c..00000000000
--- a/pkgs/development/ruby-modules/bundler-env/stubs.nix
+++ /dev/null
@@ -1,33 +0,0 @@
-{ stdenv, lib, ruby, callPackage, ... }:
-let
-  real = {
-    inherit (stdenv) mkDerivation;
-  };
-  mkDerivation = {name, ...}@argSet:
-  derivation {
-    inherit name;
-    text = (builtins.toJSON (lib.filterAttrs ( n: v: builtins.any (x: x == n) ["name" "system"]) argSet));
-    builder = stdenv.shell;
-    args = [ "-c" "echo  $(<$textPath) > $out"];
-    system = stdenv.system;
-    passAsFile = ["text"];
-  };
-  fetchurl = {url?"", urls ? [],...}: "fetchurl:${if urls == [] then url else builtins.head urls}";
-
-  stdenv' = stdenv // {
-    inherit mkDerivation;
-    stubbed = true;
-  };
-  ruby' = ruby // {
-    stdenv = stdenv';
-    stubbed = true;
-  };
-in
-  {
-    ruby = ruby';
-    buildRubyGem = callPackage ../gem {
-      inherit fetchurl;
-      ruby = ruby';
-    };
-    stdenv = stdenv';
-  }
diff --git a/pkgs/development/ruby-modules/bundler-env/tap-support.nix b/pkgs/development/ruby-modules/bundler-env/tap-support.nix
deleted file mode 100644
index ba576683d37..00000000000
--- a/pkgs/development/ruby-modules/bundler-env/tap-support.nix
+++ /dev/null
@@ -1,20 +0,0 @@
-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;
-
-  testDirective = report: "";
-
-  testYaml = report: "";
-
-  okStr = { result, ...}: if result == "pass" then "ok" else "not ok";
-in
-  {
-    output = reports: ''
-      TAP version 13
-      1..${toString (length reports)}'' + (foldl' (l: r: l + "\n" + r) "" (map testLine (withIndexes reports))) + ''
-
-      # Finished at ${toString currentTime}
-      '';
-  }
diff --git a/pkgs/development/ruby-modules/bundler-env/test.nix b/pkgs/development/ruby-modules/bundler-env/test.nix
index e49c4fd93f2..63da7044c0c 100644
--- a/pkgs/development/ruby-modules/bundler-env/test.nix
+++ b/pkgs/development/ruby-modules/bundler-env/test.nix
@@ -1,27 +1,8 @@
-/*
-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
-*/
-{ stdenv, writeText, lib, ruby, defaultGemConfig, callPackage }@defs:
+{ stdenv, writeText, lib, ruby, defaultGemConfig, callPackage, test, stubs, should}@defs:
 let
-  test = import ./testing.nix;
-  tap = import ./tap-support.nix;
-  stubs = import ./stubs.nix defs;
-  should = import ./assertions.nix { inherit test lib; };
-
-  basicEnv = callPackage ./basic.nix stubs;
   bundlerEnv = callPackage ./default.nix stubs // {
-    inherit basicEnv;
-  };
-
-  testConfigs = {
-    inherit lib;
-    gemConfig =  defaultGemConfig;
+    basicEnv = callPackage ../bundled-common stubs;
   };
-  functions = (import ./functions.nix testConfigs);
 
   justName = bundlerEnv {
     name = "test-0.1.2";
@@ -35,21 +16,8 @@ let
     gemfile = ./test/Gemfile;
     lockfile = ./test/Gemfile.lock;
   };
-
-  results = builtins.concatLists [
-    (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))
-    ( let gemSet = { test = { platforms = []; }; };
-      in
-      test.run "Filter matches empty platforms list" gemSet (set: functions.filterGemset {inherit ruby; groups = [];} set == gemSet))
-    ( let gemSet = { test = { platforms = [{engine = ruby.rubyEngine; version = ruby.version.majMin;}]; }; };
-      in
-      test.run "Filter matches on platform" gemSet (set: functions.filterGemset {inherit ruby; groups = [];} set == gemSet))
-    ( let gemSet = { test = { groups = ["x" "y"]; }; };
-      in
-      test.run "Filter excludes based on groups" gemSet (set: functions.filterGemset {inherit ruby; groups = ["a" "b"];} set == {}))
+in
+  builtins.concatLists [
     (test.run "bundlerEnv { name }" justName {
       name = should.equal "test-0.1.2";
     })
@@ -62,6 +30,4 @@ let
         postBuild = should.havePrefix "/nix/store";
       }
     ])
-  ];
-in
-  writeText "test-results.tap" (tap.output results)
+  ]
diff --git a/pkgs/development/ruby-modules/bundler-env/testing.nix b/pkgs/development/ruby-modules/bundler-env/testing.nix
deleted file mode 100644
index 43d10fca044..00000000000
--- a/pkgs/development/ruby-modules/bundler-env/testing.nix
+++ /dev/null
@@ -1,62 +0,0 @@
-with builtins;
-let
-  /*
-  underTest = {
-    x = {
-      a = 1;
-      b = "2";
-    };
-  };
-
-  tests = [
-    (root: false)
-    {
-      x = [
-        (set: true)
-        {
-          a = (a: a > 1);
-          b = (b: b == "3");
-        }
-      ];
-    }
-  ];
-
-  results = run "Examples" underTest tests;
-  */
-
-  passed = desc: {
-    result = "pass";
-    description = desc;
-  };
-
-  failed = desc: {
-    result = "failed";
-    description = desc;
-  };
-
-  prefixName = name: res: {
-    inherit (res) result;
-    description = "${name}: ${res.description}";
-  };
-
-  run = name: under: tests: if isList tests then
-    (concatLists (map (run name under) tests))
-  else if isAttrs tests then
-    (concatLists (map (
-    subName: run (name + "." + subName) (if hasAttr subName under then getAttr subName under else "<MISSING!>") (getAttr subName tests)
-    ) (attrNames tests)))
-  else if isFunction tests then
-    let
-      res = tests under;
-    in
-      if isBool res then
-        [
-          (prefixName name (if tests under then passed "passed" else failed "failed"))
-        ]
-      else
-        [ (prefixName name res) ]
-  else [
-    failed (name ": not a function, list or set")
-  ];
-in
-  { inherit run passed failed; }