aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/pkgs/development/interpreters/ruby/ruby-version.nix
diff options
context:
space:
mode:
authorMx Kookie <kookie@spacekookie.de>2020-10-31 19:35:09 +0100
committerMx Kookie <kookie@spacekookie.de>2020-10-31 19:35:09 +0100
commitc4625b175f8200f643fd6e11010932ea44c78433 (patch)
treebce3f89888c8ac3991fa5569a878a9eab6801ccc /infra/libkookie/nixpkgs/pkgs/development/interpreters/ruby/ruby-version.nix
parent49f735974dd103039ddc4cb576bb76555164a9e7 (diff)
parentd661aa56a8843e991261510c1bb28fdc2f6975ae (diff)
Add 'infra/libkookie/' from commit 'd661aa56a8843e991261510c1bb28fdc2f6975ae'
git-subtree-dir: infra/libkookie git-subtree-mainline: 49f735974dd103039ddc4cb576bb76555164a9e7 git-subtree-split: d661aa56a8843e991261510c1bb28fdc2f6975ae
Diffstat (limited to 'infra/libkookie/nixpkgs/pkgs/development/interpreters/ruby/ruby-version.nix')
-rw-r--r--infra/libkookie/nixpkgs/pkgs/development/interpreters/ruby/ruby-version.nix63
1 files changed, 63 insertions, 0 deletions
diff --git a/infra/libkookie/nixpkgs/pkgs/development/interpreters/ruby/ruby-version.nix b/infra/libkookie/nixpkgs/pkgs/development/interpreters/ruby/ruby-version.nix
new file mode 100644
index 000000000000..b1cbbfc216dc
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/development/interpreters/ruby/ruby-version.nix
@@ -0,0 +1,63 @@
+# 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