* Manage patches in git * Fixes the hook invocation to be more safe. Thanks @Mic92 * Install gems as user by default * Install gem binaries with the /usr/bin/env shebang * Fixes a bug where the passthru.libPath and passthru.gemPath would point to the wrong directory * Overhaul ruby version heuristics
		
			
				
	
	
		
			64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
# Contains the ruby version heuristics
 | 
						|
{ lib }:
 | 
						|
with lib;
 | 
						|
let
 | 
						|
  # The returned set should be immutable
 | 
						|
  rubyVersion = major: minor: tiny: tail:
 | 
						|
    rec {
 | 
						|
      inherit major minor tiny tail;
 | 
						|
 | 
						|
      # Contains the patch number "223" if tail is "p223" or null
 | 
						|
      patchLevel =
 | 
						|
        let
 | 
						|
          p = removePrefix "p" tail;
 | 
						|
          isPosInt = num:
 | 
						|
            0 == stringLength
 | 
						|
              (replaceStrings
 | 
						|
              ["0" "1" "2" "3" "4" "5" "6" "7" "8" "9"]
 | 
						|
              [""  ""  ""  ""  ""  ""  ""  ""  ""  "" ]
 | 
						|
              num);
 | 
						|
        in
 | 
						|
          if hasPrefix "p" tail && isPosInt p then p
 | 
						|
          else null;
 | 
						|
 | 
						|
      # Shortcuts
 | 
						|
      majMin = "${major}.${minor}";
 | 
						|
      majMinTiny = "${major}.${minor}.${tiny}";
 | 
						|
 | 
						|
      # Ruby separates lib and gem folders by ABI version which isn't very
 | 
						|
      # consistent.
 | 
						|
      libDir =
 | 
						|
        if versionAtLeast majMinTiny "2.1.0" then
 | 
						|
          "${majMin}.0"
 | 
						|
        else if versionAtLeast majMinTiny "2.0.0" then
 | 
						|
          "2.0.0"
 | 
						|
        else if versionAtLeast majMinTiny "1.9.1" then
 | 
						|
          "1.9.1"
 | 
						|
        else
 | 
						|
          throw "version ${majMinTiny} is not supported";
 | 
						|
 | 
						|
      # How ruby releases are tagged on github.com/ruby/ruby
 | 
						|
      gitTag =
 | 
						|
        let
 | 
						|
          base = "v${major}_${minor}_${tiny}";
 | 
						|
        in
 | 
						|
          if patchLevel != null then
 | 
						|
            "${base}_${patchLevel}"
 | 
						|
          else
 | 
						|
            if tail != "" then
 | 
						|
              "${base}_${tail}"
 | 
						|
            else
 | 
						|
              base;
 | 
						|
 | 
						|
      # Implements the builtins.toString interface.
 | 
						|
      __toString = self:
 | 
						|
        self.majMinTiny + (
 | 
						|
          if self.patchLevel != null then
 | 
						|
            "-p${self.patchLevel}"
 | 
						|
          else if self.tail != "" then
 | 
						|
            "-${self.tail}"
 | 
						|
          else "");
 | 
						|
    };
 | 
						|
in
 | 
						|
  rubyVersion
 |