diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index 7f7d46af21..a7bbf9b8e2 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -197,6 +197,8 @@ (define-module (gnu packages admin)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-check)
+  #:use-module (gnu packages ruby-xyz)
   #:use-module (gnu packages selinux)
   #:use-module (gnu packages serialization)
   #:use-module (gnu packages sqlite)
diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm
index b4aca86774..cdc969e5be 100644
--- a/gnu/packages/backup.scm
+++ b/gnu/packages/backup.scm
@@ -101,7 +101,7 @@ (define-module (gnu packages backup)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages rsync)
-  #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-check)
   #:use-module (gnu packages serialization)
   #:use-module (gnu packages ssh)
   #:use-module (gnu packages time)
@@ -1221,8 +1221,8 @@ (define btrbk (search-input-file outputs "bin/btrbk"))
                                        "bin/mbuffer"
                                        "bin/ssh")))))))))
     (native-inputs
-     (if (supported-package? ruby-asciidoctor)
-         (list ruby-asciidoctor)
+     (if (supported-package? ruby-asciidoctor/minimal)
+         (list ruby-asciidoctor/minimal)
          '()))
     (inputs (list bash-minimal
                   btrfs-progs
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index a119a13a6f..4e289baeed 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -159,6 +159,8 @@ (define-module (gnu packages bioinformatics)
   #:use-module (gnu packages rpc)
   #:use-module (gnu packages rsync)
   #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-check)
+  #:use-module (gnu packages ruby-xyz)
   #:use-module (gnu packages serialization)
   #:use-module (gnu packages shells)
   #:use-module (gnu packages skribilo)
diff --git a/gnu/packages/ccache.scm b/gnu/packages/ccache.scm
index a1af25df2b..bc7c6bfb6c 100644
--- a/gnu/packages/ccache.scm
+++ b/gnu/packages/ccache.scm
@@ -30,7 +30,7 @@ (define-module (gnu packages ccache)
   #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages perl)
-  #:use-module (gnu packages ruby))
+  #:use-module (gnu packages ruby-check))
 
 (define-public ccache
   (package
@@ -64,8 +64,8 @@ (define-public ccache
                    (setenv "HOME" (getenv "TMPDIR")))))))
     (native-inputs
      (append (list perl which)
-             (if (supported-package? ruby-asciidoctor)
-               (list ruby-asciidoctor)
+             (if (supported-package? ruby-asciidoctor/minimal)
+               (list ruby-asciidoctor/minimal)
                '())))
     (inputs (list zlib `(,zstd "lib")))
     (home-page "https://ccache.dev/")
diff --git a/gnu/packages/cluster.scm b/gnu/packages/cluster.scm
index 6d5ea0c3b2..866cfdce5b 100644
--- a/gnu/packages/cluster.scm
+++ b/gnu/packages/cluster.scm
@@ -37,7 +37,7 @@ (define-module (gnu packages cluster)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages pkg-config)
-  #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-check)
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages texinfo)
@@ -135,12 +135,12 @@ (define-public drbd-utils
                    eudev                        ;just to satisfy a configure check
                    flex)
              ;; For the documentation.
-             (if (supported-package? ruby-asciidoctor)
+             (if (supported-package? ruby-asciidoctor/minimal)
                (list docbook-xml
                      docbook-xml-4.4            ;used by documentation/ra2refentry.xsl
                      docbook-xsl
                      libxslt                    ;for xsltproc
-                     ruby-asciidoctor)
+                     ruby-asciidoctor/minimal)
                '())))
     (home-page "https://www.linbit.com/drbd/")
     (synopsis "Replicate block devices between machines")
diff --git a/gnu/packages/compton.scm b/gnu/packages/compton.scm
index 6e8dd5442e..1d20cf3b27 100644
--- a/gnu/packages/compton.scm
+++ b/gnu/packages/compton.scm
@@ -43,7 +43,7 @@ (define-module (gnu packages compton)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
-  #:use-module (gnu packages ruby))
+  #:use-module (gnu packages ruby-check))
 
 (define-public compton
   (let ((upstream-version "0.1_beta2"))
@@ -146,8 +146,8 @@ (define-public picom
     (native-inputs
      (append
        (list pkg-config xorgproto)
-       (if (supported-package? ruby-asciidoctor)
-           (list ruby-asciidoctor)
+       (if (supported-package? ruby-asciidoctor/minimal)
+           (list ruby-asciidoctor/minimal)
            '())))
     (arguments
      (list #:build-type "release"
diff --git a/gnu/packages/cryptsetup.scm b/gnu/packages/cryptsetup.scm
index 44f9c77984..d2f537681d 100644
--- a/gnu/packages/cryptsetup.scm
+++ b/gnu/packages/cryptsetup.scm
@@ -32,7 +32,7 @@ (define-module (gnu packages cryptsetup)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages popt)
   #:use-module (gnu packages linux)
-  #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-check)
   #:use-module (gnu packages web))
 
 (define-public cryptsetup
@@ -71,8 +71,8 @@ (define-public cryptsetup
                          (assoc-ref %build-inputs "libgcrypt"))))))
    (native-inputs
     (append (list pkg-config)
-            (if (supported-package? ruby-asciidoctor)
-                (list ruby-asciidoctor)
+            (if (supported-package? ruby-asciidoctor/minimal)
+                (list ruby-asciidoctor/minimal)
                 '())))
    (inputs
     (list argon2
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index f7a6cf926d..d484aa08f0 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -162,6 +162,8 @@ (define-module (gnu packages databases)
   #:use-module (gnu packages regex)
   #:use-module (gnu packages rpc)
   #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-check)
+  #:use-module (gnu packages ruby-xyz)
   #:use-module (gnu packages serialization)
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages ssh)
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index 7dbb602785..09cd82d391 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -269,6 +269,8 @@ (define-module (gnu packages emacs-xyz)
   #:use-module (gnu packages pdf)
   #:use-module (gnu packages racket)
   #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-check)
+  #:use-module (gnu packages ruby-xyz)
   #:use-module (gnu packages rust)
   #:use-module (gnu packages rust-apps)
   #:use-module (gnu packages scheme)
diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm
index 8b1332e186..696ea6f669 100644
--- a/gnu/packages/engineering.scm
+++ b/gnu/packages/engineering.scm
@@ -158,7 +158,7 @@ (define-module (gnu packages engineering)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages readline)
-  #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-check)
   #:use-module (gnu packages sagemath)
   #:use-module (gnu packages serialization)
   #:use-module (gnu packages sqlite)
@@ -1403,7 +1403,7 @@ (define-public kicad-doc
                          perl-unicode-linebreak
                          perl-yaml-tiny
                          po4a
-                         ruby-asciidoctor
+                         ruby-asciidoctor/minimal
                          source-highlight))
     (home-page "https://kicad.org")
     (synopsis "KiCad official documentation")
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index db2f54790d..bc93a73647 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -217,7 +217,7 @@ (define-module (gnu packages games)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages readline)
-  #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-check)
   #:use-module (gnu packages shells)
   #:use-module (gnu packages sdl)
   #:use-module (gnu packages serialization)
@@ -6350,7 +6350,7 @@ (define-public warzone2100
                        "iV_DrawTextRotated(\"Press ESC to exit.\", "
                        "100, 100, 0.0f, font_regular);"))))))))
     (native-inputs (list asciidoc
-                     ruby-asciidoctor
+                     ruby-asciidoctor/minimal
                      gettext-minimal
                      pkg-config
                      unzip
@@ -8184,8 +8184,8 @@ (define-public open-adventure
              python-pylint
              python-pyyaml
              python-wrapper)
-       (if (supported-package? ruby-asciidoctor)
-           (list ruby-asciidoctor)
+       (if (supported-package? ruby-asciidoctor/minimal)
+           (list ruby-asciidoctor/minimal)
            '())))
     (home-page "https://gitlab.com/esr/open-adventure")
     (synopsis "Colossal Cave Adventure")
diff --git a/gnu/packages/gnome-xyz.scm b/gnu/packages/gnome-xyz.scm
index 904916594b..43322a1841 100644
--- a/gnu/packages/gnome-xyz.scm
+++ b/gnu/packages/gnome-xyz.scm
@@ -83,7 +83,7 @@ (define-module (gnu packages gnome-xyz)
   #:use-module (gnu packages ssh)
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages tls)
-  #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-xyz)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg))
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 56236013a7..eed35ebdfc 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -211,7 +211,7 @@ (define-module (gnu packages gnome)
   #:use-module (gnu packages rdesktop)
   #:use-module (gnu packages rdf)
   #:use-module (gnu packages readline)
-  #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-xyz)
   #:use-module (gnu packages rust)
   #:use-module (gnu packages samba)
   #:use-module (gnu packages scanner)
diff --git a/gnu/packages/groff.scm b/gnu/packages/groff.scm
index d4e1bc2127..5434c30888 100644
--- a/gnu/packages/groff.scm
+++ b/gnu/packages/groff.scm
@@ -35,7 +35,7 @@ (define-module (gnu packages groff)
   #:use-module (guix gexp)
   #:use-module (gnu packages)
   #:use-module (gnu packages bash)
-  #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-xyz)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages ghostscript)
diff --git a/gnu/packages/irc.scm b/gnu/packages/irc.scm
index 1ab72a3636..79039c6c58 100644
--- a/gnu/packages/irc.scm
+++ b/gnu/packages/irc.scm
@@ -103,6 +103,7 @@ (define-module (gnu packages irc)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages regex)
   #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-check)
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages qt)
@@ -389,7 +390,7 @@ (define-public weechat
     (native-inputs
      (append (list gettext-minimal pkg-config)
              (if (target-x86?)
-                 (list ruby-asciidoctor)
+                 (list ruby-asciidoctor/minimal)
                  '())))
     (inputs
      (list aspell
diff --git a/gnu/packages/kde-systemtools.scm b/gnu/packages/kde-systemtools.scm
index 4923854a7c..905cde5081 100644
--- a/gnu/packages/kde-systemtools.scm
+++ b/gnu/packages/kde-systemtools.scm
@@ -38,6 +38,7 @@ (define-module (gnu packages kde-systemtools)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-xyz)
   #:use-module (gnu packages search)
   #:use-module (gnu packages vnc)
   #:use-module (gnu packages perl)
diff --git a/gnu/packages/libffi.scm b/gnu/packages/libffi.scm
index 5ac092da1c..b1e8cd5333 100644
--- a/gnu/packages/libffi.scm
+++ b/gnu/packages/libffi.scm
@@ -39,7 +39,8 @@ (define-module (gnu packages libffi)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-xyz)
-  #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-check)
+  #:use-module (gnu packages ruby-xyz)
   #:use-module (gnu packages sphinx)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system pyproject)
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index 54941cc21a..5f475c20df 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -168,6 +168,8 @@ (define-module (gnu packages mail)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages regex)
   #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-check)
+  #:use-module (gnu packages ruby-xyz)
   #:use-module (gnu packages rust-apps)
   #:use-module (gnu packages samba)
   #:use-module (gnu packages screen)
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 74bdfab84c..2b0b2d2f92 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -184,7 +184,8 @@ (define-module (gnu packages maths)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages readline)
-  #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-check)
+  #:use-module (gnu packages ruby-xyz)
   #:use-module (gnu packages tbb)
   #:use-module (gnu packages scheme)
   #:use-module (gnu packages serialization)
diff --git a/gnu/packages/mpd.scm b/gnu/packages/mpd.scm
index 8ec02fcb55..7a3dd1a1e3 100644
--- a/gnu/packages/mpd.scm
+++ b/gnu/packages/mpd.scm
@@ -58,7 +58,7 @@ (define-module (gnu packages mpd)
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages readline)
-  #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-xyz)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages curl)
diff --git a/gnu/packages/ntp.scm b/gnu/packages/ntp.scm
index 089814b6ab..2ab3937b3b 100644
--- a/gnu/packages/ntp.scm
+++ b/gnu/packages/ntp.scm
@@ -41,7 +41,7 @@ (define-module (gnu packages ntp)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages readline)
-  #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-check)
   #:use-module (gnu packages time)
   #:use-module (gnu packages tls)
   #:use-module (guix build-system gnu)
@@ -109,8 +109,8 @@ (define-public chrony
     (native-inputs
      (append (list bison
                    pkg-config)
-             (if (supported-package? ruby-asciidoctor)
-                 (list ruby-asciidoctor)
+             (if (supported-package? ruby-asciidoctor/minimal)
+                 (list ruby-asciidoctor/minimal)
                  '())))
     (inputs
      (list gnutls libcap libseccomp nettle))
@@ -212,7 +212,7 @@ (define-public ntpsec
                          pkg-config
                          pps-tools
                          python-waf
-                         ruby-asciidoctor))
+                         ruby-asciidoctor/minimal))
     (inputs (cons* gpsd openssl
                    ;; Build with POSIX capabilities and syscall filtering
                    ;; support on GNU/Linux, for extra security features.
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index 0d307134ed..96b9107a19 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -109,7 +109,8 @@ (define-module (gnu packages package-management)
   #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
-  #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-check)
+  #:use-module (gnu packages ruby-xyz)
   #:use-module (gnu packages serialization)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages ssh)
diff --git a/gnu/packages/password-utils.scm b/gnu/packages/password-utils.scm
index 665f8c1399..566a033992 100644
--- a/gnu/packages/password-utils.scm
+++ b/gnu/packages/password-utils.scm
@@ -116,6 +116,7 @@ (define-module (gnu packages password-utils)
   #:use-module (gnu packages rdesktop)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-check)
   #:use-module (gnu packages security-token)
   #:use-module (gnu packages suckless)
   #:use-module (gnu packages tcl)
@@ -242,7 +243,8 @@ (define-public keepassxc
          (list "-DWITH_XC_ALL=YES"
                "-DWITH_XC_UPDATECHECK=NO")
          #$(if (member (%current-system)
-                       (package-transitive-supported-systems ruby-asciidoctor))
+                       (package-transitive-supported-systems
+                        ruby-asciidoctor/minimal))
                #~'()
                #~(list "-DWITH_XC_DOCS=NO")))
       #:phases
@@ -283,8 +285,9 @@ (define-public keepassxc
      (append
       (list qttools-5)
       (if (member (%current-system)
-                  (package-transitive-supported-systems ruby-asciidoctor))
-          (list ruby-asciidoctor)
+                  (package-transitive-supported-systems
+                   ruby-asciidoctor/minimal))
+          (list ruby-asciidoctor/minimal)
           '())))
     (inputs
      (list argon2
diff --git a/gnu/packages/plotutils.scm b/gnu/packages/plotutils.scm
index feec60ca42..fd63e6952c 100644
--- a/gnu/packages/plotutils.scm
+++ b/gnu/packages/plotutils.scm
@@ -56,7 +56,8 @@ (define-module (gnu packages plotutils)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages readline)
-  #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-check)
+  #:use-module (gnu packages ruby-xyz)
   #:use-module (gnu packages statistics)
   #:use-module (gnu packages tex)
   #:use-module (gnu packages texinfo)
diff --git a/gnu/packages/protobuf.scm b/gnu/packages/protobuf.scm
index 0d0fc4b808..65fa686898 100644
--- a/gnu/packages/protobuf.scm
+++ b/gnu/packages/protobuf.scm
@@ -51,7 +51,8 @@ (define-module (gnu packages protobuf)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages rpc)
   #:use-module (gnu packages rails)
-  #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-check)
+  #:use-module (gnu packages ruby-xyz)
   #:use-module (srfi srfi-1))
 
 (define-public fstrm
diff --git a/gnu/packages/radio.scm b/gnu/packages/radio.scm
index 175ed05f8c..efdb0dbd79 100644
--- a/gnu/packages/radio.scm
+++ b/gnu/packages/radio.scm
@@ -103,7 +103,7 @@ (define-module (gnu packages radio)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages readline)
-  #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-check)
   #:use-module (gnu packages sdl)
   #:use-module (gnu packages serialization)
   #:use-module (gnu packages sphinx)
@@ -1773,8 +1773,8 @@ (define-public wsjtx
                    gfortran
                    pkg-config
                    qttools-5)
-             (if (supported-package? ruby-asciidoctor)
-               (list ruby-asciidoctor)
+             (if (supported-package? ruby-asciidoctor/minimal)
+               (list ruby-asciidoctor/minimal)
                '())))
     (inputs
      (list boost
@@ -1811,8 +1811,8 @@ (define-public jtdx
     (build-system qt-build-system)
     (native-inputs
      (append (list asciidoc gfortran pkg-config qttools-5)
-             (if (supported-package? ruby-asciidoctor)
-                 (list ruby-asciidoctor)
+             (if (supported-package? ruby-asciidoctor/minimal)
+                 (list ruby-asciidoctor/minimal)
                  '())))
     (inputs
      (list
diff --git a/gnu/packages/rails.scm b/gnu/packages/rails.scm
index 2045be03f0..2a7aa36f82 100644
--- a/gnu/packages/rails.scm
+++ b/gnu/packages/rails.scm
@@ -32,6 +32,8 @@ (define-module (gnu packages rails)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages node)
   #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-check)
+  #:use-module (gnu packages ruby-xyz)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages version-control)
   #:use-module (guix build-system ruby))
diff --git a/gnu/packages/ruby-check.scm b/gnu/packages/ruby-check.scm
index bb42267b12..5db07ff240 100644
--- a/gnu/packages/ruby-check.scm
+++ b/gnu/packages/ruby-check.scm
@@ -1,4 +1,37 @@
 ;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2015-2018 Ben Woodcroft <donttrustben@gmail.com>
+;;; Copyright © 2015 David Thompson <davet@gnu.org>
+;;; Copyright © 2015 Pjotr Prins <pjotr.guix@thebird.nl>
+;;; Copyright © 2015, 2019 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2016 Muriithi Frederick Muriuki <fredmanglis@gmail.com>
+;;; Copyright © 2017-2020, 2023 Christopher Baines <mail@cbaines.net>
+;;; Copyright © 2017, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017 nikita <nikita@n0.is>
+;;; Copyright © 2018 Danny Milosavljevic <dannym@scratchpost.org>
+;;; Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2019 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
+;;; Copyright © 2019 Brian Leung <bkleung89@gmail.com>
+;;; Copyright © 2019 Collin J. Doering <collin@rekahsoft.ca>
+;;; Copyright © 2019 Jelle Licht <jlicht@fsfe.org>
+;;; Copyright © 2019 Mikhail Kirillov <w96k.ru@gmail.com>
+;;; Copyright © 2020 Holger Peters <holger.peters@posteo.de>
+;;; Copyright © 2020, 2021, 2022 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2020, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2021 EuAndreh <eu@euandre.org>
+;;; Copyright © 2021 Giacomo Leidi <goodoldpaul@autistici.org>
+;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2021 Mathieu Othacehe <othacehe@gnu.org>
+;;; Copyright © 2022, 2024 Danny Milosavljevic <dannym@scratchpost.org>
+;;; Copyright © 2022 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2022 Philip McGrath <philip@philipmcgrath.com>
+;;; Copyright © 2022 Stephen Paul Weber <singpolyma@singpolyma.net>
+;;; Copyright © 2022 Taiju HIGASHI <higashi@taiju.info>
+;;; Copyright © 2022 Tom Fitzhenry <tom@tom-fitzhenry.me.uk>
+;;; Copyright © 2023 gemmaro <gemmaro.dev@gmail.com>
+;;; Copyright © 2023 Hartmut Goebel <h.goebel@crazy-compilers.com>
+;;; Copyright © 2023 Yovan Naumovski <yovan@gorski.stream>
+;;; Copyright © 2025 Nicolas Graves <ngraves@ngraves.fr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -18,10 +51,13 @@
 (define-module (gnu packages ruby-check)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix build-system ruby)
+  #:use-module (guix download)
   #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix packages)
-  #:use-module (gnu packages))
+  #:use-module (guix utils)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages ruby))
 
 ;;; Commentary:
 ;;;
@@ -30,6 +66,1125 @@ (define-module (gnu packages ruby-check)
 ;;; Code:
 
 
+;; Bundler is yet another source of circular dependencies, so we must disable
+;; its test suite as well.
+(define-public bundler
+  (package
+    (name "bundler")
+    (version "2.4.18")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "bundler" version))
+              (sha256
+               (base32
+                "03ppd60cbwzlrhsidi7frj826ssmxzwd954ikjk7966l45qx5xxn"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; avoid dependency cycles
+    (synopsis "Ruby gem bundler")
+    (description "Bundler automatically downloads and installs a list of gems
+specified in a \"Gemfile\", as well as their dependencies.")
+    (home-page "https://bundler.io/")
+    (license license:expat)))
+
+(define-public ruby-asciidoctor/minimal
+  (hidden-package
+   (package
+     (name "ruby-asciidoctor")
+     (version "2.0.20")
+     (source
+      (origin
+        (method git-fetch)               ;the gem release lacks a Rakefile
+        (uri (git-reference
+              (url "https://github.com/asciidoctor/asciidoctor")
+              (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32
+          "19qvilhwa9plg80ppspn5ys0ybl8qfyaicqbl9w316hk5ldwi1jq"))))
+     (build-system ruby-build-system)
+     (arguments (list #:tests? #f))
+     (synopsis "Converter from AsciiDoc content to other formats")
+     (description "Asciidoctor is a text processor and publishing toolchain for
+converting AsciiDoc content to HTML5, DocBook 5, PDF, and other formats.")
+     (home-page "https://asciidoctor.org")
+     (license license:expat))))
+
+(define-public ruby-builder
+  (package
+    (name "ruby-builder")
+    (version "3.2.4")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "builder" version))
+              (sha256
+               (base32
+                "045wzckxpwcqzrjr353cxnyaxgf0qg22jh00dcx7z38cys5g1jlr"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch
+            (lambda _
+              (substitute* "rakelib/tags.rake"
+                (("File\\.exists\\?") "File.exist?"))
+
+              ;; TODO This test is broken
+              ;; https://github.com/tenderlove/builder/issues/13
+              (substitute* "test/test_blankslate.rb"
+                (("test_late_included_module_in_kernel_is_ok")
+                 "test_late_included_module_in_kernel_is_ok
+    skip(\"test expected to fail\")
+"))
+              (substitute* "rakelib/tags.rake"
+                (("RVM_GEMDIR = .*") "RVM_GEMDIR = 'no-rvm-please'\n")))))))
+    (synopsis "Ruby library to create structured data")
+    (description "Builder provides a number of builder objects that make it
+easy to create structured data.  Currently the following builder objects are
+supported: XML Markup and XML Events.")
+    (home-page "https://github.com/tenderlove/builder")
+    (license license:expat)))
+
+(define-public ruby-cucumber-ci-environment
+  (package
+    (name "ruby-cucumber-ci-environment")
+    (version "9.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "cucumber-ci-environment" version))
+              (sha256
+               (base32
+                "1nmn2hfrjlbazgcryr3hwvsa5v4csfbjqxb4q7wbjhaxl9xxn0k7"))))
+    (build-system ruby-build-system)
+    (arguments (list #:phases #~(modify-phases %standard-phases
+                                  (replace 'check
+                                    (lambda* (#:key tests? #:allow-other-keys)
+                                      (when tests?
+                                        (invoke "rspec")))))))
+    (native-inputs (list ruby-rspec))
+    (synopsis "Detect CI Environment from environment variables")
+    (description "This is a Ruby utility library for Cucumber that detects a
+CI environment from environment variables.")
+    (home-page "https://github.com/cucumber/ci-environment")
+    (license license:expat)))
+
+(define-public ruby-cucumber-compatibility-kit
+  (package
+    (name "ruby-cucumber-compatibility-kit")
+    (version "11.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "cucumber-compatibility-kit" version))
+              (sha256
+               (base32
+                "17c8zx0yn68rcpfbw4nb1gzvh9fzpwsi1y0qivb99ahdlgzcdp8q"))))
+    (build-system ruby-build-system)
+    (arguments (list #:phases #~(modify-phases %standard-phases
+                                  (replace 'check
+                                    (lambda* (#:key tests? #:allow-other-keys)
+                                      (when tests?
+                                        (invoke "rspec")))))))
+    (propagated-inputs (list ruby-cucumber-messages ruby-rake ruby-rspec))
+    (synopsis "Cucumber compatibility verification utility")
+    (description "The Cucumber Compatibility Kit (CCK) aims to validate a
+Cucumber implementation's support for the Cucumber Messages protocol.")
+    (home-page "https://github.com/cucumber/compatibility-kit")
+    (license license:expat)))
+
+;;; Variant package to break a cycle with ruby-cucumber-messages.
+(define ruby-cucumber-compatibility-kit-bootstrap
+  (package/inherit ruby-cucumber-compatibility-kit
+    (arguments (list #:tests? #f))
+    (propagated-inputs (modify-inputs (package-propagated-inputs
+                                       ruby-cucumber-compatibility-kit)
+                         (delete "ruby-cucumber-messages")))))
+
+(define-public ruby-cucumber-core
+  (package
+    (name "ruby-cucumber-core")
+    (version "11.1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/cucumber/cucumber-ruby-core")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0lf2inlam0951djc2qz81x0nkffmw2dpj44iadw1fw31m7r8wqvh"))))
+    (build-system ruby-build-system)
+    (arguments (list #:test-target "spec"
+                     #:phases
+                     #~(modify-phases %standard-phases
+                         (add-after 'extract-gemspec 'relax-version-requirements
+                           (lambda _
+                             (substitute* "cucumber-core.gemspec"
+                               (("'cucumber-tag-expressions',.*")
+                                "'cucumber-tag-expressions', '>=4.1.0'\n")))))))
+    (native-inputs
+     (list ruby-rspec
+           ruby-rubocop/minimal
+           ruby-simplecov
+           ruby-unindent))
+    (propagated-inputs
+     (list ruby-cucumber-gherkin
+           ruby-cucumber-messages
+           ruby-cucumber-tag-expressions))
+    (synopsis "Core library for the Cucumber BDD app")
+    (description "Cucumber is a tool for running automated tests
+written in plain language.  Because they're written in plain language,
+they can be read by anyone on your team.  Because they can be read by
+anyone, you can use them to help improve communication, collaboration
+and trust on your team.")
+    (home-page "https://cucumber.io/")
+    (license license:expat)))
+
+(define-public ruby-cucumber-expressions
+  (package
+    (name "ruby-cucumber-expressions")
+    (version "16.1.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/cucumber/cucumber-expressions")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1dhq88k9x2x8svam5bc7rrcd166fqymda8wxryqkbkffhnzla0id"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:test-target "spec"
+           #:phases #~(modify-phases %standard-phases
+                        (add-after 'unpack 'chdir
+                          (lambda _
+                            (chdir "ruby"))))))
+    (native-inputs (list ruby-rspec ruby-simplecov))
+    (synopsis "Simpler alternative to Regular Expressions")
+    (description "Cucumber Expressions offer similar functionality to Regular
+Expressions, with a syntax that is easier to read and write.  Cucumber
+Expressions are extensible with parameter types.")
+    (home-page "https://github.com/cucumber/cucumber-expressions/")
+    (license license:expat)))
+
+(define-public ruby-cucumber-gherkin
+  (package
+    (name "ruby-cucumber-gherkin")
+    (version "26.1.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/cucumber/gherkin")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1rsannfcg5rqh5a3d3paw10kf6mmqjrgbq3k235px4swbyqysmgn"))))
+    (build-system ruby-build-system)
+    (arguments (list #:test-target "spec"
+                     #:phases #~(modify-phases %standard-phases
+                                  (add-after 'unpack 'chdir
+                                    (lambda _
+                                      (chdir "ruby"))))))
+    (native-inputs (list ruby-rspec))
+    (propagated-inputs (list ruby-cucumber-messages))
+    (synopsis "Gherkin parser for Ruby")
+    (description "Gherkin is a parser and compiler for the Gherkin language.
+It is intended be used by all Cucumber implementations to parse
+@file{.feature} files.")
+    (home-page "https://github.com/cucumber/gherkin")
+    (license license:expat)))
+
+(define-public ruby-cucumber-html-formatter
+  (package
+    (name "ruby-cucumber-html-formatter")
+    (version "20.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "cucumber-html-formatter" version))
+       (sha256
+        (base32
+         "0c7r9mfmph4c6yzc7y3dkr92rhwvpyksr0mdhpqp67xmmr8z1br4"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (add-after 'extract-gemspec 'relax-requirements
+                          (lambda _
+                            (substitute* ".gemspec"
+                              (("~> 18.0") "~> 21.0")))) ;cucumber-messages
+                        (replace 'check
+                          (lambda* (#:key tests? #:allow-other-keys)
+                            (when tests?
+                              (invoke "rspec")))))))
+    (native-inputs (list ruby-cucumber-compatibility-kit ruby-rspec))
+    (propagated-inputs (list ruby-cucumber-messages))
+    (synopsis "HTML formatter for Cucumber")
+    (description "Cucumber HTML Formatter produces a HTML report for Cucumber
+runs.  It is built on top of cucumber-react and works with any Cucumber
+implementation with a protocol buffer formatter that outputs Cucumber
+messages.")
+    (home-page "https://github.com/cucumber/html-formatter")
+    (license license:expat)))
+
+(define-public ruby-cucumber-messages
+  (package
+    (name "ruby-cucumber-messages")
+    (version "21.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "cucumber-messages" version))
+              (sha256
+               (base32
+                "0482a63y7my0arn2bv208g401dq8525f0gwhnwaa11mhv6ph0q5i"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               ;; The test suite requires the gem to be installed, so move it
+               ;; after the install phase.
+               (delete 'check)
+               (add-after 'install 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (setenv "GEM_PATH" (string-append
+                                       (getenv "GEM_PATH") ":"
+                                       #$output "/lib/ruby/vendor_ruby"))
+                   (when tests?
+                     (invoke "rspec")))))))
+    (native-inputs
+     (list ruby-cucumber-compatibility-kit-bootstrap ruby-rspec))
+    (home-page "https://github.com/cucumber/messages/")
+    (synopsis "Cucumber Messages for Ruby (Protocol Buffers)")
+    (description "Cucumber Messages for Ruby is a library which allows
+serialization and deserialization of the protocol buffer messages used in
+Cucumber.")
+    (license license:expat)))
+
+(define-public ruby-cucumber-tag-expressions
+  (package
+    (name "ruby-cucumber-tag-expressions")
+    (version "5.0.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/cucumber/tag-expressions")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1ziq30szn8m5y29hsdpx4dn1a8sy29h01nvcldm8nr1mx4b7dj1w"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:test-target "spec"
+           #:phases #~(modify-phases %standard-phases
+                        (add-after 'unpack 'chdir
+                          (lambda _
+                            (chdir "ruby"))))))
+    (native-inputs (list ruby-rspec))
+    (synopsis "Cucumber tag expressions for Ruby")
+    (description "Cucumber tag expression parser for Ruby.  A tag expression
+is an infix boolean expression used by Cucumber.")
+    (home-page "https://github.com/cucumber/tag-expressions")
+    (license license:expat)))
+
+(define-public ruby-cucumber-wire
+  (package
+    (name "ruby-cucumber-wire")
+    (version "6.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "cucumber-wire" version))
+       (sha256
+        (base32
+         "1pmydrh9lcckj7p0cn67jw7msxdkgr9zir86cs19h3mf2zlcv7b9"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:tests? #f))                ;tests use cucumber, causing a cycle
+    (propagated-inputs
+     (list ruby-cucumber-core ruby-cucumber-expressions
+           ruby-cucumber-messages))
+    (synopsis "Cucumber wire protocol plugin")
+    (description "Cucumber's wire protocol allows step definitions to be
+implemented and invoked on any platform.")
+    (home-page "https://github.com/cucumber/cucumber-ruby-wire")
+    (license license:expat)))
+
+(define-public ruby-diff-lcs
+  (package
+    (name "ruby-diff-lcs")
+    (version "1.3")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "diff-lcs" version))
+              (sha256
+               (base32
+                "18w22bjz424gzafv6nzv98h0aqkwz3d9xhm7cbr1wfbyas8zayza"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; avoid dependency cycles
+    (synopsis "Compute the difference between two Enumerable sequences")
+    (description "Diff::LCS computes the difference between two Enumerable
+sequences using the McIlroy-Hunt longest common subsequence (LCS) algorithm.
+It includes utilities to create a simple HTML diff output format and a
+standard diff-like tool.")
+    (home-page "https://github.com/halostatue/diff-lcs")
+    (license license:expat)))
+
+(define-public ruby-docile
+  (package
+    (name "ruby-docile")
+    (version "1.1.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "docile" version))
+       (sha256
+        (base32
+         "0m8j31whq7bm5ljgmsrlfkiqvacrw6iz9wq10r3gwrv5785y8gjx"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; needs github-markup, among others
+    (synopsis "Ruby EDSL helper library")
+    (description "Docile is a Ruby library that provides an interface for
+creating embedded domain specific languages (EDSLs) that manipulate existing
+Ruby classes.")
+    (home-page "https://ms-ati.github.io/docile/")
+    (license license:expat)))
+
+(define-public ruby-fivemat
+  (package
+    (name "ruby-fivemat")
+    (version "1.3.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "fivemat" version))
+       (sha256
+        (base32
+         "0pzlycasvwmg4bbx7plllpqnhd9zlmmff8l2w3yii86nrm2nvf9n"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f)) ; no tests
+    (synopsis "Each test file given its own line of dots")
+    (description
+     "Fivemat is a MiniTest/RSpec/Cucumber formatter that gives each test file
+its own line of dots during testing.  It aims to provide test output that is
+neither too verbose nor too minimal.")
+    (home-page "https://github.com/tpope/fivemat")
+    (license license:expat)))
+
+(define-public ruby-given-core
+  (package
+    (name "ruby-given-core")
+    (version "3.8.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "given_core" version))
+       (sha256
+        (base32
+         "0w1pyhgb2am7c267s8v06dpd9qhmsk2x4hfr2aq8l8lh49ma227s"))))
+    (build-system ruby-build-system)
+    (arguments '(#:tests? #f))          ;no test suite for the core package
+    (propagated-inputs
+     (list ruby-sorcerer))
+    (synopsis "Core abstractions used by rspec-given and minitest-given")
+    (description "Given_core is the basic functionality behind rspec-given and
+minitest-given, extensions that allow the use of Given/When/Then terminology
+when defining specifications.")
+    (home-page "https://github.com/rspec-given/rspec-given")
+    (license license:expat)))
+
+(define-public ruby-hoe
+  (package
+    (name "ruby-hoe")
+    (version "4.2.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "hoe" version))
+              (sha256
+               (base32
+                "1rhj1zs02mpdw6f4fh3mpfmj0p5pfar7rfxm758pk7l931mm8pyn"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      ;; Circular dependency with minitest
+      #:tests? #f))
+    (synopsis "Ruby project management helper")
+    (description
+     "Hoe is a rake/rubygems helper for project Rakefiles.  It helps manage,
+maintain, and release projects and includes a dynamic plug-in system allowing
+for easy extensibility.  Hoe ships with plug-ins for all the usual project
+tasks including rdoc generation, testing, packaging, deployment, and
+announcement.")
+    (home-page "https://www.zenspider.com/projects/hoe.html")
+    (license license:expat)))
+
+(define-public ruby-hoe-3
+  (package
+    (inherit ruby-hoe)
+    (version "3.26.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "hoe" version))
+              (sha256
+               (base32
+                "02vmphnfzna1dbb1l5nczcvlvvsg4flr26bdhmvdyf447bpswa63"))))))
+
+(define-public ruby-json
+  (package
+    (name "ruby-json")
+    (version "2.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "json" version))
+       (sha256
+        (base32
+         "01v6jjpvh3gnq6sgllpfqahlgxzj50ailwhj9b3cd20hi2dx0vxp"))))
+    (build-system ruby-build-system)
+    (arguments '(#:tests? #f)) ; dependency cycle with sdoc
+    (synopsis "JSON library for Ruby")
+    (description "This Ruby library provides a JSON implementation written as
+a native C extension.")
+    (home-page "http://json-jruby.rubyforge.org/")
+    (license (list license:ruby license:gpl2)))) ; GPL2 only
+
+(define-public ruby-mime-types
+  (package
+    (name "ruby-mime-types")
+    (version "3.4.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "mime-types" version))
+       (sha256
+        (base32
+         "0ipw892jbksbxxcrlx9g5ljq60qx47pm24ywgfbyjskbcl78pkvb"))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     (list ruby-mime-types-data))
+    (native-inputs
+     (list ruby-hoe
+           ruby-fivemat
+           ruby-minitest-focus
+           ruby-minitest-bonus-assertions
+           ruby-minitest-hooks))
+    (synopsis "Library and registry for MIME content type definitions")
+    (description "The mime-types library provides a library and registry for
+information about Multipurpose Internet Mail Extensions (MIME) content type
+definitions.  It can be used to determine defined filename extensions for MIME
+types, or to use filename extensions to look up the likely MIME type
+definitions.")
+    (home-page "https://github.com/mime-types/ruby-mime-types")
+    (license license:expat)))
+
+(define-public ruby-mime-types-data
+  (package
+    (name "ruby-mime-types-data")
+    (version "3.2016.0521")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "mime-types-data" version))
+       (sha256
+        (base32
+         "04my3746hwa4yvbx1ranhfaqkgf6vavi1kyijjnw8w3dy37vqhkm"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list ruby-hoe))
+    (synopsis "Registry for information about MIME media type definitions")
+    (description
+     "@code{mime-types-data} provides a registry for information about
+Multipurpose Internet Mail Extensions (MIME) media type definitions.  It can
+be used with the Ruby mime-types library or other software to determine
+defined filename extensions for MIME types, or to use filename extensions to
+look up the likely MIME type definitions.")
+    (home-page "https://github.com/mime-types/mime-types-data/")
+    (license license:expat)))
+
+(define-public ruby-mini-portile
+  (package
+    (name "ruby-mini-portile")
+    (version "0.6.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "mini_portile" version))
+       (sha256
+        (base32
+         "0h3xinmacscrnkczq44s6pnhrp4nqma7k056x5wv5xixvf2wsq2w"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; tests require network access
+    (synopsis "Ports system for Ruby developers")
+    (description "Mini-portile is a port/recipe system for Ruby developers.
+It provides a standard way to compile against specific versions of libraries
+to reproduce user environments.")
+    (home-page "https://github.com/flavorjones/mini_portile")
+    (license license:expat)))
+
+(define-public ruby-mini-portile-2
+  (package
+    (inherit ruby-mini-portile)
+    (version "2.8.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "mini_portile2" version))
+              (sha256
+               (base32
+                "0z7f38iq37h376n9xbl4gajdrnwzq284c9v1py4imw3gri2d5cj6"))))))
+
+(define-public ruby-minitest
+  (package
+    (name "ruby-minitest")
+    (version "5.18.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "minitest" version))
+              (sha256
+               (base32
+                "1kg9wh7jlc9zsr3hkhpzkbn0ynf4np5ap9m2d8xdrb8shy0y6pmb"))))
+    (build-system ruby-build-system)
+    (native-inputs (list ruby-hoe))
+    (home-page "https://github.com/minitest/minitest")
+    (synopsis "Small test suite library for Ruby")
+    (description "Minitest provides a complete suite of Ruby testing
+facilities supporting TDD, BDD, mocking, and benchmarking.")
+    (license license:expat)))
+
+(define-public ruby-minitest-bonus-assertions
+  (package
+    (name "ruby-minitest-bonus-assertions")
+    (version "3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "minitest-bonus-assertions" version))
+       (sha256
+        (base32
+         "1hbq9jk904xkz868yha1bqcm6azm7kmjsll2k4pn2nrcib508h2a"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:tests? #f          ; Test suite has bitrotted.
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'check 'clean-dependencies
+            (lambda _
+              ;; Remove unneeded require statement that would entail another
+              ;; dependency.
+              (substitute* "test/minitest_config.rb"
+                (("require 'minitest/bisect'") "")))))))
+    (native-inputs
+     (list ruby-hoe
+           ruby-minitest-focus
+           ruby-minitest-moar))
+    (synopsis "Bonus assertions for @code{Minitest}")
+    (description
+     "Minitest bonus assertions provides extra MiniTest assertions.  For
+instance, it provides @code{assert_true}, @code{assert_false} and
+@code{assert_set_equal}.")
+    (home-page "https://github.com/halostatue/minitest-bonus-assertions")
+    (license license:expat)))
+
+(define-public ruby-minitest-focus
+  (package
+    (name "ruby-minitest-focus")
+    (version "1.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "minitest-focus" version))
+       (sha256
+        (base32
+         "13kd2dkd9akfb99ziqndz9mir5iynyfyj2l45mcibab6mq5k8g67"))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     (list ruby-minitest))
+    (native-inputs
+     (list ruby-hoe))
+    (synopsis "Allows a few specific tests to be focused on")
+    (description
+     "@code{minitest-focus} gives the ability focus on a few tests with ease
+without having to use command-line arguments.  It introduces a @code{focus}
+class method for use in testing classes, specifying that the next defined test
+is to be run.")
+    (home-page "https://github.com/seattlerb/minitest-focus")
+    (license license:expat)))
+
+(define-public ruby-minitest-hooks
+  (package
+    (name "ruby-minitest-hooks")
+    (version "1.5.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "minitest-hooks" version))
+       (sha256
+        (base32 "11jb31dl5kbpyl3kgxql0p7da9066r2aqw54y5q6cni9nmld3zf5"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f))  ; No tests bundled.
+    (native-inputs
+     (list ruby-sequel ;ruby-sqlite3
+           ))
+    (synopsis "Hooks for the minitest framework")
+    (description
+     "Minitest-hooks adds @code{around}, @code{before_all}, @code{after_all},
+@code{around_all} hooks for Minitest.  This allows, for instance, running each
+suite of specs inside a database transaction, running each spec inside its own
+savepoint inside that transaction.  This can significantly speed up testing
+for specs that share expensive database setup code.")
+    (home-page "https://github.com/jeremyevans/minitest-hooks")
+    (license license:expat)))
+
+(define-public ruby-minitest-moar
+  (package
+    (name "ruby-minitest-moar")
+    (version "0.0.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "minitest-moar" version))
+       (sha256
+        (base32
+         "0nb83blrsab92gcy6nfpw39njys7zisia8pw4igzzfzfl51cis0x"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'clean-dependencies
+           (lambda _
+             ;; Remove all gems defined in the Gemfile because these are not
+             ;; truly needed.
+             (substitute* "Gemfile"
+               (("gem .*") ""))
+             ;; Remove byebug as not needed to run tests.
+             (substitute* "test/test_helper.rb"
+               (("require 'byebug'") "")))))))
+    (native-inputs
+     (list bundler ruby-minitest))
+    (synopsis "Extra features and changes to MiniTest")
+    (description "@code{MiniTest Moar} add some additional features and
+changes some default behaviours in MiniTest.  For instance, Moar replaces the
+MiniTest @code{Object#stub} with a global @code{stub} method.")
+    (home-page "https://github.com/dockyard/minitest-moar")
+    (license license:expat)))
+
+(define-public ruby-multi-test
+  (package
+    (name "ruby-multi-test")
+    (version "0.1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "multi_test" version))
+       (sha256
+        (base32
+         "1sx356q81plr67hg16jfwz9hcqvnk03bd9n75pmdw8pfxjfy1yxd"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(;; Tests require different sets of specific gem versions to be available,
+       ;; and there is no gemfile that specifies the newest versions of
+       ;; dependencies to be tested.
+       #:tests? #f))
+    (synopsis
+     "Interface to testing libraries loaded into a running Ruby process")
+    (description
+     "@code{multi_test} provides a uniform interface onto whatever testing
+libraries that have been loaded into a running Ruby process to help control
+rogue test/unit/autorun requires.")
+    (home-page "https://github.com/cucumber/multi_test")
+    (license license:expat)))
+
+(define-public ruby-rake
+  (package
+    (name "ruby-rake")
+    (version "13.0.6")
+    (source
+     (origin
+       (method git-fetch)               ;for tests
+       (uri (git-reference
+             (url "https://github.com/ruby/rake")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0c77xyl677s966f8yvk8yv7l31c1ffa1yl4kcwiram219h0s76in"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list bundler))
+    (synopsis "Rake is a Make-like program implemented in Ruby")
+    (description
+     "Rake is a Make-like program where tasks and dependencies are specified
+in standard Ruby syntax.")
+    (home-page "https://github.com/ruby/rake")
+    (license license:expat)))
+
+(define-public ruby-rake-compiler
+  (package
+    (name "ruby-rake-compiler")
+    (version "1.2.9")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "rake-compiler" version))
+              (sha256
+               (base32
+                "01rnl94p1sr84xkbnh66db42qsndykbfx2z2fggxyxx9vnji6cjs"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; needs cucumber
+    (synopsis "Building and packaging helper for Ruby native extensions")
+    (description "Rake-compiler provides a framework for building and
+packaging native C and Java extensions in Ruby.")
+    (home-page "https://github.com/rake-compiler/rake-compiler")
+    (license license:expat)))
+
+(define-public ruby-rake-compiler-dock
+  (package
+    (name "ruby-rake-compiler-dock")
+    (version "1.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "rake-compiler-dock" version))
+              (sha256
+               (base32
+                "0yr5f72irvhmnk12q7bbr4qw0xwy7diqkbcvb4lygjbg7rvk3k8k"))))
+    (build-system ruby-build-system)
+    (arguments (list #:tests? #f))      ;test suite requires docker
+    (synopsis "Cross compiler environment for building Ruby gems")
+    (description "The code{rake-compiler-dock} gem provides a cross compiler
+environment for building gems on a variety of platforms (GNU/Linux, JRuby,
+Windows and Mac).")
+    (home-page "https://github.com/rake-compiler/rake-compiler-dock")
+    (license license:expat)))
+
+(define-public ruby-rubocop/minimal
+  (hidden-package
+   (package
+     (name "ruby-rubocop")
+     (version "1.68.0")
+     (source
+      (origin
+        (method git-fetch)               ;no tests in distributed gem
+        (uri (git-reference
+              (url "https://github.com/rubocop/rubocop")
+              (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "0pfsrgkg2dhb6a2rknciqskgxgmb9kf48rvbkhay9n8n6m712v2w"))))
+     (build-system ruby-build-system)
+     (arguments
+      (list #:tests? #f
+            #:phases
+            #~(modify-phases %standard-phases
+                (add-after 'unpack 'remove-runtime-dependencies
+                  (lambda _
+                    (substitute* "rubocop.gemspec"
+                      (("s\\.add_dependency.*") "")))))))
+     (synopsis "Ruby code style checking tool")
+     (description
+      "@code{rubocop} is a Ruby code style checking tool.  It aims to enforce
+the community-driven Ruby Style Guide.")
+     (home-page "https://github.com/rubocop/rubocop")
+     (license license:expat))))
+
+(define-public ruby-rspec
+  (package
+    (name "ruby-rspec")
+    (version "3.13.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "rspec" version))
+              (sha256
+               (base32
+                "14xrp8vq6i9zx37vh0yp4h9m0anx9paw200l1r5ad9fmq559346l"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; avoid dependency cycles
+    (propagated-inputs
+     (list ruby-rspec-core ruby-rspec-expectations ruby-rspec-mocks))
+    (synopsis "Behavior-driven development framework for Ruby")
+    (description "RSpec is a behavior-driven development (BDD) framework for
+Ruby.  This meta-package includes the RSpec test runner, along with the
+expectations and mocks frameworks.")
+    (home-page "https://rspec.info/")
+    (license license:expat)))
+
+(define-public ruby-rspec-2
+  (package (inherit ruby-rspec)
+    (version "2.14.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "rspec" version))
+              (sha256
+               (base32
+                "134y4wzk1prninb5a0bhxgm30kqfzl8dg06af4js5ylnhv2wd7sg"))))
+    (propagated-inputs
+     (list ruby-rspec-core-2 ruby-rspec-mocks-2 ruby-rspec-expectations-2))))
+
+(define-public ruby-rspec-core
+  (package
+    (name "ruby-rspec-core")
+    (version "3.13.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "rspec-core" version))
+              (sha256
+               (base32
+                "001kazj244cb6fbkmh7ap74csbr78717qaskqzqpir1q8xpdmywl"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; avoid dependency cycles
+    (propagated-inputs
+     (list ruby-rspec-support))
+    (synopsis "RSpec core library")
+    (description "Rspec-core provides the RSpec test runner and example
+groups.")
+    (home-page "https://github.com/rspec/rspec-core")
+    (license license:expat)))
+
+(define-public ruby-rspec-core-2
+  (package (inherit ruby-rspec-core)
+    (version "2.14.8")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "rspec-core" version))
+              (sha256
+               (base32
+                "0psjy5kdlz3ph39br0m01w65i1ikagnqlg39f8p65jh5q7dz8hwc"))))
+    (arguments
+     (cons*
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch
+            (lambda _
+              (substitute* "lib/rspec/core/ruby_project.rb"
+                (("File\\.exists\\?") "File.exist?")))))
+      (package-arguments ruby-rspec-core)))
+    (propagated-inputs `())))
+
+(define-public ruby-rspec-expectations
+  (package
+    (name "ruby-rspec-expectations")
+    (version "3.13.3")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "rspec-expectations" version))
+              (sha256
+               (base32
+                "0n3cyrhsa75x5wwvskrrqk56jbjgdi2q1zx0irllf0chkgsmlsqf"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; avoid dependency cycles
+    (propagated-inputs
+     (list ruby-diff-lcs ruby-rspec-support))
+    (synopsis "RSpec expectations library")
+    (description "Rspec-expectations provides a simple API to express expected
+outcomes of a code example.")
+    (home-page "https://github.com/rspec/rspec-expectations")
+    (license license:expat)))
+
+(define-public ruby-rspec-expectations-2
+  (package (inherit ruby-rspec-expectations)
+    (version "2.14.5")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "rspec-expectations" version))
+              (sha256
+               (base32
+                "1ni8kw8kjv76jvwjzi4jba00k3qzj9f8wd94vm6inz0jz3gwjqf9"))))
+    (propagated-inputs
+     (list ruby-diff-lcs))))
+
+(define-public ruby-rspec-mocks
+  (package
+    (name "ruby-rspec-mocks")
+    (version "3.13.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "rspec-mocks" version))
+              (sha256
+               (base32
+                "1vxxkb2sf2b36d8ca2nq84kjf85fz4x7wqcvb8r6a5hfxxfk69r3"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; avoid dependency cycles
+    (propagated-inputs
+     (list ruby-diff-lcs ruby-rspec-support))
+    (synopsis "RSpec stubbing and mocking library")
+    (description "Rspec-mocks provides RSpec's \"test double\" framework, with
+support for stubbing and mocking.")
+    (home-page "https://github.com/rspec/rspec-mocks")
+    (license license:expat)))
+
+(define-public ruby-rspec-mocks-2
+  (package (inherit ruby-rspec-mocks)
+    (version "2.14.6")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "rspec-mocks" version))
+              (sha256
+               (base32
+                "1fwsmijd6w6cmqyh4ky2nq89jrpzh56hzmndx9wgkmdgfhfakv30"))))
+    (propagated-inputs
+     (list ruby-diff-lcs))))
+
+;; RSpec is the dominant testing library for Ruby projects.  Even RSpec's
+;; dependencies use RSpec for their test suites!  To avoid these circular
+;; dependencies, we disable tests for all of the RSpec-related packages.
+(define-public ruby-rspec-support
+  (package
+    (name "ruby-rspec-support")
+    (version "3.13.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "rspec-support" version))
+              (sha256
+               (base32
+                "1v6v6xvxcpkrrsrv7v1xgf7sl0d71vcfz1cnrjflpf6r7x3a58yf"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; avoid dependency cycles
+    (synopsis "RSpec support library")
+    (description "Support utilities for RSpec gems.")
+    (home-page "https://github.com/rspec/rspec-support")
+    (license license:expat)))
+
+(define-public ruby-sequel
+  (package
+    (name "ruby-sequel")
+    (version "5.47.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "sequel" version))
+       (sha256
+        (base32
+         "03pmhj4kc3ga75wy397l57bvd18jxxmrk3qsznjw93b993qgvj3z"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; Avoid dependency loop with ruby-minitest-hooks.
+    (synopsis "Database toolkit for Ruby")
+    (description "Sequel provides thread safety, connection pooling and a
+concise DSL for constructing SQL queries and table schemas.  It includes a
+comprehensive ORM layer for mapping records to Ruby objects and handling
+associated records.")
+    (home-page "https://sequel.jeremyevans.net")
+    (license license:expat)))
+
+(define-public ruby-simplecov-json-formatter
+  (package
+    (name "ruby-simplecov-json-formatter")
+    (version "0.1.4")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "simplecov_json_formatter" version))
+              (sha256
+               (base32
+                "0a5l0733hj7sk51j81ykfmlk2vd5vaijlq9d5fn165yyx3xii52j"))))
+    (build-system ruby-build-system)
+    ;; The test suite is disabled because it requires simplecov, which
+    ;; requires this, introducing a dependency cycle.
+    (arguments (list #:tests? #f))
+    (synopsis "JSON formatter for SimpleCov")
+    (description "This package provides a JSON formatter for SimpleCov, the
+Ruby code coverage tool.")
+    (home-page
+     "https://github.com/codeclimate-community/simplecov_json_formatter")
+    (license license:expat)))
+
+(define-public ruby-simplecov
+  (package
+    (name "ruby-simplecov")
+    (version "0.22.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "simplecov" version))
+              (sha256
+               (base32
+                "198kcbrjxhhzca19yrdcd6jjj9sb51aaic3b0sc3pwjghg3j49py"))))
+    (build-system ruby-build-system)
+    ;; Simplecov depends on rubocop for code style checking at build time.
+    ;; Rubocop needs simplecov at build time.
+    (arguments `(#:tests? #f))
+    (propagated-inputs
+     (list ruby-json
+           ruby-docile
+           ruby-simplecov-html
+           ruby-simplecov-json-formatter))
+    (synopsis "Code coverage framework for Ruby")
+    (description "SimpleCov is a code coverage framework for Ruby with a
+powerful configuration library and automatic merging of coverage across test
+suites.")
+    (home-page "https://github.com/simplecov-ruby/simplecov")
+    (license license:expat)))
+
+(define-public ruby-simplecov-html
+  (package
+    (name "ruby-simplecov-html")
+    (version "0.12.3")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "simplecov-html" version))
+              (sha256
+               (base32
+                "0yx01bxa8pbf9ip4hagqkp5m0mqfnwnw2xk8kjraiywz4lrss6jb"))))
+    (build-system ruby-build-system)
+    (arguments `(#:tests? #f)) ; there are no tests
+    (native-inputs
+     (list bundler))
+    (synopsis "Default HTML formatter for SimpleCov code coverage tool")
+    (description "This package provides the default HTML formatter for
+the SimpleCov code coverage tool for Ruby version 1.9 and above.")
+    (home-page "https://github.com/simplecov-ruby/simplecov-html")
+    (license license:expat)))
+
+(define-public ruby-sorcerer
+  (package
+    (name "ruby-sorcerer")
+    (version "2.0.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "sorcerer" version))
+        (sha256
+          (base32
+            "0d32ha9pp9slpmsm027pkdpbr9vc5jn2m8rl6hwwx6a87m8cr58h"))))
+    (build-system ruby-build-system)
+    (synopsis "Ripper-style abstract syntax tree to Ruby source generator")
+    (description "Sorcerer generates Ruby code from a Ripper-like abstract
+syntax tree (i.e. S-Expressions).  Sorcerer is targeted mainly at small
+snippets of Ruby code, expressible in a single line.  Longer examples may be
+re-sourced, but they will be rendered in a single-line format.")
+    (home-page "https://github.com/rspec-given/sorcerer")
+    (license license:expat)))
+
+(define-public ruby-unindent
+  (package
+  (name "ruby-unindent")
+  (version "1.0")
+  (source
+    (origin
+      (method url-fetch)
+      (uri (rubygems-uri "unindent" version))
+      (sha256
+        (base32
+          "1wqh3rzv8589yzibigminxx3qpmj2nqj28f90xy1sczk1pijmcrd"))))
+  (build-system ruby-build-system)
+  (synopsis "Ruby method to unindent strings")
+  (description "This module provides a @code{String#unindent} Ruby method to
+unindent strings, which can be useful to unindent multiline strings embedded
+in already-indented code.")
+  (home-page "https://github.com/mynyml/unindent")
+  (license license:expat)))
+
 ;;;
 ;;; Avoid adding new packages to the end of this file. To reduce the chances
 ;;; of a merge conflict, place them above in alphabetic order.
diff --git a/gnu/packages/ruby-xyz.scm b/gnu/packages/ruby-xyz.scm
index 688bf33459..db81f7ef4d 100644
--- a/gnu/packages/ruby-xyz.scm
+++ b/gnu/packages/ruby-xyz.scm
@@ -1,4 +1,41 @@
 ;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2014, 2015 Pjotr Prins <pjotr.guix@thebird.nl>
+;;; Copyright © 2014-2017, 2021-2022, 2024 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015 David Thompson <davet@gnu.org>
+;;; Copyright © 2015, 2019 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2017 Ben Woodcroft <donttrustben@gmail.com>
+;;; Copyright © 2017 Nikita <nikita@n0.is>
+;;; Copyright © 2017, 2019-2022 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2017-2025 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2018, 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2017, 2018, 2019 Christopher Baines <mail@cbaines.net>
+;;; Copyright © 2018 Vasile Dumitrascu <va511e@yahoo.com>
+;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
+;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
+;;; Copyright © 2019 Mikhail Kirillov <w96k.ru@gmail.com>
+;;; Copyright © 2019 Jelle Licht <jlicht@fsfe.org>
+;;; Copyright © 2019 Brian Leung <bkleung89@gmail.com>
+;;; Copyright © 2019 Collin J. Doering <collin@rekahsoft.ca>
+;;; Copyright © 2019 Diego N. Barbato <dnbarbato@posteo.de>
+;;; Copyright © 2019 Brett Gilio <brettg@posteo.de>
+;;; Copyright © 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
+;;; Copyright © 2020 Holgr Peters <holger.peters@posteo.de>
+;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
+;;; Copyright © 2021 EuAndreh <eu@euandre.org>
+;;; Copyright © 2020 Tomás Ortín Fernández <tomasortin@mailbox.org>
+;;; Copyright © 2021 Giovanni Biscuolo <g@xelera.eu>
+;;; Copyright © 2022 Philip McGrath <philip@philipmcgrath.com>
+;;; Copyright © 2022-2025 Remco van 't Veer <remco@remworks.net>
+;;; Copyright © 2022 Taiju HIGASHI <higashi@taiju.info>
+;;; Copyright © 2023 Yovan Naumovski <yovan@gorski.stream>
+;;; Copyright © 2023, 2024 gemmaro <gemmaro.dev@gmail.com>
+;;; Copyright © 2023, 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2023, 2024 Zheng Junjie <873216071@qq.com>
+;;; Copyright © 2023, 2024 Hartmut Goebel <h.goebel@crazy-compilers.com>
+;;; Copyright © 2025 Nicolas Graves <ngraves@ngraves.fr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -18,19 +55,16714 @@
 (define-module (gnu packages ruby-xyz)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix build-system ruby)
+  #:use-module (guix deprecation)
+  #:use-module (guix download)
   #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix packages)
-  #:use-module (gnu packages))
+  #:use-module (guix modules)
+  #:use-module (guix utils)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages bison)
+  #:use-module (gnu packages c)
+  #:use-module (gnu packages check)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages crypto)
+  #:use-module (gnu packages curl)
+  #:use-module (gnu packages databases)
+  #:use-module (gnu packages dbm)
+  #:use-module (gnu packages freedesktop)
+  #:use-module (gnu packages rails)
+  #:use-module (gnu packages readline)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages graphviz)
+  #:use-module (gnu packages haskell-xyz)
+  #:use-module (gnu packages java)
+  #:use-module (gnu packages libffi)
+  #:use-module (gnu packages libidn)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu packages lsof)
+  #:use-module (gnu packages man)
+  #:use-module (gnu packages maths)
+  #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages networking)
+  #:use-module (gnu packages node)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages protobuf)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages ragel)
+  #:use-module (gnu packages rsync)
+  #:use-module (gnu packages sqlite)
+  #:use-module (gnu packages tls)
+  #:use-module (gnu packages valgrind)
+  #:use-module (gnu packages version-control)
+  #:use-module (gnu packages virtualization)
+  #:use-module (gnu packages web-browsers)
+  #:use-module (gnu packages serialization)
+  #:use-module (gnu packages xml)
+  #:use-module (gnu packages web)
+  #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-check))
 
-;;; Commentary:
-;;;
-;;; Please: Try to add new module packages in alphabetic order.
-;;;
-;;; Code:
-
+(define %prawn-project-licenses
+  ;; This set of licenses applies to most (all?) components of the Prawn
+  ;; project (it is triple licensed).
+  (list license:ruby
+        license:gpl2+
+        license:gpl3+))
+
+(define-public ruby-commander
+  (package
+    (name "ruby-commander")
+    (version "4.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "commander" version))
+       (sha256
+        (base32
+         "1n8k547hqq9hvbyqbx2qi08g0bky20bbjca1df8cqq5frhzxq7bx"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:test-target "spec"
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; Don't run or require rubocop, the code linting tool, as this is a
+          ;; bit unnecessary.
+          (add-after 'unpack 'dont-run-rubocop
+            (lambda _
+              (substitute* "Rakefile"
+                ((".*rubocop.*") "")
+                ((".*RuboCop.*") "")))))))
+    (propagated-inputs
+     (list ruby-highline))
+    (native-inputs
+     (list bundler ruby-rspec-core ruby-rspec-expectations
+           ruby-rspec-mocks ruby-simplecov))
+    (home-page "https://github.com/commander-rb/commander")
+    (synopsis "Library for building Ruby command-line executables")
+    (description
+     "Commander aims to be a complete solution for Ruby command-line
+executables.  Commander bridges the gap between other terminal related
+libraries (OptionParser, HighLine), while providing many new features, and an
+elegant API.")
+    (license license:expat)))
+
+(define-public ruby-highline
+  (package
+    (name "ruby-highline")
+    (version "2.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "highline" version))
+       (sha256
+        (base32
+         "0gr6pckj2jayxw1gdgh9193j5jag5zrrqqlrnl4jvcwpyd3sn2zc"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f)) ;; TODO: NameError: uninitialized constant SPEC
+    (native-inputs
+     (list bundler ruby-code-statistics))
+    (synopsis
+     "HighLine helps you build command-line interfaces")
+    (description
+     "HighLine provides a high-level IO library that provides validation,
+type conversion, and more for command-line interfaces.  HighLine also includes
+a menu system for providing multiple options to the user.")
+    (home-page "https://github.com/JEG2/highline")
+    (license (list license:gpl2 license:ruby))))
+
+(define-public ruby-hoe
+  (package
+    (name "ruby-hoe")
+    (version "4.2.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "hoe" version))
+              (sha256
+               (base32
+                "1rhj1zs02mpdw6f4fh3mpfmj0p5pfar7rfxm758pk7l931mm8pyn"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      ;; Circular dependency with minitest
+      #:tests? #f))
+    (synopsis "Ruby project management helper")
+    (description
+     "Hoe is a rake/rubygems helper for project Rakefiles.  It helps manage,
+maintain, and release projects and includes a dynamic plug-in system allowing
+for easy extensibility.  Hoe ships with plug-ins for all the usual project
+tasks including rdoc generation, testing, packaging, deployment, and
+announcement.")
+    (home-page "https://www.zenspider.com/projects/hoe.html")
+    (license license:expat)))
+
+(define-public ruby-hoe-3
+  (package
+    (inherit ruby-hoe)
+    (version "3.26.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "hoe" version))
+              (sha256
+               (base32
+                "02vmphnfzna1dbb1l5nczcvlvvsg4flr26bdhmvdyf447bpswa63"))))))
+
+(define-public ruby-rsync
+  (package
+    (name "ruby-rsync")
+    (version "1.0.9")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "rsync" version))
+       (sha256
+        (base32
+         "0p8b27q1gvxilqfq2528xpwglzcm2myikkjxpqk7mwbwg9r6knxv"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:test-target "spec"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'remove-coveralls-requirement
+           (lambda _
+             (substitute* "spec/spec_helper.rb"
+               (("require 'coveralls'") "")
+               (("Coveralls.wear!") "")))))))
+    (native-inputs
+     (list bundler rsync ruby-rspec-core ruby-rspec-expectations
+           ruby-rspec-mocks))
+    (home-page "https://github.com/jbussdieker/ruby-rsync")
+    (synopsis "Ruby wrapper around rsync")
+    (description
+     "Ruby Rsync is a Ruby library that can synchronize files between remote
+hosts by wrapping the @file{rsync} binary.")
+    (license license:expat)))
+
+(define-public ruby-i18n
+  (package
+    (name "ruby-i18n")
+    (version "1.13.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "i18n" version))
+              (sha256
+               (base32
+                "1yk33slipi3i1kydzrrchbi7cgisaxym6pgwlzx7ir8vjk6wl90x"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; no tests
+    (propagated-inputs `(("concurrent-ruby" ,ruby-concurrent)))
+    (synopsis "Internationalization library for Ruby")
+    (description "Ruby i18n is an internationalization and localization
+solution for Ruby programs.  It features translation and localization,
+interpolation of values to translations, pluralization, customizable
+transliteration to ASCII, flexible defaults, bulk lookup, lambdas as
+translation data, custom key/scope separator, custom exception handlers, and
+an extensible architecture with a swappable backend.")
+    (home-page "https://github.com/ruby-i18n/i18n")
+    (license license:expat)))
+
+(define-public ruby-ice-nine
+  (package
+    (name "ruby-ice-nine")
+    (version "0.11.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "ice_nine" version))
+       (sha256
+        (base32 "1nv35qg1rps9fsis28hz2cq2fx1i96795f91q4nmkm934xynll2x"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:tests? #f))  ;Dependency on convoluted unpackaged ruby-devtools.
+    (synopsis "Deep Freeze Ruby Objects")
+    (description
+     "This package provides a function to deep freeze Ruby objects.")
+    (home-page "https://github.com/dkubb/ice_nine")
+    (license license:expat)))
+
+(define-public ruby-io-console
+  (package
+    (name "ruby-io-console")
+    (version "0.6.0")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ruby/io-console/")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0gwxrp29b6awkid1sf85sbh529mnq6hb86m8c2443cm6nc4vr8qb"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (add-after 'unpack 'delete-rakelib-files
+                          (lambda _
+                            ;; These depend on git and other extraneous
+                            ;; dependencies, and are loaded by rake.
+                            (delete-file-recursively "rakelib"))))))
+    (native-inputs (list ruby-rake-compiler))
+    (synopsis "Console capabilities library for IO instances")
+    (description "IO.console adds console capabilities to Ruby IO instances.")
+    (home-page "https://github.com/ruby/io-console")
+    (license license:bsd-2)))
+
+(define-public ruby-irb
+  (package
+    (name "ruby-irb")
+    (version "1.6.3")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "irb" version))
+              (sha256
+               (base32
+                "1h9s07n5v3z029v18924ws9vdkdc80n6llp9ccx77yg1krv2g0f3"))))
+    (build-system ruby-build-system)
+    ;; XXX: Disable the test suite, as it requires debug, which requires this
+    ;; package (dependency cycle).
+    (arguments (list #:tests? #f))
+    (propagated-inputs (list ruby-reline))
+    (synopsis "Ruby command-line tool for REPL (Read Eval Print Loop)")
+    (description "IRB is an interactive Ruby command-line tool for REPL (Read
+Eval Print Loop).")
+    (home-page "https://github.com/ruby/irb")
+    (license license:bsd-2)))
+
+(define-public ruby-irb-1.1.1
+  (package
+    (inherit ruby-irb)
+    (version "1.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "irb" version))
+              (sha256
+               (base32
+                "0h605w798s2bg9wg681ynvvzgdz1yy69gh387bl0khw9ll7wkn8v"))))))
+
+(define-public ruby-iruby
+  (package
+    (name "ruby-iruby")
+    (version "0.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "iruby" version))
+       (sha256
+        (base32
+         "1wdf2c0x8y6cya0n3y0p3p7b1sxkb2fdavdn2k58rf4rs37s7rzn"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; TODO: Tests currently fail.
+     ;;
+     ;; Finished in 1.764405s, 1.1335 runs/s, 5.1009 assertions/s.
+     ;;
+     ;;   1) Failure:
+     ;; IntegrationTest#test_interaction [/tmp/guix-build-ruby-iruby-0.3.drv-0/gem/test/integration_test.rb:25]:
+     ;; In [ expected
+     ;;
+     ;; 2 runs, 9 assertions, 1 failures, 0 errors, 0 skips
+     '(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-ipython
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "lib/iruby/command.rb"
+               (("version = `")
+                (string-append
+                 "version = `"
+                 (assoc-ref inputs "python-ipython")
+                 "/bin/"))
+               (("Kernel\\.exec\\('")
+                (string-append
+                 "Kernel.exec('"
+                 (assoc-ref inputs "python-ipython")
+                 "/bin/"))))))))
+    (inputs
+     (list python-ipython))
+    (propagated-inputs
+     (list ruby-bond
+           ruby-data_uri
+           ruby-mimemagic
+           ruby-multi-json
+           ruby-cztop
+           ;; Optional inputs
+           ruby-pry))
+    (synopsis "Ruby kernel for Jupyter/IPython")
+    (description
+     "This package provides a Ruby kernel for Jupyter/IPython frontends (e.g.
+notebook).")
+    (home-page "https://github.com/SciRuby/iruby")
+    (license license:expat)))
+
+(define-public ruby-date
+  (package
+    (name "ruby-date")
+    (version "3.3.3")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/ruby/date")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1jiqjnaap1jk1r8z37iicnzqha1rhc713qmcir17f4vnz8ac8v75"))))
+    (build-system ruby-build-system)
+    (arguments (list #:test-target "default"))
+    (native-inputs (list ruby-rake-compiler))
+    (synopsis "Ruby @code{Object} subclass with date comparison capability")
+    (description "This package provides a subclass of @code{Object} that
+includes the @code{Comparable} module for handling dates.")
+    (home-page "https://github.com/ruby/date")
+    (license license:bsd-2)))
+
+(define-public ruby-time
+  (package
+    (name "ruby-time")
+    (version "0.3.0")
+    (source (origin
+              (method git-fetch)  ; for tests
+              (uri (git-reference
+                    (url "https://github.com/ruby/time")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0jd6df2lxd60wcxyaf37j8v3nnfn952d5xhg6aap9zlcdmkk4g2n"))))
+    (build-system ruby-build-system)
+    (propagated-inputs (list ruby-date))
+    (native-inputs (list ruby-test-unit-ruby-core))
+    (synopsis
+     "Extends the Time class with methods for parsing and conversion")
+    (description
+     "When this gem is @code{require}d, it extends the Time class with with
+additional methods for parsing and converting Times.")
+    (home-page "https://github.com/ruby/time")
+    (license license:bsd-2)))
+
+(define-public ruby-sorted-set
+  (package
+    (name "ruby-sorted-set")
+    (version "1.0.3")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "sorted_set" version))
+              (sha256
+               (base32
+                "0brpwv68d7m9qbf5js4bg8bmg4v7h4ghz312jv9cnnccdvp8nasg"))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     (list ruby-rbtree ruby-set))
+    (synopsis
+     "Ruby Set variant whose elements are sorted in ascending order")
+    (description
+     "This package implements a variant of Set whose elements are sorted in
+ascending order")
+    (home-page "https://github.com/knu/sorted_set")
+    (license license:bsd-2)))
+
+(define-public ruby-rspec-given
+  (package
+    (name "ruby-rspec-given")
+    (version "3.8.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "rspec-given" version))
+       (sha256
+        (base32
+         "0xzzxjjzwrsp84p12sd6ab3jbm9kh7sbnqpxgc9mlfq3s3ll0fdj"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:test-target "rs"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-rakefile
+           (lambda _
+             (substitute* '("Rakefile" "rakelib/gemspec.rake")
+               (("require '\\./lib/given/.*") "")
+               (("Given::VERSION") (format #f "~s" ,version))
+               ;; Fix the error: "cannot load such file -- example_helper"
+               (("sh \"rspec")
+                "sh \"rspec -Ilib:examples"))))
+         (add-after 'extract-gemspec 'delete-failing-tests
+           ;; See: https://github.com/jimweirich/rspec-given/issues/57.
+           (lambda _
+             (substitute* ".gemspec"
+               (("\"spec/lib/given/natural_assertion_spec.rb\".freeze, ")
+                "")
+               (("\"examples/integration/failing_messages_spec.rb\".freeze, ")
+                ""))
+             (delete-file "spec/lib/given/natural_assertion_spec.rb")
+             (delete-file "examples/integration/failing_messages_spec.rb"))))))
+    (native-inputs
+     (list ruby-rspec ruby-minitest))
+    (propagated-inputs
+     (list ruby-given-core ruby-rspec))
+    (synopsis "Given/When/Then for RSpec and Minitest")
+    (description "Given is an RSpec extension that allows the use of
+Given/When/Then terminology when defining specifications, in a way similar to
+the Cucumber Gherkin language.")
+    (home-page "https://github.com/rspec-given/rspec-given")
+    (license license:expat)))
+
+(define-public ruby-rspec-its
+  (package
+    (name "ruby-rspec-its")
+    (version "1.3.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/rspec/rspec-its")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "02mlsc9d4d1cjj5vahi8v3q8hyn9fyiv8nnlidhgfh186qp20g1p"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:test-target "spec"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'dont-install-gems-from-gemfile
+           (lambda _
+             (substitute* "Gemfile"
+               (("rspec rspec-core rspec-expectations rspec-mocks rspec-support")
+                ""))))
+         (add-before 'build 'loosen-ffi-requirement
+           (lambda _
+             ;; Accept any version of ruby-ffi.
+             (substitute* "Gemfile"
+               (("  gem 'ffi', '~> 1\\.9\\.25'")
+                "  gem 'ffi'"))))
+         (add-before 'build 'remove-unnecessary-dependency-versions-from-gemfile
+           (lambda _
+             (substitute* "rspec-its.gemspec"
+               (("rake.*") "rake'\n")
+               (("spec.add_development_dependency 'cucumber'.*")
+                "spec.add_development_dependency 'cucumber'\n")
+               (("bundler.*") "bundler'\n")
+               (("\"aruba.*") "'aruba'\n")))))))
+    (propagated-inputs
+     (list ruby-rspec-core ruby-rspec-expectations))
+    (native-inputs
+     (list bundler ruby-cucumber ruby-ffi ruby-aruba))
+    (synopsis "RSpec extension that provides the @code{its} method")
+    (description
+     "RSpec::Its provides the its method as a short-hand to specify the expected
+value of an attribute.  For example, one can use @code{its(:size)\\{should
+eq(1)\\}}.")
+    (home-page "https://github.com/rspec/rspec-its")
+    (license license:expat)))
+
+;;; This variant is used to break a cycle with ruby-protobuf.
+(define-public ruby-rspec-its-minimal
+  (hidden-package
+   (package
+     (inherit ruby-rspec-its)
+     (arguments
+      (substitute-keyword-arguments (package-arguments ruby-rspec-its)
+        ((#:tests? _ #f) #f)))
+     (native-inputs '()))))
+
+(define-public ruby-rspec-block-is-expected
+  (package
+    (name "ruby-rspec-block-is-expected")
+    (version "1.0.5")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/pboling/rspec-block_is_expected")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1zi5z12lkw3fiwgr7g61845wj73asr2vzw4zsjv45klnnfspwass"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (add-after 'unpack 'relax-requirements
+                          (lambda _
+                            (substitute* "Rakefile"
+                              (("require 'rubocop/rake_task'") "")
+                              (("RuboCop::RakeTask.new") ""))
+                            ;; Contains extraneous requirements not actually
+                            ;; needed for the test suite.
+                            (delete-file "Gemfile")))
+                        (add-before 'build 'drop-signing-key-requirement
+                          (lambda _
+                            (substitute* "rspec-block_is_expected.gemspec"
+                              (("spec.signing_key =.*")
+                               "spec.signing_key = nil")))))))
+    (native-inputs (list ruby-rspec-pending-for ruby-rspec-expectations))
+    (propagated-inputs (list ruby-rspec-core))
+    (synopsis "Simplify testing of blocks in RSpec")
+    (description "This RSpec plugin allows you to use @code{block_is_expected}
+similarly to how you would use @code{is_expected} if a block was wrapping the
+subject.")
+    (home-page "https://github.com/pboling/rspec-block_is_expected")
+    (license license:expat)))
+
+(define-public ruby-rspec-pending-for
+  (package
+    (name "ruby-rspec-pending-for")
+    (version "0.1.16")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/pboling/rspec-pending_for")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "107l560vm0kx25w5iy5rsk9ly8dxzr81b31284j514f4hkd0qv3m"))))
+    (build-system ruby-build-system)
+    (native-inputs (list ruby-rspec ruby-simplecov))
+    (propagated-inputs (list ruby-rspec-core ruby-ruby-engine
+                             ruby-ruby-version))
+    (synopsis "Skip RSpec tests for specific Ruby engines or versions")
+    (description "This RSpec plugin makes it easy to mark test cases as
+pending or skipped for a specific Ruby engine (e.g. MRI or JRuby) or version
+combinations.")
+    (home-page "https://github.com/pboling/rspec-pending_for")
+    (license license:expat)))
+
+(define-public ruby-rspec-rerun
+  (package
+    (name "ruby-rspec-rerun")
+    (version "1.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "rspec-rerun" version))
+       (sha256
+        (base32
+         "1gy7znkcaqhpccfnk2nvaqbsvgxy3q57cmjwkl9fi1zabaq5lbkj"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(;; No included tests
+       #:tests? #f))
+    (propagated-inputs (list ruby-rspec))
+    (synopsis "Track failed RSpec tests to re-run them")
+    (description
+     "This package provides an automated way to track, and then re-run failed
+RSpec tests.")
+    (home-page "https://github.com/dblock/rspec-rerun")
+    (license license:expat)))
+
+(define-public ruby-rspec-stubbed-env
+  ;; There is no release nor tag (see:
+  ;; https://github.com/pboling/rspec-stubbed_env/issues/7).
+  (let ((revision "0")
+        (commit "9d767dec77a6d130f6ad83c48a00a5c81b14b9fa"))
+    (package
+      (name "ruby-rspec-stubbed-env")
+      (version (git-version "1.0.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/pboling/rspec-stubbed_env")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1dy4m04h613dp0s59rknjd6h4lqs1h17mffc5kd8kh046mk8nr1p"))))
+      (build-system ruby-build-system)
+      (arguments
+       (list #:test-target "spec"
+             #:phases #~(modify-phases %standard-phases
+                          (add-after 'unpack 'streamline-requirements
+                            (lambda _
+                              ;; Remove extraneous development dependencies.
+                              (substitute* "rspec-stubbed_env.gemspec"
+                                ((".*bundler.*") "")
+                                ((".*rubocop.*") "")))))))
+      (native-inputs (list ruby-simplecov))
+      (propagated-inputs (list ruby-rspec))
+      (synopsis "RSpec plugin to stub environment variables")
+      (description
+       "This RSpec plugin can be used to stub environment variables in a scoped
+context for testing.")
+      (home-page "https://github.com/pboling/rspec-stubbed_env")
+      (license license:expat))))
+
+(define-public ruby-rspec-wait
+  (package
+    (name "ruby-rspec-wait")
+    (version "0.0.9")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "rspec-wait" version))
+        (sha256
+         (base32
+          "0gvj1bp5ccx001dyvcgk2j49s5sl6vs9fdaqqb08z3bd1554hsww"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (invoke "rake" "spec"))))))
+    (native-inputs
+     (list bundler))
+    (propagated-inputs
+     (list ruby-rspec))
+    (home-page "https://github.com/laserlemon/rspec-wait")
+    (synopsis "Wait for conditions in RSpec")
+    (description
+     "RSpec::Wait strives to make it easier to test asynchronous or slow
+interactions.")
+    (license license:expat)))
+
+(define-public ruby-rspec-debug
+  (package
+    (name "ruby-rspec-debug")
+    (version "0.2.0")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ko1/rspec-debug")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "125p1zxjznkk765nyqvkksw8x1nbm7xk4sjc1wza2fyp5hvyiddn"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:test-target "spec"
+           #:phases #~(modify-phases %standard-phases
+                        (add-after 'extract-gemspec 'relax-dependencies
+                          (lambda _
+                            (substitute* "Gemfile"
+                              (("~>") ">=")))))))
+    (native-inputs (list ruby-rspec))
+    (propagated-inputs (list ruby-debug))
+    (synopsis "Invoke Ruby debugger when spec fails")
+    (description "This package can be used to have the execution stopped for
+inspection in the Ruby debugger upon encountering a failure.  To use it, set
+the @env{RSPEC_DEBUG} environment variable to @samp{true} then invoke the
+@command{rspec} command as usual.")
+    (home-page "https://github.com/ko1/rspec-debug")
+    (license license:expat)))
+
+(define-public ruby-specinfra
+  (package
+    (name "ruby-specinfra")
+    (version "2.88.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "specinfra" version))
+              (sha256
+               (base32
+                "07lap3sknncffpq9jw1x1mn9c5xxd058wxs5vnyz1y0lawdjfnsf"))))
+    (build-system ruby-build-system)
+    (propagated-inputs (list ruby-net-scp ruby-net-ssh ruby-net-telnet
+                             ruby-sfl))
+    (arguments
+     (list
+      #:test-target "spec"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'extract-gemspec 'relax-dependencies
+            (lambda _
+              (substitute* "specinfra.gemspec"
+                (("%q<net-telnet>.freeze, \\[.*\\]")
+                 "%q<net-telnet>.freeze, [\">= 0\"]")))))))
+    (synopsis "Common layer for serverspec and itamae")
+    (description "This Gem provides a common layer for serverspec and
+itamae.")
+    (home-page "https://github.com/mizzy/specinfra")
+    (license license:expat)))
+
+(define-public ruby-serverspec
+  (package
+    (name "ruby-serverspec")
+    (version "2.42.3")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "serverspec" version))
+              (sha256
+               (base32
+                "0kfaqrqynly8n3dy5qrbjvx4lx6mk9a5vynwb7xwqj8bixm0mab4"))))
+    (build-system ruby-build-system)
+    (propagated-inputs (list ruby-multi-json ruby-rspec ruby-rspec-its
+                             ruby-specinfra))
+    (arguments
+     (list #:test-target "spec"))
+    (synopsis
+     "RSpec tests for servers configured by Puppet, Chef, Itamae, etc")
+    (description
+     "With Serverspec, you can write RSpec tests for checking your servers are
+configured correctly.
+
+Serverspec tests your servers’ actual state by executing command locally, via
+SSH, via WinRM, via Docker API and so on.  So you don’t need to install any
+agent softwares on your servers and can use any configuration management
+tools, Puppet, Ansible, CFEngine, Itamae and so on.
+
+But the true aim of Serverspec is to help refactoring infrastructure code.")
+    (home-page "https://serverspec.org/")
+    (license license:expat)))
+
+(define-public ruby-base64
+  (package
+    (name "ruby-base64")
+    (version "0.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "base64" version))
+       (sha256
+        (base32 "01qml0yilb9basf7is2614skjp8384h2pycfx86cr8023arfj98g"))))
+    (build-system ruby-build-system)
+    (arguments '(#:tests? #f))  ; No tests bundled.
+    (synopsis "Base64 encoding/decoding in Ruby")
+    (description
+     "This package provides support for encoding and decoding binary data
+using a Base64 representation.")
+    (home-page "https://github.com/ruby/base64")
+    (license (list license:bsd-2))))
+
+(define-public ruby-bump
+  (package
+    (name "ruby-bump")
+    (version "0.7.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "bump" version))
+       (sha256
+        (base32
+         "1xinbr9rzh6cj75x24niwgqcnbhdxc68a8bc41lk8xv6fd906fym"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(;; No included tests
+       #:tests? #f))
+    (synopsis "Tool for working with Rubygems")
+    (description
+     "Bump provides commands to manage Rubygem versioning, updating to the
+next patch version for example.")
+    (home-page "https://github.com/gregorym/bump")
+    (license license:expat)))
+
+(define-public ruby-rjb
+  (package
+    (name "ruby-rjb")
+    (version "1.6.7")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "rjb" version))
+              (sha256
+               (base32
+                "0ck802bm8cklhmqsgzhsa0y8lg80qy52dp3m8rlld3zc5gv1rsb9"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:tests? #f ; no rakefile
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'build 'set-java-home
+            (lambda* (#:key inputs #:allow-other-keys)
+              (setenv "JAVA_HOME" (assoc-ref inputs "jdk")))))))
+    (native-inputs
+     `(("jdk" ,icedtea "jdk")))
+    (synopsis "Ruby-to-Java bridge using the Java Native Interface")
+    (description "RJB is a bridge program that connects Ruby and Java via the
+Java Native Interface.")
+    (home-page "https://www.artonx.org/collabo/backyard/?RubyJavaBridge")
+    (license license:lgpl2.1+)))
+
+(define-public ruby-log4r
+  (package
+    (name "ruby-log4r")
+    (version "1.1.10")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "log4r" version))
+        (sha256
+          (base32
+            "0ri90q0frfmigkirqv5ihyrj59xm8pq5zcmf156cbdv4r4l2jicv"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; no Rakefile in gem
+    (synopsis "Flexible logging library for Ruby")
+    (description "Comprehensive and flexible logging library written
+in Ruby for use in Ruby programs.  It features a hierarchical logging
+system of any number of levels, custom level names, logger
+inheritance, multiple output destinations per log event, execution
+tracing, custom formatting, thread safteyness, XML and YAML
+configuration, and more.")
+     (home-page "http://log4r.rubyforge.org/")
+     (license license:bsd-3)))
+
+(define-public ruby-atoulme-antwrap
+  (package
+    (name "ruby-atoulme-antwrap")
+    (version "0.7.5")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "atoulme-Antwrap" version))
+              (sha256
+               (base32
+                "05s3iw44lqa81f8nfy5f0xjj808600h82zb9bsh46b9kcq2w2kmz"))))
+    (build-system ruby-build-system)
+    ;; Test data required for most of the tests are not included.
+    (arguments `(#:tests? #f))
+    (native-inputs
+     (list ruby-hoe))
+    (inputs
+     (list ruby-rjb))
+    (synopsis "Ruby wrapper for the Ant build tool")
+    (description "Antwrap is a Ruby module that wraps the Apache Ant build
+tool.  Antwrap can be used to invoke Ant tasks from a Ruby or a JRuby
+script.")
+    (home-page "http://rubyforge.org/projects/antwrap/")
+    (license license:expat)))
+
+(define-public ruby-atoulme-saikuro
+  (package
+    (name "ruby-atoulme-saikuro")
+    (version "1.2.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "atoulme-Saikuro" version))
+              (sha256
+               (base32
+                "0kvd2nsxffbza61d3q4j94wrbnbv50r1zy3a7q26f6k706fw1f19"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'fix-module-resolution
+            (lambda _
+              (substitute* "lib/saikuro.rb"
+                ;; irb 1.2.0 or later doesn't have RubyToken
+                (("require 'irb/ruby-lex'")
+                 "require 'rubygems'\ngem 'irb', '=1.1.1'\nrequire 'irb/ruby-lex'"))))
+          (delete 'check)
+          (add-after 'install 'check
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let* ((out (assoc-ref outputs "out"))
+                     (saikuro (string-append out "/bin/saikuro")))
+                (setenv "GEM_PATH" (string-append
+                                    (getenv "GEM_PATH") ":"
+                                    #$output "/lib/ruby/vendor_ruby"))
+                (invoke saikuro "--cyclo" "--token" "--input_directory" "tests")))))))
+    (propagated-inputs (list ruby-irb-1.1.1
+                             ruby-e2mmap)) ;required by rubygems
+    (synopsis "Cyclomatic complexity analyzer")
+    (description "Saikuro is a Ruby cyclomatic complexity analyzer.  When
+given Ruby source code Saikuro will generate a report listing the cyclomatic
+complexity of each method found.  In addition, Saikuro counts the number of
+lines per method and can generate a listing of the number of tokens on each
+line of code.")
+    (home-page "http://www.github.com/atoulme/Saikuro")
+    ;; File headers contain the BSD-3 license and the README.rdoc says that
+    ;; "Saikuro uses the BSD license", but the LICENSE file contains the text
+    ;; of the Expat license.
+    (license license:bsd-3)))
+
+(define-public ruby-awesome-print
+  (package
+    (name "ruby-awesome-print")
+    (version "1.9.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "awesome_print" version))
+       (sha256
+        (base32
+         "0vkq6c8y2jvaw03ynds5vjzl1v9wg608cimkd3bidzxc0jvk56z9"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (replace 'check
+            (lambda _
+              ;; Remove failing test.
+              (for-each delete-file
+                        '("spec/ext/nokogiri_spec.rb"
+                          "spec/colors_spec.rb"
+                          "spec/formats_spec.rb"
+                          "spec/methods_spec.rb"
+                          "spec/misc_spec.rb"
+                          "spec/objects_spec.rb"))
+              (invoke "rspec" "-c" "spec"))))))
+    (native-inputs
+     (list ruby-nokogiri ruby-rspec ruby-simplecov))
+    (synopsis "Pretty print Ruby objects to visualize their structure")
+    (description
+     "Ruby dubugging companion: pretty print Ruby objects to visualize their
+structure.  Supports custom object formatting via plugins.")
+    (home-page "https://github.com/awesome-print/awesome_print")
+    (license license:expat)))
+
+(define-public ruby-pandoc-ruby
+  (package
+    (name "ruby-pandoc-ruby")
+    (version "2.1.4")
+    (source
+     (origin
+       (method git-fetch)               ;the gem lacks many test files
+       (uri (git-reference
+             (url "https://github.com/xwmx/pandoc-ruby")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "03a11clhycyn0jhc7g9davpqd83sn60jqwjy1y145ag9sq6sp935"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f ; Disable tests since they depend on pandoc behavior
+                   ; and there are no upstream releases.
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-pandoc-path
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((pandoc (search-input-file inputs "/bin/pandoc")))
+               (substitute* "lib/pandoc-ruby.rb"
+                 (("@@pandoc_path = 'pandoc'")
+                  (format #f "@@pandoc_path = '~a'" pandoc)))
+               (substitute* "test/test_pandoc_ruby.rb"
+                 (("('|\")pandoc" _ quote)
+                  (string-append quote pandoc))
+                 (("\\^pandoc")
+                  ".*pandoc")))))
+         (add-after 'unpack 'adjust-tests
+           ;; The tests expect filenames with spaces.  Because they don't have
+           ;; spaces the quotes around the output are dropped automatically.
+           (lambda _
+             (substitute* "test/test_pandoc_ruby.rb"
+               (("\\\\\"#\\{file\\.path\\}\\\\\"") "#{file.path}"))))
+         (add-after 'extract-gemspec 'remove-Gemfile.lock
+           (lambda _
+             (delete-file "Gemfile.lock")
+             (substitute* "pandoc-ruby.gemspec"
+               (("Gemfile\\.lock") "")))))))
+    (native-inputs
+     (list ruby-mocha))
+    (inputs
+     (list pandoc))
+    (synopsis "Ruby wrapper for Pandoc")
+    (description "PandocRuby is a wrapper for Pandoc, a Haskell library with
+command line tools for converting one markup format to another.  Pandoc can
+convert documents from a variety of formats including markdown,
+reStructuredText, textile, HTML, DocBook, LaTeX, and MediaWiki markup to a
+variety of other formats, including markdown, reStructuredText, HTML, LaTeX,
+ConTeXt, PDF, RTF, DocBook XML, OpenDocument XML, ODT, GNU Texinfo, MediaWiki
+markup, groff man pages, HTML slide shows, EPUB, Microsoft Word docx, and
+more.")
+    (home-page "https://github.com/xwmx/pandoc-ruby")
+    (license license:expat)))
+
+(define-public ruby-patron
+  (package
+    (name "ruby-patron")
+    (version "0.13.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "patron" version))
+       (sha256
+        (base32
+         "0523gddx88zql2mq6655k60gy2ac8vybpzkcf90lmd9nx7wl3fi9"))))
+    (build-system ruby-build-system)
+    (inputs
+     (list curl))
+    (arguments
+     `(#:tests? #f))                    ; no included tests
+    (synopsis "Ruby HTTP client library based on @code{libcurl}")
+    (description
+     "Patron is a Ruby HTTP client library based on @code{libcurl}.  It does
+not try to expose the full power (read complexity) of @code{libcurl} but
+instead tries to provide a sane API while taking advantage of @code{libcurl}
+under the hood.")
+    (home-page "https://github.com/toland/patron")
+    (license license:expat)))
+
+(define-public ruby-slim
+  (package
+    (name "ruby-slim")
+    (version "5.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "slim" version))
+       (sha256
+        (base32
+         "1rqk7jn66wgx50b18ndhbppjq55rbcwgqg1rbhnhxwiggvzisdbj"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; See: https://github.com/slim-template/slim/issues/857 and
+         ;; https://github.com/slim-template/slim/issues/858.
+         (add-after 'unpack 'skip-broken-tests
+           (lambda _
+             (substitute* "test/core/test_embedded_engines.rb"
+               (("def test_render_with_markdown")
+                "def skipped_test_render_with_markdown"))
+             (substitute* "test/translator/test_translator.rb"
+               (("raise (\"Missing test for.*)" _ tail)
+                (string-append "print " tail)))))
+         ;; See: https://salsa.debian.org/ruby-team/ruby-slim/-/commit/
+         ;; 824862bd99d1675bc699d8fc71ba965a785c1f44.
+         (add-after 'unpack 'prevent-bundler-interference
+           (lambda _
+             (substitute* "Rakefile"
+               (("require 'bundler/setup'") "nil")
+               (("Bundler::GemHelper\\.install_tasks") "nil")))))))
+    (native-inputs
+     (list ruby-rack-test ruby-rspec-core ruby-sinatra))
+    (propagated-inputs
+     (list ruby-temple ruby-tilt))
+    (synopsis "Minimalist template language for Ruby")
+    (description "Slim is a template language for Ruby that aims to reduce the
+syntax to the minimum while remaining clear.")
+    (home-page "http://slim-lang.com/")
+    (license license:expat)))
+
+(define-public ruby-asciidoctor
+  (package
+    (name "ruby-asciidoctor")
+    (version "2.0.20")
+    (source
+     (origin
+       (method git-fetch)               ;the gem release lacks a Rakefile
+       (uri (git-reference
+             (url "https://github.com/asciidoctor/asciidoctor")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "19qvilhwa9plg80ppspn5ys0ybl8qfyaicqbl9w316hk5ldwi1jq"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:test-target "test:all"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'extract-gemspec 'strip-version-requirements
+            (lambda _
+              (delete-file "Gemfile")
+              (substitute* "asciidoctor.gemspec"
+                (("(.*add_.*dependency '[_A-Za-z0-9-]+').*" _ stripped)
+                 (string-append stripped "\n")))))
+          (add-after 'install 'install-man-page
+            (lambda* (#:key outputs #:allow-other-keys)
+              (install-file (search-input-file
+                             outputs (string-append "lib/ruby/vendor_ruby/"
+                                                    "gems/asciidoctor-"
+                                                    #$version
+                                                    "/man/asciidoctor.1"))
+                            (string-append #$output "/share/man/man1")))))))
+    (native-inputs
+     (list ruby-asciimath
+           ruby-coderay
+           ruby-cucumber
+           ruby-erubis
+           ruby-haml
+           ruby-minitest
+           ruby-nokogiri
+           ruby-open-uri-cached
+           ruby-rouge
+           ruby-rspec-expectations
+           ruby-simplecov
+           ruby-slim
+           ruby-tilt
+           ruby-erubi))
+    (synopsis "Converter from AsciiDoc content to other formats")
+    (description "Asciidoctor is a text processor and publishing toolchain for
+converting AsciiDoc content to HTML5, DocBook 5, PDF, and other formats.")
+    (home-page "https://asciidoctor.org")
+    (license license:expat)))
+
+(define-public ruby-asciidoctor-multipage
+  (package
+    (name "ruby-asciidoctor-multipage")
+    (version "0.0.16")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/owenh000/asciidoctor-multipage")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0rnz7qxdw5qbi3qjplihhk468kv690njdi06yllgylc75k62ar1p"))))
+    (propagated-inputs (list ruby-asciidoctor ruby-slim))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (add-after 'extract-gemspec 'strip-version-requirements
+                    (lambda _
+                      (delete-file "Gemfile")
+                      (substitute* "asciidoctor-multipage.gemspec"
+                        (("(.*add_.*dependency '[_A-Za-z0-9-]+').*" _ stripped)
+                         (string-append stripped "\n"))))))))
+    (synopsis
+     "Asciidoctor extension for generating HTML output using multiple pages")
+    (description
+     "Asciidoctor generates single-page documents.  This extension
+splits documents up into multiple HTML pages according to their headings, with
+configurable levels.")
+    (license license:expat)
+    (home-page "https://github.com/owenh000/asciidoctor-multipage")))
+
+(define-public ruby-prawn-icon
+  (package
+    (name "ruby-prawn-icon")
+    (version "3.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "prawn-icon" version))
+       (sha256
+        (base32
+         "049k42bqy4iq9hddf7jah83b6qr8ka63w1d63illh1mf4f4dihdk"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:test-target "spec"
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'remove-unnecessary-dependencies
+                    (lambda _
+                      (substitute* '("Rakefile" "spec/spec_helper.rb")
+                        ((".*[Bb]undler.*") "")
+                        (("^require 'rubocop.*") "")
+                        (("^RuboCop.*") "")))))))
+    (native-inputs
+     (list ruby-pdf-inspector ruby-pdf-reader ruby-rspec ruby-simplecov))
+    (propagated-inputs
+     (list ruby-prawn))
+    (synopsis "Icon fonts for use with the Prawn PDF toolkit")
+    (description "@code{Prawn::Icon} provides various icon fonts including
+FontAwesome, PaymentFont and Foundation Icons for use with the Prawn PDF
+toolkit.")
+    (home-page "https://github.com/jessedoyle/prawn-icon/")
+    (license %prawn-project-licenses)))
+
+(define-public ruby-css-parser
+  (package
+    (name "ruby-css-parser")
+    (version "1.7.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "css_parser" version))
+       (sha256
+        (base32
+         "04c4dl8cm5rjr50k9qa6yl9r05fk9zcb1zxh0y0cdahxlsgcydfw"))))
+    (build-system ruby-build-system)
+    (arguments `(#:tests? #f))          ;gem doesn't ship with test suite
+    (propagated-inputs
+     (list ruby-addressable))
+    (synopsis "Ruby Cascading Style Sheets (CSS) parser")
+    (description "This package allows loading, parsing and cascading Cascading
+Style Sheets (CSS) rule sets in Ruby.")
+    (home-page "https://github.com/premailer/css_parser")
+    (license license:expat)))
+
+(define-public ruby-prism
+  (package
+    (name "ruby-prism")
+    (version "1.3.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/ruby/prism.git")
+                     (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "03bs2gbackc3c3k4p979l2p9v215jb1m5h7b44n6yzh18kaimc85"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'build
+           (lambda _
+             (setenv "CC" ,(cc-for-target))
+             (invoke "rake" "compile")))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (setenv "GEM_HOME" (string-append (assoc-ref outputs "out")
+                                               "/lib/ruby/vendor_ruby"))
+             (invoke "rake" "install")
+             ;; Make build reproducible.
+             (for-each delete-file
+                       (find-files (string-append (assoc-ref outputs "out")
+                                                  "/lib/ruby/vendor_ruby")
+                                   "gem_make.out$")))))))
+    (native-inputs
+     (list ruby-rake ruby-rake-compiler))
+    (synopsis "Parser for Ruby source code")
+    (description "This package provides a parser for Ruby source code,
+written in C.")
+    (home-page "https://ruby.github.io/prism/")
+    (license license:expat)))
+
+(define-public ruby-prawn-svg
+  (package
+    (name "ruby-prawn-svg")
+    (version "0.36.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "prawn-svg" version))
+       (sha256
+        (base32 "008p1p334h3019x5w5bqvwgmly3g5n08s63va1261nwyvfb955jv"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:test-target "spec"
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'do-not-use-bundler
+                 (lambda _
+                   (substitute* "spec/spec_helper.rb"
+                     ((".*[Bb]undler.*") ""))))
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     ;; This test fails due to the recent rspec 3.12 used
+                     ;; (see: https://github.com/mogest/prawn-svg/issues/151).
+                     (delete-file "spec/prawn/svg/interface_spec.rb")
+                     (invoke "rspec" "-Ilib" "-rprawn-svg")))))))
+    (native-inputs (list ruby-rspec))
+    (propagated-inputs (list ruby-css-parser ruby-matrix ruby-prawn ruby-rexml))
+    (synopsis "SVG renderer for the Prawn PDF library")
+    (description "This library allows rendering Scalable Vector Graphics (SVG)
+graphics directly into a Portable Document Format (PDF) document using the
+Prawn module.")
+    (home-page "https://github.com/mogest/prawn-svg")
+    (license license:expat)))
+
+(define-public ruby-prawn-templates
+  (package
+    (name "ruby-prawn-templates")
+    (version "0.1.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/prawnpdf/prawn-templates")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0wll54wxxwixpwazfn4ffbqvqbfrl01cfsv8y11vnlzy7isx5xvl"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'do-not-use-bundler
+                    (lambda _
+                      (substitute* "spec/spec_helper.rb"
+                        ((".*[Bb]undler.*") ""))))
+                  (replace 'check
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      (when tests?
+                        (invoke "rspec")))))))
+    (native-inputs
+     (list ruby-pdf-inspector ruby-rspec))
+    (propagated-inputs
+     (list ruby-pdf-reader ruby-prawn))
+    (synopsis "Prawn extension to include or combine PDF documents")
+    (description "This @strong{unmaintained} package provides a Prawn
+extension that allows including other Portable Document Format (PDF) documents
+as background or combining several PDF documents into one.  This functionality
+used to be part of Prawn itself, but was extracted from Prawn 0.15.0 because
+of its many longstanding issues.")
+    (home-page "https://github.com/prawnpdf/prawn-templates")
+    (license %prawn-project-licenses)))
+
+(define-public ruby-polyglot
+  (package
+    (name "ruby-polyglot")
+    (version "0.3.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "polyglot" version))
+       (sha256
+        (base32
+         "1bqnxwyip623d8pr29rg6m8r0hdg08fpr2yb74f46rn1wgsnxmjr"))))
+    (build-system ruby-build-system)
+    (arguments `(#:tests? #f))           ;no test suite
+    (synopsis "Augment @code{require} to load non-Ruby file types")
+    (description "The Polyglot library allows a Ruby module to register a
+loader for the file type associated with a filename extension, and it augments
+@code{require} to find and load matching files.")
+    (home-page "https://github.com/cjheath/polyglot")
+    (license license:expat)))
+
+(define-public ruby-treetop
+  (package
+    (name "ruby-treetop")
+    (version "1.6.12")
+    (source
+     (origin
+       (method git-fetch)               ;no test suite in distributed gem
+       (uri (git-reference
+             (url "https://github.com/cjheath/treetop")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0cgs6f9z0a9dq5fc03710zsch4gmh1771wq36mq81qsql4x9vksf"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:test-target "spec"))
+    (native-inputs
+     (list ruby-activesupport ruby-rr ruby-rspec))
+    (propagated-inputs
+     (list ruby-polyglot))
+    (synopsis "Ruby-based parsing DSL based on parsing expression grammars")
+    (description "This package provides a Ruby-based Parsing Expression
+Grammar (PEG) parser generator Domain Specific Language (DSL).")
+    (home-page "https://github.com/cjheath/treetop")
+    (license license:expat)))
+
+(define-public ruby-typhoeus
+  (package
+    (name "ruby-typhoeus")
+    (version "1.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "typhoeus" version))
+       (sha256
+        (base32
+         "1m22yrkmbj81rzhlny81j427qdvz57yk5wbcf3km0nf3bl6qiygz"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f))                    ; no included tests
+    (propagated-inputs
+     (list ruby-ethon))
+    (synopsis "@code{libcurl} wrapper in Ruby")
+    (description
+     "Like a modern code version of the mythical beast with 100 serpent heads,
+Typhoeus runs HTTP requests in parallel while cleanly encapsulating handling
+logic.")
+    (home-page "https://github.com/typhoeus/typhoeus")
+    (license license:expat)))
+
+;;; A minimal variant used to build ruby-rubocop itself.
+(define ruby-rubocop-capybara-minimal
+  (package
+    (name "ruby-rubocop-capybara")
+    (version "2.21.0")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/rubocop/rubocop-capybara")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "19r2s782r9ch2g1lxgrvk22d9qqkxi69brza16bfwp2rl2064qnc"))))
+    (build-system ruby-build-system)
+    (arguments (list #:tests? #f))
+    (synopsis "Capybara plugin for RuboCop")
+    (description "This package provides a RuboCop plugin that can be used for
+code style checking of Capybara test files (RSpec, Cucumber, Minitest).")
+    (home-page "https://github.com/rubocop/rubocop-capybara")
+    (license license:expat)))
+
+(define-public ruby-rubocop-capybara
+  (package
+    (inherit ruby-rubocop-capybara-minimal)
+    (arguments
+     (list #:test-target "spec"
+           #:phases #~(modify-phases %standard-phases
+                        (add-after 'unpack 'relax-requirements
+                          (lambda _
+                            (substitute* "Gemfile"
+                              (("gem 'rubocop-rspec', '~> 2.16.0'")
+                               "gem 'rubocop-rspec', '>= 2.16.0'")
+                              (("gem 'danger'.*") "")))))))
+    (native-inputs
+     (list ruby-bump
+           ruby-rack
+           ruby-rake
+           ruby-rspec
+           ruby-rubocop
+           ruby-rubocop-performance-minimal
+           ruby-rubocop-rake-minimal
+           ruby-rubocop-rspec-minimal
+           ruby-simplecov
+           ruby-yard))))
+
+(define-public ruby-rubocop-factory-bot
+  (package
+    (name "ruby-rubocop-factory-bot")
+    (version "2.26.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "rubocop-factory_bot" version))
+       (sha256
+        (base32 "1aljadsjx7affcarzbhz7pydpy6fgqb8hl951y0cmrffxpa3rqcd"))))
+    (build-system ruby-build-system)
+    (arguments '(#:tests? #f))  ; No tests bundled.
+    (synopsis "Code style checking for factory_bot files")
+    (description
+     "This package provides a plugin for the @code{RuboCop} code style
+enforcing & linting tool for @code{factory_bot} files.")
+    (home-page "https://github.com/rubocop/rubocop-factory_bot")
+    (license license:expat)))
+
+;;; A minimal variant used to build ruby-rubocop itself.
+(define ruby-rubocop-rake-minimal
+  (package
+    (name "ruby-rubocop-rake")
+    (version "0.6.0")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/rubocop/rubocop-rake")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1r53szwglikbir1fvpz4i51p915khrrkl6rp61zcx3dcrclkr3ld"))))
+    (build-system ruby-build-system)
+    (arguments (list #:tests? #f))      ;avoid extra dependencies
+    (synopsis "RuboCop plugin for Rake")
+    (description "This package provides a RuboCop plugin for Rake.")
+    (home-page "https://github.com/rubocop/rubocop-rake")
+    (license license:expat)))
+
+(define-public ruby-rubocop-rake
+  (package
+    (inherit ruby-rubocop-rake-minimal)
+    (arguments
+     (list #:test-target "spec"))
+    (native-inputs
+     (list ruby-rake
+           ruby-rspec
+           ruby-rubocop
+           ruby-rubocop-rspec))
+    (propagated-inputs
+     (list ruby-rubocop))))
+
+;;; A minimal variant used to build ruby-rubocop itself.
+(define ruby-rubocop-rspec-minimal
+  (package
+    (name "ruby-rubocop-rspec")
+    (version "2.26.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/rubocop/rubocop-rspec")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1w9whadx60kv4vlbnk77b5yyhhfcg717r9cr334zqznqr1bqr8mh"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:tests? #f  ;avoid extra dependencies
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'relax-requirements
+                 (lambda _
+                   (substitute* "Gemfile"
+                     (("gem 'danger'.*") "")))))))
+    (propagated-inputs (list ruby-rubocop-factory-bot))
+    (synopsis "Code style checking for RSpec files")
+    (description "This package provides a plugin for the RuboCop code style
+enforcing & linting tool.")
+    (home-page "https://github.com/rubocop/rubocop-rspec")
+    (license license:expat)))
+
+(define-public ruby-rubocop-rspec
+  (package
+    (inherit ruby-rubocop-rspec-minimal)
+    (arguments
+     (substitute-keyword-arguments
+         (package-arguments ruby-rubocop-rspec-minimal)
+       ((#:tests? _ #f) #t)
+       ((#:test-target _ "test") "spec")))
+    (native-inputs
+     (list ruby-bump
+           ruby-rack
+           ruby-rspec
+           ruby-rubocop-performance-minimal
+           ruby-rubocop-rake-minimal
+           ruby-simplecov
+           ruby-yard))
+    (propagated-inputs
+     (list ruby-rubocop
+           ruby-rubocop-ast
+           ruby-rubocop-capybara
+           ruby-rubocop-factory-bot))))
+
+(define-public ruby-rubocop-packaging
+  (package
+    (name "ruby-rubocop-packaging")
+    (version "0.5.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/utkarsh2102/rubocop-packaging")
+              (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "08jsfp42z0aj32002z2hz8vkmza0jvnrqk9rk2v0xb8qdxkgbx3l"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:test-target "spec"
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'skip-problematic-tests
+                 (lambda _
+                   ;; Tests are actually running fine, except for a prefix.
+                   ;; This doesn't impair functionality, ignored for now.
+                   (delete-file
+                    "spec/rubocop/cop/packaging/gemspec_git_spec.rb"))))))
+    (propagated-inputs
+     (list ruby-rubocop))
+    (native-inputs
+     (list ruby-rspec
+           ruby-yard
+           ruby-bump))
+    (synopsis
+     "Collection of RuboCop checks for downstream compatibility issues")
+    (description
+     "This package provides a collection of RuboCop cops to check for
+downstream compatibility issues in the Ruby code.")
+    (home-page "https://github.com/utkarsh2102/rubocop-packaging")
+    (license license:expat)))
+
+(define-public ruby-rubocop-performance
+  (package
+    (name "ruby-rubocop-performance")
+    (version "1.23.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/rubocop/rubocop-performance")
+              (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0d1p6pgrcnj58q1g0np5j4vbk7wavj31b4bapi5p4gckqlnc7xjd"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f  ; tests require a git checkout of rubocop's source code.
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'replace-git-ls-files
+           (lambda _
+             (substitute* "rubocop-performance.gemspec"
+               (("`git ls-files -z config lib LICENSE.txt README.md`")
+                "`find config lib LICENSE.txt README.md \
+-type f -print0 |sort -z`"))))
+         (add-before 'check 'set-HOME
+           (lambda _
+             (setenv "HOME" "/tmp"))))))
+    (propagated-inputs
+     (list ruby-rubocop ruby-rubocop-ast))
+    (native-inputs
+     (list ruby-bump ruby-yard))
+    (synopsis "Performance optimizations checkers for Ruby code")
+    (description "This package provides a collection of RuboCop cops to check
+for performance optimizations in Ruby code.")
+    (home-page "https://docs.rubocop.org/rubocop-performance/")
+    (license license:expat)))
+
+(define-public ruby-rubocop-performance-minimal
+  (hidden-package
+   (package
+     (inherit ruby-rubocop-performance)
+     (arguments
+      (substitute-keyword-arguments (package-arguments ruby-rubocop-performance)
+        ((#:tests? _ #f) #f)))
+     (propagated-inputs '())
+     (native-inputs '()))))
+
+(define-public ruby-stud
+  (package
+    (name "ruby-stud")
+    (version "0.0.23")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "stud" version))
+              (sha256
+               (base32
+                "0qpb57cbpm9rwgsygqxifca0zma87drnlacv49cqs2n5iyi6z8kb"))))
+    (build-system ruby-build-system)
+    (native-inputs (list ruby-rspec))
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        ;; No Rakefile is included, so run rspec directly.
+                        (replace 'check
+                          (lambda* (#:key tests? #:allow-other-keys)
+                            (when tests?
+                              (invoke "rspec")))))))
+    (synopsis "Retries, worker supervision, resource pools and more for Ruby")
+    (description "The Stud Ruby library adds a few things missing from the
+standard Ruby library such as:
+@table @code
+@item {Stud::Try}
+Retry on failure, with back-off, where failure is any exception.
+@item {Stud::Pool}
+Generic resource pools.
+@item {Stud::Task}
+Tasks (threads that can return values, exceptions, etc.)
+@item {Stud.interval}
+Interval execution (do X every N seconds).
+@item {Stud::Buffer}
+Batch and flush behavior.
+@end itemize")
+    (home-page "https://github.com/jordansissel/ruby-stud")
+    (license license:asl2.0)))
+
+(define-public ruby-standard-custom
+  (package
+    (name "ruby-standard-custom")
+    (version "1.0.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "standard-custom" version))
+       (sha256
+        (base32 "0av55ai0nv23z5mhrwj1clmxpgyngk7vk6rh58d4y1ws2y2dqjj2"))))
+    (build-system ruby-build-system)
+    (arguments '(#:tests? #f))  ;Circular dependency on ruby-standard.
+    (propagated-inputs (list ruby-lint-roller ruby-rubocop))
+    (synopsis "Plugin of custom cops for Standard Ruby")
+    (description
+     "This package provides a implementations of custom cops that are bundled
+as defaults in Standard Ruby.")
+    (home-page "https://github.com/standardrb/standard-custom")
+    (license license:expat)))
+
+(define-public ruby-standard-performance
+  (package
+    (name "ruby-standard-performance")
+    (version "1.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "standard-performance" version))
+       (sha256
+        (base32 "1x298w3wmq8cavbsg903wc3arxp3xh2x8263brvy128436m732rd"))))
+    (build-system ruby-build-system)
+    (arguments '(#:tests? #f))  ;Circular dependency on ruby-standard.
+    (propagated-inputs (list ruby-lint-roller ruby-rubocop-performance))
+    (synopsis "Standard Ruby Plugin for rubocop-performance")
+    (description
+     "This package is a Standard Ruby Plugin providing configuration for
+@code{rubocop-performance}.")
+    (home-page "https://github.com/standardrb/standard-performance")
+    (license license:expat)))
+
+(define-public ruby-standard
+  (package
+    (name "ruby-standard")
+    (version "1.37.0")
+    (source
+     (origin
+       (method git-fetch)               ;no test suite in distributed gem
+       (uri (git-reference
+             (url "https://github.com/testdouble/standard")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0gm9fn6fz41aya34xz7kzda8xxs7h98n7cjx66qbcy2w0qhs40wc"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'set-HOME
+            (lambda _
+              ;; Some tests fail otherwise.
+              (setenv "HOME" "/tmp")))
+          (add-after 'unpack 'relax-requirements
+            (lambda _
+              (substitute* "standard.gemspec"
+                (("\"rubocop\", \".*\"")
+                 (string-append
+                  "\"rubocop\", \"~> "
+                  #$(package-version
+                     (this-package-input "ruby-rubocop"))
+                  "\""))
+                (("\"rubocop-performance\", \".*\"")
+                 (string-append
+                  "\"rubocop-performance\", \"~> "
+                  #$(package-version
+                     (this-package-input "ruby-rubocop-performance"))
+                  "\"")))))
+          (add-after 'unpack 'delete-problematic-tests
+            ;; These tests fail for unknown reasons (see:
+            ;; https://github.com/testdouble/standard/issues/532).
+            (lambda _
+              (delete-file "test/standard_test.rb")
+              (substitute* "test/standard/base_test.rb"
+                ((".*test_configures_all_rubocop_cops.*" all)
+                 (string-append all
+                                "      skip('fails on guix')\n"))))))))
+    (native-inputs
+     (list ruby-simplecov))
+    (propagated-inputs
+     (list ruby-language-server-protocol
+           ruby-lint-roller
+           ruby-rubocop
+           ruby-rubocop-performance
+           ruby-standard-custom
+           ruby-standard-performance))
+    (synopsis "Ruby Style Guide, with linter & automatic code fixer")
+    (description "Standard is a port of StandardJS.  Like StandardJS, it aims
+to save time in the following ways:
+@itemize
+@item No configuration.
+@item Automatically format code.
+@item Catch style issues and programmer errors early.
+@end itemize")
+    (home-page "https://github.com/testdouble/standard")
+    (license license:expat)))
+
+(define-public ruby-chunky-png
+  (package
+    (name "ruby-chunky-png")
+    (version "1.4.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/wvanbergen/chunky_png")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "05qwj72dy2fcy0n2jnf3bfriybfj36m7s6pv9xash6295dbcp901"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:ruby ruby-3.1
+      #:test-target "spec"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'disable-bundler
+            (lambda _
+              (substitute* (find-files "." "\\.rb$")
+                (("require.*bundler/setup.*") "")))))))
+    (native-inputs
+     (list bundler ruby-rspec ruby-standard ruby-yard))
+    (synopsis "Ruby library to handle PNG images")
+    (description "ChunkyPNG is a pure Ruby library that can read and write
+Portable Network Graphics (PNG) images without depending on an external image
+library.  It tries to be memory efficient and reasonably fast.  It has
+features such as:
+@itemize
+@item
+Decoding support for any image that the PNG standard allows.  This includes all
+standard color modes, all bit depths, all transparency, and interlacing and
+filtering options.
+@item
+Encoding support for images of all color modes (true color, grayscale, and
+indexed) and transparency for all these color modes.  The best color mode is
+chosen automatically, based on the amount of used colors.
+@item Read/write access to the image's pixels.
+@item Read/write access to all image metadata that is stored in chunks.
+@item
+Memory efficiency: @code{fixnum} are used, i.e. 4 or 8 bytes of memory per
+pixel, depending on the hardware).
+@item
+Performance: ChunkyPNG is reasonably fast for Ruby standards, by only using
+integer math and a highly optimized saving routine.
+@item Interoperability with RMagick.
+@end itemize
+
+ChunkyPNG is vulnerable to decompression bombs and can run out of memory when
+loading a specifically crafted PNG file.  This is hard to fix in pure Ruby.
+Deal with untrusted images in a separate process, e.g., by using @code{fork}
+or a background processing library.")
+    (home-page "https://github.com/wvanbergen/chunky_png/wiki")
+    (license license:expat)))
+
+(define-public ruby-text-hyphen
+  (package
+    (name "ruby-text-hyphen")
+    (version "1.5.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "text-hyphen" version))
+        (sha256
+          (base32
+            "01js0wxz84cc5hzxgqbcqnsa0y6crhdi6plmgkzyfm55p0rlajn4"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list ruby-hoe))
+    (synopsis "Ruby library to hyphenate words in various languages")
+    (description "Text::Hyphen is a Ruby library to hyphenate words in various
+languages using Ruby-fied versions of TeX hyphenation patterns.  It will
+properly hyphenate various words according to the rules of the language the
+word is written in.  The algorithm is based on that of the TeX typesetting
+system by Donald E.  Knuth.")
+    (home-page "https://github.com/halostatue/text-hyphen")
+    ;; The whole is licensed under the Expat license, but parts use various
+    ;; versions of the LaTeX Project Public License.
+    (license license:expat)))
+
+(define-public ruby-open-uri-cached
+  (package
+    (name "ruby-open-uri-cached")
+    (version "1.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "open-uri-cached" version))
+       (sha256
+        (base32
+         "03v0if3jlvbclnd6jgjk94fbhf0h2fq1wxr0mbx7018sxzm0biwr"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f))                    ;no test suite
+    (synopsis "OpenURI with transparent disk caching")
+    (description "OpenURI with transparent disk caching, which is
+useful to avoid making excessive queries, for example when scraping
+web pages.")
+    (home-page "https://github.com/tigris/open-uri-cached")
+    (license license:expat)))
+
+(define-public ruby-asciidoctor-pdf
+  (package
+    (name "ruby-asciidoctor-pdf")
+    (version "2.3.19")
+    (source
+     (origin
+       (method git-fetch)               ;no test suite in the distributed gem
+       (uri (git-reference
+             (url "https://github.com/asciidoctor/asciidoctor-pdf")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1l8my8jj4aww2yad80n6f7hs76lq5gicld8dy014pw90pk3x43mp"))
+       (patches
+        (search-patches
+         "ruby-asciidoctor-pdf-support-prawn-svg-0_36.patch"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:test-target "spec"
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; The tests rely on the Gem being installed, so move the check
+          ;; phase after the install phase.
+          (delete 'check)
+          (add-after 'install 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (setenv "GEM_PATH" (string-append
+                                  (getenv "GEM_PATH") ":"
+                                  #$output "/lib/ruby/vendor_ruby"))
+              (when tests?
+                (invoke "rspec" "-t" "~visual" "-t" "~cli"
+                        "-t" "~network")))))))
+    (native-inputs
+     (list ruby-chunky-png
+           ruby-coderay
+           ruby-pdf-inspector
+           ruby-rouge
+           ruby-rspec))
+    (propagated-inputs
+     (list ruby-asciidoctor
+           ruby-concurrent
+           ruby-prawn
+           ruby-prawn-icon
+           ruby-prawn-svg
+           ruby-prawn-table
+           ruby-prawn-templates
+           ruby-text-hyphen
+           ruby-treetop
+           ruby-ttfunk))
+    (synopsis"AsciiDoc to Portable Document Format (PDF)} converter")
+    (description "Asciidoctor PDF is an extension for Asciidoctor that
+converts AsciiDoc documents to Portable Document Format (PDF) using the Prawn
+PDF library.  It has features such as:
+@itemize
+@item Direct AsciiDoc to PDF conversion
+@item Configuration-driven theme (style and layout)
+@item Scalable Vector Graphics (SVG) support
+@item PDF document outline (i.e., bookmarks)
+@item Table of contents page(s)
+@item Document metadata (title, authors, subject, keywords, etc.)
+@item Internal cross reference links
+@item Syntax highlighting with Rouge, Pygments, or CodeRay
+@item Page numbering
+@item Customizable running content (header and footer)
+@item
+“Keep together” blocks (i.e., page breaks avoided in certain block content)
+@item Orphaned section titles avoided
+@item Autofit verbatim blocks (as permitted by base_font_size_min setting)
+@item Table border settings honored
+@item Font-based icons
+@item Custom TrueType (TTF) fonts
+@item Double-sided printing mode (margins alternate on recto and verso pages)
+@end itemize")
+    (home-page "https://asciidoctor.org/docs/asciidoctor-pdf")
+    (license license:expat)))
+
+(define-public ruby-ast
+  (package
+    (name "ruby-ast")
+    (version "2.4.2")
+    (source
+     (origin
+       (method git-fetch)               ;no test included in gem from v2.4.1
+       (uri (git-reference
+             (url "https://github.com/whitequark/ast")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0vm94yml8rknr7z034vg6s3fpx6lml2prz9fn3hr67cx0143bb4h"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'remove-coveralls-requirement
+           (lambda _
+             (substitute* "test/helper.rb"
+               (("require 'coveralls'") "")
+               (("Coveralls::SimpleCov::Formatter") ""))))
+         (add-after 'extract-gemspec 'remove-unnecessary-requirements
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "ast.gemspec"
+               ((".*coveralls.*") "\n")
+               (("%q<rest-client>.*") "%q<rest-client>.freeze, [\">= 0\"])\n")
+               (("%q<mime-types>.*") "%q<mime-types>.freeze, [\">= 0\"])\n")
+               (("%q<rake>.*") "%q<rake>.freeze, [\">= 0\"])\n")
+               (("12\\.3") "13.0")))))))
+    (native-inputs
+     (list bundler
+           ruby-bacon
+           ruby-bacon-colored-output
+           ruby-json-pure
+           ruby-kramdown
+           ruby-mime-types
+           ruby-racc
+           ruby-rest-client
+           ruby-simplecov
+           ruby-yard))
+    (synopsis "Library for working with Abstract Syntax Trees")
+    (description
+     "@code{ast} is a Ruby library for working with Abstract Syntax Trees.
+It does this through immutable data structures.")
+    (home-page "https://whitequark.github.io/ast/")
+    (license license:expat)))
+
+(define-public ruby-sporkmonger-rack-mount
+  ;; Testing the addressable gem requires a newer commit than that released, so
+  ;; use an up to date version.
+  (let ((revision "1")
+        (commit "076aa2c47d9a4c081f1e9bcb56a826a9e72bd5c3"))
+    (package
+      (name "ruby-sporkmonger-rack-mount")
+      (version (git-version "0.8.3" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/sporkmonger/rack-mount")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1scx273g3xd93424x9lxc4zyvcp2niknbw5mkz6wkivpf7xsyxdq"))))
+      (build-system ruby-build-system)
+      (arguments
+       ;; Tests currently fail so disable them.
+       ;; https://github.com/sporkmonger/rack-mount/pull/1
+       `(#:tests? #f))
+      (propagated-inputs (list ruby-rack))
+      (synopsis "Stackable dynamic tree based Rack router")
+      (description
+       "@code{Rack::Mount} supports Rack's @code{X-Cascade} convention to
+continue trying routes if the response returns pass.  This allows multiple
+routes to be nested or stacked on top of each other.")
+      (home-page "https://github.com/sporkmonger/rack-mount")
+      (license license:expat))))
+
+(define-public ruby-ci-reporter
+  (package
+    (name "ruby-ci-reporter")
+    (version "2.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "ci_reporter" version))
+              (sha256
+               (base32
+                "0qcafasmjjr8a5gzr4k92ncm6h2943skwllhjzwz8spawdwc7dla"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:test-target "rspec"))
+    (propagated-inputs
+     (list ruby-builder ruby-rexml))
+    (native-inputs
+     (list bundler ruby-rspec))
+    (synopsis "Generate XML reports of runs test")
+    (description
+     "@code{CI::Reporter} is an add-on to Ruby testing frameworks that allows
+you to generate XML reports of your test runs.  The resulting files can be
+read by a continuous integration system that understands Ant's JUnit report
+format.")
+    (home-page "https://github.com/nicksieger/ci_reporter")
+    (license license:expat)))
+
+(define-public ruby-console
+  (package
+    (name "ruby-console")
+    (version "1.16.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "console" version))
+              (sha256
+               (base32
+                "0y1bv3kd1l9p0k5n3anvvjxdrcq113pyngz2g29i9mvdgbbx7kq2"))))
+    (build-system ruby-build-system)
+    ;; XXX: Disable test suite to avoid dependency cycles with ruby-samovar.
+    (arguments (list #:tests? #f))
+    (propagated-inputs (list ruby-fiber-local))
+    (synopsis "Console logging library for Ruby")
+    (description "This gem provides beautiful console logging for Ruby
+applications.  It implements fast, buffered log output and has the following
+features:
+@itemize
+@item Thread safe global logger with per-fiber context
+@item Carry along context with nested loggers
+@item Enable/disable log levels per class
+@item Detailed logging of exceptions
+@item Beautiful logging to the terminal or structured logging using JSON.
+@end itemize")
+    (home-page "https://github.com/socketry/console")
+    (license license:expat)))
+
+(define-public ruby-contracts
+  (package
+    (name "ruby-contracts")
+    (version "0.17.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "contracts" version))
+       (sha256
+        (base32
+         "1sclvlwnlxfaj1595xd0rn3x3w0ljic3vqgnx6476lr7x8xbpbiv"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:test-target "spec"
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; Don't run or require rubocop, the code linting tool, as this is a
+          ;; bit unnecessary.
+          (add-after 'unpack 'dont-run-rubocop
+            (lambda _
+              (substitute* "Rakefile"
+                ((".*rubocop.*") "")
+                ((".*RuboCop.*") "")))))))
+    (native-inputs
+     (list ruby-rspec))
+    (synopsis "Method contracts for Ruby")
+    (description
+     "This library provides contracts for Ruby.  A contract describes the
+correct inputs and output for a method, and will raise an error if a incorrect
+value is found.")
+    (home-page "https://github.com/egonSchiele/contracts.ruby")
+    (license license:bsd-2)))
+
+(define-public ruby-crack
+  (package
+    (name "ruby-crack")
+    (version "0.4.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "crack" version))
+       (sha256
+        (base32
+         "1cr1kfpw3vkhysvkk3wg7c54m75kd68mbm9rs5azdjdq57xid13r"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (for-each (lambda (file)
+                           (display file)(display "\n")
+                           (invoke "ruby" "-Ilib" "-Itest" "-rrubygems" file))
+                         (find-files "test" ".*rb$"))))))))
+    (synopsis "Simple JSON and XML parsing for Ruby")
+    (description
+     "@code{crack} provides really simple JSON and XML parsing, extracted from
+code in Merb and Rails.")
+    (home-page "https://github.com/jnunemaker/crack")
+    (license license:expat)))
+
+(define-public ruby-clamp
+  (package
+    (name "ruby-clamp")
+    (version "1.3.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "clamp" version))
+              (sha256
+               (base32
+                "08m0syh06bhx8dqn560ivjg96l5cs5s3l9jh2szsnlcdcyl9jsjg"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:test-target "spec"
+           #:phases #~(modify-phases %standard-phases
+                        (add-after 'unpack 'do-not-require-rubocop
+                          (lambda _
+                            (substitute* "Rakefile"
+                              (("require \"rubocop/rake_task\"")
+                               "")
+                              (("RuboCop::RakeTask.new")
+                               "")))))))
+    (native-inputs (list ruby-rspec))
+    (synopsis "Command-line parsing library for Ruby")
+    (description "Clamp provides an object-model for command-line utilities.
+It handles parsing of command-line options, and generation of usage help.")
+    (home-page "https://github.com/mdub/clamp")
+    (license license:expat)))
+
+(define-public ruby-cliver
+  (package
+    (name "ruby-cliver")
+    (version "0.3.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "cliver" version))
+       (sha256
+        (base32
+         "096f4rj7virwvqxhkavy0v55rax10r4jqf8cymbvn4n631948xc7"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; Avoid a incompatibility between rspec@2 and rake. Using rspec@3
+         ;; would be nice, but the tests look to be incompatible:
+         ;;
+         ;; NoMethodError: undefined method `last_comment'
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "rspec")))))))
+    (native-inputs
+     (list bundler ruby-rspec-2))
+    (synopsis "Assertions for command-line dependencies in Ruby")
+    (description
+     "@code{cliver} provides a way to detect missing command-line
+dependencies, including versions.")
+    (home-page "https://github.com/yaauie/cliver")
+    (license license:expat)))
+
+(define-public ruby-czmq-ffi-gen
+  (package
+    (name "ruby-czmq-ffi-gen")
+    (version "0.13.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "czmq-ffi-gen" version))
+       (sha256
+        (base32
+         "1yf719dmf4mwks1hqdsy6i5kzfvlsha69sfnhb2fr2cgk2snbys3"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f ;; Tests are not included in the release on rubygems.org
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-lib_dirs
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "lib/czmq-ffi-gen/czmq/ffi.rb"
+               (("lib\\_dirs = \\[.*\\]")
+                (string-append "lib_dirs = ['"
+                               (assoc-ref inputs "czmq") "/lib"
+                               "']")))
+             (substitute* "lib/czmq-ffi-gen/libzmq.rb"
+               (("lib\\_dirs = \\[.*\\]")
+                (string-append "lib_dirs = ['"
+                               (assoc-ref inputs "zeromq") "/lib"
+                               "']"))))))))
+    (inputs
+     (list zeromq czmq))
+    (propagated-inputs (list ruby-ffi))
+    (synopsis "Low-level Ruby bindings for CZMQ (generated using zproject)")
+    (description
+     "These Ruby bindings are not intended to be directly used, but rather
+used by higher level bindings like those provided by CZTop.")
+    (home-page
+     "https://github.com/paddor/czmq-ffi-gen")
+    (license license:isc)))
+
+(define-public ruby-cztop
+  (package
+    (name "ruby-cztop")
+    (version "0.12.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "cztop" version))
+       (sha256
+        (base32
+         "0yqbpaiw5d7f271d73lyrsh8xpx6n4zi6xqwfgi00dacxrq3s3fa"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:test-target "spec"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-lib_paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "lib/cztop/poller/zmq.rb"
+               (("lib\\_paths = \\[.*\\]")
+                (string-append "lib_paths = ['"
+                               (assoc-ref inputs "zeromq") "/lib"
+                               "']"))))))))
+    (native-inputs
+     (list bundler ruby-rspec))
+    (inputs
+     (list zeromq))
+    (propagated-inputs
+     (list ruby-czmq-ffi-gen))
+    (synopsis "CZMQ Ruby bindings")
+    (description
+     "CZMQ Ruby bindings, based on the generated low-level FFI bindings of
+CZMQ.  The focus of of CZTop is on being easy to use and providing first class
+support for security mechanisms.")
+    (home-page "https://github.com/paddor/cztop")
+    (license license:isc)))
+
+(define-public ruby-saikuro-treemap
+  (package
+    (name "ruby-saikuro-treemap")
+    (version "0.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "saikuro_treemap" version))
+              (sha256
+               (base32
+                "0w70nmh43mwfbpq20iindl61siqqr8acmf7p3m7n5ipd61c24950"))))
+    (build-system ruby-build-system)
+    ;; Some of the tests fail because the generated JSON has keys in a
+    ;; different order.  This is a problem with the test suite rather than any
+    ;; of the involved libraries.
+    (arguments `(#:tests? #f))
+    (propagated-inputs
+     (list ruby-json-pure ruby-atoulme-saikuro))
+    (synopsis "Generate complexity treemap based on saikuro analysis")
+    (description
+     "This gem generates a treemap showing the complexity of Ruby code on
+which it is run.  It uses Saikuro under the covers to analyze Ruby code
+complexity.")
+    (home-page "https://github.com/ThoughtWorksStudios/saikuro_treemap")
+    (license license:expat)))
+
+(define-public ruby-oauth2
+  (package
+    (name "ruby-oauth2")
+    (version "2.0.9")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://gitlab.com/oauth-xx/oauth2")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "191j1f4gjw8wij1jy2fvddgi8cv1mm0ki7v0b0795clix1avnj29"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:modules '((guix build ruby-build-system)
+                       (guix build utils)
+                       (ice-9 regex)
+                       (ice-9 textual-ports))
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'relax-requirements
+                          (lambda _
+                            (substitute* "Gemfile"
+                              (("^linting = .*")
+                               "linting = false\n")
+                              (("^coverage = .*")
+                               "coverage = false\n")
+                              (("^debug = .*")
+                               "debug = false\n"))
+                            (substitute* "spec/spec_helper.rb"
+                              (("^RUN_COVERAGE = .*")
+                               "RUN_COVERAGE = false\n")
+                              (("^ALL_FORMATTERS = .*")
+                               "ALL_FORMATTERS = false\n"))))
+               (add-after 'unpack 'skip-problematic-test
+                 (lambda _
+                   ;; XXX: substitute* can't match 2 lines.
+                   (with-atomic-file-replacement
+                    "spec/oauth2/client_spec.rb"
+                    (lambda (in out)
+                      (let* ((pattern "\
+    context 'when parse: :xml but response is JSON' do\n\
+      it 'returns a configured AccessToken' do\n")
+                             (content (get-string-all in))
+                             (matched (string-match pattern content)))
+                        (if matched
+                            (format out "~a    skip('fails on guix')~%~a"
+                                    (string-take content (match:end matched))
+                                    (string-drop content (match:end matched)))
+                            (display content out))))))))))
+    (native-inputs
+     (list bundler
+           ruby-addressable
+           ruby-backports
+           ruby-rexml
+           ruby-rspec-block-is-expected
+           ruby-rspec-pending-for
+           ruby-rspec-stubbed-env
+           ruby-silent-stream))
+    (propagated-inputs
+     (list ruby-faraday
+           ruby-jwt
+           ruby-multi-xml
+           ruby-rack
+           ruby-snaky-hash
+           ruby-version-gem))
+    (synopsis "Ruby wrapper for the OAuth 2.0")
+    (description
+     "This package provides a Ruby wrapper for the OAuth 2.0 protocol built
+with a similar style to the original OAuth spec.")
+    (home-page "https://github.com/oauth-xx/oauth2")
+    (license license:expat)))
+
+(define-public ruby-omniauth
+  (package
+    (name "ruby-omniauth")
+    (version "2.1.1")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/omniauth/omniauth")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1mm7a4ll7ymamrbsl63yi6i34qpwmh2nh5a9kj961gja1iz2gyd1"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'relax-requirements
+                 (lambda _
+                   (substitute* "spec/helper.rb"
+                     ;; This condition is used to require coveralls and
+                     ;; simplecov; override it to avoid these extraneous
+                     ;; requirements.
+                     (("RUBY_VERSION >= '1.9'")
+                      "false")
+                     (("require 'rack/freeze'") "")))))))
+    (native-inputs (list ruby-rspec))
+    (propagated-inputs (list ruby-hashie ruby-rack ruby-rack-test
+                             ruby-rack-protection))
+    (synopsis "Generalized Rack framework for multiple-provider authentication")
+    (description
+     "This package provides a generalized Rack framework for multiple-provider
+authentication.")
+    (home-page "https://github.com/omniauth/omniauth")
+    (license license:expat)))
+
+(define-public ruby-omniauth-oauth2
+  (package
+    (name "ruby-omniauth-oauth2")
+    (version "1.8.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "omniauth-oauth2" version))
+       (sha256
+        (base32
+         "0y4y122xm8zgrxn5nnzwg6w39dnjss8pcq2ppbpx9qn7kiayky5j"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'relax-requirements
+                 (lambda _
+                   (substitute* "spec/helper.rb"
+                     ;; This condition is used to require coveralls and
+                     ;; simplecov; override it to avoid these extraneous
+                     ;; requirements.
+                     (("RUBY_VERSION >= \"1.9\"")
+                      "false")))))))
+    (propagated-inputs (list ruby-oauth2 ruby-omniauth))
+    (native-inputs (list ruby-rspec ruby-rack-test ruby-webmock))
+    (synopsis "Abstract OAuth2 strategy for OmniAuth")
+    (description
+     "This library provides a generic OAuth2 strategy for OmniAuth.  It
+doesn't provide a way to gather user information, so should be used as a
+building block for authentication strategies.")
+    (home-page "https://github.com/omniauth/omniauth-oauth2")
+    (license license:expat)))
+
+(define-public ruby-open4
+  (package
+  (name "ruby-open4")
+  (version "1.3.4")
+  (source
+    (origin
+      (method url-fetch)
+      (uri (rubygems-uri "open4" version))
+      (sha256
+        (base32
+          "1cgls3f9dlrpil846q0w7h66vsc33jqn84nql4gcqkk221rh7px1"))))
+  (build-system ruby-build-system)
+  (arguments
+   '(#:phases
+     (modify-phases %standard-phases
+       (add-after 'unpack 'patch
+         (lambda _
+           (substitute* "rakefile"
+             ;; Update the Rakefile so it works
+             (("-rubygems") "-rrubygems")
+             (("Config") "RbConfig"))))
+       (add-before 'check 'set-LIB
+         (lambda _
+           ;; This is used in the rakefile when running the tests
+           (setenv "LIB" "open4"))))))
+  (synopsis "Open child processes from Ruby and manage them easily")
+  (description
+    "@code{Open4} is a Ruby library to run child processes and manage their
+input and output.")
+  (home-page "https://github.com/ahoward/open4")
+  (license license:ruby)))
+
+(define-public ruby-options
+  (package
+    (name "ruby-options")
+    (version "2.3.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "options" version))
+       (sha256
+        (base32
+         "1s650nwnabx66w584m1cyw82icyym6hv5kzfsbp38cinkr5klh9j"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f ;; TODO: NameError: uninitialized constant Config
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'set-LIB
+           (lambda _
+             ;; This is used in the Rakefile, and setting it avoids an issue
+             ;; with running the tests.
+             (setenv "LIB" "options"))))))
+    (synopsis "Ruby library to parse options from *args cleanly")
+    (description
+     "The @code{options} library helps with parsing keyword options in Ruby
+functions.")
+    (home-page "https://github.com/ahoward/options")
+    (license license:ruby)))
+
+(define-public ruby-erubi
+  (package
+    (name "ruby-erubi")
+    (version "1.11.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/jeremyevans/erubi")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0y4qskz260fjwbnjps5z5yygjwgh6ds0f97lfa9gsmh6zqa1lvvx"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:test-target "spec"))
+    (native-inputs (list ruby-minitest
+                         ruby-minitest-global-expectations))
+    (synopsis "ERB template engine for Ruby")
+    (description
+     "Erubi is a ERB template engine for Ruby.  It is a simplified fork of
+Erubis")
+    (home-page "https://github.com/jeremyevans/erubi")
+    (license license:expat)))
+
+(define-public ruby-erubis
+  (package
+    (name "ruby-erubis")
+    (version "2.7.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "erubis" version))
+       (sha256
+        (base32
+         "1fj827xqjs91yqsydf0zmfyw9p4l2jz5yikg3mppz6d7fi8kyrb3"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; tests do not run properly with Ruby 2.0
+    (synopsis "Implementation of embedded Ruby (eRuby)")
+    (description
+     "Erubis is a fast implementation of embedded Ruby (eRuby) with several
+features such as multi-language support, auto escaping, auto trimming spaces
+around @code{<% %>}, a changeable embedded pattern, and Ruby on Rails
+support.")
+    (home-page "http://www.kuwata-lab.com/erubis/")
+    (license license:expat)))
+
+(define-public ruby-ethon
+  (package
+    (name "ruby-ethon")
+    (version "0.12.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "ethon" version))
+       (sha256
+        (base32
+         "0gggrgkcq839mamx7a8jbnp2h7x2ykfn34ixwskwb0lzx2ak17g9"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:tests? #f  ; no included tests
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'libcurl-use-absolute-reference
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "lib/ethon/curls/settings.rb"
+                (("libcurl', 'libcurl\\.so\\.4")
+                 (search-input-file inputs "/lib/libcurl.so"))))))))
+    (inputs
+     (list curl))
+    (propagated-inputs
+     (list ruby-ffi))
+    (synopsis "Very lightweight @code{libcurl} wrapper")
+    (description
+     "Ethon is a very basic @code{libcurl} wrapper using ffi.")
+    (home-page "https://github.com/typhoeus/ethon")
+    (license license:expat)))
+
+(define-public ruby-execjs
+  (package
+    (name "ruby-execjs")
+    (version "2.7.0")
+    (source
+     (origin
+       ;; fetch from github as the gem does not contain testing code
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/rails/execjs")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0c0vd2mmqq3ar4plbwi2wsbr31vn4h45i19r5km66skydnnbp1y6"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list bundler
+           ;; The test suite tests all the available backends. Currently, this just
+           ;; means the node backend.
+           ;;
+           ;; PASSED: test:node
+           ;; SKIPPED: test:duktape, ;; test:javascriptcore, test:jscript,
+           ;; test:miniracer, test:rubyracer, ;; test:rubyrhino, test:v8
+           node-lts))
+    (synopsis "Run JavaScript code from Ruby")
+    (description
+     "ExecJS lets you run JavaScript code from Ruby.  It automatically picks a
+runtime to evaluate your JavaScript program, then returns the result to you as
+a Ruby object.")
+    (home-page "https://github.com/rails/execjs")
+    (license license:expat)))
+
+(define-public ruby-fakefs
+  (package
+    (name "ruby-fakefs")
+    (version "2.8.0")
+    (home-page "https://github.com/fakefs/fakefs")
+    (source (origin
+              ;; The Rubygems release does not contain tests.
+              (method git-fetch)
+              (uri (git-reference
+                    (url home-page)
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0a3vq6cllml279j77hxipmbln31pjw6di3zdgpzqvhqgazv55v10"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:phases (modify-phases %standard-phases
+                  (replace 'replace-git-ls-files
+                    (lambda _
+                      (substitute* "fakefs.gemspec"
+                        (("`git ls-files lib README.md LICENSE`")
+                         "`find lib README.md LICENSE -type f | sort`"))))
+                  (add-before 'check 'remove-version-constraints
+                    (lambda _
+                      ;; Drop hard version requirements for test dependencies.
+                      (substitute* "fakefs.gemspec"
+                        (("(.*add_development_dependency .*), .*" _ dep)
+                         (string-append dep "\n"))))))))
+    (native-inputs
+     (list ruby-bump ruby-maxitest ruby-pry ruby-rubocop ruby-rspec))
+    (synopsis "Fake file system for Ruby")
+    (description
+     "This package provides a fake file system for use in test suites.  It
+avoids the need for manually creating temporary directories, or dealing
+with platform intricacies in @code{File} and @code{FileUtils}.")
+    (license license:expat)))
+
+(define-public ruby-orderedhash
+  (package
+    (name "ruby-orderedhash")
+    (version "0.0.6")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "orderedhash" version))
+              (sha256
+               (base32
+                "0fryy7f9jbpx33jq5m402yqj01zcg563k9fsxlqbhmq638p4bzd7"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; no test suite
+    (synopsis "Ruby library providing an order-preserving hash")
+    (description "Orderedhash is a Ruby library providing a hash
+implementation that preserves the order of items and features some array-like
+extensions.")
+    (home-page "http://codeforpeople.com/lib/ruby/orderedhash/")
+    (license license:public-domain)))
+
+(define-public ruby-libxml
+  (package
+    (name "ruby-libxml")
+    (version "3.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "libxml-ruby" version))
+       (sha256
+        (base32
+         "0xy8wmjwjcnv36zi042678ncjzpxvy351ccbv7mzkns2n3kxfp54"))))
+    (build-system ruby-build-system)
+    (inputs
+     (list zlib libxml2))
+    (arguments
+     '(#:tests? #f ; test suite hangs for unknown reason
+       #:gem-flags
+       (list "--no-document"            ; TODO: Re-enable when documentation
+                                        ; generation works
+             "--"
+             (string-append "--with-xml2-include="
+                            (assoc-ref %build-inputs "libxml2")
+                            "/include/libxml2" ))))
+    (synopsis "Ruby bindings for GNOME Libxml2")
+    (description "The Libxml-Ruby project provides Ruby language bindings for
+the GNOME Libxml2 XML toolkit.")
+    (home-page "https://xml4r.github.com/libxml-ruby")
+    (license license:expat)))
+
+(define-public ruby-lino
+  (package
+    (name "ruby-lino")
+    (version "3.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "lino" version))
+       (sha256
+        (base32
+         "1zq9dza040fgjvr9imh7z2lgxrcyc5ac100rqimsnsf9bpfz3fsm"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; No included tests
+    (propagated-inputs
+     (list ruby-hamster ruby-open4))
+    (synopsis "Build and execute commands in Ruby")
+    (description
+     "@code{Lino} provides an interface to run external commands.  It provides
+an interface to add options as well as managing the standard input, output and
+error streams.")
+    (home-page "https://github.com/tobyclemson/lino")
+    (license license:expat)))
+
+(define-public ruby-x25519
+  (package
+    (name "ruby-x25519")
+    (version "1.0.10")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/RubyCrypto/x25519")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1g0311ly32f6hfn4q5fvkbjbl2bhv1l9fx6s0kglxfsrwq51926y"))
+              (patches
+               (search-patches
+                "ruby-x25519-automatic-fallback-non-x86_64.patch"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:test-target "spec"
+           #:phases #~(modify-phases %standard-phases
+                        (add-after 'unpack 'remove-unnecessary-dependencies
+                          (lambda _
+                            (substitute* "Gemfile"
+                              ((".*rubocop.*")
+                               ""))
+                            (substitute* "Rakefile"
+                              (("require \"rubocop/rake_task\"")
+                               "")
+                              (("RuboCop::RakeTask.new")
+                               ""))))
+                        (add-before 'build 'compile
+                          (lambda _
+                            (invoke "rake" "compile"))))))
+    (native-inputs (list ruby-rake-compiler ruby-rspec))
+    (synopsis "Cryptography library for Ruby providing the X25519
+Diffie-Hellman function")
+    (description
+     "The x25519 gem is an efficient public key cryptography library for
+Ruby providing key exchange/agreement via the X25519 (as known as
+Curve25519) Elliptic Curve Diffie-Hellman function as described in
+@url{https://www.ietf.org/rfc/rfc7748.txt, RFC 7748}.")
+    (home-page "https://github.com/RubyCrypto/x25519")
+    (license license:bsd-3)))
+
+(define-public ruby-xml-simple
+  (package
+    (name "ruby-xml-simple")
+    (version "1.1.5")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "xml-simple" version))
+              (sha256
+               (base32
+                "0xlqplda3fix5pcykzsyzwgnbamb3qrqkgbrhhfz2a2fxhrkvhw8"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; no test suite
+    (synopsis "Simple Ruby library for XML processing")
+    (description "This library provides a simple API for XML processing in
+Ruby.")
+    (home-page "https://github.com/maik/xml-simple")
+    (license license:ruby)))
+
+(define-public ruby-xpath
+  (package
+    (name "ruby-xpath")
+    (version "3.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "xpath" version))
+              (sha256
+               (base32
+                "0bh8lk9hvlpn7vmi6h4hkcwjzvs2y0cmkk3yjjdr8fxvj6fsgzbd"))))
+    (build-system ruby-build-system)
+    (arguments (list #:phases #~(modify-phases %standard-phases
+                                  (replace 'check
+                                    (lambda* (#:key tests? #:allow-other-keys)
+                                      (when tests?
+                                        (invoke "rspec" "spec" )))))))
+    (native-inputs (list ruby-pry ruby-rspec))
+    (propagated-inputs (list ruby-nokogiri))
+    (synopsis "Ruby DSL for generating XPath expressions")
+    (description "XPath is a Ruby domain-specific language (DSL) for
+generating XPath expressions.")
+    (home-page "https://github.com/teamcapybara/xpath")
+    (license license:expat)))
+
+(define-public ruby-thor
+  (package
+    (name "ruby-thor")
+    (version "1.2.2")
+    (source (origin
+              ;; Pull from git because the gem has no tests.
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/rails/thor")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1k3z2mlhaig5ycapjxwybb19z7ca0q1876i6csfmv2j0hf1hnc0z"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'remove-coveralls-dependency
+            (lambda _
+              ;; Do not hook the test suite into the online coveralls service.
+              (substitute* "Gemfile"
+                ((".*coveralls.*") ""))
+              (substitute* "spec/helper.rb"
+                (("require \"coveralls\"") "")
+                (("Coveralls::SimpleCov::Formatter") ""))))
+          (add-after 'unpack 'disable-problematic-tests
+            (lambda _
+              ;; These tests attempt to check the git repository for
+              ;; tabs vs spaces, double vs single quotes, etc, and
+              ;; depend on the git checkout.
+              (delete-file "spec/quality_spec.rb")
+              (substitute* "spec/parser/options_spec.rb"
+                ;; This test fails for unknown reasons (see:
+                ;; https://github.com/rails/thor/issues/814).
+                (("it \"raises an error for unknown switches" all)
+                 (string-append "x" all)))))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "rspec" "spec" )))))))
+    (native-inputs (list ruby-rspec ruby-simplecov ruby-webmock))
+    (synopsis "Ruby toolkit for building command-line interfaces")
+    (description "Thor is a toolkit for building powerful command-line
+interfaces.")
+    (home-page "http://whatisthor.com/")
+    (license license:expat)))
+
+(define-public ruby-lumberjack
+  (package
+    (name "ruby-lumberjack")
+    (version "1.0.13")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "lumberjack" version))
+              (sha256
+               (base32
+                "06im7gcg42x77yhz2w5da2ly9xz0n0c36y5ks7xs53v0l9g0vf5n"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list ruby-rspec ruby-timecop))
+    (synopsis "Logging utility library for Ruby")
+    (description "Lumberjack is a simple logging utility that can be a drop in
+replacement for Logger or ActiveSupport::BufferedLogger.  It provides support
+for automatically rolling log files even with multiple processes writing the
+same log file.")
+    (home-page "https://github.com/bdurand/lumberjack")
+    (license license:expat)))
+
+(define-public ruby-rbnacl
+  (package
+    (name "ruby-rbnacl")
+    (version "7.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "rbnacl" version))
+              (sha256
+               (base32
+                "0y8yzianlkc9w6sbqy8iy8l0yym0y6x7p5rjflkfixq76fqmhvzk"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'remove-unnecessary-dependencies
+            (lambda _
+              ;; Coveralls relates to a network service, and Rubocop to code
+              ;; linting and both are unnecessary to run the tests
+              (substitute* "Gemfile"
+                ((".*rubocop.*")
+                 "\n")
+                ((".*guard-rspec.*")
+                 "\n")
+                ((".*coveralls.*")
+                 "\n"))
+              (substitute* "spec/spec_helper.rb"
+                (("require \"coveralls\"")
+                 "")
+                (("Coveralls.wear!")
+                 ""))))
+          (add-after 'unpack 'use-libsodium-from-store
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* '("lib/rbnacl/init.rb"
+                             "lib/rbnacl/sodium.rb")
+                (("ffi_lib \\[.+\\]")
+                 (string-append "ffi_lib [\""
+                                (assoc-ref inputs "libsodium")
+                                "/lib/libsodium.so" "\"]")))))
+          ;; Run Rspec directly to avoid the Rubocop dependency in the
+          ;; Rakefile
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "rspec")))))))
+    (propagated-inputs (list ruby-ffi))
+    (inputs (list libsodium))
+    (native-inputs (list bundler ruby-rspec))
+    (synopsis "Ruby FFI binding to libsodium")
+    (description
+     "This package provides Ruby FFI bindings to the Networking and
+Cryptography (NaCl) library, also known as libsodium.  This provides a
+high-level toolkit for building cryptographic systems and protocols.")
+    (home-page "https://github.com/RubyCrypto/rbnacl")
+    (license license:expat)))
+
+(define-public ruby-rbtree
+  (package
+    (name "ruby-rbtree")
+    (version "0.4.6")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "rbtree" version))
+              (sha256
+               (base32
+                "1z0h1x7fpkzxamnvbw1nry64qd6n0nqkwprfair29z94kd3a9vhl"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'build 'extconf
+            (lambda _
+              (invoke "ruby" "extconf.rb")
+              (invoke "make" "install" (string-append "prefix=" #$output))))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "ruby" "-I." "test.rb")))))))
+    (synopsis "Ruby implementation of a sorted associative collection")
+    (description
+     "This package provides a RBTree is a sorted associative collection that
+is implemented with a Red-Black Tree.  It maps keys to values like a Hash, but
+maintains its elements in ascending key order.  The interface is the almost
+identical to that of Hash.")
+    (home-page "http://rbtree.rubyforge.org/")
+    (license license:expat)))
+
+(define-public ruby-rgl
+  (package
+    (name "ruby-rgl")
+    (version "0.6.6")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "rgl" version))
+              (sha256
+               (base32
+                "0dji1k9knrf8cxm5psd3pgd9i8f7cfq182jwjpi1pwxw15axf496"))))
+    (build-system ruby-build-system)
+  (arguments
+   (list
+    #:phases
+    #~(modify-phases %standard-phases
+        (add-after 'unpack 'remove-unnecessary-dependencies
+          (lambda _
+            (substitute* "Gemfile"
+              ;; Caring about coverage is a not a packager's task but a
+              ;; developer's
+              ;;(("gem \"simplecov\"") "")
+              ;; CodeClimate is an online service, and is unnecessary for
+              ;; running the tests
+              (("gem \"codeclimate-test-reporter\", .*") "\n")))))))
+    (native-inputs (list ruby-test-unit ruby-simplecov ruby-yard graphviz-minimal))
+    (propagated-inputs (list ruby-pairing-heap ruby-rexml ruby-stream))
+    (synopsis "Framework for graph data structures and algorithms")
+    (description "RGL is a framework for graph data structures and algorithms.
+The design of the library is much influenced by the Boost Graph Library (BGL)
+which is written in C++.")
+    (home-page "https://github.com/monora/rgl")
+    (license license:bsd-2)))
+
+(define-public ruby-hkdf
+  (package
+    (name "ruby-hkdf")
+    (version "1.0.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/jtdowney/hkdf")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32
+          "1xqwdmxfnhagivwgb5v9ilwpb4jxlsqwj7pnj43d65zzg5m8p9r5"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:test-target "default"))
+    (native-inputs
+     (list ruby-rspec))
+    (synopsis "HMAC-based Key Derivation Function")
+    (description
+     "This package provides a Ruby implementation of RFC5869: @acronym{HKDF,
+HMAC-based Extract-and-Expand Key Derivation Function}.  The goal of HKDF is to
+take some source key material and generate suitable cryptographic keys from it.")
+    (home-page "https://github.com/jtdowney/hkdf")
+    (license license:expat)))
+
+(define-public ruby-nenv
+  (package
+    (name "ruby-nenv")
+    (version "0.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "nenv" version))
+              (sha256
+               (base32
+                "0r97jzknll9bhd8yyg2bngnnkj8rjhal667n7d32h8h7ny7nvpnr"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f)) ; no tests included
+    (native-inputs
+     (list ruby-rspec bundler))
+    (synopsis "Ruby interface for modifying the environment")
+    (description "Nenv provides a convenient wrapper for Ruby's ENV to modify
+and inspect the environment.")
+    (home-page "https://github.com/e2/nenv")
+    (license license:expat)))
+
+(define-public ruby-ptools
+  (package
+    (name "ruby-ptools")
+    (version "1.5.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "ptools" version))
+              (sha256
+               (base32
+                "0damllbshkxycrwjv80sz78h76dw7r9z54d17mb5cbha1daq9q2d"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:test-target "spec:all"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch
+            (lambda _
+              (substitute* "Rakefile"
+                ;; Don't require rubocop
+                (("require 'rubocop/rake_task'") "")
+                (("RuboCop::RakeTask.new") "")
+                ;; Do not attempt to sign the gem.
+                (("spec\\.signing_key = .*") ""))
+
+              (substitute* "spec/binary_spec.rb"
+                (("/bin/ls")    (which "ls"))
+                (("/bin/cat")   (which "cat"))
+                (("/bin/chmod") (which "chmod"))
+                (("/bin/df")    (which "df"))))))))
+    (native-inputs
+     (list ruby-rspec))
+    (synopsis "Extra methods for Ruby's @code{File} class")
+    (description
+     "The @dfn{ptools} (power tools) library extends Ruby's core @code{File}
+class with many additional methods modelled after common POSIX tools, such as
+@code{File.which} for finding executables, @code{File.tail} to print the last
+lines of a file, @code{File.wc} to count words, and so on.")
+    (home-page "https://github.com/djberg96/ptools")
+    (license license:artistic2.0)))
+
+(define-public ruby-permutation
+  (package
+    (name "ruby-permutation")
+    (version "0.1.8")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "permutation" version))
+              (sha256
+               (base32
+                "13crwk2vfbzv99czva7881027dbcnidihmvx2jc58z2vm3bp9sl8"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-rakefile
+          (lambda _
+            (substitute* "Rakefile"
+              (("require 'rake/gempackagetask'")
+               "require 'rubygems/package_task'")
+              (("include Config") ""))))
+         (replace 'check
+          (lambda _
+            (invoke "ruby" "-Ilib" "test/test.rb"))))))
+    (synopsis "Library to perform operations with sequence permutations")
+    (description "This package provides a Ruby library to perform different
+operations with permutations of sequences, such as strings and arrays.")
+    (home-page "https://flori.github.io/permutation")
+    (license license:gpl2))) ; GPL 2 only
+
+(define-public ruby-shellany
+  (package
+    (name "ruby-shellany")
+    (version "0.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "shellany" version))
+              (sha256
+               (base32
+                "1ryyzrj1kxmnpdzhlv4ys3dnl2r5r3d2rs2jwzbnd1v96a8pl4hf"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:test-target "default"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-version-test
+          (lambda _
+            (substitute* "spec/shellany_spec.rb"
+              (("^RSpec") "require \"shellany\"\nRSpec")))))))
+    (native-inputs
+     (list ruby-rspec ruby-nenv bundler))
+    (synopsis "Capture command output")
+    (description "Shellany is a Ruby library providing functions to capture
+the output produced by running shell commands.")
+    (home-page "https://rubygems.org/gems/shellany")
+    (license license:expat)))
+
+(define-public ruby-notiffany
+  (package
+    (name "ruby-notiffany")
+    (version "0.1.3")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "notiffany" version))
+              (sha256
+               (base32
+                "0f47h3bmg1apr4x51szqfv3rh2vq58z3grh4w02cp3bzbdh6jxnk"))))
+    (build-system ruby-build-system)
+    ;; Tests are not included in the gem.
+    (arguments `(#:tests? #f))
+    (propagated-inputs
+     (list ruby-shellany ruby-nenv))
+    (native-inputs
+     (list bundler))
+    (synopsis "Wrapper library for notification libraries")
+    (description "Notiffany is a Ruby wrapper library for notification
+libraries such as Libnotify.")
+    (home-page "https://github.com/guard/notiffany")
+    (license license:expat)))
+
+(define-public ruby-forking-test-runner
+  (package
+    (name "ruby-forking-test-runner")
+    (version "1.6.0")
+    (home-page "https://github.com/grosser/forking_test_runner")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference (url home-page)
+                                  (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1mrglzkj2nrgisccf2f30zbfmcs0awv1g3lw994b2az90fl39x8m"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:test-target "spec"
+       ;; FIXME: ActiveRecord depends on sqlite3 1.3.6, but Guix has
+       ;; 1.4.1, which in turn breaks the tests that use ActiveRecord.
+       #:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (replace 'replace-git-ls-files
+                    (lambda _
+                      (substitute* "forking_test_runner.gemspec"
+                        (("`git ls-files lib/ bin/ MIT-LICENSE`")
+                         "`find lib/ bin/ MIT-LICENSE -type f | sort`"))))
+                  (add-before 'check 'remove-version-constraints
+                    (lambda _
+                      ;; Ignore hard coded version constraints for the tests.
+                      (delete-file "Gemfile.lock")))
+                  (add-before 'check 'set-HOME
+                    (lambda _
+                      ;; Many tests invoke Bundler, and fails when Bundler
+                      ;; warns that /homeless-shelter does not exist.
+                      (setenv "HOME" "/tmp"))))))
+    (native-inputs
+     (list ruby-activerecord ruby-bump ruby-rspec ruby-sqlite3 ruby-wwtd))
+    (propagated-inputs
+     (list ruby-parallel-tests))
+    (synopsis "Run every test in a fork")
+    (description
+     "This package is a wrapper around @code{parallel_tests} that runs every
+test in a fork to avoid pollution and get clean output per test.")
+    (license license:expat)))
+
+(define-public ruby-formatador
+  (package
+    (name "ruby-formatador")
+    (version "0.2.5")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "formatador" version))
+              (sha256
+               (base32
+                "1gc26phrwlmlqrmz4bagq1wd5b7g64avpx0ghxr9xdxcvmlii0l0"))))
+    (build-system ruby-build-system)
+    ;; Circular dependency: Tests require ruby-shindo, which requires
+    ;; ruby-formatador at runtime.
+    (arguments `(#:tests? #f))
+    (synopsis "Ruby library to format text on stdout")
+    (description "Formatador is a Ruby library to format text printed to the
+standard output stream.")
+    (home-page "https://github.com/geemus/formatador")
+    (license license:expat)))
+
+(define-public ruby-fuubar
+  (package
+    (name "ruby-fuubar")
+    (version "2.3.2")
+    (source
+     (origin
+       ;; Fetch from the git repository, as the gem package doesn't include
+       ;; the tests.
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/thekompanee/fuubar")
+             (commit (string-append "releases/v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0jm1x2xp13csbnadixaikj7mlkp5yk4byx51npm56zi13izp7259"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(;; TODO: Some tests fail, unsure why.
+       ;; 21 examples, 7 failures
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'delete-certificate
+           (lambda _
+             ;; Remove 's.cert_chain' as we do not build with a private key
+             (substitute* "fuubar.gemspec"
+               ((".*cert_chain.*") "")
+               ((".*signing_key.*") ""))))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "rspec")))))))
+    (native-inputs
+     (list bundler))
+    (propagated-inputs
+     (list ruby-rspec-core ruby-progressbar))
+    (synopsis "Fuubar is an RSpec formatter that uses a progress bar")
+    (description
+     "Fuubar is an RSpec formatter that uses a progress bar instead of a
+string of letters and dots as feedback.  It also stops on the first test
+failure.")
+    (home-page "https://github.com/thekompanee/fuubar")
+    (license license:expat)))
+
+(define-public ruby-haml
+  (package
+    (name "ruby-haml")
+    (version "5.0.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "haml" version))
+       (sha256
+        (base32
+         "1q0a9fvqh8kn6wm97fcks6qzbjd400bv8bx748w8v87m7p4klhac"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; No included tests
+    (propagated-inputs
+     (list ruby-tilt ruby-temple))
+    (synopsis "Haml is a Ruby library to generate HTML documents")
+    (description
+     "@acronym{Haml, HTML Abstraction Markup Language} is a layer on top of
+HTML or XML that is designed to express the structure of documents using
+indentation rather than closing tags.  It was originally envisioned as a
+plugin for Ruby on Rails, but it can function as a stand-alone templating
+engine.")
+    (home-page "https://haml.info/")
+    (license license:expat)))
+
+(define-public ruby-hamster
+  (package
+  (name "ruby-hamster")
+  (version "3.0.0")
+  (source
+    (origin
+      (method url-fetch)
+      (uri (rubygems-uri "hamster" version))
+      (sha256
+        (base32
+          "1n1lsh96vnyc1pnzyd30f9prcsclmvmkdb3nm5aahnyizyiy6lar"))))
+  (build-system ruby-build-system)
+  (arguments
+   (list
+    ;; Only supports Ruby 2 currently
+    #:ruby ruby-2.7
+    #:phases
+    #~(modify-phases %standard-phases
+        (add-after 'unpack 'remove-unnecessary-dependencies
+          (lambda _
+            ;; pry is a debugging tool, and is unnecessary when running the
+            ;; tests
+            (substitute* "spec/lib/hamster/vector/insert_spec.rb"
+              (("require 'pry'") ""))
+            (substitute* "spec/spec_helper.rb"
+              (("require \"pry\"") "")
+              ;; CodeClimate is an online service, and is unnecessary for
+              ;; running the tests
+              (("require \"codeclimate-test-reporter\"") "")
+              (("CodeClimate.*\n") ""))))
+        ;; No Rakefile is included, so run rspec directly.
+        (replace 'check
+          (lambda* (#:key tests? #:allow-other-keys)
+            (when tests?
+              (invoke "ruby" (which "rspec"))))))))
+  (propagated-inputs
+   (list ruby-concurrent))
+  (native-inputs
+   (list ruby-rspec))
+  (synopsis "Efficient, immutable, thread-safe collection classes for Ruby")
+  (description
+    "Hamster provides 6 persistent data structures: @code{Hash}, @code{Vector},
+@code{Set}, @code{SortedSet}, @code{List}, and @code{Deque} (which works as an
+immutable queue or stack).")
+  (home-page "https://github.com/hamstergem/hamster")
+  (license license:expat)))
+
+(define-public ruby-hashdiff
+  (package
+    (name "ruby-hashdiff")
+    (version "1.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "hashdiff" version))
+       (sha256
+        (base32
+         "1nynpl0xbj0nphqx1qlmyggq58ms1phf5i03hk64wcc0a17x1m1c"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; Run tests directly via rspec to avoid depending on rubocop.
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "rspec")))))))
+    (native-inputs
+     (list bundler ruby-rspec-2))
+    (synopsis "HashDiff computes the smallest difference between two hashes")
+    (description
+     "HashDiff is a Ruby library to compute the smallest difference between
+two hashes.")
+    (home-page "https://github.com/liufengyun/hashdiff")
+    (license license:expat)))
+
+(define-public ruby-hydra-minimal
+  ;; No releases yet.
+  (let ((commit "a4cab705a8a281e4356cb6a05a1946443ad9d53b")
+        (revision "1"))
+    (package
+      (name "ruby-hydra-minimal")
+      (version (git-version "0.0.0" revision commit))
+      (home-page "https://github.com/hyphenation/hydra")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference (url home-page) (commit commit)))
+                (file-name (git-file-name name version))
+                ;; byebug is a non-essential debugging utility that brings in
+                ;; many dependencies.
+                (patches (search-patches "ruby-hydra-minimal-no-byebug.patch"))
+                (sha256
+                 (base32
+                  "1swzab7i4cqk1bck7p5m3bh526jh0v6m9qq720r3270zbjc8x8z3"))))
+      (build-system ruby-build-system)
+      (arguments
+       ;; Avoid rspec dependency.
+       '(#:tests? #f))
+      (synopsis "Ruby hyphenation patterns")
+      (description
+       "ruby-hydra-minimal is a Ruby library for working with hyphenation patterns.
+It is a low-dependency variant of ruby-hydra.")
+      (license license:expat))))
+
+;; Pinned variant for use by texlive
+(define-public ruby-hydra-minimal/pinned
+  (hidden-package
+   (package
+     (inherit ruby-hydra-minimal)
+     (arguments
+      (cons* #:ruby ruby-2.7
+             (package-arguments ruby-hydra-minimal))))))
+
+(define-public ruby-hydra
+  (package
+    (inherit ruby-hydra-minimal)
+    (name "ruby-hydra")
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'make-files-writable
+            (lambda _
+              (for-each make-file-writable (find-files "."))))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "rspec")))))))
+    (native-inputs
+     (list ruby-rspec))
+    (description
+     "ruby-hydra is a Ruby library for working with hyphenation patterns.")))
+
+(define-public ruby-shindo
+  (package
+    (name "ruby-shindo")
+    (version "0.3.11")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "shindo" version))
+              (sha256
+               (base32
+                "1wccg3a4g3agfyszipkdnbcgsazcfwdbz1gv51q8m17m9plvpzdp"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:test-target "tests"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'fix-tests
+            (lambda _
+              (substitute* "tests/tests_helper.rb"
+                (("-rrubygems") ""))))
+          ;; Move the 'check phase to after 'install, to use installed shindo.
+          (delete 'check)
+          (add-after 'install 'configure-tests
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (setenv "GEM_PATH"
+                        (string-append
+                         (getenv "GEM_PATH") ":"
+                         #$output "/lib/ruby/vendor_ruby"))
+                (setenv "PATH"
+                        (string-append
+                         (getenv "PATH") ":" #$output "/bin")))))
+          (add-after 'configure-tests 'check
+            (assoc-ref %standard-phases 'check)))))
+    (propagated-inputs
+     (list ruby-formatador))
+    (synopsis "Simple depth first Ruby testing")
+    (description "Shindo is a simple depth first testing library for Ruby.")
+    (home-page "https://github.com/geemus/shindo")
+    (license license:expat)))
+
+(define-public ruby-rubygems-tasks
+  (package
+    (name "ruby-rubygems-tasks")
+    (version "0.2.5")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "rubygems-tasks" version))
+              (sha256
+               (base32
+                "1x3sz3n2dlknd3v7w1mrq6f0ag6pwzhjvg7z29p75w3p42ma1gbx"))))
+    (build-system ruby-build-system)
+    ;; Tests need Internet access.
+    (arguments `(#:tests? #f))
+    (synopsis "Rake tasks for managing and releasing Ruby Gems")
+    (description "Rubygems-task provides Rake tasks for managing and releasing
+Ruby Gems.")
+    (home-page "https://github.com/postmodern/rubygems-tasks")
+    (license license:expat)))
+
+(define-public ruby-rubyzip
+  (package
+    (name "ruby-rubyzip")
+    (version "2.3.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/rubyzip/rubyzip")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "03p8c990n6c1r4g64w0vv7z2iaswisl07l2f1lbh1s78cvmlmfxx"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-rubocop
+           (lambda _
+             (substitute* "Rakefile"
+               (("require 'rubocop/rake_task'") "")
+               (("RuboCop::RakeTask.new") ""))))
+         (add-before 'check 'patch-tests
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "test/gentestfiles.rb"
+               (("/usr/bin/zip") (which "zip")))))
+         (add-after 'patch-source-shebangs 'unpatch-some-source-shebangs
+           (lambda _
+             ;; The tests compare zipped files with data test files; since the
+             ;; zip files do not have their shebangs patched, the data files
+             ;; compared with their extracted version must also be left
+             ;; un-patched.
+             (substitute* (find-files "test/data" "\\.(txt|rb)$")
+               (((which "ruby"))
+                "/usr/bin/env ruby")))))))
+    (native-inputs
+     (list bundler ruby-simplecov zip unzip))
+    (synopsis "Ruby module is for reading and writing zip files")
+    (description
+     "The rubyzip module provides ways to read from and create zip files.")
+    (home-page "https://github.com/rubyzip/rubyzip")
+    (license license:bsd-2)))
+
+(define-public ruby-silent-stream
+  (package
+    (name "ruby-silent-stream")
+    (version "1.0.6")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "silent_stream" version))
+              (sha256
+               (base32
+                "10381fpvjzfjvhgfyv700607fpa29firgf52w5w5536m4fh6x63m"))))
+    (build-system ruby-build-system)
+    (synopsis "ActiveSupport stream silencing without ActiveSupport")
+    (description "SilentStream is an extraction of some parts of
+ActiveSupport's Kernel Reporting Core Extensions around silencing IO
+streams.")
+    (home-page "https://github.com/pboling/silent_stream")
+    (license license:expat)))
+
+(define-public ruby-simplecov-lcov
+  (package
+    (name "ruby-simplecov-lcov")
+    (version "0.8.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "simplecov-lcov" version))
+              (sha256
+               (base32
+                "1h8kswnshgb9zidvc88f4zjy4gflgz3854sx9wrw8ppgnwfg6581"))))
+    (build-system ruby-build-system)
+    ;; The test suite fails half of its tests; it seems to rely on older
+    ;; versions of simplecov, rspec, possibly others (see:
+    ;; https://github.com/fortissimo1997/simplecov-lcov/issues/29).
+    (arguments (list #:tests? #f
+                     #:test-target "spec"))
+    (native-inputs
+     (list ruby-activesupport
+           ruby-coveralls
+           ruby-rspec
+           ruby-simplecov))
+    (synopsis "SimpleCov formatter to generate a lcov style coverage")
+    (description "This package provides a SimpleCov formatter to generate a
+lcov-style coverage report.")
+    (home-page "https://github.com/fortissimo1997/simplecov-lcov")
+    (license license:expat)))
+
+(define-public ruby-snaky-hash
+  (package
+    (name "ruby-snaky-hash")
+    (version "2.0.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference       ;for tests
+                    (url "https://gitlab.com/oauth-xx/snaky_hash")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0zmixxzi2g2d75zii65bq037j4g67p25l6aqddbmmwizspsp5az6"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (add-after 'unpack 'relax-requirements
+                          (lambda _
+                            (substitute* "Gemfile"
+                              (("^linting = .*")
+                               "linting = false\n")
+                              (("^coverage = .*")
+                               "coverage = false\n")
+                              (("^debug = .*")
+                               "debug = false\n"))
+                            (substitute* "spec/spec_helper.rb"
+                              (("^RUN_COVERAGE = .*")
+                               "RUN_COVERAGE = false\n")
+                              (("^ALL_FORMATTERS = .*")
+                               "ALL_FORMATTERS = false\n"))))
+                        (add-before 'build 'drop-signing-key-requirement
+                          (lambda _
+                            (substitute* "snaky_hash.gemspec"
+                              (("spec.signing_key =.*")
+                               "spec.signing_key = nil")))))))
+    (native-inputs (list ruby-rspec ruby-rspec-block-is-expected))
+    (propagated-inputs (list ruby-hashie ruby-version-gem))
+    (synopsis "Hash keys and look-ups normalization Ruby library")
+    (description "The SnakyHash Ruby library provides classes for normalizing
+hash keys and look-ups, and a pseudo-object interface.")
+    (home-page "https://gitlab.com/oauth-xx/snaky_hash")
+    (license license:expat)))
+
+(define-public ruby-useragent
+  (package
+    (name "ruby-useragent")
+    (version "0.16.10")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "useragent" version))
+              (sha256
+               (base32
+                "1fv5kvq494swy0p17h9qya9r50w15xsi9zmvhzb8gh55kq6ki50p"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; no test suite
+    (synopsis "HTTP user agent parser for Ruby")
+    (description "UserAgent is a Ruby library that parses and compares HTTP
+User Agents.")
+    (home-page "https://github.com/gshutler/useragent")
+    (license license:expat)))
+
+(define-public ruby-backports
+  (package
+  (name "ruby-backports")
+  (version "3.11.4")
+  (source
+    (origin
+      (method url-fetch)
+      (uri (rubygems-uri "backports" version))
+      (sha256
+        (base32
+          "1hshjxww2h7s0dk57njrygq4zpp0nlqrjfya7zwm27iq3rhc3y8g"))))
+  (build-system ruby-build-system)
+  (arguments
+   '(;; TODO: This should be default, but there is one test failure
+     #:test-target "all_spec"))
+  (native-inputs
+   (list ruby-mspec ruby-activesupport))
+  (synopsis "Backports of the features in newer Ruby versions")
+  (description
+    "Backports enables more compatibility across Ruby versions by providing
+backports of some features.")
+  (home-page "https://github.com/marcandre/backports")
+  (license license:expat)))
+
+(define-public ruby-bacon
+  (package
+    (name "ruby-bacon")
+    (version "1.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "bacon" version))
+              (sha256
+               (base32
+                "1f06gdj77bmwzc1k5iragl1595hbn67yc7sqvs56ca8plrr2vmai"))))
+    (build-system ruby-build-system)
+    (synopsis "Small RSpec clone")
+    (description "Bacon is a small RSpec clone providing all essential
+features.")
+    (home-page "https://github.com/chneukirchen/bacon")
+    (license license:expat)))
+
+(define-public ruby-bacon-bits
+  (package
+    (name "ruby-bacon-bits")
+    (version "0.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "bacon-bits" version))
+       (sha256
+        (base32
+         "1ghpj8ja94lhi8rgi872hqk4fd2amz2k7g9znd64z5dj7v6l0dmx"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; No tests
+     '(#:tests? #f))
+    (propagated-inputs (list ruby-bacon))
+    (synopsis "Extensions to Bacon, for disabling tests, before and after
+blocks and more")
+    (description
+     "This extends the bacon testing framework with useful extensions to
+disable tests, have before and after blocks that run once and more.")
+    (home-page "https://github.com/cldwalker/bacon-bits")
+    (license license:expat)))
+
+(define-public ruby-bacon-colored-output
+  (package
+    (name "ruby-bacon-colored-output")
+    (version "1.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "bacon-colored_output" version))
+       (sha256
+        (base32
+         "1znyh3vkfdlmf19p3k4zip88ibym41dn5g4p4n5hmks2iznb7qpx"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(;; No included tests
+       #:tests? #f))
+    (propagated-inputs
+     (list ruby-bacon))
+    (synopsis "Colored output for Bacon test framework")
+    (description
+     "This package adds color through ANSI escape codes to Bacon test
+output.")
+    (home-page "https://github.com/whitequark/bacon-colored_output")
+    (license license:expat)))
+
+(define-public ruby-bake
+  (package
+    (name "ruby-bake")
+    (version "0.18.2")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ioquatix/bake")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "19yi1fxzz9n580gig3p3j6nxbgcfcassa6b0q07jkqrzxdqn7xhn"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'sanitize-dependencies
+                 (lambda _
+                   ;; These dependencies are not needed to build and run tests
+                   ;; and contain circular dependencies.
+                   (substitute* "gems.rb"
+                     ((".*'bake-modernize'.*") "")
+                     ((".*'bake-gem'.*") "")
+                     ((".*'bake-github-pages'.*") "")
+                     ((".*'utopia-project'.*") ""))))
+               (add-before 'build 'drop-signing-key-requirement
+                 (lambda _
+                   (substitute* "bake.gemspec"
+                     (("spec.signing_key =.*")
+                      "spec.signing_key = nil"))))
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     (invoke "rspec")))))))
+    (native-inputs (list ruby-covered ruby-rspec))
+    (propagated-inputs (list ruby-samovar))
+    (synopsis "Replacement for rake with a simpler syntax")
+    (description "Bake is a task execution tool, inspired by Rake, but
+codifying many of the use cases which are typically implemented in an ad-hoc
+manner.")
+    (home-page "https://github.com/ioquatix/bake")
+    (license license:expat)))
+
+(define-public ruby-bake-test
+  (package
+    (name "ruby-bake-test")
+    (version "0.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "bake-test" version))
+              (sha256
+               (base32
+                "1p6kfpncj0s4zyynrrq6c735jvh0dnwyv7kfqym4rpyka4f85qdp"))))
+    (build-system ruby-build-system)
+    ;; XXX: Disable the test suite to avoid a circular dependency with
+    ;; ruby-sus.
+    (arguments (list #:tests? #f))
+    (propagated-inputs (list ruby-bake))
+    (synopsis "Test suite automatic runner for Ruby")
+    (description "@command{bake-test} automatically discovers how to run local
+test suites for Ruby projects.  It supports @command{rspec}, @command{sus}, as
+well as @samp{rake}.")
+    (home-page "https://github.com/ioquatix/bake-test")
+    (license license:expat)))
+
+(define-public ruby-bake-test-external
+  (package
+    (name "ruby-bake-test-external")
+    (version "0.3.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "bake-test-external" version))
+              (sha256
+               (base32
+                "0749xc7jkz1c5gsq1giwhrqy6s6xqm48bdvs414372881wki2jmh"))))
+    (build-system ruby-build-system)
+    ;; The test suite relies on git and network access to clone external
+    ;; repositories.
+    (arguments (list #:tests? #f))
+    (propagated-inputs (list ruby-bake))
+    (synopsis "Continuous integration extension for Bake")
+    (description "Bake Test External adds a @samp{test:external} action to the
+@command{bake} command to run the test suites of dependent projects to check
+for breakage.")
+    (home-page "https://github.com/ioquatix/bake-test-external")
+    (license license:expat)))
+
+(define-public ruby-connection-pool
+  (package
+    (name "ruby-connection-pool")
+    (version "2.4.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/mperham/connection_pool")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1iijshb1n9xl5knvpzzx0vqlw7v7mskiw1cpfj1cmdmssavyhsx5"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch
+            (lambda _
+              (substitute* "Rakefile"
+                (("require \"standard/rake\"") "")
+                ((":\"standard:fix\",") "")))))))
+    (native-inputs
+     (list bundler))
+    (synopsis "Generic connection pool for Ruby")
+    (description "Connection_pool provides a generic connection pooling
+interface for Ruby programs.")
+    (home-page "https://github.com/mperham/connection_pool")
+    (license license:expat)))
+
+(define-public ruby-fast-gettext
+  (package
+    (name "ruby-fast-gettext")
+    (version "4.1.0")
+    (home-page "https://github.com/grosser/fast_gettext")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference (url home-page)
+                                  (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "04p9s0r67xgvckab9ydb3fbnrc7g20p5c05z2zsacynlkp9x5jp9"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:test-target "spec"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'check 'remove-version-constraints
+            (lambda _
+              (delete-file "Gemfile.lock"))))))
+    (native-inputs
+     (list ;; For tests.
+           ruby-activerecord
+           ruby-activesupport
+           ruby-bump
+           ruby-forking-test-runner
+           ruby-i18n
+           ruby-rubocop
+           ruby-rubocop-packaging
+           ruby-rspec
+           ruby-single-cov
+           ruby-sqlite3
+           ruby-wwtd))
+    (synopsis "Fast implementation of @code{GetText}")
+    (description
+     "This package provides an alternative implementation of the Ruby
+@code{GetText} library that is approximately 12x faster yet thread safe.")
+    ;; Some parts are covered by the Ruby license, see file headers.
+    (license (list license:expat license:ruby))))
+
+(define-public ruby-fiber-local
+  (package
+    (name "ruby-fiber-local")
+    (version "1.0.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/socketry/fiber-local")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0pp5b81h0lysdnphgprkixh1az0fkrgir5sbcp0mm8arxf3f8m90"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'extract-gemspec 'sanitize-dependencies
+                 (lambda _
+                   ;; This pulls in extraneous maintenance dependencies.
+                   (delete-file "gems.rb")
+                   ;; Depending on ruby-covered would introduce a dependency
+                   ;; cycle with it.
+                   (substitute* '("fiber-local.gemspec" "spec/spec_helper.rb")
+                     ((".*covered.*") ""))))
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     (invoke "rspec")))))))
+    (native-inputs (list ruby-rspec))
+    (synopsis "Ruby module to simplify fiber-local state management")
+    (description "This package provides a class-level mixin to make managing
+fiber-local state easy.  It provides easy access to a fiber-local state from a
+fiber, and defaults to a shared thread-local state.")
+    (home-page "https://github.com/socketry/fiber-local")
+    (license license:expat)))
+
+(define-public ruby-flores
+  (let ((commit "92fded00b04b1e3d308edb7440d7b7ab2c89ab5e")
+        (revision "0"))
+    (package
+      (name "ruby-flores")
+      (version (git-version "0.0.8" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/jordansissel/ruby-flores")
+               (commit commit)))
+         (sha256
+          (base32 "0jvnw0jli2zzxklfk751vfbi4acf9lijppk67346j3b2qxqi8xms"))
+         (patches
+          (search-patches "ruby-flores-fix-deprecations.patch"))))
+      (build-system ruby-build-system)
+      (arguments
+       (list #:phases
+             #~(modify-phases %standard-phases
+                 (add-after 'unpack 'fix-gemspec
+                   (lambda _
+                     (substitute* "flores.gemspec"
+                       ;; Since this is not a git repository, do not call 'git'.
+                       (("git ls-files") "find . -type f |sort"))))
+                 (replace 'check
+                   (lambda* (#:key tests? #:allow-other-keys)
+                     (when tests?
+                       (invoke "ruby" (which "rspec"))))))))
+      (native-inputs (list ruby-rspec ruby-simplecov))
+      (synopsis "Fuzzing, randomization, and stress testing library")
+      (description "Flores is a fuzzing, randomization, and stress library to
+help tests uncover more bugs.")
+      (home-page "https://github.com/jordansissel/ruby-flores")
+      (license license:asl2.0))))
+
+(define-public ruby-ipaddr
+  (package
+    (name "ruby-ipaddr")
+    (version "1.2.6")
+    (source (origin
+              (method git-fetch)  ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ruby/ipaddr")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0h3z8i1fa8s4gx48322fflhpkzghd4bmd9109hglsgdkic7b0dyp"))))
+    (build-system ruby-build-system)
+    (native-inputs (list ruby-test-unit-ruby-core))
+    (synopsis "Manipulate IP addresses")
+    (description "This package provides a set of methods to manipulate an IP
+address.  Both IPv4 and IPv6 are supported.")
+    (home-page "https://github.com/ruby/ipaddr")
+    (license license:bsd-2)))
+
+(define-public ruby-fake-ftp
+  (package
+    (name "ruby-fake-ftp")
+    (version "0.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "fake_ftp" version))
+              (sha256
+               (base32
+                "1zl9q9m4x7lz9890g0h1qqj7hcxnwzpjfnfbxadjblps7b5054q4"))))
+    (build-system ruby-build-system)
+    (native-inputs (list ruby-rspec ruby-rubocop ruby-simplecov))
+    (arguments
+     '(#:test-target "spec"))
+    (synopsis "Fake FTP server for use with ruby tests")
+    (description "This package allows you to test FTP implementations in ruby.
+It is a minimal single-client FTP server that can be bound to any arbitrary
+port on localhost.")
+    (home-page "https://rubygems.org/gems/fake_ftp")
+    (license license:expat)))
+
+(define-public ruby-net-telnet
+  (package
+    (name "ruby-net-telnet")
+    (version "0.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "net-telnet" version))
+              (sha256
+               (base32
+                "16nkxc79nqm7fd6w1fba4kb98vpgwnyfnlwxarpdcgywz300fc15"))))
+    (build-system ruby-build-system)
+    (synopsis "Telnet client functionality")
+    (description "This package provides telnet client functionality.")
+    (home-page "https://github.com/ruby/net-telnet")
+    (license license:bsd-2)))
+
+(define-public ruby-net-ftp
+  (package
+    (name "ruby-net-ftp")
+    (version "0.3.4")
+    (source (origin
+              (method git-fetch)  ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ruby/net-ftp")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "11b1sw7c4c7xrhn5li5m0wylw42hp52jp6pqacyb43hkw1m5zr36"))))
+    (build-system ruby-build-system)
+    (propagated-inputs (list ruby-net-protocol ruby-time))
+    (synopsis "File Transfer Protocol client library")
+    (description "This class implements the File Transfer Protocol.  If you
+have used a command-line FTP program, and are familiar with the commands, you
+will be able to use this class easily.  Some extra features are included to
+take advantage of Ruby's style and strengths.")
+    (home-page "https://github.com/ruby/net-ftp")
+    (license license:bsd-2)))
+
+(define-public ruby-net-http-persistent
+  (package
+    (name "ruby-net-http-persistent")
+    (version "4.0.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "net-http-persistent" version))
+              (sha256
+               (base32
+                "0i1as2lgnw7b4jid0gw5glv5hnxz36nmfsbr9rmxbcap72ijgy03"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list ruby-connection-pool
+           ruby-hoe
+           ruby-rake-manifest))
+    (synopsis "Persistent HTTP connection manager")
+    (description "Net::HTTP::Persistent manages persistent HTTP connections
+using Net::HTTP, supporting reconnection and retry according to RFC 2616.")
+    (home-page "https://github.com/drbrain/net-http-persistent")
+    (license license:expat)))
+
+(define-public ruby-net-imap
+  (package
+    (name "ruby-net-imap")
+    (version "0.3.4")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ruby/net-imap")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0nx49i1n9q1wpancqaac2srrpb8mb43mc8wryyqyhpgki2grwyxw"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; The test suite appears to rely on RFCs it tries fetching from the
+     ;; network (see: https://github.com/ruby/net-imap/issues/136).
+     (list #:tests? #f
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'replace-git-ls-files 'adjust-for-git-ls-files
+                 (lambda _
+                   ;; Adjust the git ls-files invocation so that it matches
+                   ;; the expected pattern.
+                   (substitute* "net-imap.gemspec"
+                     (("`git ls-files -z 2>/dev/null`")
+                      "`git ls-files -z`")))))))
+    (propagated-inputs (list ruby-date ruby-net-protocol))
+    (synopsis "Ruby client api for Internet Message Access Protocol")
+    (description "@code{Net::IMAP} implements Internet Message Access
+Protocol (IMAP) client functionality.  The protocol is described in
+@url{https://tools.ietf.org/html/rfc3501, IMAP}.")
+    (home-page "https://github.com/ruby/net-imap")
+    (license license:bsd-2)))
+
+(define-public ruby-net-pop
+  (package
+    (name "ruby-net-pop")
+    (version "0.1.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/ruby/net-pop")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "05vz6a56va2rbr7ld78gdzwy1j5mzs98cz82ax5aqa83pzzk6jld"))))
+    (build-system ruby-build-system)
+    (propagated-inputs (list ruby-net-protocol))
+    (synopsis "Ruby client library for POP3")
+    (description "This library provides functionality for retrieving email via
+POP3, the Post Office Protocol version 3, as specified by
+@url{http://www.ietf.org/rfc/rfc1939.txt, RFC1939}.")
+    (home-page "https://github.com/ruby/net-pop")
+    (license license:bsd-2)))
+
+(define-public ruby-net-smtp
+  (package
+    (name "ruby-net-smtp")
+    (version "0.3.3")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ruby/net-smtp")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0ca2wh45xvc09rv6v6sz3vbnkzrjzk5c4l6dk50zk4dwxvghma8r"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'check 'regenerate-certificate
+            ;; On version 0.5.0 a Makefile was introduced to regenerated
+            ;; the certificates, and instead of calling openssl directory
+            ;; we could do (with-directory-excursion "test/net/fixtures"
+            ;; (invoke "make" "regen_certs"). However the certificate is
+            ;; expired versions before 0.5.0 as well.
+            (lambda _
+              (with-directory-excursion "test/net/fixtures"
+                (invoke
+                 "openssl" "req" "-new" "-key" "server.key" "-out"
+                 "server.csr" "-subj"
+                 "/C=JP/ST=Shimane/O=Ruby Core Team/OU=Ruby Test/CN=localhost")
+                (invoke "openssl" "req" "-new" "-x509" "-days" "3650"
+                        "-key" "server.key" "-out" "cacert.pem" "-subj"
+                        (string-append
+                         "/C=JP/ST=Shimane/L=Matz-e city/O=Ruby "
+                         "Core Team/CN=Ruby Test "
+                         "CA/emailAddress=security@ruby-lang.org"))
+                (invoke "openssl" "x509" "-days" "3650" "-CA" "cacert.pem"
+                        "-CAkey" "server.key" "-set_serial" "00" "-in"
+                        "server.csr" "-req" "-out" "server.crt")))))))
+    (native-inputs (list openssl))
+    (propagated-inputs (list ruby-net-protocol))
+    (synopsis "Simple Mail Transfer Protocol client library for Ruby")
+    (description "This library provides functionality to send Internet mail
+via SMTP, the Simple Mail Transfer Protocol.  The SMTP protocol specification
+is known as @url{http://www.ietf.org/rfc/rfc2821.txt, RFC2821}.")
+    (home-page "https://github.com/ruby/net-smtp")
+    (license license:bsd-2)))
+
+(define-public ruby-pleaserun
+  (package
+    (name "ruby-pleaserun")
+    (version "0.0.32")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "pleaserun" version))
+              (sha256
+               (base32
+                "1aykf0l8327bqkkf5xd9jcglsib973zpy37cfnlf4j0vp0cdpn2d"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'extract-gemspec 'relax-requirements
+                 (lambda _
+                   (substitute* "pleaserun.gemspec"
+                     ;; Mustache is pinned at 0.99.8, for portability with
+                     ;; older Rubies.
+                     (("dependency\\(%q<mustache>.freeze.*")
+                      "dependency(%q<mustache>.freeze)\n"))))
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     ;; The cli_spec.rb test fails non-deterministically with
+                     ;; a Errno::EISDIR error (see:
+                     ;; https://github.com/jordansissel/pleaserun/issues/155)
+                     (invoke "rspec" "--exclude-pattern"
+                             "spec/pleaserun/cli_spec.rb")))))))
+    (native-inputs (list ruby-flores ruby-rspec))
+    (propagated-inputs (list ruby-cabin
+                             ruby-clamp
+                             ruby-dotenv
+                             ruby-insist
+                             ruby-mustache
+                             ruby-stud))
+    (synopsis "Init scripts and service definitions generation tool")
+    (description "Pleaserun is a tool to generate startup scripts and service
+definitions.  It targets service managers such as systemd, Upstart, launchd,
+sysv init, and runit.")
+    (home-page "https://github.com/jordansissel/pleaserun")
+    (license license:asl2.0)))
+
+(define-public ruby-power-assert
+  (package
+    (name "ruby-power-assert")
+    (version "1.1.5")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "power_assert" version))
+              (sha256
+               (base32
+                "1dii0wkfa0jm8sk9b20zl1z4980dmrjh0zqnii058485pp3ws10s"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f))                    ; No included tests
+    (native-inputs
+     (list bundler))
+    (synopsis "Assert library with descriptive assertion messages")
+    (description "Power-assert is an assertion library providing descriptive
+assertion messages for tests.")
+    (home-page "https://github.com/k-tsj/power_assert")
+    (license (list license:bsd-2 license:ruby))))
+
+(define-public ruby-powerpack
+  (package
+    (name "ruby-powerpack")
+    (version "0.1.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "powerpack" version))
+       (sha256
+        (base32
+         "1f71axvlhnxja0k17qqxdi4qh5ck807hqg4i3j6cgy8fgzmyg7rg"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:test-target "spec"))
+    (native-inputs
+     (list bundler ruby-rspec ruby-yard))
+    (synopsis "Useful extensions to core Ruby classes")
+    (description
+     "This package provides a few useful extensions to core Ruby classes,
+including @code{Array}, @code{Enumerable}, @code{Hash}, @code{Numeric}, and
+@code{String}.")
+    (home-page "https://github.com/bbatsov/powerpack")
+    (license license:expat)))
+
+(define-public ruby-locale
+  (package
+    (name "ruby-locale")
+    (version "2.1.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "locale" version))
+              (sha256
+               (base32
+                "1sls9bq4krx0fmnzmlbn64dw23c4d6pz46ynjzrn9k8zyassdd0x"))))
+    (build-system ruby-build-system)
+    ;; ruby-test-unit is required to run tests, but that needs ruby-packnga,
+    ;; which needs ruby-gettext, which needs ruby-locale.  To break the
+    ;; dependency cycle we disable tests.
+    (arguments `(#:tests? #f))
+    (native-inputs
+     (list bundler ruby-yard/minimal))
+    (synopsis "Ruby library providing basic localization APIs")
+    (description
+     "Ruby-Locale is the pure ruby library which provides basic APIs for
+localization.")
+    (home-page "https://github.com/ruby-gettext/locale")
+    (license (list license:lgpl3+ license:ruby))))
+
+(define-public ruby-temple
+  (package
+    (name "ruby-temple")
+    (version "0.10.0")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/judofyr/temple")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0rr9fnlcgj9nm3b6hzzjsvcw8x3y7z48j7slk7xxff2mh8s7y3y0"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'replace-git-ls-files 'replace-more-git-ls-files
+                 (lambda _
+                   (substitute* "temple.gemspec"
+                     ;; There no longer are test, spec or features
+                     ;; directories.
+                     ((".*`git ls-files -- \\{test,spec,features}/\\*`.*")
+                      "")
+                     ;; There isn't any bin directory either.
+                     ((".*`git ls-files -- bin/\\*`.*")
+                      ""))))
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     (invoke "rspec")))))))
+    (native-inputs (list ruby-bacon ruby-erubi ruby-rspec ruby-tilt))
+    (synopsis "Template compilation framework in Ruby")
+    (description "Temple is an abstraction and framework for compiling
+templates to pure Ruby.")
+    (home-page "https://github.com/judofyr/temple")
+    (license license:expat)))
+
+(define-public ruby-text
+  (package
+    (name "ruby-text")
+    (version "1.3.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "text" version))
+              (sha256
+               (base32
+                "1x6kkmsr49y3rnrin91rv8mpc3dhrf3ql08kbccw8yffq61brfrg"))))
+    (build-system ruby-build-system)
+    (synopsis "Collection of text algorithms for Ruby")
+    (description
+     "This package provides a collection of text algorithms: Levenshtein,
+Soundex, Metaphone, Double Metaphone, Porter Stemming.")
+    (home-page "https://github.com/threedaymonk/text")
+    (license license:expat)))
+
+(define-public ruby-gdbm
+  (package
+    (name "ruby-gdbm")
+    (version "2.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "gdbm" version))
+       (sha256
+        (base32 "0xxygf50b2fvy8lcn2vip27vq32p607d3lwd1diplvkajijq8q8b"))))
+    (build-system ruby-build-system)
+    (arguments '(#:tests? #f))  ; No bundled tests.
+    (inputs (list gdbm))
+    (synopsis "Ruby extension for GNU dbm")
+    (description "This package provides a Ruby extension for GNU dbm.")
+    (home-page "https://github.com/ruby/gdbm")
+    (license license:bsd-2)))
+
+(define-public ruby-gettext
+  (package
+    (name "ruby-gettext")
+    (version "3.4.4")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "gettext" version))
+              (sha256
+               (base32
+                "11hlxkk2yr9wjwd3nf8kgmsjcd8wf35yqlxi9wpvrgmvrk9n9a2k"))))
+    (build-system ruby-build-system)
+    ;; ruby-test-unit is required to run tests, but that needs ruby-packnga,
+    ;; which needs ruby-gettext.  To break the dependency cycle we disable
+    ;; tests.
+    (arguments `(#:tests? #f))
+    (propagated-inputs
+     (list ruby-locale ruby-text ruby-erubi))
+    (native-inputs
+     (list bundler ruby-yard/minimal))
+    (synopsis "GNU gettext-like program for Ruby")
+    (description
+     "Gettext is a GNU gettext-like program for Ruby.  The catalog
+file (po-file) used is the same as that used by GNU gettext, allowing you to
+use GNU gettext tools for maintenance.")
+    (home-page "https://ruby-gettext.github.com/")
+    (license (list license:lgpl3+ license:ruby))))
+
+(define-public ruby-packnga
+  (package
+    (name "ruby-packnga")
+    (version "1.0.4")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "packnga" version))
+              (sha256
+               (base32
+                "1vv2j0i43s4xid2km5hgrrxqlqpwgq8nlm8kaxfg2531c1vwfsd4"))))
+    (build-system ruby-build-system)
+    ;; ruby-test-unit is required to run tests, but that needs ruby-packnga.
+    ;; To break the dependency cycle we disable tests.
+    (arguments `(#:tests? #f))
+    (propagated-inputs
+     (list ruby-gettext ruby-yard))
+    (native-inputs
+     (list bundler))
+    (synopsis "Utility library to package internationalized libraries")
+    (description
+     "Packnga is a library to translate to many languages using YARD.")
+    (home-page "https://ranguba.org/packnga/")
+    (license license:lgpl2.0+)))
+
+(define-public ruby-test-construct
+  (package
+    (name "ruby-test-construct")
+    (version "2.0.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "test_construct" version))
+       (sha256
+        (base32
+         "17q7rw92l7r4zh6rkvzrn4dyl8p8p77217vaa1wf7nsv8k5541vy"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list bundler ruby-mocha-1 ruby-rspec))
+    (synopsis "Creates temporary files and directories for testing")
+    (description
+     "TestConstruct is a @acronym{DSL, Domain Specific Language} for creating
+temporary files and directories during tests.")
+    (home-page "https://github.com/bhb/test_construct")
+    (license license:expat)))
+
+(define-public ruby-test-unit
+  (package
+    (name "ruby-test-unit")
+    (version "3.6.0")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/test-unit/test-unit")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0w1m432q3y5v9lkak8yyxadak3z17bsp6afni97i4zjdgfz7niz2"))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     (list ruby-power-assert))
+    (native-inputs
+     (list bundler ruby-packnga ruby-yard))
+    (synopsis "Unit testing framework for Ruby")
+    (description "@code{Test::Unit} is unit testing framework for Ruby, based
+on xUnit principles.  These were originally designed by Kent Beck, creator of
+extreme programming software development methodology, for Smalltalk's SUnit.
+It allows writing tests, checking results and automated testing in Ruby.")
+    (home-page "https://test-unit.github.io/")
+    (license (list license:psfl license:ruby))))
+
+(define-public ruby-test-unit/minimal
+  (hidden-package
+   (package
+     (inherit ruby-test-unit)
+     (arguments
+      (ensure-keyword-arguments
+       (package-arguments ruby-test-unit)
+       (list #:tests? #f)))
+     (native-inputs '()))))
+
+(define-public ruby-test-unit-ruby-core
+  (package
+    (name "ruby-test-unit-ruby-core")
+    (version "1.0.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "test-unit-ruby-core" version))
+       (sha256
+        (base32 "1i7fa4hlj6xiqvjaikagwrmiyc21jzyswvd4grjbfqysziwsxygc"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:tests? #f))  ; contains no tests
+    (synopsis "Additional test assertions for Ruby standard libraries")
+    (description "This package provides additional test assertions for Ruby
+standard libraries.")
+    (home-page "https://github.com/ruby/test-unit-ruby-core")
+    (license license:ruby)))
+
+(define-public ruby-mapping
+  (package
+    (name "ruby-mapping")
+    (version "1.1.1")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ioquatix/mapping")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0yhmqp8mprjqf9m7wzc4hhi50qbfax86r89w852csns0ijaffjjs"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:test-target "spec"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch
+            (lambda _
+              (substitute* "spec/mapping/model_spec.rb"
+                ;; From https://github.com/ioquatix/mapping/pull/2
+                (("offset:") "offset =")))))))
+    (native-inputs (list ruby-rspec))
+    (synopsis "Map model objects based on their class to a given output model")
+    (description "The @code{mapping} gem maps model objects based on their
+class to a given output model.  It is useful for versioning external
+interfaces (e.g. JSON APIs) or processing structured data from one format to
+another.")
+    (home-page "https://github.com/ioquatix/mapping")
+    (license license:expat)))
+
+(define-public ruby-markaby
+  (package
+    (name "ruby-markaby")
+    (version "0.9.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "markaby" version))
+       (sha256
+        (base32
+         "1j4jc31ycydbkh5h3q6zwidzpavg3g5mbb5lqyaczd3jrq78rd7i"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; Run rspec manually without using the Rakefile, as the versions of
+          ;; Rake and RSpec 2 are incompatible:
+          ;;
+          ;; NoMethodError: undefined method `last_comment'
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              ;; Skip some broken tests, this should be redundant with the
+              ;; next release
+              (delete-file "spec/markaby/markaby_test_unit_spec.rb")
+              (substitute* "spec/markaby/markaby_spec.rb"
+                (("generated.should == str")
+                 "# Test broken: generated.should == str"))
+
+              (when tests?
+                (invoke "rspec")))))))
+    (propagated-inputs
+     (list ruby-builder))
+    (native-inputs
+     (list bundler ruby-rspec-2))
+    (synopsis "Write HTML pages in pure Ruby")
+    (description
+     "Markaby allows writing HTML packages in pure Ruby.  This is similar to
+the functionality provided by @acronym{ERB, Embedded Ruby}, but without the
+mixture of HTML and additional ERB syntax.")
+    (home-page "https://markaby.github.io/")
+    (license license:expat)))
+
+(define-public ruby-maruku
+  (package
+    (name "ruby-maruku")
+    (version "0.7.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "maruku" version))
+       (sha256
+        (base32
+         "1r7bxpgnx2hp3g12bjrmdrpv663dfqxsdp0af69kjhxmaxpia56x"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(;; TODO: 3 tests seem to fail due to HTML encoding issues
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "rspec")))))))
+    (native-inputs
+     (list ruby-rspec ruby-simplecov ruby-nokogiri-diff))
+    (synopsis "Markdown interpreter in Ruby")
+    (description
+     "Maruku is a Markdown interpreter in Ruby.  It can export Markdown to
+HTML, and PDF through LaTeX.")
+    (home-page "https://github.com/bhollis/maruku")
+    (license license:expat)))
+
+(define-public ruby-metaclass
+  (package
+    (name "ruby-metaclass")
+    (version "0.0.4")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "metaclass" version))
+              (sha256
+               (base32
+                "0hp99y2b1nh0nr8pc398n3f8lakgci6pkrg4bf2b2211j1f6hsc5"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'add-test-unit-to-search-path
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let* ((test-unit (assoc-ref inputs "ruby-test-unit")))
+               (substitute* "Rakefile"
+                 (("t\\.libs << \"test\"" line)
+                  (string-append line "; t.libs << \""
+                                 test-unit "/lib/ruby/vendor_ruby"
+                                 "/gems/test-unit-"
+                                 ,(package-version ruby-test-unit)
+                                 "/lib\"")))))))))
+    (native-inputs
+     (list bundler ruby-test-unit/minimal))
+    (synopsis "Ruby library adding metaclass method to all objects")
+    (description
+     "Metaclass is a Ruby library adding a @code{metaclass} method to all Ruby
+objects.")
+    (home-page "https://github.com/floehopper/metaclass")
+    (license license:expat)))
+
+(define-public ruby-mkmf-lite
+  (package
+    (name "ruby-mkmf-lite")
+    (version "0.5.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "mkmf-lite" version))
+              (sha256
+               (base32
+                "0rqa5kzswhqkj7r9mqrqz4mjd2vdxsblgybb52gj3mwr1gwvl4c5"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; Avoid rubocop dependency
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "rspec")))))))
+    (propagated-inputs
+     (list ruby-ptools))
+    (native-inputs
+     (list ruby-rspec))
+    (synopsis "Lightweight alternative to @code{mkmf}")
+    (description
+     "@code{mkmf-lite} is a light version of Ruby's @code{mkmf.rb} designed
+for use as a library.  It does not create packages, builds, or log files of
+any kind.  Instead, it provides mixin methods that you can use in FFI or tests
+to check for the presence of header files, constants, and so on.")
+    (home-page "https://github.com/djberg96/mkmf-lite")
+    (license license:asl2.0)))
+
+(define-public ruby-msgpack
+  (package
+    (name "ruby-msgpack")
+    (version "1.7.5")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/msgpack/msgpack-ruby")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0d759pjgxgrxw18kmk81yv9brc141b4d8gszlp4vdnpvwvb96nln"))))
+    (build-system ruby-build-system)
+    (arguments (list #:test-target "spec"))
+    (native-inputs
+     (list ruby-rake-compiler
+           ruby-ruby-memcheck
+           ruby-rspec
+           ruby-yard))
+    (synopsis "Efficient object serialization library for Ruby")
+    (description "MessagePack is a binary-based efficient object serialization
+library.  It enables to exchange structured objects between many languages
+like JSON.  Unlike JSON, it is very fast and small.")
+    (home-page "https://msgpack.org/")
+    (license license:asl2.0)))
+
+(define-public ruby-mspec
+  (package
+    (name "ruby-mspec")
+    (version "1.9.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "mspec" version))
+       (sha256
+        (base32
+         "0wmyh2n40m4srwdx9z6h6g6p46k02pzyhcsja3hqcw5h5b0hfmhd"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(;; TODO: 3 test failures
+       ;; ./spec/mocks/mock_spec.rb:82
+       ;; ./spec/utils/name_map_spec.rb:151
+       ;; ./spec/utils/name_map_spec.rb:155
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'extract-gemspec 'change-dependency-constraints
+           (lambda _
+             (substitute* "mspec.gemspec"
+               (("rake.*") "rake>)\n")
+               (("rspec.*") "rspec>)\n"))))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "rspec" "spec")))))))
+    (native-inputs
+     (list bundler ruby-rake ruby-rspec))
+    (synopsis "MSpec is a specialized framework for RubySpec")
+    (description
+     "MSpec is a specialized framework that is syntax-compatible with RSpec 2
+for basic features.  MSpec contains additional features that assist in writing
+specs for Ruby implementations in ruby/spec.")
+    (home-page "http://rubyspec.org")
+    (license license:expat)))
+
+(define-public ruby-mysql2
+  (package
+    (name "ruby-mysql2")
+    (version "0.5.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/brianmario/mysql2")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "11lvfgc2rmvkm52jp0nbi6pvhk06klznghr7llldfw8basl9n5wv"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(;; TODO: Tests require a running MySQL/MariaDB service
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'replace-git-ls-files
+           (lambda _
+             (substitute* "mysql2.gemspec"
+               (("git ls-files .*`") "find . -type f |sort`"))))
+         (add-before 'install 'set-MAKEFLAGS
+           (lambda* (#:key outputs #:allow-other-keys)
+             (setenv "MAKEFLAGS"
+                     (string-append
+                      "V=1 "
+                      "prefix=" (assoc-ref outputs "out")))))
+         ;; Move the 'check phase to after 'install, as then you can test
+         ;; using the installed mysql2 gem in the store.
+         (delete 'check)
+         (add-after 'install 'check
+           (lambda* (#:key outputs tests? #:allow-other-keys)
+             (setenv "GEM_PATH"
+                     (string-append
+                      (getenv "GEM_PATH")
+                      ":"
+                      (assoc-ref outputs "out") "/lib/ruby/vendor_ruby"))
+             (when tests?
+               (invoke "rspec")))))))
+    (inputs
+     `(("mariadb-dev" ,mariadb "dev")
+       ("zlib" ,zlib)))
+    (native-inputs
+     (list ruby-rspec ruby-rake-compiler))
+    (synopsis "MySQL library for Ruby, binding to libmysql")
+    (description
+     "This package provides a simple, fast MySQL library for Ruby, binding to
+libmysql.")
+    (home-page "https://github.com/brianmario/mysql2")
+    (license license:expat)))
+
+(define-public ruby-blankslate
+  (package
+    (name "ruby-blankslate")
+    (version "3.1.3")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "blankslate" version))
+              (sha256
+               (base32
+                "0fwkb4d1j9gc7vdwn2nxvwgy2g5wlag4c4bp7bl85jvq0kgp6cyx"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+          (lambda _ (invoke "rspec" "spec/"))))))
+    (native-inputs
+     (list bundler ruby-rspec))
+    (synopsis "Abstract base class with no predefined methods")
+    (description
+     "BlankSlate provides an abstract base class with no predefined
+methods (except for @code{__send__} and @code{__id__}).  BlankSlate is useful
+as a base class when writing classes that depend upon
+@code{method_missing} (e.g. dynamic proxies).")
+    (home-page "https://github.com/masover/blankslate")
+    (license license:expat)))
+
+(define-public ruby-bond
+  (package
+    (name "ruby-bond")
+    (version "0.5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "bond" version))
+       (sha256
+        (base32
+         "1r19ifc4skyl2gxnifrxa5jvbbay9fb2in79ppgv02b6n4bhsw90"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; The test suite fails (see:
+     ;; https://github.com/cldwalker/bond/issues/46).
+     `(#:tests? #f))
+    (native-inputs
+     (list ruby-bacon ruby-bacon-bits ruby-mocha-on-bacon))
+    (synopsis "Bond can provide custom autocompletion for arguments, methods
+and more")
+    (description
+     "Bond can autocomplete argument(s) to methods, uniquely completing per
+module, per method and per argument.  Bond provides a configuration system and
+a DSL for creating custom completions and completion rules.  Bond can also
+load completions that ship with gems.  Bond is able to offer more than irb's
+completion since it uses the full line of input when completing as opposed to
+irb's last-word approach.")
+    (home-page "http://tagaholic.me/bond/")
+    (license license:expat)))
+
+(define-public ruby-idn-ruby
+  (package
+    (name "ruby-idn-ruby")
+    (version "0.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "idn-ruby" version))
+       (sha256
+        (base32
+         "07vblcyk3g72sbq12xz7xj28snpxnh3sbcnxy8bglqbfqqhvmawr"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (delete 'check)
+         (add-after 'install 'check
+           (lambda* (#:key tests? outputs #:allow-other-keys)
+             (when tests?
+               (let* ((gem-file (cadr (find-files "." "\\.gem")))
+                      (name-and-version (basename gem-file ".gem")))
+                 (apply invoke
+                        "ruby" "--verbose"
+                        (string-append "-I"
+                                       (assoc-ref outputs "out")
+                                       "/lib/ruby/vendor_ruby/gems/"
+                                       name-and-version
+                                       "/lib")
+                        (find-files "./test" ".*\\.rb")))))))))
+    (inputs
+     (list libidn))
+    (synopsis "Ruby Bindings for the GNU LibIDN library")
+    (description
+     "Ruby Bindings for the GNU LibIDN library, an implementation of the
+Stringprep, Punycode and IDNA specifications.  These are used to encode and
+decode internationalized domain + names according to the IDNA2003
+specifications.
+
+Included are the most important parts of the Stringprep, Punycode and IDNA
+APIs like performing Stringprep processings, encoding to and decoding from
+Punycode strings and converting entire domain names to and from the ACE
+encoded form.")
+    (home-page "https://github.com/deepfryed/idn-ruby")
+    (license license:asl2.0)))
+
+(define-public ruby-insist
+  (package
+    (name "ruby-insist")
+    (version "1.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "insist" version))
+              (sha256
+               (base32
+                "0bw3bdwns14mapbgb8cbjmr0amvwz8y72gyclq04xp43wpp5jrvg"))))
+    (build-system ruby-build-system)
+    (arguments (list #:phases #~(modify-phases %standard-phases
+                                  (replace 'check
+                                    (lambda* (#:key tests? #:allow-other-keys)
+                                      (when tests?
+                                        (invoke "ruby" "test/testing.rb")))))))
+    (synopsis "Testing tool for Ruby")
+    (description "This package provides a simple block-driven assertion
+library for both testing and for production code that attempts to make test
+definitions more readable.")
+    (home-page "https://github.com/jordansissel/ruby-insist/")
+    (license license:asl2.0)))
+
+(define-public ruby-introspection
+  (package
+    (name "ruby-introspection")
+    (version "0.0.4")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "introspection" version))
+              (sha256
+               (base32
+                "1y2nbijkc0zlfmn9ss6588ilarq2kbn2i7w7pwwsli66dj84zgca"))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     (list ruby-metaclass))
+    (native-inputs
+     (list bundler
+           ruby-blankslate))
+    (synopsis "Dynamic inspection of the method hierarchy on a Ruby object")
+    (description
+     "Introspection provides tools to inspect the hierarchy of method
+definitions on a Ruby object.")
+    (home-page "https://github.com/floehopper/introspection")
+    (license license:expat)))
+
+(define-public ruby-redcarpet
+  (package
+    (name "ruby-redcarpet")
+    (version "3.5.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "redcarpet" version))
+              (sha256
+               (base32
+                "0skcyx1h8b5ms0rp2zm3ql6g322b8c1adnkwkqyv7z3kypb4bm7k"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; The gem archive does not include the conformance tests.
+         (add-after 'unpack 'disable-conformance-tests
+          (lambda _
+            (substitute* "Rakefile"
+              (("task :test => %w\\[test:unit test:conformance\\]")
+               "task :test => %w[test:unit]")))))))
+    (native-inputs
+     (list bundler ruby-test-unit ruby-rake-compiler))
+    (synopsis "Extensible Markdown to (X)HTML converter")
+    (description
+     "Redcarpet is an extensible Ruby library for Markdown processing and
+conversion to (X)HTML.")
+    (home-page "https://github.com/vmg/redcarpet")
+    (license license:expat)))
+
+(define-public ruby-reline
+  (package
+    (name "ruby-reline")
+    (version "0.3.3")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ruby/reline")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1papa4f4prjml9qk6yydi4k5a4zgbzmxmbhd8fz9kfg1i34s35cw"))))
+    (build-system ruby-build-system)
+    (propagated-inputs (list ruby-io-console))
+    (synopsis "GNU Readline or Editline implementation in Ruby")
+    (description "Reline is a pure Ruby alternative GNU Readline or Editline
+implementation.")
+    (home-page "https://github.com/ruby/reline")
+    (license (list license:bsd-2 license:ruby)))) ;dual license
+
+(define-public ruby-rerun
+  (package
+  (name "ruby-rerun")
+  (version "0.13.0")
+  (source
+    (origin
+      (method url-fetch)
+      (uri (rubygems-uri "rerun" version))
+      (sha256
+        (base32
+          "1cskvxk8z8vmfail8na7hj91hs0qnvds9nydj04zi3dbddgnbmvz"))))
+  (build-system ruby-build-system)
+  (arguments
+   '(#:tests? #f)) ; No included tests
+  (propagated-inputs
+   (list ruby-listen))
+  (synopsis "Run a process, and restart when some monitored files change")
+  (description
+    "Rerun is a tool to launch programs, then monitor the file system, and
+restart the program when any of the monitored files change.  It's written in
+Ruby, but can be used for all programs.")
+  (home-page "https://github.com/alexch/rerun/")
+  (license license:expat)))
+
+(define-public ruby-maxitest
+  (package
+    (name "ruby-maxitest")
+    (version "5.1.0")
+    (home-page "https://github.com/grosser/maxitest")
+    (source (origin
+              ;; Pull from git because the gem does not contain tests.
+              (method git-fetch)
+              (uri (git-reference
+                    (url home-page)
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0qj410krfm497ggmf71xpnabbb6814y0585by4nlzyjvg9hpgg3m"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:test-target "default"
+      #:phases
+      #~(modify-phases %standard-phases
+          (replace 'replace-git-ls-files
+            (lambda _
+              (substitute* "maxitest.gemspec"
+                (("`git ls-files lib/ bin/ MIT-LICENSE Readme.md`")
+                 "`find lib/ bin/ MIT-LICENSE Readme.md -type f | sort`"))))
+          (add-before 'check 'remove-version-constraints
+            (lambda _
+              ;; Don't use specific versions of dependencies, instead
+              ;; take whatever is available in Guix.
+              (delete-file "Gemfile.lock")))
+          (add-before 'check 'add-mtest-on-PATH
+            (lambda _
+              ;; Tests use 'mtest' which is not automatically added on
+              ;; PATH.
+              (setenv "PATH" (string-append (getcwd) "/bin:"
+                                            (getenv "PATH"))))))))
+    (native-inputs
+     (list procps
+           ruby-bump
+           ruby-rspec
+           ruby-wwtd))
+    (propagated-inputs
+     (list ruby-minitest))
+    (synopsis "Minitest with extra features")
+    (description
+     "Maxitest is a wrapper around Minitest with extra functionality such
+as timeouts, an @command{mtest} executable that can run tests by line
+number, support for interrupted tests, better backtraces, and more.")
+    (license license:expat)))
+
+(define-public ruby-mocha
+  (package
+    (name "ruby-mocha")
+    (version "2.0.4")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "mocha" version))
+              (sha256
+               (base32
+                "18xn9gm9yypavy9yck71fplan19hy5697mwd1rwzz7vizh3ip7bd"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'check 'remove-rubocop-dependency
+            (lambda _
+              ;; Disable dependency on Rubocop, which is just a linter,
+              ;; and would introduce a circular dependency.
+              (substitute* "Gemfile"
+                ((".*rubocop.*") "")))))))
+    (propagated-inputs
+     (list ruby-ruby2-keywords))
+    (native-inputs
+     (list ruby-psych-3
+           ruby-introspection))
+    (synopsis "Mocking and stubbing library for Ruby")
+    (description
+     "Mocha is a mocking and stubbing library with JMock/SchMock syntax, which
+allows mocking and stubbing of methods on real (non-mock) classes.")
+    (home-page "https://mocha.jamesmead.org/")
+    ;; Mocha can be used with either license at the users choice.
+    (license (list license:expat license:ruby))))
+
+(define-public ruby-mocha-1
+  (package
+    (inherit ruby-mocha)
+    (version "1.13.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "mocha" version))
+              (sha256
+               (base32
+                "15s53ggsykk69kxqvs4416s8yxdhz6caggva55n8sjgy4ixzwp10"))))
+    (arguments
+     '(#:tests? #f))))
+
+(define-public ruby-mocha-on-bacon
+  (package
+    (name "ruby-mocha-on-bacon")
+    (version "0.2.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "mocha-on-bacon" version))
+       (sha256
+        (base32
+         "1h49b33rq889hn8x3wp9byczl91va16jh1w4d2wyy4yj23icdrcp"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; rubygems.org release missing tests
+     '(#:tests? #f))
+    (propagated-inputs (list ruby-mocha))
+    (synopsis "Mocha adapter for Bacon")
+    (description
+     "This package provides a Mocha adapter for Bacon, allowing you to use the
+Mocha stubbing and mocking library with Bacon, a small RSpec clone.")
+    (home-page
+     "https://github.com/alloy/mocha-on-bacon")
+    (license license:expat)))
+
+(define-public ruby-net-ssh
+  (package
+    (name "ruby-net-ssh")
+    (version "7.1.0")
+    (source (origin
+              (method git-fetch) ;for tests
+              (uri (git-reference
+                    (url "https://github.com/net-ssh/net-ssh")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1dkbyzpl31jygnnva5sa754vk42q1fih4qz5ipqw5gqiafrrlb91"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list bundler
+           ruby-bcrypt-pbkdf
+           ruby-ed25519
+           ruby-mocha
+           ruby-rbnacl
+           ruby-test-unit
+           ruby-x25519))
+    (synopsis "Ruby implementation of the SSH2 client protocol")
+    (description "@code{Net::SSH} is a pure-Ruby implementation of the SSH2
+client protocol.  It allows you to write programs that invoke and interact
+with processes on remote servers, via SSH2.")
+    (home-page "https://github.com/net-ssh/net-ssh")
+    (license license:expat)))
+
+(define-public ruby-net-scp
+  (package
+    (name "ruby-net-scp")
+    (version "4.0.1.rc3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/net-ssh/net-scp")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "136mb8idxdkxkadx827027nyxcsvvv2wivz5dnjqy8g6ic0h9dzn"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list bundler ruby-test-unit ruby-mocha-1))
+    (propagated-inputs
+     (list ruby-net-ssh))
+    (synopsis "Pure-Ruby SCP client library")
+    (description "@code{Net::SCP} is a pure-Ruby implementation of the SCP
+client protocol.")
+    (home-page "https://github.com/net-ssh/net-scp")
+    (license license:expat)))
+
+(define-public ruby-net-sftp
+  (package
+    (name "ruby-net-sftp")
+    (version "4.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "net-sftp" version))
+              (sha256
+               (base32
+                "0r33aa2d61hv1psm0l0mm6ik3ycsnq8symv7h84kpyf2b7493fv5"))))
+    (build-system ruby-build-system)
+    (propagated-inputs (list ruby-net-ssh))
+    (synopsis "Pure Ruby implementation of the SFTP client protocol")
+    (description
+     "@code{Net::SFTP} is a pure Ruby implementation of the SFTP
+protocol (specifically, versions 1 through 6 of the SFTP protocol).  Note that
+this is the “Secure File Transfer Protocol”, typically run over an SSH
+connection, and has nothing to do with the FTP protocol.")
+    (home-page "https://github.com/net-ssh/net-sftp")
+    (license license:expat)))
+
+(define-public ruby-minima
+  (package
+    (name "ruby-minima")
+    (version "2.5.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "minima" version))
+              (sha256
+               (base32
+                "1gk7jmriiswda1ykjzpsw9cpiya4m9n0yrh0h6xnrc8zcfy543jj"))))
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (replace 'check
+                          (lambda* (#:key tests? #:allow-other-keys)
+                            (when tests?
+                              (invoke "jekyll" "build"))
+                            ;; Without the following, an attempt to remove
+                            ;; minima-<version>.gem is made during installation,
+                            ;; which will fail.
+                            (delete-file #$(string-append "_site/minima-"
+                                                          version ".gem")))))))
+    (build-system ruby-build-system)
+    (propagated-inputs (list jekyll ruby-jekyll-feed ruby-jekyll-seo-tag))
+    (synopsis "Beautiful, minimal theme for Jekyll")
+    (description
+     "Minima is a one-size-fits-all Jekyll theme for writers.  It's Jekyll's
+default (and first) theme.  It's what you get when you run @code{jekyll new}.")
+    (home-page "https://github.com/jekyll/minima")
+    (license license:expat)))
+
+(define-public ruby-minitest-around
+  (package
+    (name "ruby-minitest-around")
+    (version "0.5.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "minitest-around" version))
+       (sha256
+        (base32
+         "15ywnqx0719jl9c25yqfshmwcir57i5f4hr1ra9v9vay9ylcwndr"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'extract-gemspec 'remove-unnecessary-dependency-versions
+           (lambda _
+             (substitute* "minitest-around.gemspec"
+               (("%q<cucumber>.*") "%q<cucumber>, [\">= 0\"])\n")))))))
+    (propagated-inputs
+     (list ruby-minitest))
+    (native-inputs
+     (list bundler ruby-cucumber ruby-bump ruby-test-construct))
+    (synopsis "Run code around tests in Minitest")
+    (description
+     "This library provides a way to run code around tests in Minitest,
+written using either the unit test or spec style.")
+    (home-page "https://github.com/splattael/minitest-around")
+    (license license:expat)))
+
+(define-public ruby-minitest-retry
+  (package
+    (name "ruby-minitest-retry")
+    (version "0.2.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "minitest-retry" version))
+              (sha256
+               (base32
+                "1c1zq0b1a9y0hbqphq4ybijnjldlis1g6kyhx92q2ynnqfmzhfga"))))
+    (build-system ruby-build-system)
+    (propagated-inputs (list ruby-minitest))
+    (synopsis "Minitest extension to re-run failing tests")
+    (description "This package provides the @code{Minitest::Retry} class,
+which extends Minitest to allow retrying tests when they fail.")
+    (home-page "https://github.com/y-yagi/minitest-retry")
+    (license license:expat)))
+
+(define-public ruby-minitest-sprint
+  (package
+    (name "ruby-minitest-sprint")
+    (version "1.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "minitest-sprint" version))
+              (sha256
+               (base32
+                "179d6pj56l9xzm46fqsqj10mzjkr1f9fv4cxa8wvchs97hqz33w1"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list ruby-hoe ruby-minitest))
+    (synopsis "Fast test suite runner for minitest")
+    (description "Minitest-sprint is a test runner for minitest that makes it
+easier to re-run individual failing tests.")
+    (home-page "https://github.com/seattlerb/minitest-sprint")
+    (license license:expat)))
+
+(define-public ruby-minitest-stub-const
+  (package
+    (name "ruby-minitest-stub-const")
+    (version "0.6")                     ;for Rakefile
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/adammck/minitest-stub-const")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0cz4r9fxplx94c7wakx0998n2gv7l21prn8pfpw6z2c33k3g2xar"))))
+    (build-system ruby-build-system)
+    (synopsis "Stub constants for the duration of a block in MiniTest")
+    (description "This package provides a MiniTest extension to stub constants
+for the duration of a block in MiniTest.")
+    (home-page "https://github.com/adammck/minitest-stub-const")
+    (license license:expat)))
+
+(define-public ruby-minitest-bacon
+  (package
+    (name "ruby-minitest-bacon")
+    (version "1.0.3")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "minitest-bacon" version))
+              (sha256
+               (base32
+                "0zhdwcl6bgha61qiyfvr7zs7ywaxc33wmj9xhxl8jdmpdvifvfaj"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list ruby-hoe))
+    (inputs
+     (list ruby-minitest))
+    (synopsis "Bacon compatibility library for minitest")
+    (description "Minitest-bacon extends minitest with bacon-like
+functionality, making it easier to migrate test suites from bacon to minitest.")
+    (home-page "https://github.com/seattlerb/minitest-bacon")
+    (license license:expat)))
+
+(define-public ruby-minitest-power-assert
+  (package
+    (name "ruby-minitest-power-assert")
+    (version "0.3.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "minitest-power_assert" version))
+              (sha256
+               (base32
+                "1dazl6nbxjvvmi5jamrsygkz396s29b7cd841ni6qy4izk8jd9b7"))))
+    (build-system ruby-build-system)
+    (propagated-inputs (list ruby-minitest ruby-power-assert))
+    (synopsis "Power Assert implementation for Minitest")
+    (description "This gem provides a Power Assert implementation for
+Minitest.  It is inspired by the @code{test-unit-power_assert} gem.")
+    (home-page "https://github.com/hsbt/minitest-power_assert")
+    (license license:bsd-2)))
+
+(define-public ruby-minitest-profile
+  (package
+    (name "ruby-minitest-profile")
+    (version "0.0.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "minitest-profile" version))
+              (sha256
+               (base32
+                "13h4nwbq6yv7hsaa7dpj90lry4rc5qqnpzvm9n2s57mm2xi31xfa"))))
+    (build-system ruby-build-system)
+    (synopsis "Display the slowest tests in a MiniTest suite")
+    (description "This package provides a MiniTest plugin for displaying the
+slowest tests in a minitest suite.")
+    (home-page "https://github.com/nmeans/minitest-profile")
+    (license license:expat)))
+
+(define-public ruby-minitest-proveit
+  (package
+    (name "ruby-minitest-proveit")
+    (version "1.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "minitest-proveit" version))
+              (sha256
+               (base32
+                "0k1hpr8lgkgygfivgcsnnib7xjlf9ribgpn7yidvb4q0l0q2yfmr"))))
+    (build-system ruby-build-system)
+    (native-inputs (list ruby-hoe))
+    (propagated-inputs (list ruby-minitest))
+    (synopsis "Assertion-based tests extension for MiniTest")
+    (description "The @code{minitest-proveit} MiniTest extension ensures all
+tests to prove success (via at least one assertion) rather than rely on the
+absence of failure.")
+    (home-page "https://github.com/seattlerb/minitest-proveit")
+    (license license:expat)))
+
+(define-public ruby-minitest-reporters
+  (package
+    (name "ruby-minitest-reporters")
+    (version "1.3.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "minitest-reporters" version))
+       (sha256
+        (base32
+         "1a3das80rwgys5rj48i5ly144nvszyqyi748bk9bss74jblcf5ay"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; Remove the requirement on Rubocop, as it isn't useful to run, and
+         ;; including it as an input can lead to circular dependencies.
+         (add-after 'unpack 'remove-rubocop-from-Rakefile
+           (lambda _
+             (substitute* "Rakefile"
+               (("require 'rubocop/rake\\_task'") "")
+               (("RuboCop::RakeTask\\.new\\(:rubocop\\)") "[].each"))))
+         (add-after 'extract-gemspec 'remove-rubocop-from-gemspec
+           (lambda _
+             (substitute* "minitest-reporters.gemspec"
+               ((".*%q<rubocop>.*") "\n")))))))
+    (propagated-inputs
+     (list ruby-ansi ruby-builder ruby-minitest ruby-progressbar))
+    (native-inputs
+     (list bundler ruby-maruku))
+    (synopsis "Enhanced reporting for Minitest tests")
+    (description
+     "@code{minitest/reporters} provides a custom Minitest runner to improve
+how the test state is reported.  A number of different reporters are
+available, including a spec reporter, progress bar reporter, a HTML
+reporter.")
+    (home-page "https://github.com/kern/minitest-reporters")
+    (license license:expat)))
+
+(define-public ruby-minitest-rg
+  (package
+    (name "ruby-minitest-rg")
+    (version "5.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "minitest-rg" version))
+       (sha256
+        (base32
+         "0sq509ax1x62rd0w10b0hcydcxyk5bxxr3fwrgxv02r8drq2r354"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; Some tests fail even outside Guix, so disable tests.
+     ;; https://github.com/blowmage/minitest-rg/issues/12
+     ;; https://github.com/blowmage/minitest-rg/pull/13
+     `(#:tests? #f))
+    (propagated-inputs
+     (list ruby-minitest))
+    (synopsis "Coloured output for Minitest")
+    (description
+     "@code{minitest-rg} changes the colour of the output from Minitest.")
+    (home-page "https://blowmage.com/minitest-rg/")
+    (license license:expat)))
+
+(define-public ruby-minitest-global-expectations
+  (package
+    (name "ruby-minitest-global-expectations")
+    (version "1.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "minitest-global_expectations"
+                          version))
+       (sha256
+        (base32
+         "1pp3k2608spj4kvqy2y16hs18an917g6vwgvphrfhjviac83090x"))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     (list ruby-minitest))
+    (synopsis "Adjust minitest behaviour for calling expectation methods")
+    (description
+     "Minitest-global_expectations allows continued use of expectation methods
+on all objects.  Calling expectation methods on all objects was deprecated in
+minitest 5.12, and is planned to be removed from minitest 6.")
+    (home-page "https://github.com/jeremyevans/minitest-global_expectations")
+    (license license:expat)))
+
+(define-public ruby-daemons
+  (package
+    (name "ruby-daemons")
+    (version "1.2.5")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "daemons" version))
+              (sha256
+               (base32
+                "15smbsg0gxb7nf0nrlnplc68y0cdy13dm6fviavpmw7c630sring"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f)) ; no test suite
+    (synopsis "Daemonize Ruby programs")
+    (description "Daemons provides a way to wrap existing Ruby scripts to be
+run as a daemon and to be controlled by simple start/stop/restart commands.")
+    (home-page "https://github.com/thuehlinger/daemons")
+    (license license:expat)))
+
+(define-public ruby-dalli
+  (package
+    (name "ruby-dalli")
+    (version "3.2.4")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/petergoldstein/dalli")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1hhqqv1j3zd2y0vr6maaabsflrvkf1x0i6z8n725mhqydp3f9gwp"))))
+    (build-system ruby-build-system)
+    ;; Disable tests to avoid a dependency cycle with ruby-activesupport,
+    ;; through ruby-ruby-prof.
+    (arguments (list #:tests? #f))
+    (synopsis "High performance memcached client for Ruby")
+    (description "Dalli is a high performance pure Ruby client for accessing
+memcached servers.  Dalli supports:
+
+@itemize
+@item Simple and complex memcached configurations
+@item Fail-over between memcached instances
+@item Fine-grained control of data serialization and compression
+@item Thread-safe operation
+@item SSL/TLS connections to memcached
+@item SASL authentication.
+@end itemize
+
+The name is a variant of Salvador Dali for his famous painting The Persistence
+of Memory.")
+    (home-page "https://github.com/petergoldstein/dalli")
+    (license license:expat)))
+
+(define-public ruby-data_uri
+  (package
+    (name "ruby-data_uri")
+    (version "0.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "data_uri" version))
+       (sha256
+        (base32
+         "0fzkxgdxrlbfl4537y3n9mjxbm28kir639gcw3x47ffchwsgdcky"))))
+    (build-system ruby-build-system)
+    (synopsis "URI class for parsing data URIs")
+    (description
+     "Data @acronym{URI, universal resource identifier}s allow resources to be
+embedded inside a URI.  The URI::Data class provides support for parsing these
+URIs using the normal URI.parse method.")
+    (home-page "https://github.com/dball/data_uri")
+    (license license:expat)))
+
+(define-public ruby-debug
+  (package
+    (name "ruby-debug")
+    (version "1.7.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "debug" version))
+              (sha256
+               (base32
+                "0x59508j69w9p275gabysv521n210pd3n060gqfgsiqjms1h0ldf"))))
+    (build-system ruby-build-system)
+    (arguments (list #:test-target "test_all"))
+    (propagated-inputs (list ruby-irb ruby-reline))
+    (synopsis "Debugging functionality for Ruby")
+    (description "Debugging functionality for Ruby.  This is completely
+rewritten debug.rb which was contained by the ancient Ruby versions.  It is
+included with Ruby itself, but this package is made available so that the
+latest version can be made available independently from Ruby.")
+    (home-page "https://github.com/ruby/debug")
+    (license license:bsd-2)))
+
+(define-public ruby-deep-merge
+  (package
+    (name "ruby-deep-merge")
+    (version "1.2.1")
+    (home-page "https://github.com/danielsdeleo/deep_merge")
+    ;; The Rubygem source does not contain the gemspec required for tests.
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference (url home-page) (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0c9rk23ilhc0n4489y6lda2wzphpzh6ish6fahlbpjhxn82wb931"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list ruby-minitest))
+    (synopsis "Recursively merge hashes")
+    (description
+     "Deep Merge is a set of utility functions for @code{Hash}.  It permits
+you to merge elements inside a hash together recursively.")
+    (license license:expat)))
+
+(define-public ruby-delayed-job
+  (package
+    (name "ruby-delayed-job")
+    (version "4.1.11")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "delayed_job" version))
+              (sha256
+               (base32
+                "0s2xg72ljg4cwmr05zi67vcyz8zib46gvvf7rmrdhsyq387m2qcq"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'disable-bundler
+                 (lambda _
+                   (substitute* "Rakefile"
+                     (("require 'bundler/setup'") "")
+                     (("Bundler::GemHelper\\.install_tasks") ""))))
+               (add-after 'unpack 'disable-rubocop
+                 (lambda _
+                   (substitute* "Rakefile"
+                     (("require 'rubocop/rake_task'") "")
+                     (("RuboCop::RakeTask.new") ""))))
+               (add-after 'extract-gemspec 'remove-dependency-on-actionmailer
+                 (lambda _
+                   (substitute* "spec/helper.rb"
+                     (("require 'action_mailer'") ""))
+                   (substitute* "delayed_job.gemspec"
+                     (("\"spec/performable_mailer_spec.rb\".freeze, ") ""))
+                   (delete-file "spec/performable_mailer_spec.rb"))))))
+    (native-inputs
+     (list ruby-activerecord
+           ruby-rspec
+           ruby-simplecov
+           ruby-simplecov-lcov
+           ruby-zeitwerk
+           ruby-mini-portile-2))
+    (propagated-inputs
+     (list ruby-activesupport))
+    (synopsis "Asynchronous background tasks execution library")
+    (description "Delayed_job (or DJ) encapsulates the common pattern of
+asynchronously executing longer tasks in the background.  It is a direct
+extraction from Shopify where the job table is responsible for a multitude of
+core tasks.")
+    (home-page "https://github.com/collectiveidea/delayed_job")
+    (license license:expat)))
+
+(define-public ruby-git
+  (package
+    (name "ruby-git")
+    (version "1.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "git" version))
+              (sha256
+               (base32
+                "1waikaggw7a1d24nw0sh8fd419gbf7awh000qhsf411valycj6q3"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f ; no tests
+       #:phases (modify-phases %standard-phases
+                  (add-after 'install 'patch-git-binary
+                    (lambda* (#:key inputs outputs #:allow-other-keys)
+                      ;; Make the default git binary an absolute path to the
+                      ;; store.
+                      (let ((git    (search-input-file inputs "/bin/git"))
+                            (config (string-append
+                                     (assoc-ref outputs "out")
+                                     "/lib/ruby/vendor_ruby/gems/git-"
+                                     ,version "/lib/git/config.rb")))
+                        (substitute* (list config)
+                          (("'git'")
+                           (string-append "'" git "'")))))))))
+    (inputs
+     (list git))
+    (synopsis "Ruby wrappers for Git")
+    (description "Ruby/Git is a Ruby library that can be used to create, read
+and manipulate Git repositories by wrapping system calls to the git binary.")
+    (home-page "https://github.com/schacon/ruby-git")
+    (license license:expat)))
+
+(define-public ruby-hocon
+  (package
+    (name "ruby-hocon")
+    (version "1.4.0")
+    (home-page "https://github.com/puppetlabs/ruby-hocon")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference (url home-page) (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "04wgv0pwrghawnl6qp346z59fvp9v37jymq8p0lsrzxa6nvrykmk"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (if tests?
+                  (invoke "rspec")
+                  (format #t "test suite not run~%")))))))
+    (native-inputs
+     (list bundler ruby-rspec))
+    (synopsis "HOCON config library")
+    (description
+     "This package provides Ruby support for the @acronym{HOCON,
+Human-Optimized Config Object Notation} configuration file format.  It
+supports parsing and modifying HOCON and JSON files, and rendering parsed
+objects back to a @code{String}.")
+    (license license:asl2.0)))
+
+(define-public ruby-slop
+  (package
+    (name "ruby-slop")
+    (version "4.10.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "slop" version))
+              (sha256
+               (base32
+                "1iyrjskgxyn8i1679qwkzns85p909aq77cgx2m4fs5ygzysj4hw4"))))
+    (build-system ruby-build-system)
+    (synopsis "Ruby command line option parser")
+    (description "Slop provides a Ruby domain specific language for gathering
+options and parsing command line flags.")
+    (home-page "https://github.com/leejarvis/slop")
+    (license license:expat)))
+
+(define-public ruby-slop-3
+  (package (inherit ruby-slop)
+    (version "3.6.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "slop" version))
+              (sha256
+               (base32
+                "00w8g3j7k7kl8ri2cf1m58ckxk8rn350gp4chfscmgv6pq1spk3n"))))))
+
+(define-public ruby-multi-xml
+  (package
+    (name "ruby-multi-xml")
+    (version "0.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "multi_xml" version))
+       (sha256
+        (base32
+         "0lmd4f401mvravi1i1yq7b2qjjli0yq7dfc4p1nj5nwajp7r6hyj"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; No included tests
+    (synopsis "Swappable XML backends for Ruby")
+    (description
+     "@code{MultiXml} provides swappable XML backends utilizing either LibXML,
+Nokogiri, Ox, or REXML.")
+    (home-page "https://github.com/sferik/multi_xml")
+    (license license:expat)))
+
+(define-public ruby-multipart-parser
+  (package
+    (name "ruby-multipart-parser")
+    (version "0.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "multipart-parser" version))
+              (sha256
+               (base32
+                "0xb4p475yrfm883h9kn80a021myn17dvs50wpa1djzcmlq7p0882"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases #~(modify-phases %standard-phases
+                   (add-after 'unpack 'skip-failing-test
+                     ;; One test fails for unknown reasons (see:
+                     ;; https://github.com/danabr/multipart-parser/issues/7).
+                     (lambda _
+                       (substitute* "test/multipart_parser/reader_test.rb"
+                         (("def test_long" all)
+                          (string-append all "\n      return true"))))))))
+    (synopsis "Parser for multipart MIME messages")
+    (description "@code{multipart-parser} is a simple parser for multipart
+MIME messages, written in Ruby, based on felixge/node-formidable's parser.  It
+has the following characteristics:
+@itemize
+@item Pure Ruby
+@item Event-driven API
+@item Only supports one level of multipart parsing
+@item Does not perform I/O
+@item Does not depend on any other library.
+@end itemize")
+    (home-page "https://github.com/danabr/multipart-parser")
+    (license license:expat)))
+
+(define-public ruby-multipart-post
+  (package
+    (name "ruby-multipart-post")
+    (version "2.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "multipart-post" version))
+              (sha256
+               (base32
+                "09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list bundler))
+    (synopsis "Multipart POST library for Ruby")
+    (description "Multipart-Post Adds multipart POST capability to Ruby's
+net/http library.")
+    (home-page "https://github.com/nicksieger/multipart-post")
+    (license license:expat)))
+
+(define-public ruby-multi-json
+  (package
+    (name "ruby-multi-json")
+    (version "1.15.0")
+    (source
+     (origin
+       (method git-fetch)
+       ;; Tests are not distributed at rubygems.org so download from GitHub
+       ;; instead.
+       (uri (git-reference
+              (url "https://github.com/intridea/multi_json")
+              (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0mkdvy6i00yyksjvnv6znh7wf89j9506qzzjq6bsbmbkyqrszp4d"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      ;; TODO Tests don't currently work with Ruby 3
+      #:tests? #f
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'check 'pre-check
+            (lambda _
+              ;; As seen in the .travis.yml file.
+              (setenv "SKIP_ADAPTERS" "gson,jr_jackson,nsjsonserialization"))))))
+    (native-inputs
+     (list ruby-rspec ruby-json-pure ruby-oj ruby-yajl-ruby))
+    (synopsis "Common interface to multiple JSON libraries for Ruby")
+    (description
+     "This package provides a common interface to multiple JSON libraries,
+including Oj, Yajl, the JSON gem (with C-extensions), the pure-Ruby JSON gem,
+NSJSONSerialization, gson.rb, JrJackson, and OkJson.")
+    (home-page "https://github.com/intridea/multi_json")
+    (license license:expat)))
+
+(define-public ruby-arr-pm
+  (package
+    (name "ruby-arr-pm")
+    (version "0.0.12")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "arr-pm" version))
+              (sha256
+               (base32
+                "0fddw0vwdrr7v3a0lfqbmnd664j48a9psrjd3wh3k4i3flplizzx"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     (invoke "rspec")))))))
+    (native-inputs (list ruby-flores ruby-insist ruby-rspec ruby-stud))
+    (synopsis "RPM reader/writer library written in Ruby")
+    (description "This library allows reading and writing RPM packages.  It is
+used by the @command{fpm} tool.  It is written in pure Ruby because
+@code{librpm} is not available on all systems and requires many
+dependencies.")
+    (home-page "https://github.com/jordansissel/ruby-arr-pm")
+    (license license:asl2.0)))
+
+(define-public ruby-arel
+  (package
+    (name "ruby-arel")
+    (version "9.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "arel" version))
+              (sha256
+               (base32
+                "1jk7wlmkr61f6g36w9s2sn46nmdg6wn2jfssrhbhirv5x9n95nk0"))))
+    (build-system ruby-build-system)
+    (arguments '(#:tests? #f)) ; no tests
+    (home-page "https://github.com/rails/arel")
+    (synopsis "SQL AST manager for Ruby")
+    (description "Arel is an SQL @dfn{Abstract Syntax Tree} (AST) manager for
+Ruby.  It simplifies the generation of complex SQL queries and adapts to
+various relational database implementations.")
+    (license license:expat)))
+
+(define-public ruby-minitar
+  ;; We package from the GitHub source to fix the security issue reported at
+  ;; https://github.com/halostatue/minitar/issues/16.
+  (let ((commit "e25205ecbb6277ae8a3df1e6a306d7ed4458b6e4"))
+    (package
+      (name "ruby-minitar")
+      (version (string-append "0.5.4-1." (string-take commit 8)))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/halostatue/minitar")
+               (commit commit)))
+         (file-name (string-append name "-" version "-checkout"))
+         (sha256
+          (base32
+           "1iywfx07jgjqcmixzkxk9zdwfmij1fyg1z2jlwzj15cj7s99qlfv"))))
+      (build-system ruby-build-system)
+      (arguments
+       '(#:tests? #f)) ; missing a gemspec
+      (synopsis "Ruby library and utility for handling tar archives")
+      (description
+       "Archive::Tar::Minitar is a pure-Ruby library and command-line utility
+that provides the ability to deal with POSIX tar archive files.")
+      (home-page "http://www.github.com/atoulme/minitar")
+      (license (list license:gpl2+ license:ruby)))))
+
+(define-public ruby-nokogiri
+  (package
+    (name "ruby-nokogiri")
+    (version "1.15.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/sparklemotion/nokogiri")
+                    (commit "a6ad20b3edc8f020043ccfe5d9ec6ae9af103720")))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1n0vlg6v58jw3qzgyihz1dh5fvp4js1qgdh75j0kn47nvyiw3jxj"))
+              (patches (search-patches "ruby-nokogiri.patch"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:gem-flags #~(list "--" "--use-system-libraries"
+                               (string-append "--with-xml2-include="
+                                              #$(this-package-input "libxml2")
+                                              "/include/libxml2"))
+           #:phases #~(modify-phases %standard-phases
+                        (add-after 'install 'delete-mkmf.log
+                          (lambda _
+                            ;; Rubygems installs build log files that embed volatile file
+                            ;; names (see:
+                            ;; https://github.com/rubygems/rubygems/issues/6259).
+                            (for-each delete-file
+                                      (find-files #$output "^mkmf\\.log$"))))
+                        (delete 'check)
+                        (add-after 'install 'check
+                          (lambda* (#:key tests? #:allow-other-keys)
+                            (setenv "GEM_PATH" (string-append
+                                                (getenv "GEM_PATH") ":"
+                                                #$output "/lib/ruby/vendor_ruby"))
+                            (when tests?
+                              (for-each (lambda (file)
+                                          (invoke "ruby" "-Itest" file))
+                                        (find-files "test" "^test_.*\\.rb"))))))))
+    (native-inputs (list ruby-hoe ruby-rubyzip))
+    (inputs (list zlib libxml2 libxslt))
+    (propagated-inputs (list ruby-mini-portile-2 ruby-pkg-config))
+    (synopsis "HTML, XML, SAX, and Reader parser for Ruby")
+    (description "Nokogiri (鋸) parses and searches XML/HTML, and features
+both CSS3 selector and XPath 1.0 support.")
+    (home-page "https://nokogiri.org/")
+    (license license:expat)))
+
+(define-public ruby-method-source
+  (package
+    (name "ruby-method-source")
+    (version "1.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "method_source" version))
+       (sha256
+        (base32
+         "1pnyh44qycnf9mzi1j6fywd5fkskv3x7nmsqrrws0rjn5dd4ayfp"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:test-target "spec"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'remove-git-ls-files
+           (lambda* (#:key outputs #:allow-other-keys)
+             (substitute* "Rakefile"
+               (("git ls-files") "find . -type f")))))))
+    (native-inputs
+     (list ruby-rspec))
+    (synopsis "Retrieve the source code for Ruby methods")
+    (description "Method_source retrieves the source code for Ruby methods.
+Additionally, it can extract source code from Proc and Lambda objects or just
+extract comments.")
+    (home-page "https://github.com/banister/method_source")
+    (license license:expat)))
+
+(define-public ruby-coderay
+  (package
+    (name "ruby-coderay")
+    (version "1.1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "coderay" version))
+       (sha256
+        (base32
+         "15vav4bhcc2x3jmi3izb11l4d9f3xv8hp2fszb7iqmpsccv1pz4y"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; missing test files
+    (synopsis "Ruby syntax highlighting library")
+    (description "Coderay is a Ruby library that provides syntax highlighting
+for select languages.")
+    (home-page "http://coderay.rubychan.de")
+    (license license:expat)))
+
+(define-public ruby-cuke-modeler
+  (package
+    (name "ruby-cuke-modeler")
+    (version "3.20.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/enkessler/cuke_modeler")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0xbnx1blxm4kfhfwfh58n2ja40p2kfw8hbbz60dlzvghz25vcwy6"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:test-target "default"
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'improve-reproducibility
+                 (lambda _
+                   (substitute*
+                       "testing/rspec/spec/unit/cuke_modeler_unit_spec.rb"
+                     (("#\\{Time.now.year\\}") ""))))
+               (add-after 'unpack 'relax-requirements
+                 (lambda _
+                   (substitute* "Gemfile"
+                     ;; Cucumber appears pinned to an older version for no
+                     ;; particular reason (see:
+                     ;; https://github.com/enkessler/cuke_modeler/issues/14).
+                     (("'cucumber', '2.2.0'")
+                      "'cucumber', '>= 2.2.0'")
+                     (("^gherkin_major_version_used = .*")
+                      (string-append
+                       "gherkin_major_version_used = "
+                       #$(car
+                          (string-split
+                           (package-version
+                            (this-package-input "ruby-cucumber-gherkin")) #\.))
+                       "\n")))
+                   ;; Disable Bundler.
+                   (substitute* "bin/console"
+                     (("require 'bundler/setup'") ""))
+                   (substitute* "rakefiles/testing_tasks.rb"
+                     (("'bundle', 'exec', ") ""))
+                   ;; Remove extraneous dependencies.
+                   (substitute* "cuke_modeler.gemspec"
+                     ((".*bundler.*") "")
+                     ((".*rubocop.*") "")
+                     ((".*yard.*") ""))
+                   (substitute* "Rakefile"
+                     (("Rainbow.enabled = true") "")
+                     (("require_relative 'rakefiles/documentation_tasks'") "")
+                     (("require_relative 'rakefiles/other_tasks'") "")
+                     (("require_relative 'rakefiles/release_tasks'") "")))))))
+    (native-inputs
+     (list ruby-childprocess
+           ruby-cucumber
+           ruby-rainbow
+           ruby-rspec
+           ruby-simplecov
+           ruby-simplecov-lcov))
+    (propagated-inputs (list ruby-cucumber-gherkin))
+    (synopsis "Gherkin test suite analysis tool")
+    (description "CukeModeler facilitates modeling a test suite that is
+written in Gherkin (e.g.  Cucumber, SpecFlow, Lettuce, etc.).  It does this by
+providing an abstraction layer on top of the Abstract Syntax Tree (AST) that
+the @code{cucumber-gherkin} generates when parsing features, as well as
+providing models for feature files and directories in order to be able to have
+a fully traversable model tree of a test suite's structure.  These models can
+then be analyzed or manipulated more easily than the underlying AST layer.")
+    (home-page "https://github.com/enkessler/cuke_modeler")
+    (license license:expat)))
+
+(define-public ruby-parallel-tests
+  (package
+    (name "ruby-parallel-tests")
+    (version "4.9.0")
+    (home-page "https://github.com/grosser/parallel_tests")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url home-page)
+                    (commit (string-append "v" version))))
+              (file-name (string-append name version))
+              (sha256
+               (base32
+                "0ljb17i1bvlr0y1avwishcrg60h48bj6iwgkp8yrck08wcs7b338"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:test-target "spec"             ;avoid rubocop dependency
+       #:phases (modify-phases %standard-phases
+                  (add-after 'patch-source-shebangs 'patch-shell-invocations
+                    (lambda _
+                      (substitute* '("lib/parallel_tests/tasks.rb"
+                                     "spec/parallel_tests/tasks_spec.rb")
+                        (("/bin/sh") (which "sh"))
+                        (("/bin/bash") (which "bash")))))
+                  (add-before 'check 'relax-requirements
+                    (lambda _
+                      ;; Remove hard coded version constraints, instead just
+                      ;; use whatever versions are available in Guix.
+                      (delete-file "Gemfile.lock")
+                      (substitute* "Gemfile"
+                        (("'minitest',.*")
+                         "'minitest'\n")
+                        (("'cucumber',.*")
+                         "'cucumber'\n")
+                        ;; Do not depend on a git-fetched spinach version.
+                        (("gem 'spinach',.*")
+                         "gem 'spinach'\n")
+                        ((".*rubocop.*") ""))))
+                  (add-before 'check 'disable-rails-test
+                    (lambda _
+                      ;; XXX: This test attempts to download and run the test
+                      ;; suites of multiple Rails versions(!) directly.
+                      (delete-file "spec/rails_spec.rb")))
+                  (add-before 'check 'disable-problematic-tests
+                    (lambda _
+                      ;; This test fails, probably because of the newer
+                      ;; Cucumber version used here.
+                      (delete-file "spec/parallel_tests/cucumber/\
+failure_logger_spec.rb")                      ))
+                  (add-before 'check 'set-HOME
+                    (lambda _
+                      ;; Some tests check the output of Bundler, and fail when
+                      ;; Bundler warns that /homeless-shelter does not exist.
+                      (setenv "HOME" "/tmp"))))))
+    (native-inputs
+     (list ruby-bump
+           ruby-cucumber
+           ruby-cuke-modeler
+           ruby-minitest
+           ruby-rake
+           ruby-rspec
+           ruby-spinach))
+    (propagated-inputs
+     (list ruby-parallel))
+    (synopsis "Run tests in parallel")
+    (description
+     "This package can speed up @code{Test::Unit}, @code{RSpec},
+@code{Cucumber}, and @code{Spinach} tests by running them concurrently
+across multiple CPU cores.")
+    (license license:expat)))
+
+(define-public ruby-parser
+  (package
+    (name "ruby-parser")
+    (version "3.3.7.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "parser" version))
+       (sha256
+        (base32
+         "16qi2qhpszm842awxghmsp64yvvawafq96w5jw98irz3f4bh2jbl"))))
+    (build-system ruby-build-system)
+    (arguments '(#:tests? #f))          ; tests not included in gem
+    (native-inputs (list bundler ruby-cliver ruby-simplecov))
+    (inputs (list ragel))
+    (propagated-inputs (list ruby-ast ruby-racc))
+    (synopsis "Ruby parser written in pure Ruby")
+    (description
+     "This package provides a Ruby parser written in pure Ruby.")
+    (home-page "https://github.com/whitequark/parser")
+    (license license:expat)))
+
+(define-public ruby-set
+  (package
+    (name "ruby-set")
+    (version "1.0.3")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "set" version))
+              (sha256
+               (base32
+                "07kc057nrkddrybqmlbmgf9x7nsmbc3ni6gy1z6xjx5b838vlj33"))))
+    (build-system ruby-build-system)
+    (synopsis
+     "Ruby class to deal with collections of unordered, unique values")
+    (description
+     "This package provides a class to deal with collections of unordered,
+unique values")
+    (home-page "https://github.com/ruby/set")
+    (license license:bsd-2)))
+
+(define-public ruby-sexp-processor
+  (package
+    (name "ruby-sexp-processor")
+    (version "4.17.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "sexp_processor" version))
+       (sha256
+        (base32
+         "0vzz9mhg4kkdqf179pm30i204h7iskanxrk53j0csf0qrrs4iajd"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list ruby-hoe
+           ruby-minitest
+           ruby-minitest-proveit))
+    (synopsis "ParseTree fork which includes generic S-exp processing tools")
+    (description "The sexp_processor package is derived from ParseTree, but
+contrary to ParseTree, it includes all the generic S-exp processing tools.
+Amongst the included tools are @code{Sexp}, @code{SexpProcessor} and
+@code{Environment}")
+    (home-page "https://github.com/seattlerb/sexp_processor")
+    (license license:expat)))
+
+(define-public ruby-ruby-parser
+  (package
+    (name "ruby-ruby-parser")
+    (version "3.20.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "ruby_parser" version))
+       (sha256
+        (base32
+         "0q851n8654wkjrq8jawq8vi5yhr1y9vpyr2vj7cnn3sa4ikg6d3z"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch
+            (lambda _
+              (substitute* "Rakefile"
+                (("`which bison`")
+                 (string-append "\"" (which "bison") "\""))
+                (("which unifdef")
+                 (which "unifdef"))))))))
+    (native-inputs
+     (list ruby-hoe
+           ruby-racc
+           unifdef
+           bison
+           ruby-minitest))
+    (propagated-inputs
+     (list ruby-sexp-processor))
+    (home-page "https://github.com/seattlerb/ruby_parser/")
+    (synopsis "Ruby parser written in pure Ruby")
+    (description "The ruby_parser (RP) package provides a Ruby parser written
+in pure Ruby.  It outputs S-expressions which can be manipulated and converted
+back to Ruby via the @code{ruby2ruby} library.")
+    (license license:expat)))
+
+(define-public ruby-ruby-version
+  (package
+    (name "ruby-ruby-version")
+    (version "1.0.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "ruby_version" version))
+              (sha256
+               (base32
+                "0lvc7bd5ps3w2vq2wb02i0pi3vfcx2rnckx2ix4rjym1qf52kb2j"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'extract-gemspec 'delete-gem-files
+                 ;; There are some pre-built files in the source, and
+                 ;; registered in the .gemspec (see:
+                 ;; https://github.com/janlelis/ruby_version/issues/1).
+                 (lambda _
+                   (delete-file-recursively "pkg")
+                   (substitute* "ruby_version.gemspec"
+                     (("\"pkg/ruby_version-1.0.0.gem\".freeze, ")
+                      "")
+                     (("\"pkg/ruby_version-1.0.1.gem\".freeze, ")
+                      ""))))
+               (add-after 'extract-gemspec 'relax-requirements
+                 (lambda _
+                   (delete-file "Gemfile.lock")
+                   (substitute* "ruby_version.gemspec"
+                     (("\"Gemfile.lock\".freeze, ") "")
+                     ;; Allow a newers versions of development dependencies.
+                     (("~>") ">=")))))))
+    (native-inputs (list ruby-rdoc ruby-rubygems-tasks ruby-rspec))
+    (synopsis "Ruby class for checking the Ruby version")
+    (description "This package provides a @code{RubyVersion} class which
+offers a convenient Domain Specific Language (DSL) for checking for the right
+Ruby version.")
+    (home-page "https://github.com/janlelis/ruby_version")
+    (license license:expat)))
+
+(define-public ruby-prawn-manual-builder
+  (package
+    (name "ruby-prawn-manual-builder")
+    (version "0.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "prawn-manual_builder" version))
+       (sha256
+        (base32 "1vlg5w7wq43g2hgpgra2nrcxj1kb4ayqliz4gmja2rhs037j2vzs"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f                      ; no included tests
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'extract-gemspec 'patch-gemspec
+           (lambda _
+             (substitute* ".gemspec"
+               ;; Loosen the requirement for pdf-inspector
+               (("~> 1\\.0\\.7") ">= 0")))))))
+    (propagated-inputs
+     (list ruby-coderay))
+    (synopsis "Tool for writing manuals for Prawn and Prawn accessories")
+    (description
+     "This package provides a tool for writing manuals for Prawn and Prawn
+accessories")
+    (home-page "https://github.com/prawnpdf/prawn-manual_builder")
+    (license %prawn-project-licenses)))
+
+(define-public ruby-progress_bar
+  (package
+    (name "ruby-progress_bar")
+    (version "1.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "progress_bar" version))
+       (sha256
+        (base32
+         "1qc40mr6p1z9a3vlpnsg1zfgk1qswviql2a31y63wpv3vr6b5f48"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:test-target "spec"))
+    (propagated-inputs
+     (list ruby-highline ruby-options))
+    (native-inputs
+     (list bundler ruby-rspec ruby-timecop))
+    (synopsis
+     "Ruby library for displaying progress bars")
+    (description
+     "ProgressBar is a simple library for displaying progress bars.  The
+maximum value is configurable, and additional information can be displayed
+like the percentage completion, estimated time remaining, elapsed time and
+rate.")
+    (home-page "https://github.com/paul/progress_bar")
+    (license license:wtfpl2)))
+
+(define-public ruby-progressbar
+  (package
+    (name "ruby-progressbar")
+    (version "1.10.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "ruby-progressbar" version))
+       (sha256
+        (base32 "1k77i0d4wsn23ggdd2msrcwfy0i376cglfqypkk2q77r2l3408zf"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(;; TODO: There looks to be a circular dependency with ruby-fuubar.
+       #:tests? #f))
+    (synopsis "Text progress bar library for Ruby")
+    (description
+     "Ruby/ProgressBar is an flexible text progress bar library for Ruby.
+The output can be customized with a formatting system.")
+    (home-page "https://github.com/jfelchner/ruby-progressbar")
+    (license license:expat)))
+
+(define-public ruby-latest-ruby
+  (package
+    (name "ruby-latest-ruby")
+    (version "3.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "latest_ruby" version))
+              (sha256
+               (base32
+                "15rqwgxzpnkzdiz8m02jra0zq5sx0fiz61vkfrj1ls6slqfhnzqg"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; No Rakefile
+    (synopsis "Answers the question of what the latest Ruby version is")
+    (description "Knows about MRI, Rubinius, JRuby, MagLev and MacRuby.")
+    (home-page "https://github.com/kyrylo/latest_ruby")
+    (license license:zlib)))
+
+(define-public ruby-pry
+  (package
+    (name "ruby-pry")
+    (version "0.14.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "pry" version))
+       (sha256
+        (base32
+         "0k9kqkd9nps1w1r1rb7wjr31hqzkka2bhi8b518x78dcxppm9zn4"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; no tests
+    (propagated-inputs
+     (list ruby-coderay ruby-method-source))
+    (synopsis "Ruby REPL")
+    (description "Pry is an IRB alternative and runtime developer console for
+Ruby.  It features syntax highlighting, a plugin architecture, runtime
+invocation, and source and documentation browsing.")
+    (home-page "https://cobaltbluemedia.com/pryrepl/")
+    (license license:expat)))
+
+(define-public ruby-pry-doc
+  (package
+    (name "ruby-pry-doc")
+    (version "1.4.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "pry-doc" version))
+              (sha256
+               (base32
+                "1pp43n69p6bjvc640wgcz295w1q2v9awcqgbwcqn082dbvq5xvnx"))))
+    (build-system ruby-build-system)
+    (propagated-inputs (list ruby-pry ruby-yard))
+    (native-inputs (list ruby-latest-ruby ruby-rspec ruby-rake)) ;for tests
+    (synopsis "Provides YARD and extended documentation support for Pry")
+    (description
+     "Pry Doc is a Pry REPL plugin.  It provides extended documentation
+support for the REPL by means of improving the @code{show-doc} and
+@code{show-source} commands.  With help of the plugin the commands are
+be able to display the source code and the docs of Ruby methods and
+classes implemented in C.")
+    (home-page "https://github.com/pry/pry-doc")
+    (license license:expat)))
+
+(define-public ruby-single-cov
+  (package
+    (name "ruby-single-cov")
+    (version "1.9.1")
+    (home-page "https://github.com/grosser/single_cov")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference (url home-page)
+                                  (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1w4k81f2mdg620m6pwkrqayddnz9mr8qx0myqn33mw8k6imfip05"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:test-target "spec"             ;to avoid rubocop requirement
+       #:phases (modify-phases %standard-phases
+                  (replace 'replace-git-ls-files
+                    (lambda _
+                      (substitute* "single_cov.gemspec"
+                        (("`git ls-files lib/ bin/ MIT-LICENSE`")
+                         ;; There no longer appear to be a 'bin'
+                         ;; sub-directory.
+                         "`find lib/ MIT-LICENSE -type f | sort`"))))
+                  (add-before 'check 'remove-version-constraints
+                    (lambda _
+                      (delete-file "Gemfile.lock")))
+                  (add-before 'check 'relax-requirements
+                    (lambda _
+                      ;; Remove extraneous requirements.
+                      (substitute* "Rakefile"
+                        ((".*require.*bump.*") ""))
+                      (substitute* "Gemfile"
+                        ((".*gem \"bump\".*") "")
+                        ((".*gem \"rubocop\".*") ""))))
+                  (add-before 'check 'disable-failing-test
+                    (lambda _
+                      ;; XXX: This test copies assets from minitest, but can
+                      ;; not cope with the files being read-only.  Just skip
+                      ;; it for now.
+                      (substitute* "specs/single_cov_spec.rb"
+                        (("it \"complains when coverage is bad\"")
+                         "xit \"complains when coverage is bad\"")))))))
+    (native-inputs (list ruby-minitest ruby-rspec ruby-simplecov))
+    (synopsis "Code coverage reporting tool")
+    (description
+     "This package provides actionable code coverage reports for Ruby
+projects.  It has very little overhead and can be easily integrated with
+development tools to catch coverage problems early.")
+    (license license:expat)))
+
+(define-public ruby-oedipus-lex
+  (package
+    (name "ruby-oedipus-lex")
+    (version "2.6.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "oedipus_lex" version))
+       (sha256
+        (base32
+         "06l4d3l75vhdcmnavnkzr7bd39rb0njxhkbmwrw6ni64z2hlj7w7"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list ruby-hoe
+           ruby-minitest))
+    (synopsis "Ruby lexer")
+    (description
+     "Oedipus Lex is a lexer generator in the same family as Rexical and Rex.
+It is based primarily on generating code much like you would a hand-written
+lexer.  It uses StrScanner within a multi-level case statement.  As such,
+Oedipus matches on the first match, not the longest.")
+    (home-page "https://github.com/seattlerb/oedipus_lex")
+    (license license:expat)))
+
+(define-public ruby-guard
+  (package
+    (name "ruby-guard")
+    (version "2.13.0")
+    (source (origin
+              (method git-fetch)
+              ;; The gem does not include a Rakefile, nor does it contain a
+              ;; gemspec file, nor does it come with the tests.  This is why
+              ;; we fetch the tarball from Github.
+              (uri (git-reference
+                     (url "https://github.com/guard/guard")
+                     (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "16pxcszr0g2jnl3090didxh1d8z5m2mly14m3w4rspb8fmclsnjs"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f ; tests require cucumber
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'remove-git-ls-files
+          (lambda* (#:key outputs #:allow-other-keys)
+            (substitute* "guard.gemspec"
+              (("git ls-files -z") "find . -type f -print0"))))
+         (replace 'build
+          (lambda _
+            (invoke "gem" "build" "guard.gemspec"))))))
+    (propagated-inputs
+     (list ruby-formatador
+           ruby-listen
+           ruby-lumberjack
+           ruby-nenv
+           ruby-notiffany
+           ruby-pry
+           ruby-shellany
+           ruby-thor))
+    (native-inputs
+     (list bundler ruby-rspec))
+    (synopsis "Tool to handle events on file system modifications")
+    (description
+     "Guard is a command line tool to easily handle events on file system
+modifications.  Guard automates various tasks by running custom rules whenever
+file or directories are modified.")
+    (home-page "https://guardgem.org/")
+    (license license:expat)))
+
+(define-public ruby-spinach
+  (package
+    (name "ruby-spinach")
+    (version "0.12.0")
+    (home-page "https://github.com/codegram/spinach")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "spinach" version))
+              (sha256
+               (base32
+                "1v9nvpvlgjx698dc4q2p1l45sxm5fjjzfxayrkyzb9nv0q0xfjsp"))))
+    (build-system ruby-build-system)
+    (arguments
+       ;; FIXME: Disable tests altogether because they depend on 'capybara'
+       ;; which in turn depends on many other unpackaged gems.  Enable once
+       ;; capybara is available.
+       '(#:tests? #f))
+    (propagated-inputs
+     (list ruby-colorize ruby-gherkin-ruby))
+    (synopsis "Gherkin-based BDD framework")
+    (description
+     "Spinach is a high-level @acronym{BDD, Behavior-driven development}
+framework that leverages the expressive @code{Gherkin} language to help you
+define executable specifications of your code.")
+    (license license:expat)))
+
+(define-public ruby-timers
+  (package
+    (name "ruby-timers")
+    (version "4.3.5")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/socketry/timers")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1vvahlhk6i1xks1bsha6s64pjjxhagmzvvf1q9h6z3lpcba43rpx"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'build 'prune-gems.rb
+                 (lambda _
+                   (substitute* "gems.rb"
+                     ;; These are only required for maintenance.
+                     ((".*gem \"bake-modernize\".*") "")
+                     ((".*gem \"bake-gem\".*") "")
+                     ;; Not actually required by the tests.
+                     ((".*gem 'benchmark-ips'.*") "")
+                     ((".*gem \"ruby-prof\".*") ""))))
+               (add-before 'build 'remove-missing-signing-key
+                 (lambda _
+                   ;; Otherwise, the build fails with ENOENT.
+                   (substitute* "timers.gemspec"
+                     ((".*spec.signing_key.*") ""))))
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     (invoke "bake" "test")))))))
+    (native-inputs
+     (list ruby-covered
+           ruby-bake-test
+           ruby-bake-test-external
+           ruby-sus))
+    (synopsis "Collection of Ruby timer classes")
+    (description "Timers offers a collections of one-shot and periodic timers,
+intended for use with event loops such as async.")
+    (home-page "https://github.com/socketry/timers")
+    (license license:expat)))
+
+(define-public ruby-tilt
+  (package
+    (name "ruby-tilt")
+    (version "2.2.0")
+    (source
+     (origin
+       (method git-fetch)               ;the distributed gem lacks tests
+       (uri (git-reference
+             (url "https://github.com/jeremyevans/tilt")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "056zm4vzx9xjwl7zgmb17hzb91qx5cvzk60wvsxchfybvl03gn5d"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'check 'set-SASS_IMPLEMENTATION
+            (lambda _
+              (setenv "SASS_IMPLEMENTATION" "sassc"))))))
+    (propagated-inputs
+     (list ruby-pandoc-ruby ruby-sassc))
+    (native-inputs
+     (list bundler ruby-yard ruby-builder ruby-erubis ruby-markaby))
+    (synopsis "Generic interface to multiple Ruby template engines")
+    (description
+     "Tilt is a thin interface over a number of different Ruby template
+engines in an attempt to make their usage as generic as possible.")
+    (home-page "https://github.com/rtomayko/tilt/")
+    (license license:expat)))
+
+(define-public ruby-thread-safe
+  (package
+    (name "ruby-thread-safe")
+    (version "0.3.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "thread_safe" version))
+       (sha256
+        (base32
+         "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; needs simplecov, among others
+    (synopsis "Thread-safe utilities for Ruby")
+    (description "The thread_safe library provides thread-safe collections and
+utilities for Ruby.")
+    (home-page "https://github.com/ruby-concurrency/thread_safe")
+    (license license:asl2.0)))
+
+(define-public ruby-tzinfo
+  (package
+    (name "ruby-tzinfo")
+    (version "2.0.6")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              ;; Pull from git because the gem has no tests.
+              (url "https://github.com/tzinfo/tzinfo")
+              (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1n1gzjqwwnx209h8d054miva0y7x17db2ahy7jav5r25ibhh7rgm"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'skip-safe-tests
+            (lambda _
+              (substitute* "test/test_utils.rb"
+                (("def safe_test\\(options = \\{\\}\\)")
+                 "def safe_test(options = {})
+      skip('The Guix build environment has an unsafe load path')"))))
+          (add-before 'check 'pre-check
+            (lambda _
+              (setenv "HOME" (getcwd))
+              (substitute* "Gemfile"
+                (("simplecov.*") "simplecov'\n"))))
+          (replace 'check
+            (lambda* (#:key tests? test-target #:allow-other-keys)
+              (when tests?
+                (invoke "bundler" "exec" "rake" test-target)))))))
+    (propagated-inputs
+     (list ruby-concurrent))
+    (native-inputs
+     (list ruby-simplecov))
+    (synopsis "Time zone library for Ruby")
+    (description "TZInfo is a Ruby library that provides daylight savings
+aware transformations between times in different time zones.")
+    (home-page "https://tzinfo.github.io")
+    (license license:expat)))
+
+(define-public ruby-tzinfo-data
+  (package
+    (name "ruby-tzinfo-data")
+    (version "1.2023.3")
+    (source
+     (origin
+       (method git-fetch)
+       ;; Download from GitHub because the rubygems version does not contain
+       ;; Rakefile or tests.
+       (uri (git-reference
+              (url "https://github.com/tzinfo/tzinfo-data")
+              (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1v3fpfmw485lsc9bfqfcasb9j25g9ywfpmmk648l2vdsh7nipilf"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch-source
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "Rakefile"
+                (("URI\\.parse\\(url\\)\\.open")
+                 "URI.open(url)")
+                (("https://data.iana.org/time-zones/releases")
+                 (assoc-ref inputs "tzdata")))))
+          (add-before 'check 'pre-check
+            (lambda _
+              (setenv "HOME" (getcwd))
+              (substitute* "Rakefile"
+                ;; Don't need gpg, and it may break after a time.
+                (("gpg ") "echo ")
+                (("    sh\\(\\\"make -C" text)
+                 (string-append "    sh(\"sed -i 's@/bin/sh@sh@' #{tzdb_combined_path}/Makefile \")\n"
+                                "    sh(\"sed -i 's@cc=@cc?=@' #{tzdb_combined_path}/Makefile \")\n" text)))
+              (setenv "cc" #$(cc-for-target)))))))
+    (propagated-inputs
+     (list ruby-tzinfo))
+    (native-inputs
+     `(("tzdata"
+        ,(file-union "tzdata-for-ruby-tzdata-info"
+           `(("tzdata2023c.tar.gz"
+              ,(origin
+                 (method url-fetch)
+                 (uri "https://data.iana.org/time-zones/releases/tzdata2023c.tar.gz")
+                 (sha256
+                  (base32
+                   "0p4nvp5bdxxdqh269nvvcfrpycbbfwm31al5whwbpsaa3dfhnl9z"))))
+             ("tzdata2023c.tar.gz.asc"
+              ,(origin
+                 (method url-fetch)
+                 (uri "https://data.iana.org/time-zones/releases/tzdata2023c.tar.gz.asc")
+                 (sha256
+                  (base32
+                   "0mrmhczs5qnj1zp6gh4pg6fm0iblr2jmzy0fgh9slinwxmn7pv6m"))))
+             ("tzcode2023c.tar.gz"
+              ,(origin
+                 (method url-fetch)
+                 (uri "https://data.iana.org/time-zones/releases/tzcode2023c.tar.gz")
+                 (sha256
+                  (base32
+                   "1rqln88ki0jagi372nqyn7bs03rf2l33081sy2835mwsn4mpzla6"))))
+             ("tzcode2023c.tar.gz.asc"
+              ,(origin
+                 (method url-fetch)
+                 (uri "https://data.iana.org/time-zones/releases/tzcode2023c.tar.gz.asc")
+                 (sha256
+                  (base32
+                   "0jbx8xjv75qfh7bxa2xmrf97r37057y89rhmrq1gz8s6b8qlzb2i")))))))))
+    (synopsis "Data from the IANA Time Zone database")
+    (description
+     "This library provides @code{TZInfo::Data}, which contains data from the
+IANA Time Zone database packaged as Ruby modules for use with @code{TZInfo}.")
+    (home-page "https://tzinfo.github.io")
+    (license license:expat)))
+
+(define-public ruby-rb-inotify
+  (package
+    (name "ruby-rb-inotify")
+    (version "0.10.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "rb-inotify" version))
+       (sha256
+        (base32
+         "1jm76h8f8hji38z3ggf4bzi8vps6p7sagxn3ab57qc0xyga64005"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:tests? #f ; there are no tests
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; Building the gemspec with rake is not working here since it is
+          ;; generated with Jeweler.  It is also unnecessary because the
+          ;; existing gemspec does not use any development tools to generate a
+          ;; list of files.
+          (replace 'build
+            (lambda _
+              (invoke "gem" "build" "rb-inotify.gemspec"))))))
+    (propagated-inputs
+     (list ruby-ffi))
+    (native-inputs
+     (list ruby-yard))
+    (synopsis "Ruby wrapper for Linux's inotify")
+    (description "rb-inotify is a simple wrapper over the @code{inotify} Linux
+kernel subsystem for monitoring changes to files and directories.")
+    (home-page "https://github.com/nex3/rb-inotify")
+    (license license:expat)))
+
+(define-public ruby-pry-editline
+  (package
+    (name "ruby-pry-editline")
+    (version "1.1.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "pry-editline" version))
+              (sha256
+               (base32
+                "1pjxyvdxvw41xw3yyl18pwzix8hbvn6lgics7qcfhjfsf1zs8x1z"))))
+    (build-system ruby-build-system)
+    (arguments `(#:tests? #f)) ; no tests included
+    (native-inputs
+     (list bundler))
+    (synopsis "Open the current REPL line in an editor")
+    (description
+     "This gem provides a plugin for the Ruby REPL to enable opening the
+current line in an external editor.")
+    (home-page "https://github.com/tpope/pry-editline")
+    (license license:expat)))
+
+(define-public ruby-sdoc
+  (package
+    (name "ruby-sdoc")
+    (version "1.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "sdoc" version))
+              (sha256
+               (base32
+                "1am73dldx1fqlw2xny5vyk00pgkisg6bvs0pa8jjd7c19drjczrd"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'set-rubylib-and-patch-gemfile
+          (lambda _
+            (setenv "RUBYLIB" "lib")
+            (substitute* "sdoc.gemspec"
+              (("s.add_runtime_dependency.*") "\n")
+              (("s.add_dependency.*") "\n"))
+            (substitute* "Gemfile"
+              (("gem \"rake\".*")
+               "gem 'rake'\ngem 'rdoc'\ngem 'json'\n")))))))
+    (propagated-inputs
+     (list ruby-json))
+    (native-inputs
+     (list bundler ruby-minitest ruby-hoe))
+    (synopsis "Generate searchable RDoc documentation")
+    (description
+     "SDoc is an RDoc documentation generator to build searchable HTML
+documentation for Ruby code.")
+    (home-page "https://github.com/voloko/sdoc")
+    (license license:expat)))
+
+(define-public ruby-tins
+  (package
+    (name "ruby-tins")
+    (version "1.29.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "tins" version))
+              (sha256
+               (base32
+                "0nzp88y19rqlcizp1nw8m44fvfxs9g3bhjpscz44dwfawfrmr0cb"))))
+    (build-system ruby-build-system)
+    ;; This gem needs gem-hadar at development time, but gem-hadar needs tins
+    ;; at runtime.  To avoid the dependency on gem-hadar we disable rebuilding
+    ;; the gemspec.
+    (arguments
+     `(#:tests? #f ; there are no tests
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'build
+          (lambda _
+            ;; "lib/spruz" is a symlink.  Leaving it in the gemspec file
+            ;; causes an error.
+            (substitute* "tins.gemspec"
+              (("\"lib/spruz\", ") ""))
+            (invoke "gem" "build" "tins.gemspec"))))))
+    (propagated-inputs
+     (list ruby-sync))
+    (synopsis "Assorted tools for Ruby")
+    (description "Tins is a Ruby library providing assorted tools.")
+    (home-page "https://github.com/flori/tins")
+    (license license:expat)))
+
+(define-public ruby-gemtext
+  (package
+    (name "ruby-gemtext")
+    (version "1.0.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "gemtext" version))
+       (sha256
+        (base32 "1z559f5z0zvwnqgnny0zf4mppiary020ljxwpw3bdxi2hr9aj3gp"))))
+    (build-system ruby-build-system)
+    (synopsis "Gemtext parser for Ruby")
+    (description
+     "This package is a Ruby parser library for Gemtext (hypertext format
+which is intended to serve as the native response format of the Gemini
+file transfer protocol) and produces a document object of various
+nodes.")
+    (home-page "https://github.com/exastencil/gemtext")
+    (license license:expat)))
+
+(define-public ruby-gem-hadar
+  (package
+    (name "ruby-gem-hadar")
+    (version "1.11.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "gem_hadar" version))
+              (sha256
+               (base32
+                "160abb3l4n3gkhd86f22n981bhqxkbf5ym6fhsk796pix6696pd5"))))
+    (build-system ruby-build-system)
+    ;; This gem needs itself at development time. We disable rebuilding of the
+    ;; gemspec to avoid this loop.
+    (arguments
+     `(#:tests? #f ; there are no tests
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'build
+          (lambda _
+            (invoke "gem" "build" "gem_hadar.gemspec"))))))
+    (propagated-inputs
+     (list git-minimal/pinned ruby-tins ruby-yard))
+    (synopsis "Library for the development of Ruby gems")
+    (description
+     "This library contains some useful functionality to support the
+development of Ruby gems.")
+    (home-page "https://github.com/flori/gem_hadar")
+    (license license:expat)))
+
+(define-public ruby-term-ansicolor
+  (package
+    (name "ruby-term-ansicolor")
+    (version "1.7.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "term-ansicolor" version))
+              (sha256
+               (base32
+                "1xq5kci9215skdh27npyd3y55p812v4qb4x2hv3xsjvwqzz9ycwj"))))
+    (build-system ruby-build-system)
+    ;; Rebuilding the gemspec seems to require git, even though this is not a
+    ;; git repository, so we just build the gem from the existing gemspec.
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'fix-test
+            (lambda -
+              (substitute* "tests/hsl_triple_test.rb"
+                (("0\\\\\\.0%")
+                 "0\\.?0?%"))))
+          (replace 'build
+            (lambda _
+              (invoke "gem" "build" "term-ansicolor.gemspec"))))))
+    (propagated-inputs
+     (list ruby-tins))
+    (native-inputs
+     (list ruby-gem-hadar))
+    (synopsis "Ruby library to control the attributes of terminal output")
+    (description
+     "This Ruby library uses ANSI escape sequences to control the attributes
+of terminal output.")
+    (home-page "https://flori.github.io/term-ansicolor/")
+    ;; There is no mention of the "or later" clause.
+    (license license:gpl2)))
+
+(define-public ruby-immutable-struct
+  (let ((commit "bb67ad8fa2117e8031c3f4333b4c25c8bcd3afff")
+        (revision "0"))
+    (package
+      (name "ruby-immutable-struct")
+      (version (git-version "2.4.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/stitchfix/immutable-struct")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "0vsr2spypjf0i7ppg2a0gj3mjj5k3dyqsx224cbsxw51p6cc11c1"))))
+      (build-system ruby-build-system)
+      (arguments
+       (list
+        #:phases
+        #~(modify-phases %standard-phases
+            (replace 'check
+              (lambda* (#:key tests? #:allow-other-keys)
+                (when tests?
+                  (invoke "ruby" (which "rspec"))))))))
+      (native-inputs
+       (list ruby-rspec))
+      (synopsis "Ruby library for creating immutable struct classes")
+      (description
+       "This package provides a library to help create value objects without
+the pain of Ruby's Struct (or its setters).")
+      (home-page "https://stitchfix.github.io/immutable-struct/")
+      (license license:expat))))
+
+(define-public ruby-faker
+  (package
+    (name "ruby-faker")
+    (version "3.2.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/faker-ruby/faker")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1wwdwh5qwaxnd9dl6732mj6b953l5r32r4936pj5680963iagq59"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'remove-rubocop-from-rakefile
+            (lambda _
+              (substitute* "Rakefile"
+                (("require 'rubocop/rake_task'") "")
+                (("RuboCop::RakeTask\\.new") "")))))))
+    (native-inputs (list ruby-yard ruby-simplecov ruby-timecop))
+    (propagated-inputs (list ruby-i18n))
+    (synopsis "Library for generating fake data")
+    (description "Faker is a port of Data::Faker from Perl. It is used to
+easily generate fake data: names, addresses, phone numbers, etc.")
+    (home-page "https://github.com/faker-ruby/faker")
+    (license license:expat)))
+
+(define-public ruby-terraform
+  (package
+  (name "ruby-terraform")
+  (version "1.7.0")
+  (source
+   (origin
+     (method git-fetch)
+     (uri (git-reference
+           (url "https://github.com/infrablocks/ruby_terraform")
+           (commit (string-append "v" version))))
+     (file-name (git-file-name name version))
+     (sha256
+      (base32
+       "18d1qkf2rbbvc2f0dxni85i2l2g8zn5kzh0v8zr1b86r1wjy6rvd"))))
+  (build-system ruby-build-system)
+  (arguments
+   (list
+    #:test-target "spec"
+    #:phases
+    #~(modify-phases %standard-phases
+        (add-after 'unpack 'disable-bundler
+          (lambda _
+            (substitute* "spec/spec_helper.rb"
+              (("require 'bundler/setup'") ""))))
+        (add-before 'check 'disable-falinig-tests
+          (lambda _
+            (substitute* "spec/ruby_terraform/commands/plan_spec.rb"
+              (("it 'logs an error raised when running the command'")
+               "xit 'logs an error raised when running the command'")
+              (("it 'raises execution error when an error occurs running the command'")
+               "xit 'raises execution error when an error occurs running the command'"))))
+        (replace 'check
+          (lambda* (#:key tests? #:allow-other-keys)
+            (when tests?
+              (invoke "rspec")))))))
+  (native-inputs
+   (list ruby-rspec
+         ruby-faker
+         ruby-simplecov))
+  (propagated-inputs
+   (list ruby-lino ruby-immutable-struct))
+  (synopsis "Ruby wrapper around the Terraform command line interface")
+  (description
+   "This package provides a Ruby wrapper around the Terraform command line
+interface so that Terraform can be more easily invoked from Ruby code.")
+  (home-page "https://github.com/infrablocks/ruby_terraform")
+  (license license:expat)))
+
+(define-public ruby-pstree
+  (package
+    (name "ruby-pstree")
+    (version "0.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "pstree" version))
+              (sha256
+               (base32
+                "0ld3ng37y92kv9vqnachw1l3n07hsc8hrnjs9d840liw0mysf1vp"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list ruby-gem-hadar bundler))
+    (synopsis "Create a process tree data structure")
+    (description
+     "This library uses the output of the @code{ps} command to create a
+process tree data structure for the current host.")
+    (home-page "https://github.com/flori/pstree")
+    ;; There is no mention of the "or later" clause.
+    (license license:gpl2)))
+
+(define-public ruby-psych
+  (package
+    (name "ruby-psych")
+    (version "5.1.0")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ruby/psych")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0m3668y79jcv2h9p7w74awwdyz13rpfr24w4nzh3iz96kxwssz83"))))
+    (build-system ruby-build-system)
+    (inputs
+     (list libyaml))
+    (native-inputs
+     (list ruby-rake-compiler))
+    (synopsis "Ruby YAML parser and emitter")
+    (description
+     "Psych is a YAML parser and emitter.  Psych leverages libyaml for its
+YAML parsing and emitting capabilities.  In addition to wrapping libyaml,
+Psych also knows how to serialize and de-serialize most Ruby objects to and
+from the YAML format.")
+    (home-page "https://github.com/ruby/psych")
+    (license license:expat)))
+
+(define-public ruby-psych-3
+  (package
+    (inherit ruby-psych)
+    (version "3.3.4")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ruby/psych")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name "ruby-psych" version))
+              (sha256
+               (base32
+                "11f7bxbhaj5697izap7hfbiln6lfk5cks78a498mkyhs2ylhl0fc"))))
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "bundle" "exec" "rake" "default")))))))))
+
+(define-public ruby-utils
+  (package
+    (name "ruby-utils")
+    (version "0.9.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "utils" version))
+              (sha256
+               (base32
+                "196zhgcygrnx09bb9mh22qas03rl9avzx8qs0wnxznpin4pffwcl"))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     (list ruby-tins ruby-term-ansicolor ruby-pstree ruby-pry-editline))
+    (native-inputs
+     (list ruby-gem-hadar bundler))
+    (synopsis "Command line tools for working with Ruby")
+    (description
+     "This package provides assorted command line tools that may be useful
+when working with Ruby code.")
+    (home-page "https://github.com/flori/utils")
+    ;; There is no mention of the "or later" clause.
+    (license license:gpl2)))
+
+(define-public ruby-jaro-winkler
+  (package
+    (name "ruby-jaro-winkler")
+    (version "1.5.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "jaro_winkler" version))
+       (sha256
+        (base32 "1y8l6k34svmdyqxya3iahpwbpvmn3fswhwsvrz0nk1wyb8yfihsh"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f))                    ; no included tests
+    (synopsis "Ruby implementation of Jaro-Winkler distance algorithm")
+    (description
+     "@code{jaro_winkler} is an implementation of Jaro-Winkler distance
+algorithm.  It is written as a C extension and will fallback to a pure Ruby
+implementation on platforms where this is unsupported.")
+    (home-page "https://github.com/tonytonyjan/jaro_winkler")
+    (license license:expat)))
+
+(define-public ruby-json-pure
+  (package
+    (name "ruby-json-pure")
+    (version "2.6.3")
+    (source
+     (origin
+       ;; For tests
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/flori/json.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0551269c98a07m6bl594syh5vknrm3c636a4dxis9jpsb7vf7lfx"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'fix-rakefile
+            (lambda _
+              (substitute* "Rakefile"
+                ;; Since this is not a git repository, do not call 'git'.
+                (("`git ls-files`") "`find . -type f |sort`")))))))
+    (native-inputs
+     (list bundler ragel ruby-simplecov ruby-test-unit which))
+    (synopsis "JSON implementation in pure Ruby")
+    (description
+     "This package provides a JSON implementation written in pure Ruby.")
+    (home-page "https://flori.github.io/json/")
+    (license license:ruby)))
+
+(define-public ruby-jwt
+  (package
+    (name "ruby-jwt")
+    (version "2.7.1")
+    (source
+     (origin
+       ;; For tests
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/jwt/ruby-jwt")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "12ss6knfis6a6a41qndalnlvq3yykhpg6igzll8qyssnnwi9zdw7"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:test-target "test"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'remove-unnecessary-dependencies
+            (lambda _
+              (substitute* "ruby-jwt.gemspec"
+                (("spec\\.add_development_dependency 'appraisal'") "")
+                (("spec\\.add_development_dependency 'simplecov'") ""))
+              (substitute* "Gemfile"
+                (("gem 'rubocop'.*") ""))
+              (substitute* "Rakefile"
+                (("require 'rubocop/rake_task'") "")
+                (("RuboCop::RakeTask\\.new\\(:rubocop\\)") ""))
+              (substitute* "spec/spec_helper.rb"
+                (("require 'simplecov.*") "\n")
+                ;; Use [].each to disable running the SimpleCov configuration
+                ;; block
+                (("SimpleCov\\.configure") "[].each")
+                (("require 'codeclimate-test-reporter'") "")
+                (("require 'codacy-coverage'") "")
+                (("Codacy::Reporter\\.start") "")))))))
+    (native-inputs
+     (list bundler ruby-rspec ruby-rbnacl))
+    (synopsis "Ruby implementation of the JSON Web Token standard")
+    (description
+     "This package provides a pure Ruby implementation of the RFC 7519 OAuth
+@acronym{JWT, JSON Web Token} standard.")
+    (home-page "https://github.com/jwt/ruby-jwt")
+    (license license:expat)))
+
+;; Even though this package only provides bindings for a Mac OSX API it is
+;; required by "ruby-listen" at runtime.
+(define-public ruby-rb-fsevent
+  (package
+    (name "ruby-rb-fsevent")
+    (version "0.10.3")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "rb-fsevent" version))
+              (sha256
+               (base32
+                "1lm1k7wpz69jx7jrc92w3ggczkjyjbfziq5mg62vjnxmzs383xx8"))))
+    (build-system ruby-build-system)
+    ;; Tests need "guard-rspec", which needs "guard".  However, "guard" needs
+    ;; "listen", which needs "rb-fsevent" at runtime.
+    (arguments `(#:tests? #f))
+    (synopsis "FSEvents API with signals catching")
+    (description
+     "This library provides Ruby bindings for the Mac OSX FSEvents API.")
+    (home-page "https://rubygems.org/gems/rb-fsevent")
+    (license license:expat)))
+
+(define-public ruby-listen
+  (package
+    (name "ruby-listen")
+    (version "3.8.0")
+    (source
+     (origin
+       ;; The gem does not include a Rakefile, so fetch from the Git
+       ;; repository.
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/guard/listen")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1skkglml094dw1xr4742in1rwwa84ld0mz4nkw6qa8pwhx48x2n5"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:test-target "spec"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'fix-files-in-gemspec
+            (lambda _
+              (substitute* "listen.gemspec"
+                (("`git ls-files -z`")
+                 "`find . -type f -printf '%P\\\\0' |sort -z`"))))
+          (add-before 'check 'remove-unnecessary-dependencies'
+            (lambda _
+              (substitute* "Rakefile"
+                ;; Rubocop is for code linting, and is unnecessary for running
+                ;; the tests.
+                ((".*rubocop.*") "")))))))
+    (native-inputs
+     (list bundler ruby-rspec))
+    (inputs
+     (list ;; ruby-thor is used for the command line interface, and is referenced
+           ;; in the wrapper, and therefore just needs to be an input.
+           ruby-thor))
+    (propagated-inputs
+     (list ruby-rb-fsevent ruby-rb-inotify))
+    (synopsis "Listen to file modifications")
+    (description "The Listen gem listens to file modifications and notifies
+you about the changes.")
+    (home-page "https://github.com/guard/listen")
+    (license license:expat)))
+
+(define-public ruby-loofah
+  (package
+    (name "ruby-loofah")
+    (version "2.21.3")
+    (home-page "https://github.com/flavorjones/loofah")
+    (source
+     (origin
+       ;; Build from git because the gem lacks tests.
+       (method git-fetch)
+       (uri (git-reference (url home-page)
+                           (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1lh7cf56y1b0h090ahphvz7grq581phsamdl0rq59y0q9bqwrhg0"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list ruby-hoe ruby-hoe-markdown ruby-rr))
+    (propagated-inputs
+     (list ruby-nokogiri ruby-crass))
+    (synopsis "Ruby library for manipulating and transforming HTML/XML")
+    (description
+     "Loofah is a general library for manipulating and transforming HTML/XML
+documents and fragments.  It's built on top of Nokogiri and libxml2.")
+    (license license:expat)))
+
+(define-public ruby-crass
+  (package
+    (name "ruby-crass")
+    (version "1.0.6")
+    (home-page "https://github.com/rgrove/crass")
+    (source (origin
+              ;; The gem does not contain tests, so pull from git.
+              (method git-fetch)
+              (uri (git-reference
+                    (url home-page)
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1gbsb81psgb6xhnwpx4s409jc0mk0gijh039sy5xyi8jpaaadp40"))))
+    (build-system ruby-build-system)
+    (synopsis "Pure Ruby CSS parser")
+    (description
+     "Crass is a pure Ruby CSS parser based on the CSS Syntax Level 3 spec.")
+    (license license:expat)))
+
+;;; The ruby-nokogumbo package has been absorbed into ruby-nokogiri.
+(define-public ruby-nokogumbo
+  (deprecated-package "ruby-nokogumbo" ruby-nokogiri))
+
+(define-public ruby-samovar
+  (package
+    (name "ruby-samovar")
+    (version "2.1.4")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ioquatix/samovar")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "05pc5xlbv44anx0sfqssh0xhxg297bvl5slsl7k1vnka4k5fhax6"))))
+    (build-system ruby-build-system)
+    (native-inputs (list ruby-covered ruby-rspec))
+    (propagated-inputs (list ruby-console ruby-mapping))
+    (synopsis "Flexible option parser for Ruby")
+    (description "Samovar is a modern framework for building command-line
+tools and applications.  It provides a declarative class-based DSL for
+building command-line parsers that include automatic documentation generation.
+It helps you keep your functionality clean and isolated where possible.")
+    (home-page "https://github.com/ioquatix/samovar")
+    (license license:expat)))
+
+(define-public ruby-sanitize
+  (package
+    (name "ruby-sanitize")
+    (version "6.0.0")
+    (home-page "https://github.com/rgrove/sanitize")
+    (source (origin
+              (method git-fetch)
+              ;; The gem does not include the Rakefile, so we download the
+              ;; source from Github.
+              (uri (git-reference
+                    (url home-page)
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0p1a28vx95vscy9xzzyyddzgb9496x42a5i2ka39cpxbl5f3gkl0"))))
+    (build-system ruby-build-system)
+    (propagated-inputs (list ruby-crass ruby-nokogiri))
+    (native-inputs (list ruby-minitest))
+    (synopsis "Whitelist-based HTML and CSS sanitizer")
+    (description
+     "Sanitize is a whitelist-based HTML and CSS sanitizer.  Given a list of
+acceptable elements, attributes, and CSS properties, Sanitize will remove all
+unacceptable HTML and/or CSS from a string.")
+    (license license:expat)))
+
+(define-public ruby-sync
+  (package
+    (name "ruby-sync")
+    (version "0.5.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "sync" version))
+        (sha256
+         (base32
+          "1z9qlq4icyiv3hz1znvsq1wz2ccqjb1zwd6gkvnwg6n50z65d0v6"))))
+    (build-system ruby-build-system)
+    (synopsis "Ruby module with a two-phase lock and counter")
+    (description "This package provides a Ruby module that provides a two-phase
+lock with a counter.")
+    (home-page "https://github.com/ruby/sync")
+    (license license:bsd-2)))
+
+(define-public ruby-oj
+  (package
+    (name "ruby-oj")
+    (version "3.13.9")
+    (source
+     (origin
+       (method git-fetch)
+       ;; Version on rubygems.org does not contain Rakefile, so download from
+       ;; GitHub instead.
+       (uri (git-reference
+              (url "https://github.com/ohler55/oj")
+              (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0a24zd28y58nyhjxgrpn2k9p72vzj3zbmdrcsbhwbdycj7nn9fpd"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:test-target "test_all"
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'disable-bundler
+           (lambda _
+             (substitute* "Rakefile"
+               (("Bundler\\.with_clean_env") "1.times")
+               (("bundle exec ") "")))))))
+    (native-inputs
+     (list bundler ruby-rspec ruby-rake-compiler))
+    (synopsis "JSON parser for Ruby optimized for speed")
+    (description
+     "Oj is a JSON parser and generator for Ruby, where the encoding and
+decoding of JSON is implemented as a C extension to Ruby.")
+    (home-page "https://www.ohler.com/oj/")
+    (license (list license:expat     ; Ruby code
+                   license:bsd-3)))) ; extension code
+
+(define-public ruby-ox
+  (package
+    (name "ruby-ox")
+    (version "2.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "ox" version))
+       (sha256
+        (base32
+         "0fmk62b1h2i79dfzjj8wmf8qid1rv5nhwfc17l489ywnga91xl83"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; no tests
+    (synopsis "Optimized XML library for Ruby")
+    (description
+     "Optimized XML (Ox) is a fast XML parser and object serializer for Ruby
+written as a native C extension.  It was designed to be an alternative to
+Nokogiri and other Ruby XML parsers for generic XML parsing and as an
+alternative to Marshal for Object serialization.")
+    (home-page "https://www.ohler.com/ox")
+    (license license:expat)))
+
+(define-public ruby-redcloth
+  (package
+    (name "ruby-redcloth")
+    (version "4.3.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "RedCloth" version))
+              (sha256
+               (base32
+                "0m9dv7ya9q93r8x1pg2gi15rxlbck8m178j1fz7r5v6wr1avrrqy"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f ; no tests
+       #:phases
+       (modify-phases %standard-phases
+         ;; Redcloth has complicated rake tasks to build various versions for
+         ;; multiple targets using RVM.  We don't want this so we just use the
+         ;; existing gemspec.
+         (replace 'build
+          (lambda _
+            (invoke "gem" "build" "redcloth.gemspec"))))))
+    (native-inputs
+     `(("bundler" ,bundler)
+       ("ruby-diff-lcs" ,ruby-diff-lcs)
+       ("ruby-rspec-2" ,ruby-rspec-2)))
+    (synopsis "Textile markup language parser for Ruby")
+    (description
+     "RedCloth is a Ruby parser for the Textile markup language.")
+    (home-page "http://redcloth.org")
+    (license license:expat)))
+
+(define-public ruby-pg
+  (let ((commit "378b7a35c12292625460ef2f33373de7114bf255")
+        (revision "0"))
+  (package
+    (name "ruby-pg")
+    (version (git-version "1.5.9" revision commit))
+    (home-page "https://github.com/ged/ruby-pg")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url home-page)
+             (commit commit)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1aq6kakyghgbb4yykxxl9ziaaa7jbdbyc7vz6avyxhlby1jkj0m8"))
+       (patches
+        (search-patches "ruby-pg-fix-connect-timeout.patch"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:test-target "spec"
+      #:phases
+      #~(modify-phases %standard-phases
+               (add-before 'build 'compile
+                 (lambda _
+                   (invoke "rake" "compile")))
+               ;; Some tests rely on postgresql_lib_path.rb, but it is not
+               ;; available until the gem is installed.  Run tests after
+               ;; installing to work around it.
+               (delete 'check)
+               (add-after 'install 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (let ((new-gem (string-append #$output
+                                                 "/lib/ruby/vendor_ruby")))
+                     (setenv "GEM_PATH"
+                             (string-append (getenv "GEM_PATH") ":" new-gem))
+                     (when tests?
+                       (invoke "rspec"))))))))
+    (native-inputs (list ruby-rake-compiler ruby-hoe ruby-rspec))
+    (inputs (list postgresql))
+    (synopsis "Ruby interface to PostgreSQL")
+    (description "Pg is the Ruby interface to the PostgreSQL RDBMS.  It works
+with PostgreSQL 9.3 and later.")
+    (license license:ruby))))
+
+(define-public ruby-byebug
+  (package
+    (name "ruby-byebug")
+    (version "11.1.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/deivid-rodriguez/byebug")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0vyy3k2s7dcndngj6m8kxhs1vxc2c93dw8b3yyand3srsg9ffpij"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; Remove wrappers that try to setup a bundle environment.
+           (with-directory-excursion "bin"
+             (for-each delete-file '("bundle" "rake" "rubocop"))
+             ;; ruby-minitest doesn't come with a launcher, so fix the one
+             ;; provided.
+             (substitute* "minitest"
+               (("load File\\.expand_path\\(\"bundle\".*") "")
+               (("require \"bundler/setup\".*") "")))))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'sanitize-dependencies
+            (lambda _
+              (substitute* "Rakefile"
+                ((".*chandler/tasks.*") ""))))
+          (add-after 'unpack 'skip-tmp-path-sensitive-test
+            (lambda _
+              (substitute* "test/commands/where_test.rb"
+                (("unless /cygwin\\|mswin\\|mingw\\|darwin/.*")
+                 "unless true\n"))))
+          (add-before 'build 'compile
+            (lambda _
+              (invoke "rake" "compile")))
+          (add-before 'check 'patch-tests
+            (lambda _
+              ;; srand': no implicit conversion of nil into Integer (TypeError)
+              (delete-file "test/minitest_runner_test.rb")
+              ;; Expects 5, gets 162. From a file containing ~10 lines.
+              (substitute* "test/commands/finish_test.rb"
+                (("test_finish_inside_autoloaded_files")
+                 "finish_inside_autoloaded_files"))))
+          (add-before 'check 'set-home
+            (lambda _
+              (setenv "HOME" (getcwd)))))))
+    (native-inputs
+     (list bundler
+           ruby-minitest
+           ruby-pry
+           ruby-rake-compiler
+           ruby-rubocop
+           ruby-yard))
+    (synopsis "Debugger for Ruby 2")
+    (description "Byebug is a Ruby 2 debugger implemented using the Ruby 2
+TracePoint C API for execution control and the Debug Inspector C API for call
+stack navigation.  The core component provides support that front-ends can
+build on.  It provides breakpoint handling and bindings for stack frames among
+other things and it comes with a command line interface.")
+    (home-page "https://github.com/deivid-rodriguez/byebug")
+    (license license:bsd-2)))
+
+(define-public ruby-netrc
+  (package
+    (name "ruby-netrc")
+    (version "0.11.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "netrc" version))
+              (sha256
+               (base32
+                "0gzfmcywp1da8nzfqsql2zqi648mfnx6qwkig3cv36n9m0yy676y"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           ;; There is no Rakefile and minitest can only run one file at once,
+           ;; so we have to iterate over all test files.
+           (lambda _
+             (for-each (lambda (file)
+                         (invoke "ruby" "-Itest" file))
+                       (find-files "./test" "test_.*\\.rb"))))
+         (add-before 'check 'patch-tests-for-newer-ruby
+           (lambda _
+             (substitute* "test/test_netrc.rb"
+               (("Dir.pwd, '.netrc'") "Netrc.home_path, '.netrc'")))))))
+    (native-inputs
+     (list ruby-minitest))
+    (synopsis "Library to read and update netrc files")
+    (description
+     "This library can read and update netrc files, preserving formatting
+including comments and whitespace.")
+    (home-page "https://github.com/geemus/netrc")
+    (license license:expat)))
+
+(define-public ruby-unf-ext
+  (package
+    (name "ruby-unf-ext")
+    (version "0.0.8.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "unf_ext" version))
+              (sha256
+               (base32
+                "1yj2nz2l101vr1x9w2k83a0fag1xgnmjwp8w8rw4ik2rwcz65fch"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'build 'build-ext
+           (lambda _ (invoke "rake" "compile:unf_ext")))
+         (add-before 'check 'lose-rake-compiler-dock-dependency
+           (lambda _
+             ;; rake-compiler-dock is listed in the gemspec, but only
+             ;; required when cross-compiling.
+             (substitute* "unf_ext.gemspec"
+               ((".*rake-compiler-dock.*") "")))))))
+    (native-inputs
+     (list bundler ruby-rake-compiler ruby-test-unit))
+    (synopsis "Unicode normalization form support library")
+    (description
+     "This package provides unicode normalization form support for Ruby.")
+    (home-page "https://github.com/knu/ruby-unf_ext")
+    (license license:expat)))
+
+(define-public ruby-tdiff
+  ;; Use a newer than released snapshot so that rspec-2 is not required.
+  (let ((commit "b662a6048f08abc45c1a834e5f34dd1c662935e2"))
+    (package
+      (name "ruby-tdiff")
+      (version (string-append "0.3.3-1." (string-take commit 8)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/postmodern/tdiff")
+                      (commit commit)))
+                (file-name (string-append name "-" version "-checkout"))
+                (sha256
+                 (base32
+                  "0n3gq8rx49f7ln6zqlshqfg2mgqyy30rsdjlnki5mv307ykc7ad4"))))
+      (build-system ruby-build-system)
+      (native-inputs
+       (list ruby-rspec ruby-yard/minimal ruby-rubygems-tasks))
+      (synopsis "Calculate the differences between two tree-like structures")
+      (description
+       "This library provides functions to calculate the differences between two
+tree-like structures.  It is similar to Ruby's built-in @code{TSort} module.")
+      (home-page "https://github.com/postmodern/tdiff")
+      (license license:expat))))
+
+(define-public ruby-nokogiri-diff
+  ;; Use a newer than released snapshot so that rspec-2 is not required.
+  (let ((commit "a38491e4d8709b7406f2cae11a50226d927d06f5"))
+    (package
+      (name "ruby-nokogiri-diff")
+      (version (string-append "0.2.0-1." (string-take commit 8)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/postmodern/nokogiri-diff")
+                      (commit commit)))
+                (file-name (string-append name "-" version "-checkout"))
+                (sha256
+                 (base32
+                  "1ah2sfjh9n1p0ln2wkqzfl448ml7j4zfy6dhp1qgzq2m41php6rf"))))
+      (build-system ruby-build-system)
+      (propagated-inputs
+       (list ruby-tdiff
+             ruby-nokogiri))
+      (native-inputs
+       (list ruby-rspec ruby-yard/minimal ruby-rubygems-tasks))
+      (synopsis "Calculate the differences between two XML/HTML documents")
+      (description
+       "@code{Nokogiri::Diff} adds the ability to calculate the
+differences (added or removed nodes) between two XML/HTML documents.")
+      (home-page "https://github.com/postmodern/nokogiri-diff")
+      (license license:expat))))
+
+(define-public ruby-racc
+  (package
+    (name "ruby-racc")
+    (version "1.5.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "racc" version))
+       (sha256
+        (base32
+         "178k7r0xn689spviqzhvazzvxfq6fyjldxb3ywjbgipbfi4s8j1g"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f))            ; Fails while parsing test instructions.
+    (native-inputs
+     (list ruby-hoe ruby-rake-compiler))
+    (synopsis "LALR(1) parser generator for Ruby")
+    (description
+     "Racc is a LALR(1) parser generator.  It is written in Ruby itself, and
+generates Ruby program.")
+    (home-page "https://i.loveruby.net/en/projects/racc/")
+    (license (list
+              ;; Generally licensed under the LGPL2.1, and some files also
+              ;; available under the same license as Ruby.
+              license:lgpl2.1
+              license:ruby))))
+
+(define-public ruby-rack
+  (package
+    (name "ruby-rack")
+    ;; Do not upgrade to version 3, as Rails doesn't support it yet.
+    (version "2.2.7")
+    (source
+     (origin
+       (method git-fetch)               ;for tests
+       (uri (git-reference
+             (url "https://github.com/rack/rack")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "02r41fr61x0jfhraizc6bsgs40p8mlpvnzix71zwmcvibg384ify"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'check 'fix-tests
+            (lambda _
+              ;; This test fails in the build environment (and passes outside
+              ;; of it).
+              (substitute* "test/spec_files.rb"
+                (("res.body.must_equal expected_body") ""))
+              ;; A few of the tests use the length of a file on disk for
+              ;; Content-Length and Content-Range headers.  However, this file
+              ;; has a shebang in it which an earlier phase patches, growing
+              ;; the file size from 193 to 239 bytes when the store prefix is
+              ;; "/gnu/store".
+              (let ((size-diff (- (string-length (which "ruby"))
+                                  (string-length "/usr/bin/env ruby"))))
+                (substitute* '("test/spec_files.rb")
+                  (("208" bytes)
+                   (number->string (+ (string->number bytes) size-diff)))
+                  (("bytes(.)22-33" all delimiter)
+                   (string-append "bytes"
+                                  delimiter
+                                  (number->string (+ 22 size-diff))
+                                  "-"
+                                  (number->string (+ 33 size-diff)))))))))))
+    (native-inputs
+     (list ruby-minitest
+           ruby-minitest-global-expectations
+           ruby-webrick))
+    (synopsis "Unified web application interface for Ruby")
+    (description "Rack provides a minimal, modular and adaptable interface for
+developing web applications in Ruby.  By wrapping HTTP requests and responses,
+it unifies the API for web servers, web frameworks, and software in between
+into a single method call.")
+    (home-page "https://github.com/rack/rack")
+    (license license:expat)))
+
+(define-public ruby-rack-next
+  (package
+    (inherit ruby-rack)
+    (name "ruby-rack")
+    (version "3.0.7")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/rack/rack")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0msf14655nfcq1kgmib6932lgzm9nw3nb0m3c7nh6nj4sx30yxfr"))))
+    (arguments '())))
+
+(define-public ruby-rackup
+  (package
+    (name "ruby-rackup")
+    (version "2.1.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/rack/rackup")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "19b7sy700zjwaw7x47qpxvhnnz5hrp5bhrxfyljgagrli824dajy"))))
+    (build-system ruby-build-system)
+    (native-inputs (list ruby-minitest-global-expectations))
+    (inputs (list ruby-rack-next ruby-webrick))
+    (synopsis "Command line interface (CLI) for running for Rack applications")
+    (description "This package provides a command line interface for running
+for Rack applications.")
+    (home-page "https://github.com/rack/rackup")
+    (license license:expat)))
+
+(define-public ruby-rackup-1
+  (package
+    (inherit ruby-rackup)
+    (name "ruby-rackup")
+    (version "1.0.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/rack/rackup")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1xdfxsz7jx2gwfq212y9mca6q0i5s7kyqbfcscy1315awg57ynyp"))))))
+
+(define-public ruby-rack-cache
+  (package
+    (name "ruby-rack-cache")
+    (version "1.13.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "rack-cache" version))
+              (sha256
+               (base32
+                "1cqpax628h2mhnsjfg91c3klxwx2pkvaj061cisb0saqa99b0jgm"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      ;; The test suite depends on ruby-memcached, which is not available in
+      ;; Guix and bundles a very dated copy of memcached (undesirable).
+      #:tests? #f))
+    (propagated-inputs (list ruby-rack))
+    (synopsis "Component to enable HTTP caching for Rack-based applications")
+    (description "Rack::Cache is suitable as a drop-in component to enable
+HTTP caching for Rack-based applications that produce freshness (Expires,
+Cache-Control) and/or validation (Last-Modified, ETag) information.")
+    (home-page "https://github.com/rtomayko/rack-cache")
+    (license license:expat)))
+
+(define-public ruby-rack-test
+  (package
+    (name "ruby-rack-test")
+    (version "2.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "rack-test" version))
+       (sha256
+        (base32
+         "1ysx29gk9k14a14zsp5a8czys140wacvp91fja8xcja0j1hzqq8c"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; Disable tests because of circular dependencies: requires sinatra,
+     ;; which requires rack-protection, which requires rack-test.  Instead
+     ;; simply require the library.
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "ruby" "-Ilib" "-r" "rack/test")))))))
+    (propagated-inputs
+     (list ruby-rack))
+    (synopsis "Testing API for Rack applications")
+    (description
+     "Rack::Test is a small, simple testing API for Rack applications.  It can
+be used on its own or as a reusable starting point for Web frameworks and
+testing libraries to build on.")
+    (home-page "https://github.com/rack/rack-test")
+    (license license:expat)))
+
+(define-public ruby-rack-session
+  (package
+    (name "ruby-rack-session")
+    ;; Stay on version 1 until all the rack users such as Rails can use rack 3
+    ;; (rack-session 2 requires rack 3).
+    (version "1.0.1")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/rack/rack-session")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0rv955wd7ckp5jgy5c229wmajh48jpcy8s0iv5i8ma61wf7qw0i1"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list ruby-minitest-global-expectations
+           ruby-minitest-sprint))
+    (propagated-inputs
+     (list ruby-rack))
+    (synopsis "Session management for Rack")
+    (description "This package provides a session management implementation
+for Rack.")
+    (home-page "https://github.com/rack/rack-session")
+    (license license:expat)))
+
+(define-public ruby-rack-protection
+  (package
+    (name "ruby-rack-protection")
+    (version "3.0.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "rack-protection" version))
+       (sha256
+        (base32
+         "1a12m1mv8dc0g90fs1myvis8vsgr427k1arg1q4a9qlfw6fqyhis"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(;; Tests missing from the gem.
+       #:tests? #f))
+    (propagated-inputs
+     (list ruby-rack))
+    (native-inputs
+     (list bundler ruby-rspec-2 ruby-rack-test))
+    (synopsis "Rack middleware that protects against typical web attacks")
+    (description "Rack middleware that can be used to protect against typical
+web attacks.  It can protect all Rack apps, including Rails.  For instance, it
+protects against cross site request forgery, cross site scripting,
+clickjacking, directory traversal, session hijacking and IP spoofing.")
+    (home-page "https://github.com/sinatra/sinatra/tree/master/rack-protection")
+    (license license:expat)))
+
+(define-public ruby-rainbow
+  (package
+    (name "ruby-rainbow")
+    (version "3.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "rainbow" version))
+       (sha256
+        (base32
+         "0bb2fpjspydr6x0s8pn1pqkzmxszvkfapv0p4627mywl7ky4zkhk"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; Run rspec directly, to avoid requiring Rubocop which is used from
+         ;; the Rakefile.
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "rspec")))))))
+    (native-inputs
+     (list bundler ruby-rspec))
+    (synopsis "Colorize printed text on ANSI terminals")
+    (description
+     "@code{rainbow} provides a string presenter object to colorize strings by
+wrapping them in ANSI escape codes.")
+    (home-page "https://github.com/sickill/rainbow")
+    (license license:expat)))
+
+(define-public ruby-rr
+  (package
+    (name "ruby-rr")
+    (version "1.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "rr" version))
+       (sha256
+        (base32
+         "1n9g78ba4c2zzmz8cdb97c38h1xm0clircag00vbcxwqs4dq0ymp"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; test files not included
+    (native-inputs
+     (list bundler ruby-rspec))
+    (synopsis "Ruby test double framework")
+    (description
+     "RR is a test double framework that features a rich selection of double
+techniques and a terse syntax.")
+    (home-page "https://rr.github.io/rr/")
+    (license license:expat)))
+
+(define-public ruby-rest-client
+  (package
+    (name "ruby-rest-client")
+    (version "2.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "rest-client" version))
+       (sha256
+        (base32
+         "1qs74yzl58agzx9dgjhcpgmzfn61fqkk33k1js2y5yhlvc5l19im"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      ;; TODO Some tests are currently broken
+      #:tests? #f
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'check 'remove-unnecessary-development-dependencies
+            (lambda _
+              (substitute* "rest-client.gemspec"
+                ;; Remove rubocop as it's unused. Rubocop also indirectly
+                ;; depends on this package through ruby-parser and ruby-ast so
+                ;; this avoids a dependency loop.
+                ((".*rubocop.*") "\n")
+                ;; Remove pry as it's unused, it's a debugging tool
+                ((".*pry.*") "\n")
+                ;; Remove an unnecessarily strict rdoc dependency
+                ((".*rdoc.*") "\n"))))
+          (add-before 'check 'delete-network-dependent-tests
+            (lambda _
+              (delete-file "spec/integration/request_spec.rb")
+              (delete-file "spec/integration/httpbin_spec.rb")))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "rspec")))))))
+    (propagated-inputs
+     (list ruby-http-accept-1
+           ruby-http-cookie
+           ruby-mime-types
+           ruby-netrc))
+    (native-inputs
+     (list bundler
+           ruby-webmock-2
+           ruby-rspec))
+    (synopsis "Simple HTTP and REST client for Ruby")
+    (description
+     "@code{rest-client} provides a simple HTTP and REST client for Ruby,
+inspired by the Sinatra microframework style of specifying actions:
+@code{get}, @code{put}, @code{post}, @code{delete}.")
+    (home-page "https://github.com/rest-client/rest-client")
+    (license license:expat)))
+
+(define-public ruby-rubocop-ast
+  (package
+    (name "ruby-rubocop-ast")
+    (version "1.37.0")
+    (source
+     (origin
+       (method git-fetch)               ;no test suite in distributed gem
+       (uri (git-reference
+             (url "https://github.com/rubocop/rubocop-ast")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1ww1vxcx6qaih4g68mrbq4xlgrqbv8w7cqxdaz629sazpw2hkycs"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:test-target "spec"
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'relax-dependencies
+                    (lambda _
+                      (substitute* "Gemfile"
+                        (("gem 'simplecov', '~> 0.10', '< 0.18'")
+                         "gem 'simplecov', '~> 0.10'"))))
+                  (add-before 'build 'generate-lexer
+                    (lambda _
+                      (setenv "RUBOCOP_VERSION" "none")
+                      (invoke "rake" "generate")))
+                  (replace 'replace-git-ls-files
+                    (lambda _
+                      (substitute* "rubocop-ast.gemspec"
+                        (("`git ls-files(.*)`" _ files)
+                         (format #f "`find ~a -type f| sort`" files))))))))
+    (native-inputs
+     (list ruby-bump
+           ruby-oedipus-lex
+           ruby-prism
+           ruby-racc
+           ruby-rake
+           ruby-rspec
+           ruby-simplecov))
+    (propagated-inputs
+     (list ruby-parser))
+    (synopsis "RuboCop's AST extensions and NodePattern functionality")
+    (description "Rubocop::AST extends @code{ruby-parser} with classes used
+by RuboCop to deal with Ruby's Abstract Syntax Tree (AST), in particular:
+@itemize
+@item @code{RuboCop::AST::Node}
+@item @code{RuboCop::AST::NodePattern}
+@end itemize")
+    (home-page "https://rubocop.org/")
+    (license license:expat)))
+
+(define-public ruby-rexml
+  (package
+    (name "ruby-rexml")
+    (version "3.2.5")
+    (source
+     (origin
+       (method git-fetch)               ;no tests in distributed gem
+       (uri (git-reference
+             (url "https://github.com/ruby/rexml")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "13n6vaa80drqic2wri4q6k22qzvsn683vp5s8c9dllil6x04kn0x"))))
+    (build-system ruby-build-system)
+    (synopsis "XML toolkit for Ruby")
+    (description "Inspired by Electric XML library for Java, REXML aims to be
+easy-to-use API, small and fast.  It supports both tree and stream document
+parsing.")
+    (home-page "https://github.com/ruby/rexml")
+    (license license:bsd-2)))
+
+(define-public ruby-character-set
+  (package
+    (name "ruby-character-set")
+    (version "1.4.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "character_set" version))
+        (sha256
+          (base32
+            "0affq9n77vwy897ri2zhmfinfagf37hcwwimrccy1bcxan9mj3h3"))))
+    (build-system ruby-build-system)
+    (arguments '(#:tests? #f))          ;avoid a cycle with ruby-regexp-parser
+    (synopsis "Ruby library to manipulate Unicode")
+    (description "CharacterSet is a C-extended Ruby library to work with sets
+of Unicode code points.  It can read and write these sets in various formats
+and implements the @code{stdlib} @code{Set} interface for them.  It also
+offers an alternate paradigm of @code{String} processing which grants much
+better performance than @code{Regexp} and @code{String} methods from the
+@code{stdlib} where applicable.  Many parts can be used independently, e.g.:
+@itemize
+@item @code{CharacterSet::Character}
+@item @code{CharacterSet::Parser}
+@item @code{CharacterSet::Writer}
+@item @code{RangeCompressor}
+@end itemize")
+    (home-page "https://github.com/jaynetics/character_set")
+    (license license:expat)))
+
+(define-public ruby-range-compressor
+  (package
+    (name "ruby-range-compressor")
+    (version "1.2.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+              (url "https://github.com/janosch-x/range_compressor")
+              (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32
+          "1zmc44si5ac2h7r1x4f1j8z5yr6wz528c7dssh0g70fmczs3pfga"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:test-target "spec"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'extract-gemspec 'strip-version-requirements
+            (lambda _
+              (substitute* "range_compressor.gemspec"
+                (("(.*add_.*dependency '[_A-Za-z0-9-]+').*" _ stripped)
+                 (string-append stripped "\n"))))))))
+    (native-inputs
+     (list ruby-rspec
+           ruby-sorted-set))
+    (synopsis "Simple arrays of objects to arrays of ranges compressor")
+    (description "RangeCompresses is a tiny library that allows compressing
+arrays of objects into arrays of ranges.  For example, it can turn the
+following: @code{[1, 2, 3, 4, 6, 8, 9, 10]} into @code{[1..4, 6..6, 8..10]}.")
+    (home-page "https://github.com/janosch-x/range_compressor")
+    (license license:expat)))
+
+(define-public ruby-regexp-property-values
+  (let ((commit "03007a66c912949a7130b973cc0eca109c20811f")
+        (revision "1"))
+    (package
+      (name "ruby-regexp-property-values")
+      (version (git-version "1.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference              ;no test suite in distributed gem
+               (url "https://github.com/jaynetics/regexp_property_values")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1zsax784p16zdkf60lyq9z924zvsafhx9ckxx9srsgkyiqrifi1s"))))
+      (build-system ruby-build-system)
+      (arguments
+       '(#:test-target "default"))
+      (native-inputs
+       (list ruby-character-set ruby-rake ruby-rake-compiler
+             ruby-range-compressor ruby-rspec))
+      (synopsis "Inspect Ruby's regex engine property values")
+      (description "This small library lets you see which property values are
+supported by the regular expression engine of the Ruby version you are running
+and can directly read out their code point ranges.  In other words, it
+determines all supported values for @code{\\p{value}} expressions and what
+they match.")
+      (home-page "https://github.com/jaynetics/regexp_property_values")
+      (license license:expat))))
+
+(define-public ruby-regexp-parser
+  (package
+    (name "ruby-regexp-parser")
+    (version "2.6.0")
+    (source
+     (origin
+       (method git-fetch)               ;bin/test missing from gem
+       (uri (git-reference
+             (url "https://github.com/ammar/regexp_parser")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "07dx96gjvpa07dsdnzpwhhwc7qpxakjgws7d7wbnkbs20fyvx55x"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:test-target "default"
+       #:phases (modify-phases %standard-phases
+                  (add-before 'build 'compile-scanner.rb
+                    (lambda _
+                      (invoke "rake" "build")
+                      ;; XXX: This is needed otherwise the install
+                      ;; phase fails to delete the installed cached
+                      ;; gem file.
+                      (delete-file-recursively "pkg"))))))
+    (native-inputs
+     (list ragel ruby-ice-nine ruby-regexp-property-values ruby-rspec))
+    (synopsis "Regular expression parser library for Ruby")
+    (description "A Ruby gem for tokenizing, parsing, and transforming regular
+expressions.  It comprises the following components:
+@itemize
+@item A scanner/tokenizer based on Ragel,
+@item A lexer that produces a stream of token objects,
+@item A parser that produces a tree of Expression objects.
+@end itemize")
+    (home-page "https://github.com/ammar/regexp_parser")
+    (license license:expat)))
+
+(define-public ruby-test-queue
+  (package
+    (name "ruby-test-queue")
+    (version "0.4.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "test-queue" version))
+       (sha256
+        (base32
+         "0hvm3n1qrqxqilhqk4rjivw3gcrd08zz1i6am9qzg1ppjxv6f36f"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "rspec")))))))
+    (native-inputs
+     (list ruby-rspec))
+    (synopsis "Minitest/RSpec parallel test runner for CI environments")
+    (description "The test-queue module is a parallel test runner,
+built using a centralized queue to ensure optimal distribution of
+tests between workers.  It is specifically optimized for Continuous
+Integration (CI) environments: build statistics from each run are
+stored locally and used to sort the queue at the beginning of the next
+run.")
+    (home-page "https://github.com/tmm1/test-queue")
+    (license license:expat)))
+
+(define-public ruby-rubocop
+  (package
+    (name "ruby-rubocop")
+    ;; XXX: Also update ruby-rubocop/minimal in ruby-build.scm.
+    (version "1.68.0")
+    (source
+     (origin
+       (method git-fetch)               ;no tests in distributed gem
+       (uri (git-reference
+             (url "https://github.com/rubocop/rubocop")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0pfsrgkg2dhb6a2rknciqskgxgmb9kf48rvbkhay9n8n6m712v2w"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:test-target "default"
+       ;; TODO: Figure out why test hangs.
+       #:tests? ,(not (or (%current-target-system)
+                          (target-riscv64?)))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'set-home
+           (lambda _
+             (setenv "HOME" (getcwd))))
+         ;; Rubocop depends on itself for tests, directly and indirectly. By
+         ;; regenerating the TODO list we test rubocop against itself and
+         ;; forgo adjusting the test suite to our environment each release.
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (make-file-writable ".rubocop_todo.yml")
+               (invoke "./exe/rubocop" "--auto-gen-config")))))))
+    (native-inputs
+     (list ruby-pry
+           ruby-rake
+           ruby-rspec
+           ruby-rubocop-ast
+           ruby-rubocop-capybara-minimal
+           ruby-rubocop-factory-bot
+           ruby-rubocop/minimal
+           ruby-rubocop-performance-minimal
+           ruby-rubocop-rake-minimal
+           ruby-rubocop-rspec-minimal
+           ruby-simplecov
+           ruby-stackprof
+           ruby-test-queue
+           ruby-webmock
+           ruby-yard))
+    (propagated-inputs
+     (list ruby-json
+           ruby-language-server-protocol
+           ruby-parallel
+           ruby-parser
+           ruby-progressbar
+           ruby-rainbow
+           ruby-regexp-parser
+           ruby-rexml
+           ruby-rubocop-ast
+           ruby-unicode-display-width))
+    (synopsis "Ruby code style checking tool")
+    (description
+     "@code{rubocop} is a Ruby code style checking tool.  It aims to enforce
+the community-driven Ruby Style Guide.")
+    (home-page "https://github.com/rubocop/rubocop")
+    (license license:expat)))
+
+(define-public ruby-contest
+  (package
+    (name "ruby-contest")
+    (version "0.1.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "contest" version))
+       (sha256
+        (base32
+         "1p9f2292b7b0fbrcjswvj9v01z7ig5ig52328wyqcabgb553qsdf"))))
+    (build-system ruby-build-system)
+    (synopsis "Write declarative tests using nested contexts")
+    (description
+     "Contest allows writing declarative @code{Test::Unit} tests using nested
+contexts without performance penalties.")
+    (home-page "https://github.com/citrusbyte/contest")
+    (license license:expat)))
+
+(define-public ruby-creole
+  (package
+    (name "ruby-creole")
+    (version "0.5.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "creole" version))
+       (sha256
+        (base32
+         "00rcscz16idp6dx0dk5yi5i0fz593i3r6anbn5bg2q07v3i025wm"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list ruby-bacon))
+    (synopsis "Creole markup language converter")
+    (description
+     "Creole is a lightweight markup language and this library for converting
+creole to @code{HTML}.")
+    (home-page "https://github.com/minad/creole")
+    (license license:ruby)))
+
+(define-public ruby-middleware
+  (package
+    (name "ruby-middleware")
+    (version "0.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "middleware" version))
+       (sha256
+        (base32
+         "0703nkf2v371wqr41c04x5qid7ww45cxqv3hnlg07if3b3xrm9xl"))))
+    (build-system ruby-build-system)
+    (arguments '(#:tests? #f))          ;no test suite
+    (synopsis "Implementation of a middleware abstraction for Ruby")
+    (description "Middleware is a generalized implementation of a middleware
+abstraction for Ruby.")
+    (home-page "https://github.com/mitchellh/middleware")
+    (license license:expat)))
+
+(define-public ruby-benchmark-ips
+  (package
+    (name "ruby-benchmark-ips")
+    (version "2.12.0")
+    (source
+     (origin
+       (method git-fetch)               ;no tests in distributed gem
+       (uri (git-reference
+             (url "https://github.com/evanphx/benchmark-ips")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "19pa2a1lgjzrxcz6vxwfiq5qq337vr15bbbpc2mfwzljdlx5059s"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch
+            (lambda _
+              (substitute* "Gemfile"
+                (("gem 'rake'.*")
+                 "gem 'rake'"))
+              (substitute* "benchmark-ips.gemspec"
+                (("git ls-files -- examples lib")
+                 "find examples lib -type f | sort")))))))
+    (native-inputs
+     (list ruby-hoe))
+    (synopsis "Iterations per second enhancement for the Ruby Benchmark module")
+    (description "Benchmark-ips enhances the Ruby Benchmark module with the
+iterations per second count.  For short snippets of code, it can automatically
+figure out how many times to run the code to get interesting data.")
+    (home-page "https://github.com/evanphx/benchmark-ips")
+    (license license:expat)))
+
+(define-public ruby-ffi-rzmq-core
+  (package
+    (name "ruby-ffi-rzmq-core")
+    (version "1.0.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "ffi-rzmq-core" version))
+       (sha256
+        (base32
+         "0amkbvljpjfnv0jpdmz71p1i3mqbhyrnhamjn566w0c01xd64hb5"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+                  (add-after 'unpack 'patch-libzmq-search-path
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (let ((zeromq (assoc-ref inputs "zeromq")))
+                        (substitute* "lib/ffi-rzmq-core/libzmq.rb"
+                          (("/usr/local/lib")
+                           (string-append zeromq "/lib"))))))
+                  (replace 'check
+                    (lambda _
+                      (invoke "rspec"))))))
+    (native-inputs
+     (list ruby-rspec))
+    (inputs
+     (list zeromq))
+    (propagated-inputs (list ruby-ffi))
+    (synopsis "Low-level Ruby FFI wrapper for the ZeroMQ networking library")
+    (description "This library only provides the FFI wrapper for the ZeroMQ
+networking library.  It can be used to implement a Ruby API for the ZeroMQ
+library.")
+    (home-page "https://github.com/chuckremes/ffi-rzmq-core")
+    (license license:expat)))
+
+(define-public ruby-ffi-rzmq
+  (package
+    (name "ruby-ffi-rzmq")
+    (version "2.0.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "ffi-rzmq" version))
+       (sha256
+        (base32
+         "14a5kxfnf8l3ngyk8hgmk30z07aj1324ll8i48z67ps6pz2kpsrg"))))
+    (build-system ruby-build-system)
+    (arguments '(#:phases (modify-phases %standard-phases
+                            (replace 'check
+                              (lambda* (#:key tests? #:allow-other-keys)
+                                (when tests?
+                                  (invoke "rspec")))))))
+    (native-inputs
+     (list ruby-rspec))
+    (propagated-inputs
+     (list ruby-ffi-rzmq-core))
+    (synopsis "High-level Ruby wrapper for the ZeroMQ networking library")
+    (description "This library provides a high-level API that wraps the ZeroMQ
+networking library using the Ruby foreign function interface (FFI).  It is a
+pure Ruby wrapper, hence is compatible with any Ruby runtime that has support
+for FFI.")
+    (home-page "https://github.com/chuckremes/ffi-rzmq")
+    (license license:expat)))
+
+(define-public ruby-sawyer
+  (package
+    (name "ruby-sawyer")
+    (version "0.9.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "sawyer" version))
+       (sha256
+        (base32
+         "1jks1qjbmqm8f9kvwa81vqj39avaj9wdnzc531xm29a55bb74fps"))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     (list ruby-addressable ruby-faraday))
+    (synopsis "Experimental hypermedia agent for Ruby")
+    (description "Sawyer is an experimental hypermedia agent for Ruby built on
+top of Faraday.")
+    (home-page "https://github.com/lostisland/sawyer")
+    (license license:expat)))
+
+(define-public ruby-octokit
+  (package
+    (name "ruby-octokit")
+    (version "6.1.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/octokit/octokit.rb")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "02bcmh0b0v80cis1l80lhzxw8adb69xkz6qgg4m7qcmj3y5arwmk"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'remove-unnecessary-dependencies
+            (lambda _
+              (substitute* "spec/spec_helper.rb"
+                (("require 'pry-byebug'") "")))))))
+    (native-inputs
+     (list ruby-faraday-multipart
+           ruby-jwt
+           ruby-mime-types
+           ruby-multi-json
+           ruby-netrc
+           ruby-rbnacl
+           ruby-rspec
+           ruby-simplecov
+           ruby-webmock
+           ruby-vcr-expat))
+    (propagated-inputs (list ruby-faraday ruby-sawyer))
+    (synopsis "Ruby toolkit for the GitHub API")
+    (description "Octokit wraps the GitHub API in a flat API client that
+follows Ruby conventions and requires little knowledge of REST.")
+    (home-page "https://github.com/octokit/octokit.rb")
+    (license license:expat)))
+
+(define-public ruby-hashicorp-checkpoint
+  (package
+    (name "ruby-hashicorp-checkpoint")
+    (version "0.1.5")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "hashicorp-checkpoint" version))
+              (sha256
+               (base32
+                "1z6mwzvd7p2wqhmk07dwrhvm0ncgqm7pxn0pr2k025rwsspp9bsd"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:tests? #f)) ;; no need to test, useless outside HashiCorp anyway
+    (synopsis "Internal HashiCorp service to check version information")
+    (description "This package is probably useless outside of internal
+HashiCorp use.  It is open source for disclosure and because HashiCorp's open
+source projects must be able to link to it.")
+    (home-page "https://github.com/hashicorp/ruby-checkpoint")
+    (license license:mpl2.0)))
+
+(define-public ruby-vagrant-cloud
+  (package
+    (name "ruby-vagrant-cloud")
+    (version "3.1.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/hashicorp/vagrant_cloud")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0bnjd8b86lrgj5ar1l7pg5if95bv0sxa75mz7x2ikqyz6q8rmjb3"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:test-target "spec"))
+    (native-inputs (list ruby-rspec ruby-webmock))
+    (propagated-inputs (list ruby-excon ruby-log4r ruby-rexml))
+    (synopsis "Vagrant Cloud API library")
+    (description "This library provides the functionality to create, modify,
+and delete boxes, versions, and providers on HashiCorp's Vagrant Cloud.")
+    (home-page "https://github.com/hashicorp/vagrant_cloud")
+    (license license:asl2.0)))
+
+(define-public ruby-libvirt
+  (package
+    (name "ruby-libvirt")
+    (version "0.8.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "ruby-libvirt" version))
+              (sha256
+               (base32
+                "0v6vj5vs9v01zr00bflqpfczhwcyc6jdf8k2dqn42lq6d87si77d"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:tests? #f)) ; tests require access to libvirt socket
+    (native-inputs (list pkg-config))
+    (inputs (list libvirt))
+    (synopsis "Ruby bindings for libvirt")
+    (description "This package provides Ruby language binding for libvirt's
+native C API.")
+    (home-page "https://ruby.libvirt.org/")
+    (license license:lgpl2.1+)))
+
+(define-public ruby-fog-core
+  (package
+    (name "ruby-fog-core")
+    (version "2.4.0")
+    (source (origin
+              (method git-fetch)        ; for tests
+              (uri (git-reference
+                    (url "https://github.com/fog/fog-core")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "184vpi81az7raz98652m7d98ikabdl9di37dgal0adr76q57j03c"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'check 'set-home
+            (lambda _
+              (setenv "HOME" "/tmp"))))))
+    (native-inputs (list ruby-minitest-stub-const))
+    (propagated-inputs (list ruby-builder ruby-excon ruby-formatador
+                             ruby-mime-types))
+    (synopsis "Shared classes and tests for fog providers and services")
+    (description "@code{fog} is a Ruby cloud services library.  This package
+provides shared classes and tests for @code{fog} providers and services.")
+    (home-page "https://github.com/fog/fog-core")
+    (license license:expat)))
+
+(define-public ruby-fog-json
+  (package
+    (name "ruby-fog-json")
+    (version "1.2.0")
+    (source (origin
+              (method git-fetch)        ; for tests
+              (uri (git-reference
+                    (url "https://github.com/fog/fog-json")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0f4hbmhy22b1gbkzd3pnj5xvljp6bl7inc2y4fxh29nrmcn4pgb0"))))
+    (build-system ruby-build-system)
+    (native-inputs (list ruby-minitest))
+    (propagated-inputs (list ruby-fog-core ruby-multi-json))
+    (synopsis "JSON parsing tools used by @code{fog} providers")
+    (description "This package containse the JSON parsing tools shared between
+a number of providers in the @code{fog} gem.  @code{fog} is a Ruby cloud
+services library.")
+    (home-page "https://github.com/fog/fog-json")
+    (license license:expat)))
+
+(define-public ruby-fog-xml
+  (package
+    (name "ruby-fog-xml")
+    (version "0.1.5")
+    (source (origin
+              (method git-fetch)        ; for tests
+              (uri (git-reference
+                    (url "https://github.com/fog/fog-xml")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1v896k9j44axhgvwjvk1j0amy27a9fm6ynv656fxqa1m2wib6dzh"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; Run tests via bundler so rake picks up the minitest gem from
+          ;; native-inputs, not the one installed otherwise.  This is required
+          ;; since turn@0.9.7 needs minitest@4 and can not be upgraded to
+          ;; minitest@5.
+          (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "bundle" "exec" "rake")))))))
+    (native-inputs (list ruby-minitest ruby-pry ruby-coveralls))
+    (propagated-inputs (list ruby-fog-core ruby-nokogiri))
+    (synopsis "XML parsing tools used by @code{fog} providers")
+    (description "This package containse the XML parsing tools shared between
+a number of providers in the @code{fog} gem.  @code{fog} is a Ruby cloud
+services library.")
+    (home-page "https://github.com/fog/fog-xml")
+    (license license:expat)))
+
+(define-public ruby-fog-libvirt
+  (package
+    (name "ruby-fog-libvirt")
+    (version "0.12.0")
+    (source (origin
+              (method git-fetch)        ; for tests
+              (uri (git-reference
+                    (url "https://github.com/fog/fog-libvirt")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0b1qafb0l24anmr8fviwhp9vj14g0fic0mkg9n1i11h68zhqkj2v"))))
+    (build-system ruby-build-system)
+    (native-inputs (list ruby-minitest-stub-const ruby-mocha ruby-net-ssh
+                         ruby-netrc ruby-octokit ruby-pry ruby-rubocop
+                         ruby-shindo ruby-simplecov ruby-yard ))
+    (propagated-inputs (list ruby-fog-core ruby-fog-json ruby-fog-xml
+                             ruby-json ruby-libvirt))
+    (synopsis "Ruby libvirt provider, either standalone or as a module for
+@code{fog}")
+    (description "This library can be used as a module for @code{fog} or as
+standalone libvirt provider.  @code{fog} is a Ruby cloud services library.")
+    (home-page "https://github.com/fog/fog-libvirt")
+    (license license:expat)))
+
+(define-public ruby-pry-byebug
+  (package
+    (name "ruby-pry-byebug")
+    (version "3.10.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/deivid-rodriguez/pry-byebug")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0z8rhvmr9qmlbk8c8h6jbig5qd5xbdg9qihvx3g0cv1whqzbfikq"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'sanitize-dependencies
+                    (lambda _
+                      (substitute* "Rakefile"
+                        ((".*chandler/tasks.*") ""))))
+                  (add-before 'check 'set-home
+                    (lambda _
+                      (setenv "HOME" (getcwd)))))))
+    (native-inputs (list ruby-rubocop ruby-simplecov))
+    (propagated-inputs (list ruby-byebug ruby-pry))
+    (synopsis "Step-by-step debugging and stack navigation in Pry")
+    (description "This package adds step-by-step debugging and stack
+navigation capabilities to @code{pry}, using @code{byebug}.")
+    (home-page "https://github.com/deivid-rodriguez/pry-byebug")
+    (license license:expat)))
+
+(define-public ruby-stackprof
+  (package
+    (name "ruby-stackprof")
+    (version "0.2.27")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "stackprof" version))
+       (sha256
+        (base32 "03788mbipmihq2w7rznzvv0ks0s9z1321k1jyr6ffln8as3d5xmg"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'check 'patch-gemspec
+            (lambda _
+              (substitute* "stackprof.gemspec"
+                (("rake-compiler.*")
+                 "rake-compiler>.freeze, [\"> 0.9\"])\n")
+                (("mocha.*")
+                 "mocha>.freeze, [\"> 0.14\"])\n"))))
+          (add-before 'check 'skip-dubious-test
+            (lambda _
+              (substitute* "test/test_stackprof.rb"
+                ;; This unreliable test can fail with "Expected 0 to be >= 1."
+                (("def test_(cputime)" _ name)
+                 (string-append "def skip_" name))
+                ;; This test often fails
+                (("def test_gc") "def skip_test_gc")
+                ;; This test is known to fail on 32-bit systems.
+                ;; /gnu/store/...-stackprof-0.2.27.gem
+                (("def test_raw") "def skip_test_raw"))))
+          (add-before 'check 'build-tests
+            (lambda _
+              (invoke "rake" "compile")))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "bundle" "exec" "rake" "default")))))))
+    (native-inputs
+     (list bundler ruby-mocha-1 ruby-rake-compiler))
+    (synopsis "Sampling profiler for Ruby code")
+    (description
+     "@code{stackprof} is a fast sampling profiler for Ruby code, with cpu,
+wallclock and object allocation samplers.")
+    (home-page "https://github.com/tmm1/stackprof")
+    (license license:expat)))
+
+(define-public ruby-bindex
+  (package
+    (name "ruby-bindex")
+    (version "0.8.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "bindex" version))
+       (sha256
+        (base32 "0zmirr3m02p52bzq4xgksq4pn8j641rx5d4czk68pv9rqnfwq7kv"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:test-target "default"
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'avoid-bundler
+                 (lambda _
+                   (substitute* "Rakefile"
+                     (("^Bundler::.*") "")))))))
+    (native-inputs (list bundler ruby-rake-compiler))
+    (synopsis "Bindings for Ruby exceptions")
+    (description
+     "This package provides bindings for any kind of Ruby exceptions.")
+    (home-page "https://github.com/gsamokovarov/bindex")
+    (license license:expat)))
+
+(define-public ruby-binding-of-caller
+  (package
+    (name "ruby-binding-of-caller")
+    (version "0.8.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "binding_of_caller" version))
+       (sha256
+        (base32
+         "05syqlks7463zsy1jdfbbdravdhj9hpj5pv2m74blqpv8bq4vv5g"))))
+    (build-system ruby-build-system)
+    ;; Attempting to run the test suite fails with a rake deprecation error
+    ;; (see: https://github.com/banister/binding_of_caller/issues/76).
+    (arguments '(#:tests? #f))
+    (propagated-inputs
+     (list ruby-debug-inspector))
+    (synopsis "Retrieve the binding of a method's caller")
+    (description "The @code{binding_of_caller} module provides the
+@code{Binding#of_caller} method.  It allows accessing bindings from upper
+frames in the call stack and can evaluate code in that context.")
+    (home-page "https://github.com/banister/binding_of_caller")
+    (license license:expat)))
+
+(define-public ruby-pry-stack-explorer
+  (package
+    (name "ruby-pry-stack-explorer")
+    (version "0.5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "pry-stack_explorer" version))
+       (sha256
+        (base32
+         "157rd2n9pfvcmmicm0xkq8z4p6famaj13syrpra6b4032qpb1wn0"))))
+    (build-system ruby-build-system)
+    (arguments '(#:tests? #f))          ;no test suite in gem release
+    (propagated-inputs
+     (list ruby-binding-of-caller ruby-pry))
+    (synopsis "Call-stack navigation plugin for the Pry REPL")
+    (description "@code{pry-stack_explorer} is a plugin for the Pry REPL that
+add support to navigate the call-stack.")
+    (home-page "https://github.com/pry/pry-stack_explorer")
+    (license license:expat)))
+
+(define-public ruby-varint
+  (package
+    (name "ruby-varint")
+    (version "0.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "varint" version))
+       (sha256
+        (base32
+         "1y0l2qc64cwsyv76ygg9bbjnk86riz2kq73kmn87gdrlmpiyrdac"))))
+    (build-system ruby-build-system)
+    (arguments '(#:tests? #f))          ;no test suite
+    (synopsis "Variable length integers (varint) C extension for Ruby")
+    (description "This package provides a small C extension to speed up
+variable length integers (varint) in Ruby Protocol Buffers.")
+    (home-page "https://github.com/liquidm/varint")
+    (license license:bsd-3)))
+
+(define-public ruby-version-gem
+  (package
+    (name "ruby-version-gem")
+    (version "1.1.3")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://gitlab.com/oauth-xx/version_gem")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1wazx2jr9vx5wm48fy8bccvfwhg7y2s8shfw9q81dhb4yvwk6gbf"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'relax-requirements
+            (lambda _
+              (substitute* "Gemfile"
+                (("^linting = .*")
+                 "linting = false\n")
+                (("^coverage = .*")
+                 "coverage = false\n")
+                (("^debug = .*")
+                 "debug = false\n"))
+              (substitute* "spec/spec_helper.rb"
+                (("^RUN_COVERAGE = .*")
+                 "RUN_COVERAGE = false\n")
+                (("^ALL_FORMATTERS = .*")
+                 "ALL_FORMATTERS = false\n"))))
+          (add-before 'build 'drop-signing-key-requirement
+            (lambda _
+              (substitute* "version_gem.gemspec"
+                (("spec.signing_key =.*")
+                 "spec.signing_key = nil")))))))
+    (native-inputs (list ruby-rspec ruby-rspec-block-is-expected))
+    (synopsis "Improved @code{Version} module for Ruby")
+    (description "VersionGem aims to provide introspection of a @code{Version}
+module based on a @code{Version::VERSION} constant string wile not interfering
+with gemspec parsing where the @code{VERSION} string is traditionally used.")
+    (home-page "https://gitlab.com/oauth-xx/version_gem")
+    (license license:expat)))
+
+;;; Note: Do NOT update to a newer version; this is the last commit that is
+;;; still licensed as free software, the project having switched to the
+;;; Hippocratic license afterward (see:
+;;; https://github.com/vcr/vcr/issues/959).
+(define-public ruby-vcr-expat
+  (let ((revision "0")
+        (commit-dont-touch "842b2bf89099dc91f2c643d0d85d1abd54eb7e85")) ;
+    (package
+      (name "ruby-vcr-expat")
+      (version (git-version "5.0.0" revision commit-dont-touch))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/vcr/vcr")
+                      (commit commit-dont-touch)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "02mzifd2655kjh35bbry01n66jjcjrsw6ncqlybfkjcaqrw2zalv"))))
+      (build-system ruby-build-system)
+      (arguments (list #:tests? #f))    ;avoid all dependencies
+      (home-page "https://github.com/vcr/vcr")
+      (synopsis "HTTP interaction recorder [old version]")
+      (description "Record your test suite's HTTP interactions and replay them
+during future test runs for fast, deterministic, accurate tests.  This is an
+older version of VCR that is free software under the Expat license.  The
+project later switched to the Hippocratic license, which is non-free.
+@emph{Do not use it in new free software projects}.")
+      (license license:expat))))
+
+(define-public ruby-ruby-prof
+  (package
+    (name "ruby-ruby-prof")
+    (version "1.4.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "ruby-prof" version))
+       (sha256
+        (base32
+         "09n13bzm1p956z318xx1v7ikqdp2i971v7p3kwf3170axz368ccy"))))
+    (build-system ruby-build-system)
+    (arguments
+      ;; FIXME: Investigate why the tests fail on i686-linux.
+     `(#:tests? ,(not (or (%current-target-system)
+                          (target-x86-32?)))
+       #:phases
+       (modify-phases %standard-phases
+         ;; The LineNumbersTest test fails non-deterministically (see:
+         ;; https://github.com/ruby-prof/ruby-prof/issues/276).
+         (add-after 'extract-gemspec 'delete-flaky-test
+           (lambda _
+             (delete-file "test/line_number_test.rb")
+             (substitute* "ruby-prof.gemspec"
+               (("\"test/line_number_test\\.rb\"\\.freeze, ") ""))))
+         (add-before 'check 'compile
+          (lambda _
+            (invoke "rake" "compile"))))))
+    (native-inputs (list bundler ruby-minitest ruby-rake-compiler ruby-rdoc))
+    (synopsis "Fast code profiler for Ruby")
+    (description "RubyProf is a fast code profiler for Ruby.  Its features
+include:
+@table @asis
+@item Speed
+Being a C extension, it is many times faster than the standard Ruby profiler.
+@item Measurement Modes
+It can measure program wall time, process time, object allocations and memory
+usage.
+@item Reports
+A variety of text and cross-referenced HTML reports can be generated.
+@item Threads
+Profiling multiple threads simultaneously is supported.
+@end table")
+    (home-page "https://github.com/ruby-prof/ruby-prof")
+    (license license:bsd-2)))
+
+(define-public ruby-ruby-memcheck
+  (package
+    (name "ruby-ruby-memcheck")
+    (version "1.3.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/Shopify/ruby_memcheck")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0fj4j4d062sw2kx2qlj877gjbj1xbb691njr8x9nbah6615idlni"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      ;; The tests seem to fail on 32bit x86
+      #:tests? (not (or (target-x86-32?)
+                        (%current-target-system)))
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch-valgrind-path
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "lib/ruby_memcheck/configuration.rb"
+                (("DEFAULT_VALGRIND = \"valgrind\"")
+                 (format #f "DEFAULT_VALGRIND = ~s"
+                         (search-input-file inputs "bin/valgrind"))))))
+          (add-before 'replace-git-ls-files 'standardize-git-ls-files
+            (lambda _
+              (substitute* "ruby_memcheck.gemspec"
+                (("%x\\(git ls-files -z)")
+                 "`git ls-files -z`")))))))
+    (native-inputs (list ruby-rake-compiler ruby-rspec))
+    (inputs (list valgrind/pinned))
+    (propagated-inputs (list ruby-nokogiri))
+    (synopsis "Valgrind memcheck tool for Ruby")
+    (description "The @code{ruby_memcheck} gem provides a sane way to use
+Valgrind's memcheck on your native extension gem, that filters out all the
+false positives caused by Ruby not freeing all of the memory it allocates
+during shutdown.")
+    (home-page "https://github.com/Shopify/ruby_memcheck")
+    (license license:expat)))
+
+(define-public ruby-memory-profiler
+  (package
+    (name "ruby-memory-profiler")
+    (version "1.0.1")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/SamSaffron/memory_profiler")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32
+          "1z1x0rymfv45gh1y3s46w5pga5y8cvgn228jiwlnhc8hin3zig84"))))
+    (build-system ruby-build-system)
+    (synopsis "Memory profiling routines for Ruby")
+    (description
+     "This package provides memory profiling routines for Ruby.")
+    (home-page "https://github.com/SamSaffron/memory_profiler")
+    (license license:expat)))
+
+(define-public ruby-gherkin-ruby
+  (package
+    (name "ruby-gherkin-ruby")
+    (version "0.3.2")
+    (home-page "https://github.com/codegram/gherkin-ruby")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "gherkin-ruby" version))
+              (sha256
+               (base32
+                "18ay7yiibf4sl9n94k7mbi4k5zj2igl4j71qcmkswv69znyx0sn1"))))
+    (build-system ruby-build-system)
+    (synopsis "Pure Ruby Gherkin parser")
+    (description
+     "Gherkin-ruby is a Gherkin parser written in pure Ruby and less than
+200 lines of code.")
+    ;; XXX: No license information anywhere but Readme.md.
+    (license license:expat)))
+
+(define-public ruby-aruba
+  (package
+    (name "ruby-aruba")
+    (version "2.1.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/cucumber/aruba")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1mmlgqhi6yww3z34hmrrnha2rygkv6kx0q962z31dqxjkcv23yfd"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      ;; XXX: Only run the "spec" target and not the "cucumber" one, as it is
+      ;; slow and has multiple unexplained test failures.
+      #:test-target "spec"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch-paths
+            (lambda _
+              ;; This test file relies on a dynamically generated script;
+              ;; patch its #!/bin/bash shebang.
+              (substitute* "spec/aruba/api/commands_spec.rb"
+                (("/bin/bash")
+                 (which "bash")))))
+          (add-before 'check 'relax-requirements
+            ;; Many development requirements are not actually needed.
+            (lambda _
+              (substitute* "aruba.gemspec"
+                (("\\[\">= 0.18.0\", \"< 0.22.0\"]") ;simplecov
+                 "\">= 0.18.0\"")
+                ((".*appraisal.*") "")
+                ((".*pry.*") "")
+                ((".*kramdown.*") "")
+                ((".*rubocop.*") "")
+                ((".*yard-junk.*") ""))
+              (substitute* "Rakefile"
+                ((".*require \"rubocop/rake_task\".*") "")
+                ((".*require \"yard-junk/rake\".*") "")
+                ((".*RuboCop::RakeTask.new.*") "")
+                ((".*YardJunk::Rake.define_task.*") ""))))
+          ;; The tests rely on the Gem being installed, so move the check
+          ;; phase after the install phase.
+          (delete 'check)
+          (add-after 'install 'check
+            (assoc-ref %standard-phases 'check))
+          (add-before 'check 'set-GEM_PATH
+            (lambda _
+              (setenv "GEM_PATH" (string-append
+                                  (getenv "GEM_PATH") ":"
+                                  #$output "/lib/ruby/vendor_ruby"))))
+          (add-before 'check 'set-home
+            (lambda _
+              (setenv "HOME" "/tmp"))))))
+    (native-inputs
+     (list ruby-rake-manifest
+           ruby-rspec
+           ruby-simplecov))
+    (propagated-inputs
+     (list bundler
+           ruby-childprocess
+           ruby-contracts
+           ruby-cucumber
+           ruby-rspec-expectations
+           ruby-thor))
+    (synopsis "Test command-line applications with Cucumber, RSpec or Minitest")
+    (description
+     "Aruba is an extension for Cucumber, RSpec and Minitest for testing
+command-line applications.  It supports applications written in any
+language.")
+    (home-page "https://github.com/cucumber/aruba")
+    (license license:expat)))
+
+(define-public ruby-sys-uname
+  (package
+  (name "ruby-sys-uname")
+  (version "1.2.1")
+  (source
+    (origin
+      (method url-fetch)
+      (uri (rubygems-uri "sys-uname" version))
+      (sha256
+        (base32
+          "00p3wwvkdbg6pl38bchaagncv3i4fq4y0ks470imwykjanpy2ic0"))))
+  (build-system ruby-build-system)
+  (arguments
+   `(#:test-target "spec"))
+  (propagated-inputs (list ruby-ffi))
+  (native-inputs (list ruby-rspec))
+  (synopsis "Ruby interface for gathering system information")
+  (description "The sys-uname library provides an interface for gathering
+information about your current platform.  It allows retrieving information
+such as the OS name, OS version, system name, etc.")
+  (home-page "https://github.com/djberg96/sys-uname")
+  (license license:asl2.0)))
+
+(define-public ruby-cucumber
+  (package
+    (name "ruby-cucumber")
+    (version "8.0.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/cucumber/cucumber-ruby")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1dz880fdz6rfbh1nwwcq21v65byik46jnf9gppnrqf3p5k61i55r"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:test-target "spec"
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'disable-rubocop
+                 ;; Remove extraneous Lint checks.
+                 (lambda _
+                   (substitute* "Rakefile"
+                     (("require 'rubocop/rake_task'")
+                      "")
+                     (("RuboCop::RakeTask.new")
+                      ""))))
+               (add-after 'extract-gemspec 'strip-version-requirements
+                 (lambda _
+                   (delete-file "Gemfile") ;do not use Bundler
+                   (substitute* "cucumber.gemspec"
+                     ;; The dependency specifications are often trailing
+                     ;; behind and appear stricter than necessary, since the
+                     ;; test suite passes with the newer component versions.
+                     (("(.*add_.*dependency '[_A-Za-z0-9-]+')(.*)"
+                       _ stripped rest)
+                      (string-append stripped "   # " rest "\n")))))
+               (add-before 'check 'set-home
+                 (lambda _
+                   (setenv "HOME" (getcwd)))))))
+    (propagated-inputs
+     (list ruby-builder
+           ruby-cucumber-ci-environment
+           ruby-cucumber-core
+           ruby-cucumber-gherkin
+           ruby-cucumber-html-formatter
+           ruby-cucumber-messages
+           ruby-cucumber-wire
+           ruby-diff-lcs
+           ruby-mime-types
+           ruby-multi-test
+           ruby-sys-uname))
+    (native-inputs
+     (list ruby-cucumber-compatibility-kit
+           ruby-nokogiri
+           ruby-pry
+           ruby-webrick
+           ruby-rspec))
+    (synopsis "Describe automated tests in plain language")
+    (description "Cucumber is a tool for running automated tests written in
+plain language.  It's designed to support a Behaviour Driven Development (BDD)
+software development workflow.")
+    (home-page "https://cucumber.io/")
+    (license license:expat)))
+
+(define ruby-cucumber-without-tests
+  (package (inherit ruby-cucumber)
+    (arguments
+     '(#:tests? #f))
+    (native-inputs
+     '())))
+
+(define-public ruby-covered
+  (package
+    (name "ruby-covered")
+    (version "0.20.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "covered" version))
+              (sha256
+               (base32
+                "04fpj493jn23ah5fq93956a5h2xj3z0hrckvc26fxcfsg5pbwypa"))))
+    (build-system ruby-build-system)
+    (arguments
+    ;; XXX: The test suite is disabled to avoid dependency cycles with
+    ;; ruby-samovar, through ruby-bake.
+     (list #:tests? #f
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'extract-gemspec 'relax-requirements
+                 (lambda _
+                   (substitute* ".gemspec"
+                     (("\">= 3.2\"")
+                      "\">= 2.7\"")))))))
+    (propagated-inputs (list ruby-console ruby-msgpack))
+    (synopsis "Modern approach to code coverage in Ruby")
+    (description "Covered uses modern Ruby features to generate comprehensive
+coverage, including support for templates which are compiled into Ruby.  It
+has the following features:
+@itemize
+@item
+Incremental coverage -- if you run your full test suite, and the run a subset,
+it will still report the correct coverage - so you can incrementally work on
+improving coverage.
+@item
+Integration with RSpec, Minitest, Travis & Coveralls - no need to configure
+anything - out of the box support for these platforms.
+@item
+It supports coverage of views -- templates compiled to Ruby code can be
+tracked for coverage reporting.
+@end itemize")
+    (home-page "https://github.com/ioquatix/covered")
+    (license license:expat)))
+
+(define-public ruby-coveralls
+  (package
+    (name "ruby-coveralls")
+    (version "0.8.23")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "coveralls" version))
+       (sha256
+        (base32
+         "1mv4fn5lfxhy7bc2f1lpnc5yp9mvv97az77j4r7jgrxcqwn8fqxc"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:test-target "default"
+           #:phases #~(modify-phases %standard-phases
+                        (add-after 'extract-gemspec 'disable-problematic-tests
+                          (lambda _
+                            (substitute* "spec/coveralls/coveralls_spec.rb"
+                              ;; This test fails for unknown reasons (perhaps
+                              ;; networking); skip it.
+                              (("it \"sends existing test results\"" all)
+                               (string-append "x" all)))
+                            ;; 3 simplecov tests fail, perhaps due to using a
+                            ;; newer simplecov version.
+                            (delete-file "spec/coveralls/simplecov_spec.rb")
+                            (substitute* "coveralls-ruby.gemspec"
+                              (("\"spec/coveralls/simplecov_spec.rb\".freeze, ")
+                               ""))))
+                        (add-after 'extract-gemspec 'relax-requirements
+                          (lambda _
+                            (substitute* "coveralls-ruby.gemspec"
+                              (("%q<simplecov>.freeze, \\[\"~> 0.16.1\"]")
+                               "%q<simplecov>.freeze")))))))
+    (native-inputs
+     (list git-minimal/pinned
+           ruby-pry
+           ruby-rspec
+           ruby-truthy
+           ruby-vcr-expat
+           ruby-webmock))
+    (propagated-inputs
+     (list ruby-json
+           ruby-term-ansicolor
+           ruby-thor
+           ruby-tins
+           ruby-simplecov))
+    (synopsis "Ruby implementation of the Coveralls API")
+    (description "This package provides a Ruby implementation of the Coveralls
+API.")
+    (home-page "https://coveralls.io")
+    (license license:expat)))
+
+(define-public ruby-skiptrace
+  (package
+    (name "ruby-skiptrace")
+    (version "0.8.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "skiptrace" version))
+       (sha256
+        (base32
+         "1qpjy6pqd8hx4w7bai64jsr10mwbpnnb65wcbssyqcnalimi1s12"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'remove-git-from-gemspec
+            (lambda _
+              (substitute* "skiptrace.gemspec"
+                (("`git ls-files -z`") "`find . -type f -print0 |sort -z`"))))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "bundle" "exec" "rake" "default")))))))
+    (native-inputs
+     (list bundler ruby-rake-compiler))
+    (synopsis "Provides access for bindings relating to Ruby exceptions")
+    (description
+     "@code{skiptrace} provides a way to access the bindings that relate to
+exceptions in Ruby, providing more information about the context in which the
+exception occurred.")
+    (home-page "https://github.com/gsamokovarov/skiptrace")
+    (license license:expat)))
+
+(define-public ruby-bio-logger
+  (package
+    (name "ruby-bio-logger")
+    (version "1.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "bio-logger" version))
+       (sha256
+        (base32
+         "02pylfy8nkdqzyzplvnhn1crzmfkj1zmi3qjhrj2f2imlxvycd28"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f)) ; rake errors, missing shoulda
+    (propagated-inputs
+     (list ruby-log4r))
+    (synopsis "Log4r wrapper for Ruby")
+    (description "Bio-logger is a wrapper around Log4r adding extra logging
+features such as filtering and fine grained logging.")
+    (home-page "https://github.com/pjotrp/bioruby-logger-plugin")
+    (license license:expat)))
+
+(define-public ruby-yajl-ruby
+  (package
+    (name "ruby-yajl-ruby")
+    (version "1.4.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "yajl-ruby" version))
+       (sha256
+        (base32
+         "1lni4jbyrlph7sz8y49q84pb0sbj82lgwvnjnsiv01xf26f4v5wc"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:test-target "spec"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'check 'patch-test-to-update-load-path
+            (lambda _
+              (substitute* "spec/parsing/large_number_spec.rb"
+                (("require \"yajl\"")
+                 "$LOAD_PATH << 'lib'; require 'yajl'")))))))
+     (native-inputs
+      (list ruby-rake-compiler ruby-rspec))
+     (synopsis "Streaming JSON parsing and encoding library for Ruby")
+     (description
+      "Ruby C bindings to the Yajl JSON stream-based parser library.  The API
+is compatible with the JSON gem, so yajl-ruby can act as a drop in
+replacement.
+
+A modified copy of yajl is used, and included in the package.")
+     (home-page "https://github.com/brianmario/yajl-ruby")
+     (license (list license:expat     ; Ruby code, yajl_ext.c and yajl_ext.h
+                    license:bsd-3)))) ; Included, modified copy of yajl
+
+(define-public ruby-yard
+  (package
+    (name "ruby-yard")
+    (version "0.9.34")
+    (source
+     (origin
+       (method git-fetch)
+       ;; Tests do not pass if we build from the distributed gem.
+       (uri (git-reference
+             (url "https://github.com/lsegal/yard")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "10jq0hyzyy0d6l63jxld32g36fhrclkb3rwnyp47igcik73kbagb"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:test-target "default"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'do-not-set-date-in-gemspec
+            ;; Fix a reproducibility issue (see:
+            ;; https://github.com/lsegal/yard/issues/1343).
+            (lambda _
+              (substitute* "yard.gemspec"
+                ((".*s\\.date.*") ""))))
+          (add-before 'check 'prepare-for-tests
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (substitute* "Rakefile"
+                  ((".*[Ss]amus.*") ""))
+                ;; Delete the Gemfile to avoid errors relating to it.
+                (delete-file "Gemfile")
+                ;; $HOME needs to be set to somewhere writeable for tests to
+                ;; run.
+                (setenv "HOME" "/tmp")
+                ;; This test fails
+                ;; #<File (class)> received :open with unexpected arguments
+                ;; expected: ("gem1.gem", "rb")
+                ;; got: ("/gnu/store/.../lib/ruby/vendor_ruby/specifications/asciidoctor-2.0.18.gemspec", "r:UTF-8:-")
+                (substitute* "spec/cli/diff_spec.rb"
+                  (("it \"searches for .gem file")
+                   "xit \"searches for .gem file"))))))))
+    (native-inputs
+     (list ruby-rspec
+           ruby-rack
+           ruby-redcloth
+           ruby-webrick
+           ruby-asciidoctor/minimal))
+    (synopsis "Documentation generation tool for Ruby")
+    (description "YARD is a documentation generation tool for the Ruby
+programming language.  It enables the user to generate consistent, usable
+documentation that can be exported to a number of formats very easily, and
+also supports extending for custom Ruby constructs such as custom class level
+definitions.")
+    (home-page "https://yardoc.org")
+    (license license:expat)))
+
+(define-public ruby-yard/minimal
+  (hidden-package
+   (package
+     (inherit ruby-yard)
+     (arguments
+      (ensure-keyword-arguments
+       (package-arguments ruby-yard)
+       (list #:tests? #f)))
+     (native-inputs '()))))
+
+(define-public ruby-spectroscope
+  (package
+    (name "ruby-spectroscope")
+    (version "0.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "spectroscope" version))
+       (sha256
+        (base32
+         "0iiid9sm110qhx0i1zkds710cvsnmhd308wbqa7slkzbq2akrb3y"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (with-output-to-file ".test"
+               (lambda _
+                 (display
+                  "\
+require 'ae/should'
+require 'rspec'
+
+include RSpec
+
+Test.run :default do |run|
+  run.files << 'spec/*_spec.rb'
+end")))
+             (invoke "ruby" "-Ilib" "-rrubytest" ".test"))))))
+    (native-inputs
+     (list ruby-ae ruby-rspec))
+    (propagated-inputs
+     (list ruby-rubytest))
+    (synopsis "Behavior-Driven Development (BDD) framework built on RubyTest")
+    (description "Spectroscope is a Behavior-Driven Development (BDD)
+framework built on RubyTest, designed to emulate RSpec in most respects.  It
+is assertion framework independent so any number of assertion systems can be
+used, such as Assay or AE.")
+    (home-page "http://rubyworks.github.com/spectroscope/")
+    (license license:bsd-2)))
+
+(define-public ruby-tomparse
+  (package
+    (name "ruby-tomparse")
+    (version "0.4.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "tomparse" version))
+       (sha256
+        (base32
+         "06xakk41f1kgj6j1ahkwn4r6cvidixvm4phhlrvmwb7c3pr8ygc8"))))
+    (build-system ruby-build-system)
+    ;; TODO: Tests require citron and rulebow, not yet packaged.
+    (arguments '(#:tests? #f))
+    (synopsis "TomDoc parser for Ruby")
+    (description "TomParse is a TomDoc parser for Ruby.  It takes a code
+comment as input and parses it into a convenient object-oriented structure in
+accordance with the TomDoc standard.  See
+@url{https://github.com/mojombo/tomdoc, TomDoc} for more information about the
+TomDoc format.")
+    (home-page "http://rubyworks.github.com/tomparse/")
+    (license license:bsd-2)))
+
+(define-public ruby-yard-tomdoc
+  (package
+    (name "ruby-yard-tomdoc")
+    (version "0.7.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "yard-tomdoc" version))
+       (sha256
+        (base32
+         "1725gs8b8klpwhrvnf2wwp7dw3zxs9vz2la983l2d8c4r4fn1j2z"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (replace 'check
+                    (lambda _
+                      (invoke "rubytest" "-Ilib" "-Itest" "test/"))))))
+    (native-inputs
+     (list ruby-rubytest-cli ruby-spectroscope ruby-ae))
+    (propagated-inputs
+     (list ruby-tomparse ruby-yard))
+    (synopsis "TomDoc syntax for YARD")
+    (description "This module adds support for the TomDoc documentation format
+to YARD, a documentation generation tool for Ruby.")
+    (home-page "http://rubyworks.github.com/yard-tomdoc/")
+    (license license:expat)))
+
+(define-public ruby-clap
+  (package
+    (name "ruby-clap")
+    (version "1.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "clap" version))
+              (sha256
+               (base32
+                "190m05k3pca72c1h8k0fnvby15m303zi0lpb9c478ad19wqawa5q"))))
+    (build-system ruby-build-system)
+    ;; Clap needs cutest for running tests, but cutest needs clap.
+    (arguments `(#:tests? #f))
+    (synopsis "Command line argument parsing for simple applications")
+    (description
+     "Clap provides command line argument parsing features.  It covers the
+simple case of executing code based on the flags or parameters passed.")
+    (home-page "https://github.com/djanowski/cutest")
+    (license license:expat)))
+
+(define-public ruby-cutest
+  (package
+    (name "ruby-cutest")
+    (version "1.2.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "cutest" version))
+              (sha256
+               (base32
+                "1mldhjn62g53vx4gq2qdqg2lgjvyrqxa8d0khf8347bbfgi16d32"))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     (list ruby-clap))
+    (synopsis "Run tests in separate processes")
+    (description
+     "Cutest runs tests in separate processes to avoid shared state.")
+    (home-page "https://github.com/djanowski/cutest")
+    (license license:expat)))
+
+(define-public ruby-pygmentize
+  (package
+    (name "ruby-pygmentize")
+    (version "0.0.3")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "pygmentize" version))
+              (sha256
+               (base32
+                "1pxryhkiwvsz6xzda3bvqwz5z8ggzl1cdglf8qbcf4bb7akirdpb"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-pygmentize-path
+          (lambda _
+            (substitute* "lib/pygmentize.rb"
+              (("\"/usr/bin/env python.*")
+               (string-append "\"" (which "pygmentize") "\"\n")))))
+         (add-after 'build 'do-not-use-vendor-directory
+          (lambda _
+            ;; Remove bundled pygments sources
+            ;; FIXME: ruby-build-system does not support snippets.
+            (delete-file-recursively "vendor")
+            (substitute* "pygmentize.gemspec"
+              (("\"vendor/\\*\\*/\\*\",") "")))))))
+    (inputs
+     `(("pygments" ,python-pygments)))
+    (native-inputs
+     (list ruby-cutest ruby-nokogiri))
+    (synopsis "Thin Ruby wrapper around pygmentize")
+    (description
+     "Pygmentize provides a simple way to call pygmentize from within a Ruby
+application.")
+    (home-page "https://github.com/djanowski/pygmentize")
+    (license license:expat)))
+
+(define-public ruby-event-emitter
+  (package
+    (name "ruby-event-emitter")
+    (version "0.2.6")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "event_emitter" version))
+              (sha256
+               (base32
+                "148k9qv8102l3m6klc24dwip79f9y4bjr5z19dckd7ffbjyrf9n7"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (add-after 'extract-gemspec 'relax-requirements
+                          (lambda _
+                            (substitute* "event_emitter.gemspec"
+                              (("~> 1.15") ">= 1.15")))))))
+    (synopsis "Ruby port of EventEmitter from Node.js")
+    (description
+     "This package provides a Ruby port of EventEmitter from Node.js.")
+    (home-page "https://shokai.github.io/event_emitter/")
+    (license license:expat)))
+
+(define-public ruby-eventmachine
+  (package
+    (name "ruby-eventmachine")
+    (version "1.2.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "eventmachine" version))
+       (sha256
+        (base32
+         "0wh9aqb0skz80fhfn66lbpr4f86ya2z5rx6gm5xlfhd05bj1ch4r"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f))               ; test suite tries to connect to google.com
+    (inputs
+     (list openssl))
+    (native-inputs
+     (list ruby-rake-compiler))
+    (synopsis "Single-threaded network event framework for Ruby")
+    (description
+     "EventMachine implements a single-threaded engine for arbitrary network
+communications.  EventMachine wraps all interactions with sockets, allowing
+programs to concentrate on the implementation of network protocols.  It can be
+used to create both network servers and clients.")
+    ;; The ‘official’ rubyeventmachine.com domain is now registrar-squatted.
+    (home-page "https://github.com/eventmachine/eventmachine")
+    (license (list license:ruby license:gpl3)))) ; GPLv3 only AFAICT
+
+(define-public ruby-ruby-engine
+  (package
+    (name "ruby-ruby-engine")
+    (version "2.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "ruby_engine" version))
+       (sha256
+        (base32
+         "0wqdcv8gxybp1y7kjhh18g3r9dczacs62d4ahcvyhz32bih8c9fm"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'extract-gemspec 'clean-up
+           (lambda _
+             (delete-file "Gemfile.lock")
+             (substitute* "ruby_engine.gemspec"
+               ;; Remove unnecessary imports that would entail further
+               ;; dependencies.
+               ((".*<rdoc.*") "")
+               ((".*<rubygems-tasks.*") "")
+               ;; Remove extraneous .gem file
+               (("\"pkg/ruby_engine-[0-9.]+\\.gem\".freeze, ") "")
+               (("\"Gemfile.lock\".freeze, ") "")
+               ;; Soften rake dependency
+               (("%q<rake>.freeze, \\[\"~> 10.0\"\\]")
+                "%q<rake>.freeze, [\">= 10.0\"]")
+               ;; Soften the rspec dependency
+               (("%q<rspec>.freeze, \\[\"~> 2.4\"\\]")
+                "%q<rspec>.freeze, [\">= 2.4\"]"))
+             (substitute* "Rakefile"
+               (("require 'rubygems/tasks'") "")
+               (("Gem::Tasks.new") ""))
+             ;; Remove extraneous .gem file that otherwise gets installed.
+             (delete-file-recursively "pkg"))))))
+    (native-inputs
+     (list bundler ruby-rake ruby-rspec))
+    (synopsis "Simplifies checking for Ruby implementation")
+    (description
+     "@code{ruby_engine} provides an RubyEngine class that can be used to
+check which implementation of Ruby is in use.  It can provide the interpreter
+name and provides query methods such as @code{RubyEngine.mri?}.")
+    (home-page "https://github.com/janlelis/ruby_engine")
+    (license license:expat)))
+
+(define-public ruby-mimemagic
+  (package
+    (name "ruby-mimemagic")
+    (version "0.3.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "mimemagic" version))
+       (sha256
+        (base32 "04cp5sfbh1qx82yqxn0q75c7hlcx8y1dr5g3kyzwm4mx6wi2gifw"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; This phase breaks the tests, as it patches some of the test data.
+         (delete 'patch-source-shebangs))))
+    (native-inputs
+     (list ruby-bacon))
+    (synopsis "Ruby library for MIME detection by extension or content")
+    (description
+     "@acronym{MIME, Multipurpose Internet Mail Extensions} detection by
+extension or content, using the freedesktop.org.xml shared-mime-info
+database.")
+    (home-page "https://github.com/minad/mimemagic")
+    (license license:expat)))
+
+(define-public ruby-mini-mime
+  (package
+    (name "ruby-mini-mime")
+    (version "1.1.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "mini_mime" version))
+        (sha256
+         (base32
+          "0lbim375gw2dk6383qirz13hgdmxlan0vc5da2l072j3qw6fqjm5"))))
+    (build-system ruby-build-system)
+    (synopsis "Lightweight mime type lookup toy")
+    (description "This package provides a lightweight mime type lookup toy.")
+    (home-page "https://github.com/discourse/mini_mime")
+    (license license:expat)))
+
+(define-public ruby-fileutils
+  (package
+    (name "ruby-fileutils")
+    (version "1.7.0")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ruby/fileutils")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0m68gaqclnc2wflilmrnr19kky2gr6fjf6k3yq02sf9scs281kid"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'check 'disable-problematic-tests
+            (lambda _
+              (substitute* "test/fileutils/test_fileutils.rb"
+                ;; The 'test_chown' tests depends on /etc/groups, which
+                ;; doesn't exist in the build environment.
+                (("def test_chown.*" all)
+                 (string-append all "    return true\n"))
+                ;; The 'test_cp_r_dev' expects a RuntimeError to be raised
+                ;; when copying a char device to a directory, but this is not
+                ;; triggered in the build environment, for reasons unknown.
+                (("def test_cp_r_dev.*" all)
+                 (string-append all "    return true\n"))))))))
+    (synopsis "Ruby utility library to manipulate files")
+    (description "The FileUtils Ruby library includes Several file utility
+methods for copying, moving, removing, etc.")
+    (home-page "https://github.com/ruby/fileutils")
+    (license license:bsd-2)))
+
+(define-public ruby-sqlite3
+  (package
+    (name "ruby-sqlite3")
+    (version "2.5.0")
+    (source
+     (origin
+       (method git-fetch)        ;for tests
+       (uri (git-reference
+             (url "https://github.com/sparklemotion/sqlite3-ruby")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1fanv7bv5lszd5g752yy8nmpjhrl9gqwbbkbis2xbh83y96f2zfm"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:gem-flags #~(list "--" "--enable-system-libraries")
+      #:modules '((guix build ruby-build-system)
+                  (guix build utils)
+                  (ice-9 rdelim)
+                  (ice-9 textual-ports))
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'relax-requirements
+            (lambda _
+              ;; Don't try to format C code, remove rubocop-rake.
+              (delete-file "rakelib/format.rake")
+              ;; Don't try to run valgrind-like memory tests.
+              ;; This cuts all lines after Minitest::TestTask.create
+              (with-atomic-file-replacement
+               "rakelib/test.rake"
+               (lambda (in out)
+                 (let loop ()
+                   (let ((line (read-line in)))
+                     (cond
+                      ((eof-object? line) #f)
+                      ((string-prefix? "Minitest::TestTask.create" line) #f)
+                      (else
+                       (format out "~a~%" line)
+                       (loop)))))))))
+          (delete 'check)
+          (add-after 'install 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (setenv "GEM_PATH"
+                        (string-append (getenv "GEM_PATH") ":"
+                                       #$output "/lib/ruby/vendor_ruby"))
+                (invoke "rake" "test")))))))
+    (propagated-inputs
+     (list ruby-mini-portile-2))
+    (inputs
+     (list sqlite))
+    (native-inputs
+     (list ruby-hoe
+           ruby-rake-compiler
+           ruby-rake-compiler-dock))
+    (synopsis "Interface with SQLite3 databases")
+    (description
+     "This module allows Ruby programs to interface with the SQLite3 database
+engine.")
+    (home-page
+     "https://github.com/sparklemotion/sqlite3-ruby")
+    (license license:bsd-3)))
+
+(define-public ruby-sqlite3-1.4
+  (package/inherit ruby-sqlite3
+    (name "ruby-sqlite3")
+    (version "1.4.4")
+    (source
+     (origin
+       (method git-fetch)        ;for tests
+       (uri (git-reference
+             (url "https://github.com/sparklemotion/sqlite3-ruby")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0ngirjbai3f5ki2sf6m4gxbbrjpr3b35bz5nrz1cifyw1jk6a6sr"))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments ruby-sqlite3)
+       ((#:tests? #t #t) #f)
+       ((#:phases phases #~%standard-phases)
+        #~(modify-phases #$phases
+            (delete 'relax-requirements)
+            (add-after 'unpack 'fix-version
+              (lambda _
+                (substitute* "sqlite3.gemspec"
+                  (("s\\.version = .*")
+                   (format #f "s.version = ~s~%" #$version)))))))))))
+
+(define-public ruby-shoulda-context
+  (package
+    (name "ruby-shoulda-context")
+    (version "2.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "shoulda-context" version))
+       (sha256
+        (base32
+         "0d1clcp92jv8756h09kbc55qiqncn666alx0s83za06q5hs4bpvs"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; Do not run tests to avoid circular dependence with rails.
+               ;; Instead just import the library to test.
+               (invoke "ruby" "-Ilib" "-r" "shoulda-context")))))))
+    (synopsis "Test::Unit context framework extracted from Shoulda")
+    (description
+     "@code{shoulda-context} is the context framework extracted from Shoulda.
+Instead of writing Ruby methods with lots_of_underscores, shoulda-context adds
+context, setup, and should blocks combine to produce natural test method
+names.")
+    (home-page "https://github.com/thoughtbot/shoulda-context")
+    (license license:expat)))
+
+(define-public ruby-shoulda-matchers
+  (package
+    (name "ruby-shoulda-matchers")
+    (version "5.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "shoulda-matchers" version))
+       (sha256
+        (base32
+         "11igjgh16dl5pwqizdmclzlzpv7mbmnh8fx7m9b5kfsjhwxqdfpn"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; Do not run tests to avoid circular dependence with rails.  Instead
+               ;; just import the library to test.
+               (invoke "ruby" "-Ilib" "-r" "shoulda-matchers")))))))
+    (propagated-inputs
+     (list ruby-activesupport))
+    (synopsis "Collection of testing matchers extracted from Shoulda")
+    (description
+     "Shoulda Matchers provides RSpec- and Minitest-compatible one-liners that
+test common Rails functionality.  These tests would otherwise be much longer,
+more complex, and error-prone.")
+    (home-page "https://github.com/thoughtbot/shoulda-matchers")
+    (license license:expat)))
+
+(define-public ruby-shoulda
+  (package
+    (name "ruby-shoulda")
+    (version "4.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "shoulda" version))
+       (sha256
+        (base32
+         "02lww34kn1g6lidp4rx4rs6bqvirrzxlfw1y2wm11aif8f622xz6"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; Don't run tests to avoid circular dependence with rails.
+               ;; Instead just import the library to test.
+               (invoke "ruby" "-Ilib" "-r" "shoulda"))))
+         (add-after 'extract-gemspec 'relax-requirements
+           (lambda _
+             (substitute* "shoulda.gemspec"
+               ;; An older version of shoulda-matchers (4.0) is used, out of
+               ;; little maintenance rather than because of an real
+               ;; incompatibility (see:
+               ;; https://github.com/thoughtbot/shoulda/issues/275).
+               ((", \\[\"~> 4.0\"]") "")))))))
+    (propagated-inputs
+     (list ruby-shoulda-context ruby-shoulda-matchers))
+    (synopsis "Context framework and matchers for testing")
+    (description
+     "@code{shoulda} is a meta-package combining @code{shoulda-context} and
+@code{shoulda-matchers} providing tools for writing tests.")
+    (home-page "https://github.com/thoughtbot/shoulda")
+    (license license:expat)))
+
+(define-public ruby-unf
+  (package
+    (name "ruby-unf")
+    (version "0.1.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "unf" version))
+       (sha256
+        (base32
+         "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'add-dependency-to-bundler
+           (lambda _
+             ;; test-unit is required but not provided by the bundler
+             ;; environment.  This is fixed in the upstream repository but fix
+             ;; has not been released.
+             (substitute* "Gemfile"
+               (("^gemspec") "gem 'test-unit'\ngemspec")))))))
+    (propagated-inputs
+     (list ruby-unf-ext))
+    (native-inputs
+     (list ruby-shoulda bundler ruby-test-unit))
+    (synopsis "Unicode Normalization Form support to Ruby and JRuby")
+    (description
+     "@code{ruby-unf} is a wrapper library to bring Unicode Normalization Form
+support to both Ruby and JRuby.  It uses @code{unf_ext} on CRuby and
+@code{java.text.Normalizer} on JRuby.")
+    (home-page "https://github.com/knu/ruby-unf")
+    (license license:bsd-2)))
+
+(define-public ruby-warden
+  (package
+    (name "ruby-warden")
+    (version "1.2.8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "warden" version))
+       (sha256
+        (base32
+         "1fr9n9i9r82xb6i61fdw4xgc7zjv7fsdrr4k0njchy87iw9fl454"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; No included tests
+    (propagated-inputs
+     (list ruby-rack))
+    (synopsis "Rack middleware providing authentication")
+    (description
+     "Warden is a Rack-based middleware that provides a mechanism for
+authentication in Ruby web applications.")
+    (home-page "https://github.com/wardencommunity/warden")
+    (license license:expat)))
+
+(define-public ruby-warden-oauth2
+  (package
+    (name "ruby-warden-oauth2")
+    (version "0.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "warden-oauth2" version))
+       (sha256
+        (base32
+         "1z9154lvzrnnfjbjkmirh4n811nygp6pm2fa6ikr7y1ysa4zv3cz"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:test-target "spec"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'remove-unnecessary-dependencies
+           (lambda _
+             (substitute* "Gemfile"
+               ;; All of these gems relate to development, and are unnecessary
+               ;; when running the tests
+               (("gem 'guard-bundler'") "")
+               (("gem 'guard'") "")
+               (("gem 'guard-rspec'") "")
+               (("gem 'rb-fsevent'") "")
+               (("gem 'pry'") "")
+               (("gem 'growl'") ""))))
+         ;; The test suite doesn't work with rspec@2, and this is incompatible
+         ;; with the current version of Rake, so invoke Rspec directly
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "bundle" "exec" "rspec")))))))
+    (propagated-inputs
+     (list ruby-warden))
+    (native-inputs
+     (list bundler ruby-rspec-2 ruby-rack-test))
+    (synopsis "OAuth 2.0 strategies for Warden")
+    (description
+     "This library extends Warden to support OAuth 2.0 authorized API
+requests.")
+    (home-page "https://github.com/opperator/warden-oauth2")
+    (license license:expat)))
+
+(define-public ruby-webmock
+  (package
+    (name "ruby-webmock")
+    (version "3.11.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "webmock" version))
+       (sha256
+        (base32
+         "1hdlbvfw316lkz251qnfk79drmaay7l51kidvicz41nhvw12xz8v"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list bundler ruby-rspec))
+    (propagated-inputs
+     (list ruby-addressable ruby-crack ruby-hashdiff))
+    (synopsis "Allows stubbing and setting expectations on HTTP requests")
+    (description
+     "WebMock allows stubbing HTTP requests and setting expectations on HTTP
+requests.  This is useful when testing software.")
+    (home-page "https://github.com/bblimke/webmock")
+    (license license:expat)))
+
+(define-public ruby-webmock-2
+  (package
+    (inherit ruby-webmock)
+    (name "ruby-webmock")
+    (version "2.3.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "webmock" version))
+       (sha256
+        (base32
+         "04hkcqsmbfnp8g237pisnc834vpgildklicbjbyikqg0bg1rwcy5"))))))
+
+(define-public ruby-unicode-display-width
+  (package
+    (name "ruby-unicode-display-width")
+    (version "2.4.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "unicode-display_width" version))
+       (sha256
+        (base32
+         "1gi82k102q7bkmfi7ggn9ciypn897ylln1jk9q67kjhr39fj043a"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(;; Test data not included.
+       #:tests? #f))
+    (synopsis "Determine the monospace display width of Ruby strings")
+    (description
+     "@code{Unicode::DisplayWidth} is a Ruby library which can determine the
+display width of strings in Ruby.")
+    (home-page "https://github.com/janlelis/unicode-display_width")
+    (license license:expat)))
+
+;; There is another gem called 'ruby-version' so we use an underscore in this
+;; name
+(define-public ruby_version
+  (package
+    (name "ruby_version")
+    (version "1.0.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "ruby_version" version))
+       (sha256
+        (base32
+         "0lvc7bd5ps3w2vq2wb02i0pi3vfcx2rnckx2ix4rjym1qf52kb2j"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'fix-dependencies
+           (lambda _
+             ;; Remove the Gemfile.lock, as we want to use Guix packages at
+             ;; whatever versions.
+             (delete-file "Gemfile.lock")
+             ;; Remove the included gem files as they unnecessary.
+             (delete-file-recursively "pkg/")
+             ;; Accept any version of rake, rdoc and rspec
+             (substitute* "ruby_version.gemspec"
+               (("%q<rake.*") "%q<rake>)\n")
+               (("%q<rdoc.*") "%q<rdoc>)\n")
+               (("%q<rspec.*") "%q<rspec>)\n"))
+             ;; Do not use bundler.
+             (substitute* "Rakefile"
+               (("Bundler\\.setup.*") "nil\n")))))))
+    (native-inputs
+     (list ruby-rdoc ruby-rspec ruby-rubygems-tasks))
+    (synopsis "Ruby library to help check the Ruby version")
+    (description "@code{ruby_version} provides a @code{RubyVersion} module to simplify
+checking for the right Ruby version in software.")
+    (home-page "https://github.com/janlelis/ruby_version")
+    (license license:expat)))
+
+(define-public ruby-websocket-client-simple
+  (package
+    (name "ruby-websocket-client-simple")
+    (version "0.6.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "websocket-client-simple" version))
+              (sha256
+               (base32
+                "1ypl4xvlh5c99zbn20sifv7gv04zi20ly464vsgikfrpn5f37bid"))))
+    (build-system ruby-build-system)
+    (arguments (list #:test-target "default"))
+    (native-inputs (list ruby-eventmachine ruby-websocket-eventmachine-server))
+    (propagated-inputs (list ruby-event-emitter ruby-websocket))
+    (synopsis "Simple WebSocket client for Ruby")
+    (description "This package provides a simple WebSocket client for Ruby.")
+    (home-page "https://github.com/ruby-jp/websocket-client-simple")
+    (license license:expat)))
+
+(define-public ruby-websocket-eventmachine-base
+  (package
+    (name "ruby-websocket-eventmachine-base")
+    (version "1.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "websocket-eventmachine-base" version))
+              (sha256
+               (base32
+                "0wiz61mcwgs3k21cdr5l9b4jpg29gl6mflfampww2v525yc3hr1r"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:tests? #f)) ;no test suite
+    (propagated-inputs (list ruby-eventmachine ruby-websocket
+                             ruby-websocket-native))
+    (synopsis "WebSocket base for Ruby client and server")
+    (description "This package provides a WebSocket base for a Ruby client and
+server.")
+    (home-page "https://github.com/imanel/websocket-eventmachine-base")
+    (license license:expat)))
+
+(define-public ruby-websocket-eventmachine-server
+  (package
+    (name "ruby-websocket-eventmachine-server")
+    (version "1.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "websocket-eventmachine-server" version))
+              (sha256
+               (base32
+                "0iqpzc8s028nck1flqaj784gvyn64wy1h3svpa4y2847wklg8sms"))))
+    (build-system ruby-build-system)
+    ;; TODO: The test suite requires Autobahn, not yet packaged in Guix.
+    (arguments (list #:tests? #f))
+    (propagated-inputs (list ruby-websocket-eventmachine-base))
+    (synopsis "WebSocket server for Ruby")
+    (description "This package provides a WebSocket server for Ruby.")
+    (home-page "https://github.com/imanel/websocket-eventmachine-server")
+    (license license:expat)))
+
+(define-public ruby-websocket-native
+  (package
+    (name "ruby-websocket-native")
+    (version "1.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "websocket-native" version))
+              (sha256
+               (base32
+                "1kgvd3gyzh7hk0ddzn85jrs4csxm54qnvla95ldyn6rzgfbjchdn"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:test-target "spec"
+           #:phases #~(modify-phases %standard-phases
+                        (add-before 'check 'disable-problematic-tests
+                          (lambda _
+                            (substitute* "spec/websocket_spec.rb"
+                              (("it \"should have mask_native defined\"" all)
+                               (string-append "x" all)))))
+                        (add-after 'build 'compile
+                          (lambda _
+                            (invoke "rake" "compile"))))))
+    (native-inputs (list ruby-rake-compiler ruby-rspec))
+    (synopsis "Native Ruby extension for the WebSocket gem")
+    (description "This package provides a native extension that can increase
+performance by about 25% compared to the pure Ruby WebSocket implementation.")
+    (home-page "https://github.com/imanel/websocket-ruby-native")
+    (license license:expat)))
+
+(define-public ruby-websocket-driver
+  (package
+   (name "ruby-websocket-driver")
+   (version "0.7.1")
+   (source
+    (origin
+     (method url-fetch)
+     (uri (rubygems-uri "websocket-driver" version))
+     (sha256
+      (base32 "1bxamwqldmy98hxs5pqby3andws14hl36ch78g0s81gaz9b91nj2"))))
+   (build-system ruby-build-system)
+   (arguments
+    '(#:tests? #f))                     ; no included tests
+   (propagated-inputs
+    (list ruby-websocket-extensions))
+   (synopsis "WebSocket protocol handler with pluggable I/O")
+   (description
+    "@code{websocket-driver} provides a complete implementation of the
+WebSocket protocols that can be hooked up to any TCP library")
+   (home-page "https://github.com/faye/websocket-driver-ruby")
+   (license license:expat)))
+
+(define-public ruby-websocket-extensions
+  (package
+    (name "ruby-websocket-extensions")
+    (version "0.1.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "websocket-extensions" version))
+       (sha256
+        (base32
+         "034sdr7fd34yag5l6y156rkbhiqgmy395m231dwhlpcswhs6d270"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(;; No included tests
+       #:tests? #f))
+    (synopsis "Generic extension manager for WebSocket connections")
+    (description
+     "@code{websocket-extensions} provides a container for registering
+extension plugins.")
+    (home-page "https://github.com/faye/websocket-extensions-ruby")
+    (license license:expat)))
+
+(define-public ruby-domain-name
+  (package
+    (name "ruby-domain-name")
+    (version "0.5.20190701")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "domain_name" version))
+       (sha256
+        (base32 "0lcqjsmixjp52bnlgzh4lg9ppsk52x9hpwdjd53k8jnbah2602h0"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'fix-versions
+           (lambda _
+             ;; Fix NameError that appears to already be fixed upstream.
+             (substitute* "Rakefile"
+               (("DomainName::VERSION")
+                "Bundler::GemHelper.gemspec.version"))
+             ;; Loosen unnecessarily strict test-unit version specification.
+             (substitute* "domain_name.gemspec"
+               (("<test-unit>.freeze, \\[\\\"~> 2.5.5") "<test-unit>, [\">0"))
+             #t)))))
+    (propagated-inputs
+     (list ruby-unf))
+    (native-inputs
+     (list ruby-shoulda bundler ruby-test-unit))
+    (synopsis "Domain name manipulation library")
+    (description
+     "@code{domain_name} is a Domain name manipulation library.  It parses a
+domain name ready for extracting the registered domain and TLD (Top Level
+Domain).  It can also be used for cookie domain validation based on the Public
+Suffix List.")
+    (home-page "https://github.com/knu/ruby-domain_name")
+    (license license:bsd-2)))
+
+(define-public ruby-dotenv
+  (package
+    (name "ruby-dotenv")
+    (version "3.1.7")
+    (source (origin
+              (method git-fetch)        ;for the tests
+              (uri (git-reference
+                    (url "https://github.com/bkeepers/dotenv")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "19j0acy12si537hwi4q54q8n5ycmlvfd2ik5y6r7jir6ww06l8yx"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:test-target "spec"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'do-not-build-dotenv-rails
+            (lambda _
+              ;; The repository includes the definitions of two packages,
+              ;; 'dotenv' and 'dotenv-rails'.  Since we want to package them
+              ;; separately, remove the dotenv-rails and associated Rake
+              ;; tasks.
+              (delete-file "dotenv-rails.gemspec")
+              (delete-file "spec/dotenv/rails_spec.rb")
+              (delete-file "spec/dotenv/log_subscriber_spec.rb")
+              (substitute* "spec/spec_helper.rb"
+                (("require \"dotenv\"" all)
+                 (string-append "require \"pathname\"\n" all)))
+              (substitute* "Rakefile"
+                (("DotenvRailsGemHelper.install_tasks name: \"dotenv-rails\"")
+                 "")
+                ((", \"dotenv-rails:.*\"")
+                 ""))))
+          (replace 'replace-git-ls-files
+            (lambda _
+              (substitute* "dotenv.gemspec"
+                (("`git ls-files (README.md LICENSE lib bin) \\| ([^`]*`)"
+                  all files command)
+                 (string-append
+                  "`find " files " -type f | sort | " command))))))))
+    (native-inputs (list ruby-standard ruby-rspec))
+    (synopsis "Ruby library for setting environment variables")
+    (description "Dotenv is a Ruby library for setting environment variables
+defined in a @file{.env} file.")
+    (home-page "https://github.com/bkeepers/dotenv")
+    (license license:expat)))
+
+(define-public ruby-dotenv-rails
+  (package
+    (inherit ruby-dotenv)
+    (name "ruby-dotenv-rails")
+    (arguments
+     (substitute-keyword-arguments (package-arguments ruby-dotenv)
+       ((#:phases phases '%standard-phases)
+        #~(modify-phases #$phases
+            (delete 'do-not-build-dotenv-rails)
+            (add-after 'unpack 'delete-Gemfile
+              (lambda _
+                ;; It defines extraneous dependencies; remove it.
+                (delete-file "Gemfile")))
+            (add-after 'unpack 'remove-extraneous-gemspec
+              (lambda _
+                (delete-file "dotenv.gemspec")
+                (substitute* "Gemfile"
+                  ((".*\"dotenv\".*") ""))
+                (substitute* "Rakefile"
+                  ;; Remove the dotenv-related Rake tasks.
+                  (("Bundler::GemHelper.install_tasks name: \"dotenv\"")
+                   "")
+                  (("\"dotenv:[^\"]*\", ")
+                   ""))))
+            (replace 'replace-git-ls-files
+              (lambda _
+                (substitute* "dotenv-rails.gemspec"
+                  (("`git ls-files lib \\| grep rails`")
+                   "`find lib -type f | sort | grep rails`"))))))))
+    (native-inputs (list ruby-rspec ruby-spring ruby-standard))
+    (propagated-inputs (list ruby-dotenv ruby-railties))
+    (synopsis "Ruby library for setting environment variables in Rails project")
+    (description "Dotenv is a Ruby library for setting environment variables
+defined in a @file{.env} file.  This is the Rails variant, adapted for use
+with Ruby on Rails projects.")))
+
+(define-public ruby-http-accept
+  (package
+    (name "ruby-http-accept")
+    (version "2.2.0")
+    (source (origin
+              (method git-fetch)        ;for the tests
+              (uri (git-reference
+                    (url "https://github.com/socketry/http-accept")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1d69cy12hqbcqrhw4dibvdq5pqklxsa59kih6pzl479nxq79rgs7"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'remove-missing-key-directive
+            ;; This seem to be a common problem in Ruby projects (see:
+            ;; https://github.com/prawnpdf/ttfunk/issues/99).
+            (lambda _
+              (substitute* "http-accept.gemspec"
+                ((".*spec.signing_key.*") ""))))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "rspec")))))))
+    (native-inputs
+     (list ruby-rspec
+           ruby-covered))
+    (synopsis "Parse Accept and Accept-Language HTTP headers")
+    (description
+     "This package provides a set of parsers for Accept and Accept-Language
+HTTP headers.")
+    (home-page "https://github.com/socketry/http-accept")
+    (license license:expat)))
+
+(define-public ruby-http-accept-1
+  (package
+    (inherit ruby-http-accept)
+    (version "1.7.0")
+    (source (origin
+              (method git-fetch)        ;for the tests
+              (uri (git-reference
+                    (url "https://github.com/ioquatix/http-accept")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name "ruby-http-accept" version))
+              (sha256
+               (base32
+                "1hnqmqpa135s3xgcvv30qzqm8zp88my1aj05m72d2q9cvc31g92z"))))))
+
+(define-public ruby-http-cookie
+  (package
+    (name "ruby-http-cookie")
+    (version "1.0.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "http-cookie" version))
+       (sha256
+        (base32
+         "13rilvlv8kwbzqfb644qp6hrbsj82cbqmnzcvqip1p6vqx36sxbk"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'check 'add-dependency-to-bundler
+            (lambda _
+              ;; Fix NameError
+              (substitute* "Rakefile"
+                (("HTTP::Cookie::VERSION")
+                 "Bundler::GemHelper.gemspec.version")))))))
+    (propagated-inputs
+     (list ruby-domain-name))
+    (native-inputs
+     (list ruby-simplecov
+           bundler
+           ruby-sqlite3
+           ruby-test-unit))
+    (synopsis "Handle HTTP Cookies based on RFC 6265")
+    (description
+     "@code{HTTP::Cookie} is a Ruby library to handle HTTP Cookies based on
+RFC 6265.  It has been designed with security, standards compliance and
+compatibility in mind, to behave just the same as today's major web browsers.
+It has built-in support for the legacy @code{cookies.txt} and
+@code{cookies.sqlite} formats of Mozilla Firefox.")
+    (home-page "https://github.com/sparklemotion/http-cookie")
+    (license license:expat)))
+
+(define-public ruby-httpclient
+  (package
+    (name "ruby-httpclient")
+    (version "2.8.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "httpclient" version))
+       (sha256
+        (base32
+         "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(;; TODO: Some tests currently fail
+       ;; ------
+       ;; 211 tests, 729 assertions, 13 failures, 4 errors, 0 pendings,
+       ;; 2 omissions, 0 notifications
+       ;; 91.866% passed
+       ;; ------
+       ;; 6.49 tests/s, 22.41 assertions/s
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (if tests?
+                 (invoke "ruby"
+                         "-Ilib"
+                         "test/runner.rb")))))))
+    (native-inputs
+     (list ruby-rack))
+    (synopsis
+     "Make HTTP requests with support for HTTPS, Cookies, authentication and more")
+    (description
+     "The @code{httpclient} ruby library provides functionality related to
+HTTP.  Compared to the @code{net/http} library, @code{httpclient} also provides
+Cookie, multithreading and authentication (digest, NTLM) support.
+
+Also provided is a @command{httpclient} command, which can perform HTTP
+requests either using arguments or with an interactive prompt.")
+    (home-page "https://github.com/nahi/httpclient")
+    (license license:ruby)))
+
+(define-public ruby-ansi
+  (package
+    (name "ruby-ansi")
+    (version "1.5.0")
+    (source
+     (origin
+       (method git-fetch)
+       ;; Fetch from GitHub as the gem does not contain testing code.
+       (uri (git-reference
+              (url "https://github.com/rubyworks/ansi")
+              (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1wsz7xxwl3vkh277jb7fd7akqnqqgbvalxzpjwniiqk8ghfprbi5"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; Disable testing to break the cycle ansi, ae, ansi, as well as the
+         ;; cycle ansi, qed, ansi.  Instead simply test that the library can
+         ;; be require'd.
+         (replace 'check
+           (lambda _
+             (invoke "ruby" "-Ilib" "-r" "ansi")))
+         (add-before 'validate-runpath 'replace-broken-symlink
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (file (string-append
+                           out "/lib/ruby/vendor_ruby/gems/ansi-"
+                           ,version "/lib/ansi.yml")))
+               ;; XXX: This symlink is broken since ruby 2.4.
+               ;; https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00034.html
+               (delete-file file)
+               (symlink "../.index" file)))))))
+    (synopsis "ANSI escape code related libraries")
+    (description
+     "This package is a collection of ANSI escape code related libraries
+enabling ANSI colorization and stylization of console output.  Included in the
+library are the @code{Code} module, which defines ANSI codes as constants and
+methods, a @code{Mixin} module for including color methods, a @code{Logger}, a
+@code{ProgressBar}, and a @code{String} subclass.  The library also includes a
+@code{Terminal} module which provides information about the current output
+device.")
+    (home-page "https://rubyworks.github.io/ansi/")
+    (license license:bsd-2)))
+
+(define-public ruby-systemu
+  (package
+    (name "ruby-systemu")
+    (version "2.6.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "systemu" version))
+       (sha256
+        (base32
+         "0gmkbakhfci5wnmbfx5i54f25j9zsvbw858yg3jjhfs5n4ad1xq1"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'set-version
+           (lambda _
+             (setenv "VERSION" ,version))))))
+    (synopsis "Capture of stdout/stderr and handling of child processes")
+    (description
+     "Systemu can be used on any platform to return status, stdout, and stderr
+of any command.  Unlike other methods like @code{open3} and @code{popen4}
+there is no danger of full pipes or threading issues hanging your process or
+subprocess.")
+    (home-page "https://github.com/ahoward/systemu")
+    (license license:ruby)))
+
+(define-public ruby-bcrypt
+  (package
+    (name "ruby-bcrypt")
+    (version "3.1.20")
+    ;; FIXME: Unbundle the bcrypt library used.
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/bcrypt-ruby/bcrypt-ruby")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0q6h8kmjb34hg6qjv31v374n3cavv00drsfyzv6nybdwipgyg62i"))))
+    (build-system ruby-build-system)
+    (arguments (list #:test-target "default")) ;compile + spec
+    (native-inputs (list ruby-rake-compiler ruby-rspec))
+    (synopsis  "Ruby bcrypt wrapper")
+    (description "This Ruby library provides a simple wrapper to bcrypt, a
+secure hash algorithm for hashing passwords.")
+    (home-page "https://github.com/bcrypt-ruby/bcrypt-ruby")
+    (license license:expat)))
+
+(define-public ruby-bcrypt-pbkdf
+  (package
+    (name "ruby-bcrypt-pbkdf")
+    (version "1.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "bcrypt_pbkdf" version))
+              (sha256
+               (base32
+                "0ndamfaivnkhc6hy0yqyk2gkwr6f3bz6216lh74hsiiyk3axz445"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (add-before 'build 'compile
+                          (lambda _
+                            (invoke "rake" "compile"))))))
+    (native-inputs (list ruby-minitest ruby-rake-compiler
+                         ruby-rake-compiler-dock ruby-rdoc))
+    (synopsis "Reading password encrypted Ed25519 keys in Ruby")
+    (description
+     "This gem implements @samp{bcrypt_pbkdf}, which is a variant of
+PBKDF2 (Password-Based Key Derivation Function 2) with bcrypt-based
+pseudorandom function.  This is currently used by @samp{net-ssh} to
+read password encrypted Ed25519 keys.")
+    (home-page "https://github.com/net-ssh/bcrypt_pbkdf-ruby")
+    (license license:expat)))
+
+(define-public ruby-bio-commandeer
+  (package
+    (name "ruby-bio-commandeer")
+    (version "0.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "bio-commandeer" version))
+       (sha256
+        (base32
+         "0khpfw1yl5l3d2m8nxpkk32ybc4c3pa5hic3agd160jdfjjjnlni"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           ;; Run test without calling 'rake' so that jeweler is
+           ;; not required as an input.
+           (lambda _
+             (invoke "rspec" "spec/bio-commandeer_spec.rb"))))))
+    (propagated-inputs
+     (list ruby-bio-logger ruby-systemu))
+    (native-inputs
+     (list bundler ruby-rspec))
+    (synopsis "Simplified running of shell commands from within Ruby")
+    (description
+     "Bio-commandeer provides an opinionated method of running shell commands
+from within Ruby.  The advantage of bio-commandeer over other methods of
+running external commands is that when something goes wrong, messages printed
+to the @code{STDOUT} and @code{STDERR} streams are reported, giving extra
+detail to ease debugging.")
+    (home-page "https://github.com/wwood/bioruby-commandeer")
+    (license license:expat)))
+
+(define-public ruby-rubytest
+  (package
+    (name "ruby-rubytest")
+    (version "0.8.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "rubytest" version))
+       (sha256
+        (base32
+         "19jydsdnkl81i9dhdcr4dc34j0ilm68ff2ngnka1hi38xiw4p5qz"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; Disable regular testing to break the cycle rubytest, qed, brass,
+     ;; rubytest, as well as the cycle rubytest, qed, ansi, rubytest.  Instead
+     ;; simply test that the library can be require'd.
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (invoke "ruby" "-Ilib" "-r" "rubytest"))))))
+    (propagated-inputs
+     (list ruby-ansi))
+    (synopsis "Universal test harness for Ruby")
+    (description
+     "Rubytest is a testing meta-framework for Ruby.  It can handle any
+compliant test framework and can run tests from multiple frameworks in a
+single pass.")
+    (home-page "https://rubyworks.github.io/rubytest")
+    (license license:bsd-2)))
+
+(define-public ruby-brass
+  (package
+    (name "ruby-brass")
+    (version "1.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "brass" version))
+       (sha256
+        (base32
+         "154lp8rp1vmg60ri1j4cb8hqlw37z7bn575h899v8hzxwi11sxka"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; Disable tests to break the cycle brass, lemon, ae, qed, brass.
+     ;; Instead simply test that the library can be require'd.
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "ruby" "-Ilib" "-r" "brass")))))))
+    (synopsis "Basic foundational assertions framework")
+    (description
+     "BRASS (Bare-Metal Ruby Assertion System Standard) is a basic
+foundational assertions framework for other assertion and test frameworks to
+make use of.")
+    (home-page "https://rubyworks.github.io/brass")
+    (license license:bsd-2)))
+
+(define-public ruby-qed
+  (package
+    (name "ruby-qed")
+    (version "2.9.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "qed" version))
+       (sha256
+        (base32
+         "03h4lmlxpcya8j7s2cnyscqlx8v3xl1xgsw5y1wk1scxcgz2vbmr"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "ruby" "-Ilib" "bin/qed")))))))
+    (native-inputs
+     (list ruby-ae-bootstrap))
+    (propagated-inputs
+     (list ruby-ansi ruby-brass))
+    (synopsis "Test framework utilizing literate programming techniques")
+    (description
+     "@dfn{Quality Ensured Demonstrations} (QED) is a test framework for
+@dfn{Test Driven Development} (TDD) and @dfn{Behaviour Driven
+Development} (BDD) utilizing Literate Programming techniques.  QED sits
+somewhere between lower-level testing tools like @code{Test::Unit} and
+requirement specifications systems like Cucumber.")
+    (home-page "https://rubyworks.github.io/qed")
+    (license license:bsd-2)))
+
+(define-public ruby-que
+  (package
+    (name "ruby-que")
+    (version "1.0.0.beta3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "que" version))
+       (sha256
+        (base32
+         "0gr9pb814d4qj3ds98g6cjrdk7wv0yg8aqbm7c1lmgl87jkg8q04"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; No included tests
+    (synopsis "Job queue using PostgreSQL written in Ruby")
+    (description
+     "This package provides a job queue that uses PostgreSQL for storing jobs
+and locking between worker processes.")
+    (home-page "https://github.com/chanks/que")
+    (license license:expat)))
+
+(define-public ruby-queue-classic
+  (package
+    (name "ruby-queue-classic")
+    (version "4.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "queue_classic" version))
+              (sha256
+               (base32
+                "0npyhajf2fc80apkw9s2kj0n254w5lcl4xpjidg5d5w1fb19abh6"))))
+    (build-system ruby-build-system)
+    (arguments (list #:tests? #f))      ;tests require a postgresql server
+    (native-inputs (list ruby-activerecord ruby-minitest-reporters))
+    (propagated-inputs (list ruby-pg))
+    (synopsis "Queuing library for Ruby")
+    (description "@code{queue_classic} is a queuing library for Ruby
+applications (Rails, Sinatra, etc.)  @code{queue_classic} features
+asynchronous job polling, database maintained locks and has a single
+dependency, @code{pg}.")
+    (home-page "https://github.com/QueueClassic/queue_classic")
+    (license license:expat)))
+
+(define-public ruby-pairing-heap
+  (package
+    (name "ruby-pairing-heap")
+    (version "3.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "pairing_heap" version))
+              (sha256
+               (base32
+                "059kqpw53cancnp0bp7y1s74y1955riw33w3lqfbnms4b4mdh5zj"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch
+            (lambda _
+              (substitute* "Rakefile"
+                (("require \"standard/rake\"") "")
+                ((":\"standard:fix\",") "")))))))
+    (synopsis "Priority queue in pure Ruby")
+    (description "This package provides a performant priority queue in pure
+ruby with support for changing priority using pairing heap data structure")
+    (home-page "https://github.com/mhib/pairing_heap")
+    (license license:expat)))
+
+(define-public ruby-ae
+  (package
+    (name "ruby-ae")
+    (version "1.8.2")
+    (source
+     (origin
+       (method git-fetch)
+       ;; Fetch from github so tests are included.
+       (uri (git-reference
+             (url "https://github.com/rubyworks/ae")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "11299jj5ma8mi7b4majkyjy70y6zlqpgl8aql1c5lvfjavlpwmlp"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "qed"))))
+         (add-before 'validate-runpath 'replace-broken-symlink
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (file (string-append
+                           out "/lib/ruby/vendor_ruby/gems/ae-"
+                           ,version "/lib/ae.yml")))
+               ;; XXX: This symlink is broken since ruby 2.4.
+               ;; https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00034.html
+               (delete-file file)
+               (symlink "../.index" file)))))))
+    (propagated-inputs
+     (list ruby-ansi))
+    (native-inputs
+     (list ruby-qed))
+    (synopsis "Assertions library")
+    (description
+     "Assertive Expressive (AE) is an assertions library specifically designed
+for reuse by other test frameworks.")
+    (home-page "https://rubyworks.github.io/ae/")
+    (license license:bsd-2)))
+
+(define-public ruby-ae-bootstrap
+  (hidden-package
+   (package/inherit ruby-ae
+     (arguments
+      (substitute-keyword-arguments
+          (package-arguments ruby-ae)
+        ((#:tests? _ #t) #f)))
+     (native-inputs '()))))
+
+(define-public ruby-lemon
+  (package
+    (name "ruby-lemon")
+    (version "0.9.1")
+    (source
+    (origin
+      (method url-fetch)
+      (uri (rubygems-uri "lemon" version))
+      (sha256
+       (base32
+        "0gqhpgjavgpvx23rqpfqcv3d5bs8gc7lr9yvj8kxgp7mfbdc2jcm"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check (lambda _ (invoke "qed"))))))
+    (propagated-inputs
+     (list ruby-ae ruby-ansi ruby-rubytest))
+    (native-inputs
+     (list ruby-qed))
+    (synopsis "Test framework correlating code structure and test unit")
+    (description
+     "Lemon is a unit testing framework that enforces highly formal
+case-to-class and unit-to-method test construction.  This enforcement can help
+focus concern on individual units of behavior.")
+    (home-page "https://rubyworks.github.io/lemon")
+    (license license:bsd-2)))
+
+(define-public ruby-rubytest-cli
+  (package
+    (name "ruby-rubytest-cli")
+    (version "0.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "rubytest-cli" version))
+       (sha256
+        (base32
+         "0n7hv4k1ba4fm3i98c6ydbsqhkxgbp52mhi70ba1x3mqzfvk438p"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f)) ; no tests
+    (propagated-inputs
+     (list ruby-ansi ruby-rubytest))
+    (synopsis "Command-line interface for rubytest")
+    (description
+     "Rubytest CLI is a command-line interface for running tests for
+Rubytest-based test frameworks.  It provides the @code{rubytest} executable.")
+    (home-page "https://rubyworks.github.io/rubytest-cli")
+    (license license:bsd-2)))
+
+(define-public ruby-hashery
+  (package
+    (name "ruby-hashery")
+    (version "2.1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "hashery" version))
+       (sha256
+        (base32
+         "0qj8815bf7q6q7llm5rzdz279gzmpqmqqicxnzv066a020iwqffj"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (invoke "qed")
+             (invoke "rubytest" "-Ilib" "-Itest" "test/"))))))
+    (native-inputs
+     (list ruby-rubytest-cli ruby-qed ruby-lemon))
+    (synopsis "Hash-like classes with extra features")
+    (description
+     "The Hashery is a tight collection of @code{Hash}-like classes.
+Included are the auto-sorting @code{Dictionary} class, the efficient
+@code{LRUHash}, the flexible @code{OpenHash} and the convenient
+@code{KeyHash}.  Nearly every class is a subclass of the @code{CRUDHash} which
+defines a CRUD (Create, Read, Update and Delete) model on top of Ruby's
+standard @code{Hash} making it possible to subclass and augment to fit any
+specific use case.")
+    (home-page "https://rubyworks.github.io/hashery")
+    (license license:bsd-2)))
+
+(define-public ruby-rc4
+  (package
+    (name "ruby-rc4")
+    (version "0.1.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "ruby-rc4" version))
+       (sha256
+        (base32
+         "00vci475258mmbvsdqkmqadlwn6gj9m01sp7b5a3zd90knil1k00"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (invoke "rspec" "spec/rc4_spec.rb"))))))
+    (native-inputs
+     (list ruby-rspec-2))
+    (synopsis "Implementation of the RC4 algorithm")
+    (description
+     "RubyRC4 is a pure Ruby implementation of the RC4 algorithm.")
+    (home-page "https://github.com/caiges/Ruby-RC4")
+    (license license:expat)))
+
+(define-public ruby-afm
+  (package
+    (name "ruby-afm")
+    (version "0.2.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "afm" version))
+       (sha256
+        (base32
+         "06kj9hgd0z8pj27bxp2diwqh6fv7qhwwm17z64rhdc4sfn76jgn8"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list bundler))
+    (synopsis "Read Adobe Font Metrics (afm) files")
+    (description
+     "This library provides methods to read @dfn{Adobe Font Metrics} (afm)
+files and use the data therein.")
+    (home-page "https://github.com/halfbyte/afm")
+    (license license:expat)))
+
+(define-public ruby-ascii85
+  (package
+    (name "ruby-ascii85")
+    (version "1.0.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "Ascii85" version))
+       (sha256
+        (base32
+         "0658m37jjjn6drzqg1gk4p6c205mgp7g1jh2d00n4ngghgmz5qvs"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list bundler))
+    (synopsis "Encode and decode Ascii85 binary-to-text encoding")
+    (description
+     "This library provides methods to encode and decode Ascii85
+binary-to-text encoding.  The main modern use of Ascii85 is in PostScript and
+@dfn{Portable Document Format} (PDF) file formats.")
+    (home-page "https://github.com/datawraith/ascii85gem")
+    (license license:expat)))
+
+(define-public ruby-ttfunk
+  (package
+    (name "ruby-ttfunk")
+    (version "1.7.0")
+    (source
+     (origin
+       (method git-fetch)
+       ;; Fetch from github as the gem does not contain testing code.
+       (uri (git-reference
+             (url "https://github.com/prawnpdf/ttfunk")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1jyxn928mpyb1sikjd93s3v8fmh33232pq41ziaph513j7am6fi5"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:test-target "spec"         ;avoid the rubocop target
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'remove-missing-key-directive
+                 ;; This seem to be a common problem in Ruby projects (see:
+                 ;; https://github.com/prawnpdf/ttfunk/issues/99).
+                 (lambda _
+                   (substitute* "ttfunk.gemspec"
+                     ((".*spec.signing_key.*") "")))))))
+    (native-inputs (list ruby-prawn-dev))
+    (synopsis "Font metrics parser for the Prawn PDF generator")
+    (description
+     "TTFunk is a TrueType font parser written in pure Ruby.  It is used as
+part of the Prawn PDF generator.")
+    (home-page "https://github.com/prawnpdf/ttfunk")
+    ;; From the README: "Matz's terms for Ruby, GPLv2, or GPLv3. See LICENSE
+    ;; for details."
+    (license %prawn-project-licenses)))
+
+(define-public ruby-puma
+  (package
+    (name "ruby-puma")
+    (version "6.6.0")
+    (source
+     (origin
+       (method git-fetch)               ;for tests
+       (uri (git-reference
+             (url "https://github.com/puma/puma")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1pdd7s403pi4y75s1sb4jkghhmm2w9zcqifj7z7yx4z0qfs7lvzv"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch-Gemfile
+            (lambda _
+              (substitute* "Gemfile"
+                (("gem \"rake-compiler\".*")
+                 "gem 'rake-compiler'\n"))))
+          (add-after 'unpack 'disable-rubocop
+            (lambda _
+              (setenv "PUMA_NO_RUBOCOP" "1")))
+          (add-after 'unpack 'use-rack-2
+            (lambda _
+              (setenv "PUMA_CI_RACK" "rack2")
+              (setenv "PUMA_CI_RACK_2" "1")))
+          (add-before 'build 'increase-resource-limits
+            (lambda _
+              ;; The test suite requires a higher number of open files.  Try
+              ;; increasing the soft resource limit of max open files to 2048,
+              ;; or equal to the hard limit, whichever is lower.
+              (call-with-values (lambda () (getrlimit 'nofile))
+                (lambda (soft hard)
+                  (when (and soft (< soft 2048))
+                    (if hard
+                        (setrlimit 'nofile (min hard 2048) hard)
+                        (setrlimit 'nofile 2048 #f))
+                    (format
+                     #t "increased maximum number of open files from ~d to ~d~%"
+                     soft (if hard (min hard 2048) 2048)))))))
+          (add-before 'build 'fix-gemspec
+            (lambda _
+              (substitute* "puma.gemspec"
+                (("`git ls-files -- bin docs ext lib tools`")
+                 "`find bin docs ext lib tools -type f |sort`"))))
+          (delete 'check)               ;moved after install
+          (add-after 'install 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "bundle" "exec" "rake" "test"))))
+          (add-after 'install 'delete-mkmf.log
+            (lambda _
+              ;; Rubygems installs build log files that embed volatile file
+              ;; names (see:
+              ;; https://github.com/rubygems/rubygems/issues/6259).
+              (for-each delete-file (find-files #$output "^mkmf\\.log$"))))
+          (add-before 'check 'disable-problematic-tests
+            (lambda _
+              (let-syntax ((skip-tests
+                            (syntax-rules ()
+                              ((_ file test ...)
+                               (substitute* file
+                                 (((string-append "def " test ".*") all)
+                                  (string-append
+                                   all "    skip('fails on guix')\n")) ...)))))
+                ;; The test failures were reported at:
+                ;; https://github.com/puma/puma/issues/3093, but appear to be
+                ;; caused by the Guix build container, perhaps the lack of
+                ;; zombie process reaping (see:
+                ;; https://issues.guix.gnu.org/30948).
+                ;;  All the tests in the 'test_worker_gem_independence.rb'
+                ;;  module fail with "Expected false to be truthy.".
+                (delete-file "test/test_worker_gem_independence.rb")
+                (skip-tests "test/test_integration_ssl_session.rb"
+                            ;; The TLS 1.2 test fails for unknown reasons.
+                            "test_off_tls1_2")
+                (skip-tests "test/test_integration_cluster.rb"
+                            "test_fork_worker_on_refork"
+                            "test_hot_restart_does_not_drop_connections"
+                            "test_culling_strategy_oldest_fork_worker"
+                            "test_usr1_fork_worker")
+                (skip-tests "test/test_integration_pumactl.rb"
+                            "test_refork_cluster")
+                ;; The Openssl certificate has expired, causing these tests to fail.
+                (skip-tests "test/test_puma_server_ssl.rb"
+                            "test_verify_fail_if_client_expired_cert"
+                            "test_verify_client_cert"
+                            "test_server_ssl_with_cert_pem_and_key_pem")
+                (skip-tests "test/test_integration_ssl.rb"
+                            "test_ssl_run_with_curl_client")
+                (skip-tests "test/test_web_concurrency_auto.rb" "\
+test_web_concurrency_with_concurrent_ruby_unavailable")
+                (skip-tests "test/helpers/integration.rb"
+                            "test_puma_started_log_writing"))))
+          (add-before 'check 'relax-test-case-timeout
+            (lambda _
+              ;; The default value is 45 s and easily causes timeouts.
+              (setenv "TEST_CASE_TIMEOUT" "600")))
+          (add-before 'check 'set-home
+            (lambda _
+              ;; Some tests fail if the cannot write to HOME.
+              (setenv "HOME" "/tmp")))
+          (add-before 'check 'set-paths
+            (lambda _
+              ;; The test suite requires the 'puma' command to be on PATH.
+              (setenv "PATH" (string-append (getenv "PATH") ":"
+                                            #$output "/bin"))
+              (setenv "GEM_PATH" (string-append
+                                  (getenv "GEM_PATH") ":"
+                                  #$output "/lib/ruby/vendor_ruby")))))))
+    (native-inputs
+     (list bundler
+           curl
+           ruby-json
+           ruby-localhost
+           ruby-m
+           ruby-minitest-proveit
+           ruby-minitest-retry
+           ruby-minitest-stub-const
+           ruby-rack
+           ruby-rackup-1
+           ruby-rake-compiler
+           ruby-webrick))
+    (inputs
+     (list openssl
+           ruby-nio4r))
+    (propagated-inputs
+     (list ruby-concurrent-ruby))
+    (synopsis "Simple, concurrent HTTP server for Ruby/Rack")
+    (description
+     "Puma is a simple, fast, threaded, and highly concurrent HTTP 1.1 server
+for Ruby/Rack applications.  Puma is intended for use in both development and
+production environments.  In order to get the best throughput, it is highly
+recommended that you use a Ruby implementation with real threads like Rubinius
+or JRuby.")
+    (home-page "https://puma.io/")
+    (license license:expat)))
+
+(define-public ruby-hoe-git
+  (package
+    (name "ruby-hoe-git")
+    (version "1.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "hoe-git" version))
+       (sha256
+        (base32
+         "10jmmbjm0lkglwxbn4rpqghgg1ipjxrswm117n50adhmy8yij650"))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     (list ruby-hoe-3))
+    (synopsis "Hoe plugins for tighter Git integration")
+    (description
+     "This package provides a set of Hoe plugins for tighter Git integration.
+It provides tasks to automate release tagging and pushing and changelog
+generation.")
+    (home-page "https://github.com/jbarnette/hoe-git")
+    (license license:expat)))
+
+(define-public ruby-hoe-markdown
+  (package
+    (name "ruby-hoe-markdown")
+    (version "1.4.0")
+    (home-page "https://github.com/flavorjones/hoe-markdown")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url home-page)
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0wb0yjdx9gx9r0cahpx42pblvglgh1i9pdfxjavq7f40nan2g076"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:test-target "spec"
+       #:phases (modify-phases %standard-phases
+                  (add-before 'check 'disable-bundler-dependency
+                    (lambda _
+                      (substitute* "spec/spec_helper.rb"
+                        (("require.*bundler/setup.*")
+                         "")))))))
+    (native-inputs
+     (list ruby-rspec))
+    (propagated-inputs
+     (list ruby-rake))
+    (synopsis "Hoe plugin with Markdown helpers")
+    (description
+     "This package provides a Hoe plugin with various Markdown helpers, which
+can be used to e.g. hyperlink Markdown documentation between project files.")
+    (license license:expat)))
+
+(define-public ruby-timecop
+  (package
+    (name "ruby-timecop")
+    (version "0.9.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "timecop" version))
+       (sha256
+        (base32
+         "0dlx4gx0zh836i7nzna03xdl7fc233s5z6plnr6k3kw46ah8d1fc"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'check 'set-check-rubylib
+            (lambda _
+              ;; Set RUBYLIB so timecop tests finds its own lib.
+              (setenv "RUBYLIB" "lib"))))))
+    (native-inputs
+     (list bundler
+           ruby-minitest-rg
+           ruby-mocha
+           ruby-activesupport
+           ruby-pry))
+    (synopsis "Test mocks for time-dependent functions")
+    (description
+     "Timecop provides \"time travel\" and \"time freezing\" capabilities,
+making it easier to test time-dependent code.  It provides a unified method to
+mock @code{Time.now}, @code{Date.today}, and @code{DateTime.now} in a single
+call.")
+    (home-page "https://github.com/travisjeffery/timecop")
+    (license license:expat)))
+
+(define-public ruby-concurrent-ruby
+  (package
+    (name "ruby-concurrent-ruby")
+    (version "1.3.5")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference       ;for tests
+                    (url "https://github.com/ruby-concurrency/concurrent-ruby")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0f0apna8k9cwnpa4lddwimywxzznrd4rjv4m0lka2i54z49iky73"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:tests? #f  ;the test suite is run in ruby-concurrent-ruby-edge
+      #:phases #~(modify-phases %standard-phases
+                   (add-after 'unpack 'delete-unwanted-gemspecs
+                     (lambda _
+                       (for-each delete-file
+                                 '("concurrent-ruby-ext.gemspec"
+                                   "concurrent-ruby-edge.gemspec"))))
+                   (add-after 'unpack 'do-not-install-concurrent_ruby.jar
+                     (lambda _
+                       ;; This file is only built when building the Java
+                       ;; extension.
+                       (substitute* "concurrent-ruby.gemspec"
+                         (("'lib/concurrent-ruby/concurrent/concurrent_ruby.jar'")
+                          "")))))))
+    (synopsis "Concurrency library for Ruby")
+    (description "Concurrent Ruby includes concurrency tools such as agents,
+futures, promises, thread pools, actors, supervisors, and more.  It is
+inspired by Erlang, Clojure, Go, JavaScript, actors, and classic concurrency
+patterns.")
+    (home-page "https://github.com/ruby-concurrency/concurrent-ruby")
+    (license license:expat)))
+
+;;; The 'gem' is called 'concurrent-ruby'; reversing its name was confusing
+;;; and failed to be picked by the gem importer (which led to this newer
+;;; package).
+(define-public ruby-concurrent
+  (deprecated-package "ruby-concurrent" ruby-concurrent-ruby))
+
+(define-public ruby-concurrent-ruby-ext
+  (package
+    (inherit ruby-concurrent-ruby)
+    (name "ruby-concurrent-ruby-ext")
+    (arguments
+     (list
+      #:tests? #f                      ;tested as part of concurrent-ruby-edge
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'delete-unwanted-gemspecs
+            (lambda _
+              (for-each delete-file
+                        '("concurrent-ruby.gemspec"
+                          "concurrent-ruby-edge.gemspec")))))))
+    (native-inputs (list ruby-rake-compiler))
+    (propagated-inputs (list ruby-concurrent-ruby))
+    (synopsis "C extensions for concurrent-ruby")
+    (description "This package provides C extensions to optimize the
+concurrent-ruby gem when running under the Matz's Ruby Interpreter (MRI, also
+known as CRuby).")))
+
+(define-public ruby-concurrent-ruby-edge
+  (package
+    (inherit ruby-concurrent-ruby)
+    (name "ruby-concurrent-ruby-edge")
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'delete-unwanted-gemspecs
+            (lambda _
+              (for-each delete-file
+                        '("concurrent-ruby.gemspec"
+                          "concurrent-ruby-ext.gemspec"))))
+          ;; The tests rely on the Gem being installed, so move the check
+          ;; phase after the install phase.
+          (delete 'check)
+          (add-after 'install 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (setenv "GEM_PATH" (string-append
+                                  (getenv "GEM_PATH") ":"
+                                  #$output "/lib/ruby/vendor_ruby"))
+              (when tests?
+                (invoke "rake" "ci")))))))
+    (native-inputs
+     (list ruby-rake-compiler
+           ruby-rake-compiler-dock
+           ruby-rspec
+           ruby-timecop
+           ruby-yard))
+    (propagated-inputs
+     (list ruby-concurrent-ruby ruby-concurrent-ruby-ext))
+    (synopsis "Edge features and additions to the @code{concurrent-ruby} gem")
+    (description "The @code{concurrent-ruby-edge} gem includes
+@code{concurrent-ruby} features that are under active development and may
+change frequently.  They are expected not to keep backward
+compatibility (there may also lack tests and documentation), although semantic
+versions are obeyed though.  Features developed in @code{concurrent-ruby-edge}
+are expected to move to @code{concurrent-ruby} when final.")))
+
+(define-public ruby-pkg-config
+  (package
+    (name "ruby-pkg-config")
+    (version "1.2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "pkg-config" version))
+       (sha256
+        (base32
+         "056mzqdh4yjznsg36fi0xiq76f24vxlhzh2n4az919l3x5k318ar"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; Tests require extra files not included in the gem.
+     `(#:tests? #f))
+    (synopsis "Detect libraries for compiling Ruby native extensions")
+    (description
+     "@code{pkg-config} can be used in your extconf.rb to properly detect need
+libraries for compiling Ruby native extensions.")
+    (home-page "https://github.com/ruby-gnome2/pkg-config")
+    (license license:lgpl2.0+)))
+
+(define-public ruby-net-http-digest-auth
+  (package
+    (name "ruby-net-http-digest-auth")
+    (version "1.4.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "net-http-digest_auth" version))
+       (sha256
+        (base32
+         "1nq859b0gh2vjhvl1qh1zrk09pc7p54r9i6nnn6sb06iv07db2jb"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list ruby-hoe
+           ruby-minitest))
+    (synopsis "RFC 2617 HTTP digest authentication library")
+    (description
+     "This library implements HTTP's digest authentication scheme based on
+RFC 2617.  This enables the use of the digest authentication scheme instead
+of the more insecure basic authentication scheme.")
+    (home-page "https://github.com/drbrain/net-http-digest_auth")
+    (license license:expat)))
+
+(define-public ruby-mail
+  (package
+    (name "ruby-mail")
+    (version "2.8.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "mail" version))
+       (sha256
+        (base32 "1bf9pysw1jfgynv692hhaycfxa8ckay1gjw5hz3madrbrynryfzc"))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     (list ruby-mini-mime))
+    (arguments
+     '(#:tests? #f)) ; no rakefile
+    (synopsis "Mail library for Ruby")
+    (description
+     "Mail is an internet library for Ruby that is designed to handle email
+generation, parsing and sending.  The purpose of this library is to provide
+a single point of access to handle all email functions, including sending
+and receiving emails.  All network type actions are done through proxy
+methods to @code{Net::SMTP}, @code{Net::POP3} etc.
+
+Mail has been designed with a very simple object oriented system that
+really opens up the email messages you are parsing, if you know what you
+are doing, you can fiddle with every last bit of your email directly.")
+    (home-page "https://github.com/mikel/mail")
+    (license license:expat)))
+
+(define-public ruby-net-protocol
+  (package
+    (name "ruby-net-protocol")
+    (version "0.2.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/ruby/net-protocol")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0niivmjx7bc6vsylc1ag17mw6mnvjxw02s7cin1f0422xyr8msq9"))))
+    (build-system ruby-build-system)
+    (propagated-inputs (list ruby-timeout))
+    (synopsis "Abstract interface for Ruby network clients")
+    (description "This Ruby library provides an abstract interface for network
+clients.")
+    (home-page "https://github.com/ruby/net-protocol")
+    (license (list license:bsd-2))))
+
+(define-public ruby-email-reply-trimmer
+  (package
+    (name "ruby-email-reply-trimmer")
+    (version "0.1.13")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "email_reply_trimmer" version))
+        (sha256
+         (base32
+          "1jgcxifm48xq5dz9k47q43pqm5bfnf14l62l3bqhmv8f6z8dw4ki"))))
+    (build-system ruby-build-system)
+    (synopsis "Trim replies from plain text email")
+    (description "EmailReplyTrimmer is a Ruby small library to trim replies
+from plain text email.")
+    (home-page "https://github.com/discourse/email_reply_trimmer")
+    (license license:expat)))
+
+(define-public ruby-mathn
+  (package
+    (name "ruby-mathn")
+    (version "0.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "mathn" version))
+       (sha256
+        (base32
+         "1wn812llln9jzgybz2d7536q39z3gi99i6fi0j1dapcpzvhgrr0p"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list bundler ruby-rake-compiler))
+    (synopsis "Extends math operations for increased precision")
+    (description
+     "This gem makes mathematical operations more precise in Ruby and
+integrates other mathematical standard libraries.  Prior to Ruby 2.5,
+@code{mathn} was part of the Ruby standard library.")
+    (home-page "https://github.com/ruby/mathn")
+    (license license:bsd-2)))
+
+(define-public ruby-code-statistics
+  (package
+    (name "ruby-code-statistics")
+    (version "0.2.13")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "code_statistics" version))
+       (sha256
+        (base32
+         "07rdpsbwbmh4vp8nxyh308cj7am2pbrfhv9v5xr2d5gq8hnnsm93"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f)) ; Not all test code is included in gem.
+    (synopsis "Port of the rails 'rake stats' method")
+    (description
+     "This gem is a port of the rails 'rake stats' method so it can be made
+more robust and work for non rails projects.")
+    (home-page "https://github.com/danmayer/code_statistics")
+    (license license:expat)))
+
+(define-public ruby-ruby2-keywords
+  (package
+    (name "ruby-ruby2-keywords")
+    (version "0.0.5")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/ruby/ruby2_keywords")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1jhqb152zfr2yrxj6j8rzakkwdkg5viggwnnqrrfxwwy63msdi97"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'delete-extraneous-rake-files
+            (lambda _
+              (for-each delete-file '("rakelib/changelogs.rake"
+                                      "rakelib/epoch.rake"
+                                      "rakelib/version.rake"))))
+          (add-after 'extract-gemspec 'adjust-files
+            (lambda _
+              (substitute* "ruby2_keywords.gemspec"
+                ;; This file is not present in the git checkout.
+                ((".*\"ChangeLog\",.*") "")))))))
+    (synopsis "Shim library for Module#ruby2_keywords")
+    (description "Provides empty @code{Module#ruby2_keywords} method, for the
+forward source-level compatibility against @command{ruby2.7} and
+@command{ruby3}.")
+    (home-page "https://github.com/ruby/ruby2_keywords")
+    (license license:bsd-2)))
+
+(define-public ruby-rubypants
+  (package
+    (name "ruby-rubypants")
+    (version "0.6.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "rubypants" version))
+              (sha256
+               (base32
+                "0xpqkslan2wkyal2h9qhplkr5d4sdn7q6csigrhnljjpp8j4qfsh"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; need Codecov
+    (synopsis "Port of the smart-quotes library SmartyPants")
+    (description
+     "RubyPants is a Ruby port of the smart-quotes library SmartyPants.  The
+original SmartyPants is a web publishing plug-in for Movable Type, Blosxom,
+and BBEdit that easily translates plain ASCII punctuation characters into
+smart typographic punctuation HTML entities.")
+    (home-page "https://github.com/jmcnevin/rubypants")
+    (license license:bsd-2)))
+
+(define-public ruby-org-ruby
+  (package
+    (name "ruby-org-ruby")
+    (version "0.9.12")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "org-ruby" version))
+              (sha256
+               (base32
+                "0x69s7aysfiwlcpd9hkvksfyld34d8kxr62adb59vjvh8hxfrjwk"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; no rakefile
+    (propagated-inputs
+     (list ruby-rubypants))
+    (synopsis "Org-mode parser written in Ruby")
+    (description
+     "Org-ruby is an org-mode parser written in Ruby.  The most significant
+thing this library does today is convert org-mode files to HTML or Textile or
+Markdown.")
+    (home-page "https://github.com/wallyqs/org-ruby")
+    (license license:expat)))
+
+(define-public ruby-rake-manifest
+  (package
+    (name "ruby-rake-manifest")
+    (version "0.2.3")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/mvz/rake-manifest")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "16k2yvg773c25kp2vhzhp01rhf53k0nhrcmpv34k1fridw90r2k8"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:test-target "default"
+      #:phases
+      #~(modify-phases %standard-phases
+          (delete 'check)               ;moved after the install phase
+          (add-after 'install 'check
+            (assoc-ref %standard-phases 'check))
+          (add-before 'check 'set-GEM_PATH
+            (lambda _
+              (setenv "GEM_PATH" (string-append
+                                  (getenv "GEM_PATH") ":"
+                                  #$output "/lib/ruby/vendor_ruby")))))))
+    (native-inputs (list ruby-rspec ruby-simplecov))
+    (synopsis "Rake tasks to generate and check a manifest file")
+    (description "This package provides Rake tasks to generate and check a
+manifest file.")
+    (home-page "https://github.com/mvz/rake-manifest")
+    (license license:expat)))
+
+(define-public ruby-sfl
+  (package
+    (name "ruby-sfl")
+    (version "2.3")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "sfl" version))
+              (sha256
+               (base32
+                "1qm4hvhq9pszi9zs1cl9qgwx1n4wxq0af0hq9sbf6qihqd8rwwwr"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f  ;; some tests fail, gem is a dummy for ruby >= 1.9 anyway
+       #:test-target "spec"))
+    (synopsis "Spawn for Ruby 1.8")
+    (description "This pure ruby library provides @code{spawn()} which is
+almost perfectly compatible with ruby 1.9's.")
+    (home-page "https://github.com/ujihisa/spawn-for-legacy")
+    (license license:bsd-2)))
+
+(define-public ruby-childprocess
+  (package
+    (name "ruby-childprocess")
+    (version "4.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "childprocess" version))
+       (sha256
+        (base32
+         "1lvcp8bsd35g57f7wz4jigcw2sryzzwrpcgjwwf3chmjrjcww5in"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f  ;; one failing test, even with fixes below
+       #:test-target "spec"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch
+           (lambda _
+             (substitute* "spec/spec_helper.rb"
+               (("#!/bin/sh\\\\n") (string-append "#!" (which "sh") "\\n"))))))))
+    (native-inputs
+     (list ruby-coveralls ruby-rspec))
+    (synopsis "Control external programs running in the background, in Ruby")
+    (description "@code{childprocess} provides a gem to control external
+programs running in the background, in Ruby.")
+    (home-page "https://github.com/enkessler/childprocess")
+    (license license:expat)))
+
+(define-public ruby-public-suffix
+  (package
+    (name "ruby-public-suffix")
+    (version "4.0.5")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "public_suffix" version))
+              (sha256
+               (base32
+                "0vywld400fzi17cszwrchrzcqys4qm6sshbv73wy5mwcixmrgg7g"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; Remove the requirement on Rubocop, as it isn't useful to run, and
+         ;; including it as an input can lead to circular dependencies.
+         (add-after 'unpack 'remove-rubocop-from-Rakefile
+           (lambda _
+             (substitute* "Rakefile"
+               (("require \"rubocop/rake\\_task\"") "")
+               (("RuboCop::RakeTask\\.new") "")))))))
+    (native-inputs
+     (list bundler ruby-yard/minimal ruby-mocha ruby-minitest-reporters))
+    (home-page "https://simonecarletti.com/code/publicsuffix-ruby/")
+    (synopsis "Domain name parser")
+    (description "The gem @code{public_suffix} is a domain name parser,
+written in Ruby, and based on the @dfn{Public Suffix List}.  A public suffix
+is one under which Internet users can (or historically could) directly
+register names.  Some examples of public suffixes are @code{.com},
+@code{.co.uk} and @code{pvt.k12.ma.us}.  The Public Suffix List is a list of
+all known public suffixes.")
+    (license license:expat)))
+
+(define-public ruby-addressable
+  (package
+    (name "ruby-addressable")
+    (version "2.8.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "addressable" version))
+              (sha256
+               (base32
+                "1ypdmpdn20hxp5vwxz3zc04r5xcwqc25qszdlg41h8ghdqbllwmw"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:test-target "spec"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-bundler
+           (lambda _
+             (substitute* "spec/spec_helper.rb"
+               (("require 'bundler/setup'") ""))))
+         (add-after 'unpack 'remove-unnecessary-dependencies-from-Gemfile
+           (lambda _
+             (substitute* "Gemfile"
+               (("git: 'https://github.com/sporkmonger/rack-mount.git',") "")
+               ((".*launchy.*") "")
+               ((".*rake.*") "gem 'rake'\n")
+               ((".*redcarpet.*") ""))))
+         (add-before 'check 'delete-network-dependent-test
+           (lambda _
+             (delete-file "spec/addressable/net_http_compat_spec.rb"))))))
+    (native-inputs
+     (list bundler
+           ruby-idn-ruby
+           ruby-rspec
+           ruby-rspec-its-minimal
+           ruby-simplecov
+           ruby-sporkmonger-rack-mount
+           ruby-yard/minimal))
+    (propagated-inputs
+     (list ruby-public-suffix))
+    (home-page "https://github.com/sporkmonger/addressable")
+    (synopsis "Alternative URI implementation")
+    (description "Addressable is a replacement for the URI implementation that
+is part of Ruby's standard library.  It more closely conforms to RFC 3986,
+RFC 3987, and RFC 6570 (level 4), providing support for IRIs and URI templates.")
+    (license license:asl2.0)))
+
+(define-public ruby-colorize
+  (package
+    (name "ruby-colorize")
+    (version "0.8.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "colorize" version))
+              (sha256
+               (base32
+                "133rqj85n400qk6g3dhf2bmfws34mak1wqihvh3bgy9jhajw580b"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:phases (modify-phases %standard-phases
+                  (add-before 'check 'remove-codeclimate-dependency
+                    (lambda _
+                      (substitute* "test/test_colorize.rb"
+                        ;; Do not hook the tests into the online CodeClimate
+                        ;; service which is unnecessary for these tests.
+                        (("require 'codeclimate-test-reporter'")
+                         "")
+                        (("CodeClimate.*") "")))))))
+    (synopsis "Add color effects to the @code{String} class")
+    (description
+     "This package extends the @code{String} class and adds a
+@code{ColorizedString} with methods to set text color, background color,
+and text effects.")
+    (home-page "https://github.com/fazibear/colorize")
+    (license license:gpl2+)))
+
+(define-public ruby-colorator
+  (package
+    (name "ruby-colorator")
+    (version "1.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "colorator" version))
+              (sha256
+               (base32
+                "0f7wvpam948cglrciyqd798gdc6z3cfijciavd0dfixgaypmvy72"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; No test target
+     `(#:tests? #f))
+    (home-page "http://octopress.org/colorator/")
+    (synopsis "Terminal color library")
+    (description "Colorator is a Ruby gem that helps you colorize your text
+for the terminal.")
+    (license license:expat)))
+
+(define-public ruby-command-line-reporter
+  (package
+    (name "ruby-command-line-reporter")
+    (version "4.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "command_line_reporter" version))
+              (sha256
+               (base32
+                "1l0zxkh5n9dxfw46lpkg416ljpldlq1bgdhqh0d118dk338nz4ll"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; No Rakefile
+     `(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'fix-dependencies
+           (lambda _
+             (substitute* ".gemspec"
+               ;; colored is unmaintained
+               (("colored") "colorator")
+               ;; colorator version
+               (("= 1.2") "= 1.1")))))))
+    (propagated-inputs (list ruby-colorator))
+    (home-page "https://github.com/wbailey/command_line_reporter")
+    (synopsis "Report production while executing Ruby scripts")
+    (description "This gem provides a DSL that makes it easy to write reports
+of various types in ruby.  It eliminates the need to litter your source with
+puts statements, instead providing a more readable, expressive interface to
+your application.")
+    (license license:asl2.0)))
+
+(define-public ruby-command-line-reporter-3
+  (package
+    (inherit ruby-command-line-reporter)
+    (version "3.3.6")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "command_line_reporter" version))
+              (sha256
+               (base32
+                "1h39zqqxp3k4qk49ajpx0jps1vmvxgkh43mqkb6znk583bl0fv71"))))))
+
+(define-public ruby-kpeg
+  (package
+  (name "ruby-kpeg")
+  (version "1.3.3")
+  (source
+    (origin
+      (method url-fetch)
+      (uri (rubygems-uri "kpeg" version))
+      (sha256
+        (base32
+          "0jxddpyb23digcd8b1b02gn94057a7mw17680c3c8s3bcb5xqfnp"))))
+  (build-system ruby-build-system)
+  (native-inputs
+   (list ruby-hoe))
+  (synopsis "PEG library for Ruby")
+  (description "KPeg is a simple PEG library for Ruby.  It provides an API as
+well as native grammar to build the grammar.  KPeg supports direct left
+recursion of rules via the
+@uref{http://www.vpri.org/pdf/tr2008003_experimenting.pdf,OMeta memoization}
+technique.")
+  (home-page "https://github.com/evanphx/kpeg")
+  (license license:expat)))
+
+(define-public ruby-rdoc
+  (package
+    (name "ruby-rdoc")
+    (version "6.7.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/ruby/rdoc")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0dy997zi7k17c2yjlq1y7zl9yaiym1f4jgfh84qqzhwl1qm6v41j"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'generate
+           ;; 'gem build' doesn't honor Rakefile dependencies (see:
+           ;; https://github.com/ruby/rdoc/issues/432#issuecomment-650808977).
+           (lambda _
+             (invoke "rake" "generate"))))))
+    (native-inputs (list bundler ruby-kpeg ruby-racc ruby-rubocop
+                         ruby-test-unit-ruby-core))
+    (home-page "https://ruby.github.io/rdoc/")
+    (synopsis "HTML and command-line documentation utility")
+    (description "RDoc produces HTML and command-line documentation for Ruby
+projects.  RDoc includes the +rdoc+ and +ri+ tools for generating and displaying
+documentation from the command-line.")
+    (license license:gpl2+)))
+
+(define-public ruby-sass-listen
+  (package
+    (name "ruby-sass-listen")
+    (version "4.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "sass-listen" version))
+              (sha256
+               (base32
+                "0xw3q46cmahkgyldid5hwyiwacp590zj2vmswlll68ryvmvcp7df"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; No test target
+     `(#:tests? #f))
+    (propagated-inputs
+     (list ruby-rb-fsevent ruby-rb-inotify))
+    (home-page "https://github.com/sass/listen")
+    (synopsis "File modification notification library")
+    (description "The Listen gem listens to file modifications and notifies you
+about the changes.")
+    (license license:expat)))
+
+(define-public ruby-terminfo
+  (let ((commit "f4a597d92dcc465e7b343f9afb8cd45607c8e969")
+        (revision "0"))
+    (package
+      (name "ruby-terminfo")
+      (version (git-version "0.2" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri
+          (git-reference
+           (url "https://github.com/genki/ruby-terminfo")
+           (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0b24sqf0jwj8m106nh35hjayw1kiyrpramb6vg7fnz32mqni6hdi"))))
+      (build-system ruby-build-system)
+      (arguments
+       (list
+        #:phases
+        #~(modify-phases %standard-phases
+            (delete 'replace-git-ls-files)
+            (replace 'build
+              (lambda _
+                (invoke "ruby" "extconf.rb")
+                (invoke "make")))
+            (replace 'check
+              (lambda* (#:key tests? #:allow-other-keys)
+                (when tests?
+                  (for-each (lambda (f)
+                              (invoke "ruby" "-Ilib:test" "-Ilib:." f))
+                            (find-files "test" "^test_.*\\.rb$")))))
+            (replace 'install
+              (lambda _
+                (invoke "make" "install" (string-append "prefix=" #$output)))))))
+      (inputs
+       (list ncurses))
+      (native-inputs
+       (list ruby-rubygems-tasks ruby-rdoc))
+      (home-page "http://www.a-k-r.org/ruby-terminfo/")
+      (synopsis "Terminfo binding for Ruby")
+      (description "Ruby-terminfo provides terminfo binding for Ruby.")
+      (license license:bsd-3))))
+
+(define-public ruby-diffy
+  (package
+    (name "ruby-diffy")
+    (version "3.2.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "diffy" version))
+        (sha256
+          (base32
+            "119imrkn01agwhx5raxhknsi331y5i4yda7r0ws0an6905ximzjg"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; No tests
+     `(#:tests? #f))
+    (native-inputs
+     (list ruby-rspec))
+    (home-page "https://github.com/samg/diffy")
+    (synopsis "Convenient diffing in ruby")
+    (description "Diffy provides a convenient way to generate a diff from two
+strings or files.")
+    (license license:expat)))
+
+(define-public ruby-sass-spec
+  (package
+    (name "ruby-sass-spec")
+    (version "3.5.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/sass/sass-spec")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1zsw66830w0xlc7kxz6fm4b5nyb44vdsdgm9mgy06s5aixx83pwr"))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     (list ruby-command-line-reporter-3
+           ruby-diffy))
+    (arguments
+     (list
+      ;; This package contains tests for a sass implementation, and the to
+      ;; avoid any circular dependencies, the tests are not run here
+      #:tests? #f
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch-test
+            (lambda _
+              (delete-file "spec/values/colors/alpha_hex-3.5/error")
+              (substitute* "spec/values/colors/alpha_hex-3.5/expected_output.css"
+                (("string") "color")))))))
+    (home-page "https://github.com/sass/sass-spec")
+    (synopsis "Test suite for Sass")
+    (description "Sass Spec is a test suite for Sass.  Test cases are all in
+the @file{spec} directory.")
+    (license license:expat)))
+
+(define-public ruby-sass
+  (package
+    (name "ruby-sass")
+    (version "3.7.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/sass/ruby-sass")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "03215h9jkni3l9w6lq28p8adaj3qzb47qgxd20l6kldjnm1a1yky"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:test-target "test:ruby"))
+    (propagated-inputs
+     (list ruby-sass-listen))
+    (native-inputs
+     (list ruby-sass-spec ruby-mathn ruby-cmath))
+    (home-page "https://sass-lang.com/")
+    (synopsis "CSS extension language")
+    (description "Sass is a CSS extension language.  It extends CSS with
+features that don't exist yet like variables, nesting, mixins and inheritance.")
+    (license license:expat)))
+
+(define-public ruby-sassc
+  (package
+    (name "ruby-sassc")
+    (version "2.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "sassc" version))
+       (sha256
+        (base32
+         "0gpqv48xhl8mb8qqhcifcp0pixn206a7imc07g48armklfqa4q2c"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:modules ((guix build ruby-build-system)
+                  (guix build utils)
+                  (ice-9 textual-ports))
+       #:phases
+       (modify-phases %standard-phases
+         ;; TODO: This would be better as a snippet, but the ruby-build-system
+         ;; doesn't seem to support that
+         (add-after 'unpack 'remove-libsass
+           (lambda _
+             (delete-file-recursively "ext")
+             (with-atomic-file-replacement "sassc.gemspec"
+               (lambda (in out)
+                 (let* ((gemspec (get-string-all in))
+                        (index (string-contains gemspec "libsass_dir")))
+                   (display (string-append
+                             (string-take gemspec index)
+                             "\nend\n")
+                            out))))))
+         (add-after 'unpack 'dont-check-the-libsass-version
+           (lambda _
+             (substitute* "test/native_test.rb"
+               (("assert_equal.*Native\\.version") ""))))
+         (add-after 'unpack 'remove-git-from-gemspec
+           (lambda _
+             (substitute* "sassc.gemspec"
+               (("`git ls-files -z`") "`find . -type f -print0 |sort -z`"))))
+         (add-after 'unpack 'remove-extensions-from-gemspec
+           (lambda _
+             (substitute* "sassc.gemspec"
+               (("\\[\"ext/extconf.rb\"\\]") "[]"))))
+         (add-after 'unpack 'fix-Rakefile
+           (lambda _
+             (substitute* "Rakefile"
+               (("test: 'compile:libsass'") ":test"))))
+         (add-after 'unpack 'remove-unnecessary-dependencies
+           (lambda _
+             (substitute* "test/test_helper.rb"
+               (("require \"pry\"") ""))))
+         (add-before 'build 'patch-native.rb
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "lib/sassc/native.rb"
+               ((".*gem_root = spec.gem_dir") "")
+               (("ffi_lib .*\n")
+                (string-append
+                 "ffi_lib '" (assoc-ref inputs "libsass") "/lib/libsass.so'")))))
+         ;; The gemspec still references the libsass files, so just keep the
+         ;; one in the gem.
+         (delete 'extract-gemspec))))
+    (propagated-inputs
+     (list ruby-ffi ruby-rake))
+    (inputs
+     (list libsass))
+    (native-inputs
+     (list bundler ruby-rake-compiler ruby-minitest-around
+           ruby-test-construct))
+    (synopsis "Use libsss from Ruby")
+    (description
+     "This library provides Ruby q@acronym{FFI, Foreign Function Interface}
+bindings to the libsass library.  This enables rendering
+@acronym{SASS,Syntactically awesome style sheets} from Ruby code.")
+    (home-page "https://github.com/sass/sassc-ruby")
+    (license license:expat)))
+
+(define-public ruby-jekyll-sass-converter
+  (package
+    (name "ruby-jekyll-sass-converter")
+    (version "2.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "jekyll-sass-converter" version))
+              (sha256
+               (base32
+                "04ncr44wrilz26ayqwlg7379yjnkb29mvx4j04i62b7czmdrc9dv"))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     (list ruby-sass))
+    (arguments
+     ;; No rakefile
+     `(#:tests? #f))
+    (home-page "https://github.com/jekyll/jekyll-sass-converter")
+    (synopsis "Sass converter for Jekyll")
+    (description "This gem provide built-in support for the Sass converter
+in Jekyll.")
+    (license license:expat)))
+
+(define-public ruby-jekyll-watch
+  (package
+    (name "ruby-jekyll-watch")
+    (version "2.1.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "jekyll-watch" version))
+              (sha256
+               (base32
+                "1s9ly83sp8albvgdff12xy2h4xd8lm6z2fah4lzmk2yvp85jzdzv"))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     (list ruby-listen))
+    (arguments
+     ;; No rakefile
+     `(#:tests? #f))
+    (home-page "https://github.com/jekyll/jekyll-watch")
+    (synopsis "Jekyll auto-rebuild support")
+    (description "This gems add the @code{--watch} switch to the jekyll CLI
+interface.  It allows Jekyll to rebuild your site when a file changes.")
+    (license license:expat)))
+
+(define-public ruby-parallel
+  (package
+    (name "ruby-parallel")
+    (version "1.21.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/grosser/parallel")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1xqjcvl3gq3shvrqp8wc3fbqibzh4mf1yczq6np9gd79558dwj3w"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(;; TODO 3 test failures
+       ;; rspec ./spec/parallel_spec.rb:190 # Parallel.in_processes does not
+       ;; open unnecessary pipes
+       ;; rspec './spec/parallel_spec.rb[1:9:7]' # Parallel.each works with
+       ;; SQLite in processes
+       ;; rspec './spec/parallel_spec.rb[1:9:16]' # Parallel.each works with
+       ;; SQLite in threads
+       #:tests? #f
+       #:test-target "rspec-rerun:spec"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-Gemfile
+           (lambda _
+             (substitute* "Gemfile"
+               (("gem 'rspec-legacy_formatters'") "")
+               (("gem 'activerecord.*$") "gem 'activerecord'\n"))))
+         (add-before 'check 'delete-Gemfile.lock
+           (lambda _
+             ;; Bundler isn't being used for fetching dependencies, so
+             ;; delete the Gemfile.lock
+             (delete-file "Gemfile.lock")))
+         (add-before 'build 'patch-gemspec
+           (lambda _
+             (substitute* "parallel.gemspec"
+               (("git ls-files") "find")))))))
+    (native-inputs
+     (list ruby-rspec
+           ruby-rspec-rerun
+           bundler
+           ruby-activerecord
+           ruby-progressbar
+           ruby-bump
+           procps
+           lsof
+           ruby-mysql2
+           ruby-sqlite3
+           ruby-i18n))
+    (home-page "https://github.com/grosser/parallel")
+    (synopsis "Parallel processing in Ruby")
+    (description "Parallel allows you to run any code in parallel Processes
+(to use all CPUs) or Threads(to speedup blocking operations).  It is best
+suited for map-reduce or e.g. parallel downloads/uploads.")
+    (license license:expat)))
+
+(define-public ruby-cabin
+  (package
+    (name "ruby-cabin")
+    (version "0.9.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "cabin" version))
+              (sha256
+               (base32
+                "0b3b8j3iqnagjfn1261b9ncaac9g44zrx1kcg81yg4z9i513kici"))))
+    (build-system ruby-build-system)
+    (arguments (list #:tests? #f))      ;no Rakefile in released gem
+    (synopsis "Structured and contextual logging experiments in Ruby")
+    (description "This Ruby library provides an experimental logging system
+that tries to make logging more flexible and more consumable than plain-text
+logging.")
+    (home-page "https://github.com/jordansissel/ruby-cabin")
+    (license license:asl2.0)))
+
+(define-public ruby-capybara
+  (package
+    (name "ruby-capybara")
+    (version "3.38.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "capybara" version))
+              (sha256
+               (base32
+                "123198zk2ak8mziwa5jc3ckgpmsg08zn064n3aywnqm9s1bwjv3v"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:tests? #f                ;sinatra is currently broken with rack 3
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'extract-gemspec 'remove-extraneous-requirements
+                 (lambda _
+                   (substitute* "spec/spec_helper.rb"
+                     ((".*require 'selenium_statistics'.*") "")
+                     ((".*SeleniumStatistics.print_results.*") ""))))
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     (invoke "rspec" "spec")))))))
+    (native-inputs
+     (list ruby-puma
+           ruby-rspec
+           ruby-selenium-webdriver
+           ruby-sinatra))
+    (propagated-inputs
+     (list ruby-addressable
+           ruby-launchy
+           ruby-matrix
+           ruby-mini-mime
+           ruby-nokogiri
+           ruby-rack
+           ruby-rack-test
+           ruby-regexp-parser
+           ruby-xpath))
+    (synopsis "Integration testing tool for rack-based web applications")
+    (description "Capybara is an integration testing tool for rack based web
+applications.  It simulates how a user would interact with a website.")
+    (home-page "https://github.com/teamcapybara/capybara")
+    (license license:expat)))
+
+(define-public ruby-cane
+  (package
+    (name "ruby-cane")
+    (version "3.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "cane" version))
+              (sha256
+               (base32
+                "0yf5za3l7lhrqa3g56sah73wh33lbxy5y3cb7ij0a2bp1b4kwhih"))))
+    (build-system ruby-build-system)
+    (arguments `(#:tests? #f)); No rakefile
+    (home-page "https://github.com/square/cane")
+    (propagated-inputs
+     (list ruby-parallel))
+    (synopsis "Code quality threshold checking")
+    (description "Cane fails your build if code quality thresholds are not met.")
+    (license license:asl2.0)))
+
+(define-public ruby-morecane
+  (package
+    (name "ruby-morecane")
+    (version "0.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "morecane" version))
+              (sha256
+               (base32
+                "0w70vb8z5bdhvr21h660aa43m5948pv0bd27z7ngai2iwdvqd771"))))
+    (build-system ruby-build-system)
+    (home-page "https://github.com/yob/morecane")
+    (arguments `(#:tests? #f)); No rakefile
+    (propagated-inputs
+     (list ruby-parallel))
+    (synopsis "Extra checks for cane")
+    (description "The cane gem provides a great framework for running quality
+checks over your ruby project as part of continuous integration build.  It
+comes with a few checks out of the box, but also provides an API for loading
+custom checks.  This gem provides a set of additional checks.")
+    (license license:expat)))
+
+(define-public ruby-pdf-reader
+  (package
+    (name "ruby-pdf-reader")
+    (version "2.4.0")
+    (source (origin
+              (method git-fetch)        ;no test in distributed gem archive
+              (uri (git-reference
+                    (url "https://github.com/yob/pdf-reader")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1yh8yrlssf5ppnkvk4m78vmh5r5vqwdcd0gm3lqipw162llz0rai"))))
+    (build-system ruby-build-system)
+    (arguments `(#:test-target "spec"
+                 #:phases (modify-phases %standard-phases
+                            (add-after 'unpack 'do-not-use-bundler
+                              (lambda _
+                                (substitute* "spec/spec_helper.rb"
+                                  ((".*[Bb]undler.*") "")))))))
+    (native-inputs
+     (list ruby-rspec ruby-cane ruby-morecane))
+    (propagated-inputs
+     (list ruby-afm ruby-ascii85 ruby-hashery ruby-rc4 ruby-ttfunk))
+    (home-page "https://github.com/yob/pdf-reader")
+    (synopsis "PDF parser in Ruby")
+    (description "The PDF::Reader library implements a PDF parser conforming as
+much as possible to the PDF specification from Adobe.  It provides programmatic
+access to the contents of a PDF file with a high degree of flexibility.")
+    (license license:gpl3+)))
+
+(define-public ruby-pdf-inspector
+  (let ((revision "1")
+        (commit "00ee4c92ff917118785ebec188e81effc968abeb"))
+    (package
+      (name "ruby-pdf-inspector")
+      (version (git-version "1.3.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/prawnpdf/pdf-inspector")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0h9w81ddd0gvkh5n2cvny9ddb5qiac1si0dhinkk0xxh5382qs0m"))))
+      (build-system ruby-build-system)
+      (arguments
+       `(#:test-target "spec"
+         #:phases (modify-phases %standard-phases
+                    (add-before 'build 'drop-signing-key-requirement
+                      (lambda _
+                        (substitute* "pdf-inspector.gemspec"
+                          (("spec.signing_key =.*")
+                           "spec.signing_key = nil"))))
+                    (replace 'check
+                      (lambda _
+                        (substitute* "pdf-inspector.gemspec"
+                          ((".*rubocop.*") "")
+                          ((".*yard.*") ""))
+                        (invoke "rspec"))))))
+      (native-inputs
+       (list ruby-rspec))
+      (propagated-inputs
+       (list ruby-pdf-reader))
+      (home-page "https://github.com/prawnpdf/pdf-inspector")
+      (synopsis "Analysis classes for inspecting PDF output")
+      (description "This library provides a number of PDF::Reader based tools for
+use in testing PDF output.  Presently, the primary purpose of this tool is to
+support the tests found in Prawn, a pure Ruby PDF generation library.")
+      (license %prawn-project-licenses))))
+
+(define-public ruby-pdf-core
+  (package
+    (name "ruby-pdf-core")
+    (version "0.9.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "pdf-core" version))
+              (sha256
+               (base32
+                "1fz0yj4zrlii2j08kaw11j769s373ayz8jrdhxwwjzmm28pqndjg"))))
+    (build-system ruby-build-system)
+    (arguments
+     ; No test target
+     `(#:tests? #f))
+    (home-page "https://github.com/prawnpdf/pdf-core")
+    (synopsis "Low level PDF features for Prawn")
+    (description "This is an experimental gem that extracts low-level PDF
+functionality from Prawn.")
+    (license license:gpl3+)))
+
+(define-public ruby-prawn-dev
+  (package
+    (name "ruby-prawn-dev")
+    (version "0.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "prawn-dev" version))
+              (sha256
+               (base32
+                "1hbzzgm0nwc6h8pyv8h9xx068bf676rispxcz4a0sm8nykz54z4x"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:tests? #f                       ;no test suite
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'extract-gemspec 'drop-rubocop-dependency
+            ;; Rubocop depends on Prawn.  Remove it to avoid the
+            ;; dependency cycle when using this tool to build
+            ;; Prawn components.
+            (lambda _
+              (substitute* "lib/prawn/dev/tasks.rb"
+                (("require 'rubocop/rake_task'")
+                 "")
+                (("RuboCop::RakeTask.new")
+                 ""))
+              (substitute* ".gemspec"
+                ((".*add.*dependency.*(rubocop|simplecov).*")
+                 "")))))))
+    (propagated-inputs (list ruby-rake ruby-rspec ruby-yard))
+    (synopsis "Shared tools for Prawn projects development")
+    (description "Prawn-dev contains tools to aid the development of the
+various Prawn projects.")
+    (home-page "https://prawnpdf.org/")
+    (license license:expat)))
+
+(define-public ruby-prawn
+  ;; There hasn't been a new release since 2017/03/17.
+  (package
+    (name "ruby-prawn")
+    (version "2.4.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/prawnpdf/prawn")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1h1gww12wcdscij0lnd21p9zcbwrwc3miini5ppannc2birmj9ja"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'build 'drop-signing-key-requirement
+            (lambda _
+              (substitute* "prawn.gemspec"
+                (("spec.signing_key =.*")
+                 "spec.signing_key = nil"))))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                ;; The Prawn manual test fails (see:
+                ;; https://github.com/prawnpdf/prawn/issues/1163), so exclude
+                ;; it.
+                (invoke "rspec"
+                        "--exclude-pattern" "prawn_manual_spec.rb")))))))
+    (propagated-inputs
+     (list ruby-matrix
+           ruby-pdf-core
+           ruby-ttfunk))
+    (native-inputs
+     (list ruby-pdf-inspector
+           ruby-prawn-manual-builder
+           ruby-prawn-dev))
+    (home-page "https://prawnpdf.org/api-docs/2.0/")
+    (synopsis "PDF generation for Ruby")
+    (description "Prawn is a pure Ruby PDF generation library.")
+    (license %prawn-project-licenses)))
+
+(define-public ruby-prawn-table
+  (package
+    (name "ruby-prawn-table")
+    (version "0.2.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "prawn-table" version))
+              (sha256
+               (base32
+                "1nxd6qmxqwl850icp18wjh5k0s3amxcajdrkjyzpfgq0kvilcv9k"))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     (list ruby-prawn ruby-pdf-inspector))
+    (native-inputs
+     `(("bundler" ,bundler)
+       ("ruby-yard" ,ruby-yard)
+       ("ruby-mocha" ,ruby-mocha)
+       ("ruby-coderay" ,ruby-coderay)
+       ("ruby-prawn-manual-builder" ,ruby-prawn-manual-builder)
+       ("ruby-simplecov" ,ruby-simplecov)
+       ("ruby-rspec-2" ,ruby-rspec-2)))
+    (arguments
+     '(;; TODO: 1 test fails
+       ;; Failure/Error: pdf.page_count.should == 1
+       ;;   expected: 1
+       ;;        got: 2 (using ==)
+       ;; # ./spec/table_spec.rb:1308
+       ;;
+       ;; 225 examples, 1 failure
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'patch-gemspec
+           (lambda _
+             (substitute* "prawn-table.gemspec"
+               ;; Loosen the requirement for pdf-inspector
+               (("~> 1\\.1\\.0") ">= 0")
+               ;; Loosen the requirement for pdf-reader
+               (("~> 1\\.2") ">= 0"))))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "rspec")))))))
+    (home-page "https://github.com/prawnpdf/prawn-table")
+    (synopsis "Tables support for Prawn")
+    (description "This gem provides tables support for Prawn.")
+    (license license:gpl3+)))
+
+(define-public ruby-kramdown
+  (package
+    (name "ruby-kramdown")
+    (version "2.3.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "kramdown" version))
+              (sha256
+               (base32
+                "0jdbcjv4v7sj888bv3vc6d1dg4ackkh7ywlmn9ln2g9alk7kisar"))))
+    (build-system ruby-build-system)
+    (arguments `(#:tests? #f)); FIXME: some test failures
+    (native-inputs
+     (list ruby-prawn ruby-prawn-table))
+    (home-page "https://kramdown.gettalong.org/")
+    (synopsis "Markdown parsing and converting library")
+    (description "Kramdown is a library for parsing and converting a superset
+of Markdown.  It is completely written in Ruby, supports standard Markdown
+(with some minor modifications) and various extensions that have been made
+popular by the PHP @code{Markdown Extra} package and @code{Maruku}.")
+    (license license:expat)))
+
+(define-public ruby-kramdown-parser-gfm
+  (package
+    (name "ruby-kramdown-parser-gfm")
+    (version "1.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "kramdown-parser-gfm" version))
+       (sha256
+        (base32 "0a8pb3v951f4x7h968rqfsa19c8arz21zw1vaj42jza22rap8fgv"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f))                    ;no rakefile
+    (propagated-inputs
+     (list ruby-kramdown))
+    (synopsis "Kramdown parser for the GFM dialect of Markdown")
+    (description
+     "This is a parser for kramdown that converts Markdown documents in the
+GFM dialect to HTML.")
+    (home-page "https://github.com/kramdown/parser-gfm")
+    (license license:expat)))
+
+(define-public ruby-http-parser.rb
+  (package
+    (name "ruby-http-parser.rb")
+    (version "0.6.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "http_parser.rb" version))
+        (sha256
+          (base32
+            "15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; No tests
+     `(#:tests? #f))
+    (native-inputs
+     (list ruby-rake-compiler ruby-rspec))
+    (home-page "https://github.com/tmm1/http_parser.rb")
+    (synopsis "HTTP parser un Ruby")
+    (description "This gem is a simple callback-based HTTP request/response
+parser for writing http servers, clients and proxies.")
+    (license license:expat)))
+
+(define-public ruby-excon
+  (package
+    (name "ruby-excon")
+    (version "0.109.0")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/excon/excon")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "199niqbpzj70k3n6ybg4vbcw3qm76kwic4nl9747l1n0v49aaj24"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:tests? #f  ;; some tests require DNS
+      #:phases
+      #~(modify-phases %standard-phases
+          (replace 'replace-git-ls-files
+            (lambda _
+              (substitute* "excon.gemspec"
+                (("`git ls-files -- data/. lib/.`")
+                 "`find data lib -type f`"))))
+          (add-before 'check 'disable-server-spec-checks
+            (lambda _ ;; TODO: Remove this if ruby-unicorn is available.
+              ;; Some of the tests in this file require ruby-unicorn, which is
+              ;; not yet packaged for guix and would pull in a lot of other
+              ;; dependencies.
+              (delete-file "spec/excon/test/server_spec.rb"))))))
+    (native-inputs
+     (list
+      ruby-activesupport
+      ruby-eventmachine
+      ruby-json
+      ruby-open4
+      ruby-puma
+      ruby-rspec
+      ruby-shindo
+      ruby-sinatra
+      ruby-webrick))
+    (synopsis "Usable, fast, simple Ruby HTTP 1.1")
+    (description "Excon was designed to be simple, fast and performant.  It
+works great as a general HTTP(s) client and is particularly well suited to
+usage in API clients.")
+    (home-page "https://github.com/excon/excon")
+    (license license:expat)))
+
+(define-public ruby-em-websocket
+  (package
+    (name "ruby-em-websocket")
+    (version "0.5.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "em-websocket" version))
+        (sha256
+          (base32
+            "1bsw8vjz0z267j40nhbmrvfz7dvacq4p0pagvyp17jif6mj6v7n3"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; No tests
+     `(#:tests? #f))
+    (propagated-inputs
+      (list ruby-eventmachine ruby-http-parser.rb))
+    (native-inputs
+     (list bundler ruby-rspec))
+    (home-page "https://github.com/igrigorik/em-websocket")
+    (synopsis "EventMachine based WebSocket server")
+    (description "Em-websocket is an EventMachine based WebSocket server
+implementation.")
+    (license license:expat)))
+
+(define-public ruby-rouge
+  (package
+    (name "ruby-rouge")
+    (version "3.26.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "rouge" version))
+              (sha256
+               (base32
+                "197k0vskf72wxx0gzwld2jzg27bb7982xlvnzy9adlvkzp7nh8vf"))))
+    (build-system ruby-build-system)
+    (arguments `(#:tests? #f)); No rakefile
+    (home-page "http://rouge.jneen.net/")
+    (synopsis "Code highlighter")
+    (description "Rouge is a code highlighter written in Ruby.  It supports more
+than 100 languages and outputs HTML or ANSI 256-color text.  Its HTML output
+is compatible with stylesheets designed for pygments.")
+    (license (list
+               ;; rouge is licensed under expat
+               license:expat
+               ;; pygments is licensed under bsd-2
+               license:bsd-2))))
+
+(define-public ruby-hashie
+  (let ((commit "73510552ba580867e9882fe092568916cbcd810b")
+        (revision "0"))
+    (package
+      (name "ruby-hashie")
+      (version (git-version "5.0.0" revision commit))
+      (source (origin
+                (method git-fetch)        ;for tests
+                (uri (git-reference
+                      (url "https://github.com/hashie/hashie")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "08rpx040h6vgx6ynk6w029f7z7c8aj2p4v135k2l1zxvnw617ddw"))))
+      (build-system ruby-build-system)
+      (arguments
+       (list #:test-target "spec"
+             #:phases #~(modify-phases %standard-phases
+                          (add-after 'unpack 'disable-bundler
+                            (lambda _
+                              (substitute* "Rakefile"
+                                ((".*require 'bundler'.*") "")
+                                ((".*Bundler.setup.*") "")
+                                (("Bundler::GemHelper\\.install_tasks") ""))))
+                          (add-after 'unpack 'disable-rubocop
+                            (lambda _
+                              (substitute* "Rakefile"
+                                (("require 'rubocop/rake_task'") "")
+                                (("RuboCop::RakeTask.new") ""))))
+                          (add-after 'unpack 'relax-requirements
+                            (lambda _
+                              ;; Contains multiple extraneous dependencies.
+                              (delete-file "Gemfile"))))))
+      (native-inputs (list ruby-json ruby-pry ruby-rspec ruby-rspec-pending-for))
+      (home-page "https://github.com/hashie/hashie")
+      (synopsis "Extensions to Ruby Hashes")
+      (description "Hashie is a collection of classes and mixins that make Ruby
+hashes more powerful.")
+      (license license:expat))))
+
+(define-public ruby-heredoc-unindent
+  (package
+    (name "ruby-heredoc-unindent")
+    (version "1.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "heredoc_unindent" version))
+              (sha256
+               (base32
+                "14ijr2fsjwhrkjkcaz81d5xnfa4vvgvcflrff83avqw9klm011yw"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list ruby-hoe-3))
+    (home-page "https://github.com/adrianomitre/heredoc_unindent")
+    (synopsis "Heredoc indentation cleaner")
+    (description "This gem removes common margin from indented strings, such
+as the ones produced by indented heredocs.  In other words, it strips out
+leading whitespace chars at the beginning of each line, but only as much as
+the line with the smallest margin.
+
+It is acknowledged that many strings defined by heredocs are just code and
+fact is that most parsers are insensitive to indentation.  If, however, the
+strings are to be used otherwise, be it for printing or testing, the extra
+indentation will probably be an issue and hence this gem.")
+    (license license:expat)))
+
+(define-public ruby-safe-yaml
+  (package
+    (name "ruby-safe-yaml")
+    (version "1.0.5")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/dtao/safe_yaml")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1a0wh7y3va2m7bjza95na2snw0vrdh9syz40mpjvjphbc4ph3pzg"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list ruby-rspec ruby-hashie ruby-heredoc-unindent))
+    (arguments
+     (list
+      ;; Tests are broken since the move to ruby@3.
+      ;; There's ongoing effort on the Jekyll dependent
+      ;; to remove this orphan dependency.
+      #:tests? #f  ; broken since move to ruby@3
+      #:test-target "spec"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'check 'set-TZ
+            (lambda _
+              ;; This test is dependent on the timezone
+              ;; spec/transform/to_date_spec.rb:35
+              ;; # SafeYAML::Transform::ToDate converts times to the local
+              ;; timezone
+              (setenv "TZ" "UTC-11"))))))
+    (home-page "https://github.com/dtao/safe_yaml")
+    (synopsis "YAML parser")
+    (description "The SafeYAML gem provides an alternative implementation of
+YAML.load suitable for accepting user input in Ruby applications.")
+    (license license:expat)))
+
+(define-public ruby-yaml-lint
+  ;; No tags for releases.
+  (let ((commit "d6a253f7d33234a9c24660d582cf7014e882c0c2")
+        (revision "0"))
+    (package
+      (name "ruby-yaml-lint")
+      (version (git-version "0.1.2" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Pryz/yaml-lint")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0zk0jwzmcaaiyixjvkzdb54xhiqcnjkma72nkv0vm5csaphfdjkx"))))
+      (build-system ruby-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (replace 'check
+             (lambda* (#:key tests? #:allow-other-keys)
+               (when tests?
+                 (invoke "rspec")))))))
+      (native-inputs
+       (list ruby-coveralls ruby-rspec ruby-simplecov))
+      (synopsis "Simple YAML check tool")
+      (description
+       "@code{yaml-lint} will simply try to load the YAML file with the built-in
+Ruby yaml library.")
+      (home-page "https://github.com/Pryz/yaml-lint")
+      (license license:expat))))
+
+(define-public ruby-matrix
+  (package
+    (name "ruby-matrix")
+    (version "0.4.2")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ruby/matrix")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1asxr0jzh39lk5f8a9wm5avykrcy0v2wgd1bl3cszjczh99xy5k2"))))
+    (build-system ruby-build-system)
+    (synopsis "@code{Matrix} and @code{Vector} classes implementation for Ruby")
+    (description "This Ruby library provides an implementation of the
+@code{Matrix} and @code{Vector} classes.  The @code{Matrix} class represents a
+mathematical matrix.  It provides methods for creating matrices, operating on
+them arithmetically and algebraically, and determining their mathematical
+properties (trace, rank, inverse, determinant, eigensystem, etc.).  The
+@code{Vector} class represents a mathematical vector, which is useful in its
+own right, and also constitutes a row or column of a @code{Matrix}.")
+    (home-page "https://github.com/ruby/matrix")
+    (license license:bsd-2)))
+
+(define-public ruby-m
+  (package
+    (name "ruby-m")
+    (version "1.6.1")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/qrush/m")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1aycfc8l1bsln1y300fv75fknn4amjcvc4rm2kd8hb6cqivjq5rg"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'sanitize-dependencies
+            (lambda _
+              (delete-file "Gemfile")
+              (delete-file "Gemfile.lock")
+              ;; Rocco is unmaintained as of 2023/01/08; avoid depending on
+              ;; it.
+              (substitute* "m.gemspec"
+                ;; The rdiscount and rocco dependencies are used for
+                ;; generating the documentation.
+                ((".*rdiscount.*") "")
+                ((".*rocco.*") "")
+                ((".*appraisal.*") "")
+                ((".*coveralls.*") ""))
+              (substitute* "Rakefile"
+                ;; ruby-appraisal is not packaged, and is used to test against
+                ;; various dependencies; circumvent its use.
+                ((".*require 'appraisal'.*") "")
+                ((".*require 'coveralls'.*") "")
+                (("appraisal [:graphic:]+ rake")
+                 "rake")
+                (("Coveralls.push!") ""))))
+          (add-before 'replace-git-ls-files 'pre-replace-git-ls-files
+            (lambda _
+              (substitute* "m.gemspec"
+                (("git ls-files -- bin/\\*")
+                 "find bin -type f -not -regex '.*\\.gem$' | sort")
+                (("git ls-files -- \\{test,spec,features}/\\*")
+                 "find test -type f -not -regex '.*\\.gem$' | sort"))))
+          (delete 'check)
+          (add-after 'install 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (setenv "GEM_PATH" (string-append
+                                  (getenv "GEM_PATH") ":"
+                                  #$output "/lib/ruby/vendor_ruby"))
+              (when tests?
+                (invoke "rake" "test")))))))
+    (native-inputs (list ruby-activesupport))
+    (propagated-inputs (list ruby-method-source ruby-rake))
+    (synopsis "Ruby test runner that can run tests by line number")
+    (description "@code{m} stands for metal, a better test/unit and
+@code{minitest} test runner that can run tests by line number.")
+    (home-page "https://github.com/qrush/m")
+    (license license:expat)))
+
+(define-public ruby-mercenary
+  (package
+    (name "ruby-mercenary")
+    (version "0.4.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "mercenary" version))
+              (sha256
+               (base32
+                "0f2i827w4lmsizrxixsrv2ssa3gk1b7lmqh8brk8ijmdb551wnmj"))))
+    (build-system ruby-build-system)
+    (arguments `(#:test-target "spec"))
+    (native-inputs
+     (list bundler))
+    (home-page "https://github.com/jekyll/mercenary")
+    (synopsis "Command-line apps library in Ruby")
+    (description "Mercenary is a lightweight and flexible library for writing
+command-line apps in Ruby.")
+    (license license:expat)))
+
+(define-public ruby-launchy
+  (package
+    (name "ruby-launchy")
+    (version "2.5.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "launchy" version))
+              (sha256
+               (base32
+                "06r43899384das2bkbrpsdxsafyyqa94il7111053idfalb4984a"))))
+    (build-system ruby-build-system)
+    (native-inputs (list curl links ruby-simplecov))
+    (propagated-inputs (list ruby-addressable))
+    (synopsis "Ruby helper class for launching applications")
+    (description
+     "Launchy is helper class for launching applications in a fire and forget
+manner.  The aim of Launchy is to provide a common approach to launching
+external applications from within Ruby programs.")
+    (home-page "https://github.com/copiousfreetime/launchy")
+    (license license:isc)))
+
+(define-public ruby-liquid
+  (package
+    (name "ruby-liquid")
+    (version "5.4.0")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/Shopify/liquid")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1qdnvd1f9zs6wyilcgxyh93wis7ikbpimjxfpbkpk2ngr1m2c8la"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (delete 'check)               ;moved after the install phase
+          (add-after 'install 'check
+            (assoc-ref %standard-phases 'check))
+          (add-before 'check 'set-GEM_PATH
+            (lambda _
+              (setenv "GEM_PATH" (string-append
+                                  (getenv "GEM_PATH") ":"
+                                  #$output "/lib/ruby/vendor_ruby"))))
+          (add-before 'check 'delete-problematic-tests
+            (lambda _
+              ;; The following test fails with 'Unknown tag' errors (see:
+              ;; https://github.com/Shopify/liquid/issues/1699).
+              (delete-file "test/integration/tags/inline_comment_test.rb"))))))
+    (native-inputs (list ruby-liquid-c-bootstrap ruby-rspec ruby-stackprof))
+    (home-page "https://shopify.github.io/liquid/")
+    (synopsis "Template language")
+    (description "Liquid is a template language written in Ruby.  It is used
+to load dynamic content on storefronts.")
+    (license license:expat)))
+
+(define-public ruby-liquid-4
+  (package
+    (inherit ruby-liquid)
+    (name "ruby-liquid")
+    (version "4.0.4")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/Shopify/liquid")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0cr321nd0zkbxirgdfmz37xx7j26zfnicjh585fi20vx60frry83"))))
+    (arguments (list #:tests? #f))))    ;avoid required an older ruby-liquid-c
+
+;;; This variant is purposefully incomplete, lacking ruby-liquid so that it
+;;; can be used for ruby-liquid's test suite.
+(define ruby-liquid-c-bootstrap
+  (package
+    (name "ruby-liquid-c-bootstrap")
+    (version "4.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "liquid-c" version))
+              (sha256
+               (base32
+                "0jl37jz9hbfbhknryx4myxqx4n1f5dzyzmf1sapkcbw93xyrmkch"))))
+    (build-system ruby-build-system)
+    (arguments (list #:tests? #f))
+    (native-inputs (list ruby-rake-compiler))
+    (synopsis "Liquid performance extension in C")
+    (description "This package provides a Partial native implementation of the
+liquid ruby gem in C that makes it operate about three times faster.")
+    (home-page "https://github.com/shopify/liquid-c")
+    (license license:expat)))
+
+(define-public ruby-liquid-c
+  (package/inherit ruby-liquid-c-bootstrap
+    (name "ruby-liquid-c")
+    (arguments
+     (list
+      ;; Only run the unit tests, because the test:integration target fails
+      ;; with "File does not exist: test_helper" (see:
+      ;; https://github.com/Shopify/liquid-c/issues/188).
+      #:test-target "test:unit"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'extract-gemspec 'relax-requirements
+            (lambda _
+              (substitute* "Gemfile"
+                ;; Do not attempt to fetch a gem from git.
+                (("git_source\\(:github) do \\|repo_name\\|")
+                 "if false")
+                ((", github: \"Shopify/liquid\", ref: \"master\"")
+                 "")
+                ;; Remove extraneous dependencies.
+                ((".*byebug.*") "")
+                ((".*rubocop.*") "")
+                ;; Relax spy version specification.
+                (("gem \"spy\", \"0.4.1\"")
+                 "gem \"spy\", \">= 0.4.1\"")))))))
+    (native-inputs
+     (list ruby-benchmark-ips
+           ruby-rake-compiler
+           ruby-ruby-memcheck
+           ruby-spy
+           ruby-stackprof))
+    (propagated-inputs
+     (list ruby-liquid))))
+
+(define-public ruby-localhost
+  (package
+    (name "ruby-localhost")
+    (version "1.1.10")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/socketry/localhost")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1yp70w15wpfk613ap5f4y15yx4n2qqwa67vqc2f4lv7npf3llcz0"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; XXX: The test suite requires sus-fixtures-async, which requires async,
+     ;; only available for Ruby 3.0.
+     (list #:tests? #f
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'build 'remove-missing-signing-key
+                 (lambda _
+                   ;; Otherwise, the build fails with ENOENT.
+                   (substitute* "localhost.gemspec"
+                     ((".*spec.signing_key.*") "")))))))
+    (synopsis "API for generating per-user self-signed root certificates")
+    (description "This package provides @code{localhost}, a Ruby library for
+Managing a local certificate authority for self-signed, localhost development
+servers.")
+    (home-page "https://github.com/socketry/localhost")
+    (license license:expat)))
+
+(define-public ruby-forwardable-extended
+  (package
+    (name "ruby-forwardable-extended")
+    (version "2.6.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "forwardable-extended" version))
+              (sha256
+               (base32
+                "15zcqfxfvsnprwm8agia85x64vjzr2w0xn9vxfnxzgcv8s699v0v"))))
+    (build-system ruby-build-system)
+    (arguments `(#:tests? #f)); Cyclic dependency on luna-rspec-formatters
+    (home-page "https://github.com/envygeeks/forwardable-extended")
+    (synopsis "Delegation to hashes and instance variables in Forwardable")
+    (description "Forwardable Extended provides more @code{Forwardable}
+methods for your source as @code{Forwardable::Extended}.")
+    (license license:expat)))
+
+(define-public ruby-pathutil
+  (package
+    (name "ruby-pathutil")
+    (version "0.16.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "pathutil" version))
+              (sha256
+               (base32
+                "12fm93ljw9fbxmv2krki5k5wkvr7560qy8p4spvb9jiiaqv78fz4"))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     (list ruby-forwardable-extended))
+    (native-inputs
+     (list bundler ruby-rspec))
+    ;; Fails with: cannot load such file --
+    ;; /tmp/guix-build-ruby-pathutil-0.16.0.drv-0/gem/benchmark/support/task
+    (arguments `(#:tests? #f))
+    (home-page "https://github.com/envygeeks/pathutil")
+    (synopsis "Extended implementation of Pathname")
+    (description "Pathutil tries to be a faster pure Ruby implementation of
+Pathname.")
+    (license license:expat)))
+
+(define-public ruby-terminal-table
+  (package
+    (name "ruby-terminal-table")
+    (version "3.0.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/tj/terminal-table")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1c3f7ng3lxq962n8sbmlsvjx6srh5i801wzsyhxmfz2g880f5jps"))))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'remove-unnecessary-dependencies
+           (lambda _
+             (substitute* "terminal-table.gemspec"
+               (("s.add_runtime_dependency.*") "\n")
+               (("s.add_development_dependency.*") "\n"))
+             (substitute* "Gemfile"
+               ((".*tins.*") "\n"))))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "rspec")))))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     (list ruby-unicode-display-width))
+    (native-inputs
+     (list ruby-rspec ruby-term-ansicolor))
+    (home-page "https://github.com/tj/terminal-table")
+    (synopsis "Simple, feature rich ASCII table generation library")
+    (description
+     "Terminal Table is a fast and simple, yet feature rich
+table generator written in Ruby.  It supports ASCII and
+Unicode formatted tables.")
+    (license license:expat)))
+
+(define-public jekyll
+  (package
+    (name "jekyll")
+    (version "4.3.4")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/jekyll/jekyll")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0sz285x5ppbifrnixi9sdzv28kg4x3qbzds3qniiwh1ip9hi1yk4"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:modules '((guix build ruby-build-system)
+                       (guix build utils)
+                       (ice-9 ftw)
+                       (srfi srfi-26))
+           ;; The cucumber acceptance suite is not run as it depends on an old
+           ;; version (5).
+           #:test-target "spec"
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'check 'disable-problematic-tests
+                 ;; TODO: Package the missing test inputs.
+                 (lambda _
+                   (with-directory-excursion "test"
+                     ;; Requires 'jekyll-coffeescript'.
+                     (delete-file "test_coffeescript.rb")
+                     ;; Requires 'tomlrb'.
+                     (delete-file "test_configuration.rb")
+                     (substitute* "test_filters.rb"
+                       ;; The sassify tests fail due to white space
+                       ;; differences (see:
+                       ;; https://github.com/jekyll/jekyll/issues/9322).
+                       ((".*s?ssify with simple string.*" all)
+                        (string-append all
+                                       "      skip('fails on guix')\n")))
+                     ;; Requires kramdown-syntax-coderay.
+                     (delete-file "test_kramdown.rb")
+                     ;; Requires 'test-theme', usually made available from the
+                     ;; local checkout via Bundler (not used here).
+                     (delete-file "test_layout_reader.rb")
+                     ;; Requires a large amount of un-packaged dependencies.
+                     (delete-file "test_plugin_manager.rb")
+                     ;; Requires 'classifier-reborn'.
+                     (delete-file "test_related_posts.rb")
+                     ;; This one causes a test failure similar to the ones for
+                     ;; sassify above.
+                     (delete-file "test_sass.rb")
+                     ;; This would require running the tests via 'bundle
+                     ;; exec', but the Gemfile contains too many (extraneous)
+                     ;; dependencies.
+                     (delete-file "test_site.rb")
+                     ;; Delete the theme tests, as they require 'test-theme',
+                     ;; usually made available from the local checkout via the
+                     ;; Gemfile/bundler (not used here).
+                     (for-each delete-file
+                               (scandir
+                                "." (cut string-prefix? "test_theme" <>)))
+                     ;; This one also relies on 'test-theme'.
+                     (delete-file "test_liquid_renderer.rb")
+                     ;; This test assumes internet connectivity, negate it, as
+                     ;; there's no Internet in the build container.
+                     (substitute* "test_utils.rb"
+                       (("assert Utils::Internet\\.connected\\?")
+                        "refute Utils::Internet.connected?"))
+                     ;; These tests fail non-deterministically (see:
+                     ;; https://github.com/jekyll/jekyll/issues/9323).
+                     (delete-file "test_new_command.rb")
+                     (delete-file "test_collections.rb"))))
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     ;; Invoke the test scripts manually, as 'rake test'
+                     ;; doesn't show any failure details, making debugging
+                     ;; needlessly difficult.
+                     (for-each (lambda (f)
+                                 (invoke "ruby" "-I" "test" f))
+                               (find-files "test" "^test_.*\\.rb$"))))))))
+    (native-inputs
+     (list bundler
+           ruby-httpclient
+           ruby-minitest-profile
+           ruby-minitest-reporters
+           ruby-nokogiri
+           ruby-rspec
+           ruby-rspec-mocks
+           ruby-shoulda
+           ruby-simplecov))
+    (propagated-inputs
+     (list ruby-addressable
+           ruby-colorator
+           ruby-em-websocket
+           ruby-i18n
+           ruby-jekyll-sass-converter
+           ruby-jekyll-watch
+           ruby-kramdown-parser-gfm
+           ruby-liquid-4
+           ruby-mercenary
+           ruby-pathutil
+           ruby-rouge
+           ruby-safe-yaml
+           ruby-sassc
+           ruby-terminal-table
+           ruby-webrick))
+    (home-page "https://jekyllrb.com/")
+    (synopsis "Static site generator")
+    (description "Jekyll is a simple, blog aware, static site generator.")
+    (license license:expat)))
+
+(define-public ruby-jekyll-paginate-v2
+  (package
+    (name "ruby-jekyll-paginate-v2")
+    (version "3.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "jekyll-paginate-v2" version))
+              (sha256
+               (base32
+                "1qzlqhpiqz28624fp0ak76hfy7908w6kpx62v7z43aiwjv0yc6q0"))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     (list jekyll))
+    (home-page "https://github.com/sverrirs/jekyll-paginate-v2")
+    (synopsis "Pagination Generator for Jekyll 3")
+    (description "The Pagination Generator forms the core of the pagination
+logic in Jekyll.  It calculates and generates the pagination pages.")
+    (license license:expat)))
+
+(define-public ruby-faraday-net-http
+  (package
+    (name "ruby-faraday-net-http")
+    (version "3.0.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "faraday-net_http" version))
+              (sha256
+               (base32
+                "13byv3mp1gsjyv8k0ih4612y6vw5kqva6i03wcg4w2fqpsd950k8"))))
+    (build-system ruby-build-system)
+    ;; Do not run the test suite here as it would introduce a dependency cycle
+    ;; with ruby-faraday, which uses it as part of its test suite.
+    (arguments (list #:tests? #f))
+    (synopsis "Faraday adapter for Net::HTTP")
+    (description "This gem is a Faraday adapter for the @code{Net::HTTP}
+library.  Faraday is an HTTP client library that provides a common interface
+over many adapters.")
+    (home-page "https://github.com/lostisland/faraday-net_http")
+    (license license:expat)))
+
+(define-public ruby-faraday
+  (package
+    (name "ruby-faraday")
+    (version "2.7.4")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/lostisland/faraday")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0ya6jqa7ryr4i62mmzjjxzd8i8y0pyw0cbhifd758rs6lvkzmxa3"))))
+    (build-system ruby-build-system)
+    (arguments (list #:test-target "spec"))
+    (native-inputs
+     (list ruby-coveralls
+           ruby-pry
+           ruby-rack
+           ruby-rspec
+           ruby-simplecov
+           ruby-webmock))
+    ;; Propagate faraday-net-http as this is the default adapter used, and
+    ;; many Ruby projects assumes it is available.
+    (propagated-inputs (list ruby-ruby2-keywords ruby-faraday-net-http))
+    (synopsis "Ruby HTTP/REST API client library")
+    (description "Faraday is a HTTP/REST API client library which provides a
+common interface over different adapters.")
+    (home-page "https://github.com/lostisland/faraday")
+    (license license:expat)))
+
+(define-public ruby-nio4r
+  (package
+   (name "ruby-nio4r")
+   (version "2.5.2")
+   (source
+    (origin
+     (method url-fetch)
+     (uri (rubygems-uri "nio4r" version))
+     (sha256
+      (base32
+       "0gnmvbryr521r135yz5bv8354m7xn6miiapfgpg1bnwsvxz8xj6c"))))
+   (build-system ruby-build-system)
+   (arguments
+    '(#:phases
+      (modify-phases %standard-phases
+        (add-after 'unpack 'remove-unnecessary-dependencies
+          (lambda _
+            (substitute* "spec/spec_helper.rb"
+              ;; Coveralls is for uploading test coverage information to an
+              ;; online service, and thus unnecessary for building the Guix
+              ;; package
+              (("require \"coveralls\"") "")
+              (("Coveralls\\.wear!") "")
+              ;; Remove rspec/retry as we are not retrying the tests
+              (("require \"rspec/retry\"") "")
+              (("config\\.display_try_failure_messages = true") "")
+              (("config\\.verbose_retry = true") ""))))
+        (add-before 'check 'compile
+          (lambda _
+            (invoke "rake" "compile")))
+        (replace 'check
+          (lambda* (#:key tests? #:allow-other-keys)
+            (when tests?
+              (invoke "rspec")))))))
+   (native-inputs
+    (list bundler ruby-rake-compiler ruby-rspec ruby-rubocop))
+   (synopsis "New I/O for Ruby")
+   (description
+    "@code{nio} provides cross-platform asynchronous I/O primitives in Ruby
+for scalable network clients and servers.")
+   (home-page "https://github.com/socketry/nio4r")
+   (license license:expat)))
+
+(define-public ruby-language-server-protocol
+  (package
+    (name "ruby-language-server-protocol")
+    (version "3.17.0.3")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/mtsmfm/language_server-protocol-ruby")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0f2g301fz99c6nkca39s9227brlycznv8a9r4b4i99rg25m91lc6"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'remove-unnecessary-dependencies
+            (lambda _
+              (substitute* "Gemfile"
+                (("gem \"pry-byebug\"") ""))))
+          (replace 'replace-git-ls-files
+            (lambda _
+              (substitute* "language_server-protocol.gemspec"
+                (("git ls-files -z([^`]*)" _ files)
+                 (string-append "find " files
+                                " -type f -not -regex '.*\\.gem$'"
+                                " -print0 | sort -z"))))))))
+    (native-inputs
+     (list ruby-activesupport
+           ruby-benchmark-ips
+           ruby-m
+           ruby-minitest
+           ruby-minitest-power-assert))
+    (synopsis "Language Server Protocol (LSP) development kit for Ruby")
+    (description "This package provides a Language Server Protocol (LSP)
+development kit for Ruby.")
+    (home-page "https://github.com/mtsmfm/language_server-protocol-ruby")
+    (license license:expat)))
+
+(define-public ruby-spy
+  (package
+    (name "ruby-spy")
+    (version "1.0.5")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "spy" version))
+              (sha256
+               (base32
+                "0g2mma8q17m26k5s864ndlvvqllhcivwg2wdigjvb7z06iw17gds"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (add-after 'extract-gemspec 'relax-requirements
+                          (lambda _
+                            (substitute* "spy.gemspec"
+                              ((".*pry-byebug.*") ""))
+                            (substitute* "test/test_helper.rb"
+                              ((".*pry-byebug.*") ""))
+                            (substitute* "Gemfile"
+                              ((".*redcarpet.*") "")
+                              ((".*yard.*") "")))))))
+    (native-inputs
+     (list ruby-coveralls
+           ruby-minitest-reporters
+           ruby-pry
+           ruby-rspec-core
+           ruby-rspec-expectations))
+    (synopsis "Mocking library for Ruby")
+    (description "Spy is a mocking library.  By default, it will raise an
+error if you attempt to stub a method that doesn't exist or call the stubbed
+method with the wrong arity.")
+    (home-page "https://github.com/ryanong/spy")
+    (license license:expat)))
+
+(define-public ruby-subprocess
+  (package
+    (name "ruby-subprocess")
+    (version "1.5.6")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "subprocess" version))
+              (sha256
+               (base32
+                "0v49ahfx9b75qg42sl8a3l367g2vihc16g8z5f2raxpxjl1wh2s2"))))
+    (build-system ruby-build-system)
+    ;; Do not run the test suite, as there its test dependency ruby-sord would
+    ;; introduce a cycle with ruby-sorbet-runtime.
+    (arguments (list #:tests? #f))
+    (native-inputs (list ruby-minitest ruby-pry))
+    (synopsis "Ruby library to control and communicate with spawned processes")
+    (description "This Ruby library is controlling and communicating with
+spawned processes.  It is designed after Python's @code{subprocess} module.")
+    (home-page "https://github.com/stripe/subprocess")
+    (license license:expat)))
+
+(define-public ruby-sus
+  (package
+    (name "ruby-sus")
+    (version "0.20.3")
+    (source (origin
+              (method git-fetch)        ;for gems.rb
+              (uri (git-reference
+                    (url "https://github.com/ioquatix/sus")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0j4rkh9li79674h3lfkxlcdygscmb22l77i7hwhxl3gw103gkpdr"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'build 'prune-gems.rb
+                 (lambda _
+                   (substitute* "gems.rb"
+                     (("gem \"bake-modernize\"") "")
+                     (("gem \"bake-gem\"") "")
+                     (("gem \"utopia-project\"") ""))))
+               (add-before 'build 'remove-missing-signing-key
+                 (lambda _
+                   ;; Otherwise, the build fails with ENOENT.
+                   (substitute* "sus.gemspec"
+                     ((".*spec.signing_key.*") ""))))
+               (delete 'check)          ;moved after install
+               (add-after 'install 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     (setenv "CONSOLE_LEVEL" "debug")
+                     (setenv "HOME" "/tmp")
+                     ;; 'bundle exec' must be used to workaround a problem
+                     ;; when using bake test and GEM_PATH (see:
+                     ;; https://github.com/ioquatix/bake/issues/11).
+                     (invoke "bundle" "exec" "bake" "test"))))
+               (add-before 'check 'set-paths
+                 (lambda _
+                   (setenv "PATH" (string-append (getenv "PATH") ":"
+                                                 #$output "/bin"))
+                   (setenv "GEM_PATH" (string-append
+                                       (getenv "GEM_PATH") ":"
+                                       #$output "/lib/ruby/vendor_ruby")))))))
+    (native-inputs (list ruby-bake-test ruby-bake-test-external ruby-covered))
+    (synopsis "Fast and scalable test runner for Ruby")
+    (description "This package provides a fast and scalable test runner for Ruby.")
+    (home-page "https://github.com/ioquatix/sus")
+    (license license:expat)))
+
+(define-public ruby-syntax-tree
+  (package
+    (name "ruby-syntax-tree")
+    (version "6.1.1")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ruby-syntax-tree/syntax_tree")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0356lgvqp22nkqlrgszf7myfdg4arclg278awh34zyby1cx6hb2k"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; The tests rely on the Gem being installed, so move the check
+          ;; phase after the install phase.
+          (delete 'check)
+          (add-after 'install 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (setenv "GEM_PATH" (string-append
+                                  #$output "/lib/ruby/vendor_ruby:"
+                                  (getenv "GEM_PATH")))
+              (when tests?
+                (invoke "rake" "test")))))))
+    (native-inputs (list ruby-rubocop-ast ruby-simplecov))
+    (propagated-inputs (list ruby-prettier-print))
+    (synopsis "Fast Ruby parser and formatter")
+    (description "Syntax Tree is a suite of tools built on top of the internal
+CRuby parser.  It provides the ability to generate a syntax tree from source,
+as well as the tools necessary to inspect and manipulate that syntax tree.  It
+can be used to build formatters, linters, language servers, and more.")
+    (home-page "https://github.com/ruby-syntax-tree/syntax_tree")
+    (license license:expat)))
+
+(define-public ruby-stringio
+  (package
+    (name "ruby-stringio")
+    (version "3.1.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/ruby/stringio")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1jgi2w5y0z0x9mfapr2pdlag4wvn03fpf5kbai8bscyh8nn79yka"))))
+    (build-system ruby-build-system)
+    (native-inputs (list ruby-rake-compiler ruby-test-unit-ruby-core))
+    (synopsis "Pseudo `IO` class from and to `String`")
+    (description "Pseudo `IO` class from and to `String`.")
+    (home-page "https://github.com/ruby/stringio")
+    (license license:bsd-2)))
+
+(define-public ruby-stream
+  (package
+    (name "ruby-stream")
+    (version "0.5.5")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "stream" version))
+              (sha256
+               (base32
+                "016m9v81vpj14d8g5ins91zc4pzl7vf5f1gxl7jhfsfy601k7cv2"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'remove-version-constraints
+           (lambda _
+             (delete-file "Gemfile.lock"))))))
+    (native-inputs (list bundler ruby-stringio ruby-webrick ruby-yard))
+    (synopsis "Interface for external iterators")
+    (description "Module Stream defines an interface for external iterators.")
+    (home-page "https://github.com/monora/stream")
+    (license license:bsd-2)))
+
+(define sorbet-version "0.5.10610.20230106174520-1fa668010")
+
+(define sorbet-monorepo
+  (origin
+    (method git-fetch)
+    (uri (git-reference
+          (url "https://github.com/sorbet/sorbet")
+          (commit sorbet-version)))
+    (file-name (string-append "sorbet-" sorbet-version "-checkout"))
+    (sha256
+     (base32
+      "0f21dl06alxwn6xgdxyrkd58plmmsv04z2bcls9ld4cfzsrs5537"))))
+
+(define (make-sorbet-gem-source gem)
+  "Return the source of GEM, a sub-directory."
+  (computed-file
+   (string-append "ruby-sorbet-" gem "-" sorbet-version "-checkout")
+   (with-imported-modules (source-module-closure '((guix build utils)))
+     #~(begin
+         (use-modules (guix build utils))
+         (copy-recursively (string-append #$sorbet-monorepo
+                                          "/gems/sorbet-" #$gem)
+                           #$output)))))
+
+(define-public ruby-sorbet-runtime
+  (package
+    (name "ruby-sorbet-runtime")
+    (version sorbet-version)
+    (source (make-sorbet-gem-source "runtime"))
+    (build-system ruby-build-system)
+    ;; 25 out of 841 tests currently fail, seemingly due to invalid
+    ;; assumptions about file names in the build environment (see:
+    ;; https://github.com/sorbet/sorbet/issues/6650).
+    (arguments (list #:tests? #f))
+    (native-inputs
+     (list ruby-minitest
+           ruby-mocha
+           ruby-rubocop
+           ruby-rubocop-performance
+           ruby-concurrent-ruby
+           ruby-pry
+           ruby-parser
+           ruby-subprocess))
+    (synopsis "Runtime type checking component for Sorbet")
+    (description "Sorbet's runtime type checking component.  Sorbet is a
+powerful type checker for Ruby.")
+    (home-page "https://sorbet.org")
+    (license license:asl2.0)))
+
+(define-public ruby-mustache
+  (package
+    (name "ruby-mustache")
+    (version "1.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "mustache" version))
+       (sha256
+        (base32 "1l0p4wx15mi3wnamfv92ipkia4nsx8qi132c6g51jfdma3fiz2ch"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     `(("ruby-simplecov" ,ruby-simplecov)
+       ("test-patch"
+        ,(search-patch "ruby-mustache-1.1.1-fix-race-condition-tests.patch"))))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-tests
+           (lambda* (#:key inputs #:allow-other-keys)
+             (invoke "patch" "-p1" "--batch" "-i"
+                     (assoc-ref inputs "test-patch")))))))
+    (synopsis "Framework-agnostic way to render logic-free views")
+    (description
+     "Mustache is a framework-agnostic way to render logic-free views.
+Think of Mustache as a replacement for your views.  Instead of views
+consisting of ERB or HAML with random helpers and arbitrary logic,
+your views are broken into two parts: a Ruby class and an HTML
+template.")
+    (home-page "https://github.com/mustache/mustache")
+    (license license:expat)))
+
+(define-public ruby-mustermann
+  (package
+    (name "ruby-mustermann")
+    (version "3.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "mustermann" version))
+       (sha256
+        (base32
+         "0rwbq20s2gdh8dljjsgj5s6wqqfmnbclhvv2c2608brv7jm6jdbd"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; No tests.
+     '(#:tests? #f))
+    (synopsis "Library implementing patterns that behave like regular expressions")
+    (description "Given a string pattern, Mustermann will turn it into an
+object that behaves like a regular expression and has comparable performance
+characteristics.")
+    (home-page "https://github.com/sinatra/mustermann")
+    (license license:expat)))
+
+(define-public ruby-prettier-print
+  (package
+    (name "ruby-prettier-print")
+    (version "1.2.1")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ruby-syntax-tree/prettier_print")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "00cg40jc0il1hpsrpsrqwhsxmx7day9lxp1ksrm08zxzsrz9ykqz"))))
+    (build-system ruby-build-system)
+    (native-inputs (list ruby-simplecov))
+    (synopsis "Compatible and featureful implementation of @code{prettyprint}")
+    (description "This package provides a drop-in replacement for the
+@code{prettyprint} gem, with more functionality.")
+    (home-page "https://github.com/ruby-syntax-tree/prettier_print")
+    (license license:expat)))
+
+(define-public ruby-html-proofer
+  (package
+    (name "ruby-html-proofer")
+    (version "5.0.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/gjtorikian/html-proofer")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "01ksss3ikppc45z2q33bx8bb9785bqlp1rdqascaqg9mhs392adk"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      ;; Tests require vcr, which is under the Hippocratic license, which is
+      ;; not a free software license (see:
+      ;; https://www.gnu.org/licenses/license-list.html#hippocratic).
+      #:tests? #f
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'extract-gemspec 'relax-requirements
+            (lambda _
+              (substitute* "html-proofer.gemspec"
+                (("required_ruby_version = \\[\">= 3.1\"")
+                 "required_ruby_version = [\">= 2.6\""))))
+          (replace 'replace-git-ls-files
+            (lambda _
+              ;; The html-proofer.gemspec file contains 'all_files = %x(git
+              ;; ls-files -z).split("\x0")', but the original phase matches on
+              ;; `git ls-files -z`.
+              ;; TODO: Improve ruby-build-system patterns on core-updates.
+              (substitute* "html-proofer.gemspec"
+                (("git ls-files -z")
+                 "find . -type f -not -regex '.*\\.gem$' -print0 \
+| sort -z | cut -zc3-")))))))
+    (propagated-inputs
+     (list ruby-addressable
+           ruby-mercenary
+           ruby-nokogiri
+           ruby-parallel
+           ruby-rainbow
+           ruby-typhoeus
+           ruby-yell))
+    (synopsis "Test your rendered HTML files to make sure they're accurate")
+    (description
+     "HTMLProofer is a set of tests to validate your HTML output.  These
+tests check if your image references are legitimate, if they have alt tags,
+if your internal links are working, and so on.  It's intended to be an
+all-in-one checker for your output.")
+    (home-page "https://github.com/gjtorikian/html-proofer")
+    (license license:expat)))
+
+(define-public ruby-htmlentities
+  (package
+    (name "ruby-htmlentities")
+    (version "4.3.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "htmlentities" version))
+       (sha256
+        (base32
+         "1nkklqsn8ir8wizzlakncfv42i32wc0w9hxp00hvdlgjr7376nhj"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (map (lambda (file)
+                    (invoke "ruby" "-Itest" file))
+                  (find-files "./test" ".*_test\\.rb")))))))
+    (synopsis "Encode and decode (X)HTML entities")
+    (description
+     "This package provides a module for encoding and decoding (X)HTML
+entities.")
+    (home-page "https://github.com/threedaymonk/htmlentities")
+    (license license:expat)))
+
+;;; FIXME: Currently broken with rack 3, awaiting the merge for
+;;; https://github.com/sinatra/sinatra/pull/1857 and a new release.
+(define-public ruby-sinatra
+  (package
+    (name "ruby-sinatra")
+    (version "3.0.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "sinatra" version))
+       (sha256
+        (base32
+         "1ryfja9yd3fq8n1p5yi3qnd0pjk7bkycmxxmbb1bj0axlr1pdv20"))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     (list ruby-mustermann ruby-rack ruby-rack-protection ruby-tilt))
+    (synopsis "DSL for quick web applications creation in Ruby")
+    (description
+     "Sinatra is a DSL for quickly creating web applications in Ruby with
+minimal effort.")
+    (home-page "https://sinatrarb.com/")
+    (license license:expat)))
+
+(define-public ruby-timeout
+  (package
+    (name "ruby-timeout")
+    (version "0.4.3")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ruby/timeout")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1mw2dwyp2j05fl2gmw8cj132kk145sbxj5i0whpxcnddlc8gw781"))))
+    (build-system ruby-build-system)
+    (native-inputs (list ruby-test-unit-ruby-core))
+    (synopsis "Timeout library for Ruby")
+    (description "Timeout provides a way to auto-terminate a potentially
+long-running operation if it hasn't finished in a fixed amount of time.")
+    (home-page "https://github.com/ruby/timeout")
+    (license (list license:bsd-2))))
+
+(define-public ruby-thin
+  (package
+    (name "ruby-thin")
+    (version "1.7.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "thin" version))
+       (sha256
+        (base32
+         "0nagbf9pwy1vg09k6j4xqhbjjzrg5dwzvkn4ffvlj76fsn6vv61f"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; No tests.
+     '(#:tests? #f))
+    (propagated-inputs
+     (list ruby-daemons ruby-eventmachine ruby-rack))
+    (synopsis "Thin and fast web server for Ruby")
+    (description "Thin is a Ruby web server that glues together 3 Ruby libraries:
+@itemize
+@item the Mongrel parser,
+@item Event Machine, a network I/O library with high scalability, performance
+and stability,
+@item Rack, a minimal interface between webservers and Ruby frameworks.
+@end itemize\n")
+    (home-page "https://github.com/macournoyer/thin")
+    (license license:ruby)))
+
+(define-public ruby-truthy
+  (package
+    (name "ruby-truthy")
+    (version "1.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "truthy" version))
+              (sha256
+               (base32
+                "19silgd65j3qwfk5w891p9wcmzdmi9ddm2kg5zbvvqn2h9lkfzmd"))))
+    (build-system ruby-build-system)
+    (arguments (list #:phases #~(modify-phases %standard-phases
+                                  (replace 'check
+                                    (lambda* (#:key tests? #:allow-other-keys)
+                                      (when tests?
+                                        (substitute* "spec/spec_helper.rb"
+                                          (("require 'spec'")
+                                           "require 'rspec'"))
+                                        (invoke "rspec")))))))
+    (native-inputs (list ruby-rspec))
+    (synopsis "Object truthiness-related Ruby library")
+    (description "This library makes it easier to discover the truth values of
+various Ruby objects.")
+    (home-page "https://github.com/ymendel/truthy")
+    (license license:expat)))
+
+(define-public ruby-skinny
+  (package
+    (name "ruby-skinny")
+    (version "0.2.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "skinny" version))
+       (sha256
+        (base32
+         "1y3yvx88ylgz4d2s1wskjk5rkmrcr15q3ibzp1q88qwzr5y493a9"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f ; No included tests
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'patch-gemspec
+           (lambda _
+             (substitute* ".gemspec"
+               (("<eventmachine>.freeze, \\[\\\"~> 1.0.0\"")
+                "<eventmachine>, [\">= 1.0.0\"")
+               (("<thin>.freeze, \\[\\\"< 1.7\", ") "<thin>, [")))))))
+    (propagated-inputs
+     (list ruby-eventmachine ruby-thin))
+    (synopsis "Simple, upgradable WebSockets for Ruby Thin")
+    (description "Skinny is a simple, upgradable WebSockets for Ruby, using
+the Thin library.")
+    (home-page "https://github.com/sj26/skinny")
+    (license license:expat)))
+
+(define-public ruby-sys-filesystem
+  (package
+    (name "ruby-sys-filesystem")
+    (version "1.3.4")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "sys-filesystem" version))
+              (sha256
+               (base32
+                "0mizqnsiagagmracadr16s5na2ks2j3ih1w0f3gp4ssrda6szl01"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:phases (modify-phases %standard-phases
+                  (add-before 'check 'set-HOME
+                    (lambda _
+                      ;; Some tests attempt to stat $HOME.  Let them.
+                      (setenv "HOME" "/tmp"))))))
+    (propagated-inputs
+     (list ruby-ffi))
+    (native-inputs
+     (list ruby-mkmf-lite))
+    (synopsis "Gather file system information")
+    (description
+     "The @code{sys-filesystem} library provides a cross-platform interface
+for gathering file system information, such as disk space and mount points.")
+    (home-page "https://github.com/djberg96/sys-filesystem")
+    (license license:asl2.0)))
+
+(define-public mailcatcher
+  (package
+    (name "mailcatcher")
+    (version "0.7.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "mailcatcher" version))
+       (sha256
+        (base32
+         "02w1ycyfv7x0sh9799lz7xa65p5qvl5z4pa8a7prb68h2zwkfq0n"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; Tests require web/assets which is not included in the output.  We
+     ;; might be able to fix this by adding the Git repository to the GEM_PATH
+     ;; of the tests.  See ruby-mysql2.
+     '(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'patch-gemspec
+           (lambda _
+             (substitute* ".gemspec"
+               (("<eventmachine>.freeze, \\[\\\"= 1.0.9.1")
+                "<eventmachine>, [\">= 1.0.9.1")
+               (("<rack>.freeze, \\[\\\"~> 1.5") "<rack>, [\">= 1.5")
+               (("<thin>.freeze, \\[\\\"~> 1.5.0") "<thin>, [\">= 1.5.0")
+               (("<sinatra>.freeze, \\[\\\"~> 1.2") "<sinatra>, [\">= 1.2"))))
+         (add-before 'build 'loosen-dependency-contraint
+             (lambda _
+               (substitute* "lib/mail_catcher.rb"
+                 (("\"eventmachine\", \"1.0.9.1\"") "\"eventmachine\", \">= 1.0.9.1\"")
+                 (("\"rack\", \"~> 1.5\"") "\"rack\", \">= 1.5\"")
+                 (("\"thin\", \"~> 1.5.0\"") "\"thin\", \">= 1.5.0\"")
+                 (("\"sinatra\", \"~> 1.2\"") "\"sinatra\", \">= 1.2\"")))))))
+    (inputs
+     (list ruby-eventmachine
+           ruby-mail
+           ruby-rack
+           ruby-sinatra
+           ruby-skinny
+           ruby-sqlite3
+           ruby-thin))
+    (synopsis "SMTP server which catches messages to display them a browser")
+    (description
+     "MailCatcher runs a super simple SMTP server which catches any message
+sent to it to display in a web interface.  Run mailcatcher, set your favourite
+app to deliver to smtp://127.0.0.1:1025 instead of your default SMTP server,
+then check out http://127.0.0.1:1080 to see the mail.")
+    (home-page "https://mailcatcher.me")
+    (license license:expat)))
+
+(define-public ruby-backport
+  (package
+    (name "ruby-backport")
+    (version "1.1.2")
+    (source
+     (origin
+       ;; The gem does not include test code, so fetch from the Git repository.
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/castwide/backport")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "18fpg1n7n2z02ykz9v1x1q0cqa2lvivf8ygka768s01q1r9wfwv2"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:test-target "spec"))
+    (native-inputs
+     (list bundler ruby-rspec))
+    (inputs
+     (list ruby-simplecov))
+    (synopsis "Pure Ruby library for event-driven IO")
+    (description
+     "This package provides a pure Ruby library for event-driven IO.")
+    (home-page "https://github.com/castwide/backport")
+    (license license:expat)))
+
+(define-public ruby-json-schema
+  (package
+    (name "ruby-json-schema")
+    (version "2.8.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "json-schema" version))
+       (sha256
+        (base32
+         "1yv5lfmr2nzd14af498xqd5p89f3g080q8wk0klr3vxgypsikkb5"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f ; no tests
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'build
+           (lambda _
+             (invoke "gem" "build" ".gemspec"))))))
+    (propagated-inputs
+     (list ruby-addressable))
+    (synopsis "Ruby JSON Schema Validator")
+    (description "This library provides Ruby with an interface for validating
+JSON objects against a JSON schema conforming to JSON Schema Draft 4.  Legacy
+support for JSON Schema Draft 3, JSON Schema Draft 2, and JSON Schema Draft 1
+is also included.")
+    (home-page "https://github.com/ruby-json-schema/json-schema")
+    (license license:expat)))
+
+(define-public swagger-diff
+  (package
+    (name "swagger-diff")
+    (version "2.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "swagger-diff" version))
+       (sha256
+        (base32
+         "18kbrijkafs3vfsbaqz0cqfj7jrz3aj8xr4fgn5if63wlximybv2"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:test-target "spec"
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; Don't run or require rubocop, the code linting tool, as this is a
+          ;; bit unnecessary.
+          (add-after 'unpack 'dont-run-rubocop
+            (lambda _
+              (substitute* "Rakefile"
+                ((".*rubocop.*") "")
+                ((".*RuboCop.*") "")))))))
+    (propagated-inputs
+     (list ruby-json-schema))
+    (native-inputs
+     (list bundler ruby-rspec-core ruby-rspec-expectations))
+    (synopsis
+     "Compare Open API Initiative specification files")
+    (description
+     "Swagger::Diff is a utility for comparing two different Open API
+Initiative (OAI) specifications (formerly known as Swagger specifications).
+It is intended to determine whether a newer API specification is
+backwards-compatible with an older API specification.")
+    (home-page "https://github.com/civisanalytics/swagger-diff")
+    (license license:bsd-3)))
+
+(define-public ruby-reverse-markdown
+  (package
+    (name "ruby-reverse-markdown")
+    (version "1.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "reverse_markdown" version))
+       (sha256
+        (base32
+         "0w7y5n74daajvl9gixr91nh8670d7mkgspkk3ql71m8azq3nffbg"))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     (list ruby-nokogiri))
+    (native-inputs
+     (list bundler ruby-rspec ruby-kramdown ruby-simplecov))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "rspec")))))))
+    (synopsis "Convert HTML into Markdown")
+    (description
+     "This Ruby module allows you to map simple HTML back into
+Markdown---e.g., if you want to import existing HTML data in your
+application.")
+    (home-page "https://github.com/xijo/reverse_markdown")
+    (license license:wtfpl2)))
+
+(define-public ruby-solargraph
+  (package
+    (name "ruby-solargraph")
+    (version "0.40.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "solargraph" version))
+       (sha256
+        (base32
+         "1gf049rm0yvw4r8r5yyi890idbfg8qh0dikqx5prvkh11srl73bz"))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     (list ruby-backport
+           bundler
+           ruby-benchmark
+           ruby-e2mmap
+           ruby-jaro-winkler
+           ruby-kramdown
+           ruby-kramdown-parser-gfm
+           ruby-maruku
+           ruby-nokogiri
+           ruby-parser
+           ruby-reverse-markdown
+           ruby-rubocop
+           ruby-thor
+           ruby-tilt
+           ruby-yard))
+    (native-inputs
+     (list ruby-rspec ruby-pry ruby-simplecov ruby-webmock))
+    ;; FIXME: can't figure out how to run the tests properly:
+
+    ;; An error occurred while loading spec_helper.
+    ;; Failure/Error: return gem_original_require(path)
+    ;; LoadError:
+    ;; cannot load such file -- spec_helper
+    (arguments
+     '(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "rspec")))))))
+    (synopsis
+     "IDE tools for code completion, inline documentation, and static analysis")
+    (description
+     "Solargraph provides a comprehensive suite of tools for Ruby
+programming: intellisense, diagnostics, inline documentation, and type
+checking.")
+    (home-page "https://solargraph.org/")
+    (license license:expat)))
+
+(define-public ruby-wayback-machine-downloader
+  (package
+    (name "ruby-wayback-machine-downloader")
+    (version "2.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri
+             "wayback_machine_downloader"
+             version))
+       (sha256
+        (base32
+         "12kb1qmvmmsaihqab1prn6cmynkn6cgb4vf41mgv22wkcgv5wgk2"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f)) ; no tests
+    (synopsis "Download archived websites from the Wayback Machine")
+    (description
+     "Wayback Machine Downloader is a command line tool for downloading
+websites from the Internet Archive's Wayback Machine (archive.org).
+It allows fine grained control over what to download by specifying
+which snapshots to consider and what files to include.")
+    (home-page
+     "https://github.com/hartator/wayback-machine-downloader")
+    (license license:expat)))
+
+(define-public ruby-zeitwerk
+  (package
+    (name "ruby-zeitwerk")
+    (version "2.7.1")
+    (source
+      (origin
+        (method git-fetch)              ;for tests
+        (uri (git-reference
+               (url "https://github.com/fxn/zeitwerk")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32
+          "19qmcdpbh4bl878zd1w19064yjkpb8sxaydcasqfa7p8cfg3hnsr"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list ruby-minitest
+           ruby-minitest-focus
+           ruby-minitest-proveit
+           ruby-minitest-reporters
+           ruby-warning))
+    (synopsis "Efficient and thread-safe code loader for Ruby")
+    (description
+     "Zeitwerk implements constant autoloading with Ruby semantics.  Each gem
+and application may have their own independent autoloader, with its own
+configuration, inflector, and logger.  Supports autoloading, reloading, and
+eager loading.")
+    (home-page "https://github.com/fxn/zeitwerk")
+    (license license:expat)))
+
+(define-public ruby-warning
+  (package
+    (name "ruby-warning")
+    (version "1.5.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "warning" version))
+       (sha256
+        (base32 "0lwcf7fsz1sda1fdbqq1i4q9kzg4f5vwrzgfg1vpa1hcxagw84hg"))))
+    (build-system ruby-build-system)
+    (arguments '(#:tests? #f))  ; No tests bundled.
+    (synopsis "Custom processing for warnings")
+    (description
+     "This package adds custom processing for warnings for Ruby, including the
+ability to ignore specific warning messages, ignore warnings in specific
+files/directories, include backtraces with warnings, treat warnings as errors,
+deduplicate warnings, and add custom handling for all warnings in specific
+files/directories.")
+    (home-page "https://github.com/jeremyevans/ruby-warning")
+    (license license:expat)))
+
+(define-public ruby-wwtd
+  (package
+    (name "ruby-wwtd")
+    (version "1.4.1")
+    (home-page "https://github.com/grosser/wwtd")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url home-page)
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0gw7vfnbb41cy67yw82zji3jkhfsgmzcgzaszm99ax77y18wclf2"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Remove bundled library.
+                  (delete-file "spec/rake-12.3.0.gem")))))
+    (build-system ruby-build-system)
+    (arguments
+     '(;; XXX: Tests need multiple versions of ruby, wants to run
+       ;; `bundle install`, etc.
+       #:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (replace 'replace-git-ls-files
+                    (lambda _
+                      (substitute* "wwtd.gemspec"
+                        (("git ls-files lib/ bin/`")
+                         "find lib/ bin/ -type f |sort`"))))
+                  (add-before 'check 'remove-version-constraints
+                    (lambda _
+                      (delete-file "Gemfile.lock")))
+                  (replace 'check
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      (if tests?
+                          (invoke "rspec" "spec/")
+                          (format #t "test suite not run~%")))))))
+    (native-inputs
+     (list ruby-bump ruby-rspec))
+    (synopsis "Run @file{.travis.yml} files locally")
+    (description
+     "WWTD is a @dfn{Travis Simulator} that lets you run test matrices
+defined in @file{.travis.yml} on your local machine, using @code{rvm},
+@code{rbenv}, or @code{chruby} to test different versions of Ruby.")
+    (license license:expat)))
+
+(define-public ruby-rugged
+  ;; The last release is old and doesn't build anymore (see:
+  ;; https://github.com/libgit2/rugged/issues/951).
+  (let ((commit "6379f23cedd5f527cf6a5c229627e366b590a22d")
+        (revision "0"))
+    (package
+      (name "ruby-rugged")
+      (version (git-version "1.6.2" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/libgit2/rugged")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0yac7vm0l2jsdsxf2k7xbny4iyzsy8fhiy2g5sphhffp7xgynny8"))))
+      (build-system ruby-build-system)
+      (arguments
+       (list #:gem-flags
+             #~(list "--" "--use-system-libraries")
+             #:phases
+             #~(modify-phases %standard-phases
+                 (add-after 'unpack 'adjust-extconf.rb
+                   (lambda _
+                     ;; Neither using --with-git2-dir=$prefix nor providing
+                     ;; pkg-config allows locating the libgit2 prefix (see:
+                     ;; https://github.com/libgit2/rugged/issues/955).
+                     (substitute* "ext/rugged/extconf.rb"
+                       (("LIBGIT2_DIR = File.join.*'vendor', 'libgit2'.*")
+                        (format #f "LIBGIT2_DIR = ~s~%"
+                                #$(this-package-input "libgit2"))))))
+                 (delete 'check)        ;moved after the install phase
+                 (add-after 'install 'check
+                   (assoc-ref %standard-phases 'check))
+                 (add-before 'check 'set-GEM_PATH
+                   (lambda _
+                     (setenv "GEM_PATH" (string-append
+                                         (getenv "GEM_PATH") ":"
+                                         #$output "/lib/ruby/vendor_ruby"))))
+                 (add-before 'check 'disable-problematic-tests
+                   (lambda _
+                     (with-directory-excursion "test"
+                       (for-each delete-file
+                                 ;; These tests require an actual libgit2 git
+                                 ;; repository checkout.
+                                 '("blame_test.rb"
+                                   "blob_test.rb"
+                                   "cherrypick_test.rb"
+                                   "config_test.rb"
+                                   "commit_test.rb"
+                                   "diff_test.rb"
+                                   "index_test.rb"
+                                   "merge_test.rb"
+                                   "note_test.rb"
+                                   "object_test.rb"
+                                   "patch_test.rb"
+                                   "rebase_test.rb"
+                                   "reference_test.rb"
+                                   "remote_test.rb"
+                                   "repo_apply_test.rb"
+                                   "repo_ignore_test.rb"
+                                   "repo_pack_test.rb"
+                                   "repo_reset_test.rb"
+                                   "repo_test.rb"
+                                   "revert_test.rb"
+                                   "settings_test.rb"
+                                   "status_test.rb"
+                                   "submodule_test.rb"
+                                   "tag_test.rb"
+                                   "tree_test.rb"
+                                   "walker_test.rb"))
+                       (delete-file-recursively "online")))))))
+      (native-inputs (list git-minimal/pinned ruby-rake-compiler))
+      (inputs (list libgit2))
+      (synopsis "Ruby bindings to the libgit2 linkable C Git library")
+      (description "Rugged is a library for accessing libgit2 in Ruby.  It gives
+you the speed and portability of libgit2 with the beauty of the Ruby
+language.")
+      (home-page "https://www.rubydoc.info/gems/rugged")
+      (license license:expat))))
+
+(define-public ruby-yell
+  (package
+    (name "ruby-yell")
+    (version "2.2.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "yell" version))
+       (sha256
+        (base32
+         "1g16kcdhdfvczn7x81jiq6afg3bdxmb73skqjyjlkp5nqcy6y5hx"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (invoke "rake" "examples")))))) ; there is no test target.
+    (synopsis
+     "Extensible logging library for Ruby")
+    (description
+     "Yell is a comprehensive logging replacement for Ruby.  It defines
+multiple adapters, various log level combinations and message formatting
+options.")
+    (home-page "https://github.com/rudionrails/yell")
+    (license license:expat)))
+
+(define-public ruby-e2mmap
+  (package
+    (name "ruby-e2mmap")
+    (version "0.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "e2mmap" version))
+       (sha256
+        (base32
+         "0n8gxjb63dck3vrmsdcqqll7xs7f3wk78mw8w0gdk9wp5nx6pvj5"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f)) ;; There is a rakefile but no tests
+    (synopsis
+     "Module for defining custom exceptions with specific messages")
+    (description
+     "Exception2MessageMapper (e2mmap) is a helper module for easily defining
+exceptions with predefined messages.")
+    (home-page "https://github.com/ruby/e2mmap")
+    (license license:bsd-2)))
+
+(define-public ruby-benchmark
+  (package
+    (name "ruby-benchmark")
+    (version "0.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "benchmark" version))
+       (sha256
+        (base32
+         "0jl71qcgamm96dzyqk695j24qszhcc7liw74qc83fpjljp2gh4hg"))))
+    (build-system ruby-build-system)
+    (synopsis "Performance benchmarking library")
+    (description "This package provides methods for benchmarking Ruby code,
+giving detailed reports on the time taken for each task.")
+    (home-page "https://github.com/ruby/benchmark")
+    (license license:bsd-2)))
+
+(define-public ruby-jekyll-feed
+  (package
+    (name "ruby-jekyll-feed")
+    (version "0.15.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "jekyll-feed" version))
+        (sha256
+          (base32
+            "1zxqkrnix0xiw98531h5ga6h69jhzlx2jh9qhvcl67p8nq3sgza9"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #false))     ;there are none
+    (propagated-inputs
+      (list jekyll))
+    (synopsis
+      "Jekyll plugin to generate an Atom feed of your Jekyll posts")
+    (description
+      "This package provides a Jekyll plugin to generate an Atom feed
+of your Jekyll posts.")
+    (home-page
+      "https://github.com/jekyll/jekyll-feed")
+    (license license:expat)))
+
+(define-public ruby-jekyll-sitemap
+  (package
+    (name "ruby-jekyll-sitemap")
+    (version "1.4.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "jekyll-sitemap" version))
+        (sha256
+          (base32
+            "0622rwsn5i0m5xcyzdn86l68wgydqwji03lqixdfm1f1xdfqrq0d"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #false))     ;there are none
+    (propagated-inputs
+      (list jekyll))
+    (synopsis
+      "Automatically generate a sitemap.xml for your Jekyll site")
+    (description
+      "This package provides a Jekyll plugin to silently generate
+a sitemaps.org compliant sitemap for your Jekyll site.")
+    (home-page
+      "https://github.com/jekyll/jekyll-sitemap")
+    (license license:expat)))
+
+(define-public ruby-jekyll-seo-tag
+  (package
+   (name "ruby-jekyll-seo-tag")
+   (version "2.7.1")
+   (source
+    (origin
+     (method url-fetch)
+     (uri (rubygems-uri "jekyll-seo-tag" version))
+     (sha256
+      (base32
+       "0fsi75hymk2wswy216fs224p5ycrzjw1kshw1bsl5czhv42wr2w3"))))
+   (build-system ruby-build-system)
+   (arguments
+    `(#:tests? #false))
+   (propagated-inputs
+    (list jekyll))
+   (synopsis
+    "Jekyll plugin to add metadata tags for search engines and social networks")
+   (description
+    "This package provides a Jekyll plugin to add metadata tags for search engines
+and social networks to better index and display your site's content.")
+   (home-page
+    "https://github.com/jekyll/jekyll-seo-tag")
+   (license license:expat)))
+
+(define-public ruby-taskjuggler
+  (package
+    (name "ruby-taskjuggler")
+    (version "3.8.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "taskjuggler" version))
+       (sha256
+        (base32
+         "16d5vgz54all8vl3haqy6j69plny3np4kc3wq7wy3xa3i0h7v60z"))))
+    (build-system ruby-build-system)
+    (native-inputs (list ruby-rspec tzdata-for-tests))
+    (propagated-inputs
+     (list ruby-mail ruby-term-ansicolor))
+    (arguments
+     '(#:phases (modify-phases %standard-phases
+                  (replace 'replace-git-ls-files
+                    (lambda _
+                      (substitute* "tasks/rdoc.rake"
+                        (("`git ls-files -- lib`")
+                         "`find lib/ -type f |sort`"))))
+                  (add-before 'check 'tzdir-setup
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (setenv "TZDIR"
+                              (string-append (assoc-ref inputs "tzdata")
+                                             "/share/zoneinfo"))))
+                  (add-before 'check 'delete-test-BatchProcessor
+                    ;; test_BatchProcessor fails with exception:
+                    ;; run> terminated with exception (report_on_exception is true)
+                    (lambda _
+                      (delete-file "test/test_BatchProcessor.rb"))))))
+    (synopsis
+     "Project management command line tool with a domain specific language")
+    (description
+     "TaskJuggler (tj3) is a project management tool for project planning and
+tracking using a domain specific language; projects are plain text files
+written using your favourite text editor.  It includes reporting in HTML, CSV
+or iCalendar format and an email based status tracking system to send and
+receive time sheets from collaborators.
+
+It covers the complete spectrum of project management tasks from the first
+idea to the completion of the project.  It assists you during project scoping,
+resource assignment, cost and revenue planning, risk and communication
+management, status tracking and reporting.")
+    (home-page "https://taskjuggler.org")
+    (license license:gpl2)))
+
+(define-public ruby-cmath
+  (package
+    (name "ruby-cmath")
+    (version "1.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "cmath" version))
+       (sha256
+        (base32
+         "1xkz6xyhpkjbdvpdib8450w62rls1mjryz0gzbbnadxkxn82nb8m"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #false))
+    (native-inputs
+     (list bundler ruby-rake-compiler))
+    (synopsis "Trigonometric functions for complex numbers")
+    (description
+     "This gem is a library that provides trigonometric and transcendental
+functions for complex numbers.  The functions in this module accept integers,
+floating-point numbers or complex numbers as arguments.")
+    (home-page "https://github.com/ruby/cmath")
+    (license license:bsd-2)))
+
+(define-public ruby-sucker-punch
+  (package
+    (name "ruby-sucker-punch")
+    (version "3.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "sucker_punch" version))
+       (sha256
+        (base32 "12by9vx8q6l4i56q62k1s1ymaxbpg4rny5zngj5i5h09kyh2yp4p"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'extract-gemspec 'less-strict-dependencies
+           (lambda _
+             (substitute* "sucker_punch.gemspec"
+               (("1.0.0") "1.0")))))))
+    (native-inputs
+     (list
+      ruby-pry))
+    (propagated-inputs
+     (list
+      ruby-concurrent))
+    (home-page "https://github.com/brandonhilkert/sucker_punch")
+    (synopsis "Asynchronous processing library for Ruby")
+    (description "Sucker Punch is a single-process Ruby asynchronous processing
+library.  It is perfect for asynchronous processes like emailing, data crunching
+or social platform manipulation; and generally recommended for jobs that are
+fast and non-mission critical like logs, emails, etc.")
+    (license license:expat)))
+
+(define-public ruby-countdownlatch
+  (package
+    (name "ruby-countdownlatch")
+    (version "1.0.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "countdownlatch" version))
+        (sha256
+          (base32 "1v6pbay6z07fp7yvnba1hmyacbicvmjndd8rn2h1b5rmpcb5s0j3"))))
+    (build-system ruby-build-system)
+    (home-page "https://github.com/benlangfeld/countdownlatch")
+    (synopsis "Thread synchronization aid Ruby")
+    (description "CountDownLatch is a synchronization aid that allows one or
+more threads to wait until a set of operations being performed in other threads
+completes.")
+    (license license:expat)))
+
+(define-public ruby-value-semantics
+  (package
+    (name "ruby-value-semantics")
+    (version "3.6.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "value_semantics" version))
+        (sha256
+          (base32 "1vdwai8wf6r1fkvdpyz1vzxm89q7ghjvb3pqpg2kvwibwzd99dnx"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "rspec")))))))
+    (native-inputs
+     (list
+      ruby-rspec))
+    (home-page "https://github.com/tomdalling/value_semantics")
+    (synopsis "Ruby gem for making value classes")
+    (description "ValueSemantics generates modules that provide conventional
+value semantics for a given set of attributes.  The behaviour is similar to an
+immutable Struct class, plus extensible, lightweight validation and coercion.")
+    (license license:expat)))
+
+(define-public ruby-promise
+  (package
+    (name "ruby-promise")
+    (version "0.7.4")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "promise.rb" version))
+        (sha256
+          (base32 "0a819sikcqvhi8hck1y10d1nv2qkjvmmm553626fmrh51h2i089d"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:test-target "spec"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'extract-gemspec 'less-strict-dependencies
+           (lambda _
+             (substitute* "Rakefile"
+               (("if Gem.ruby_version.*") "if false\n"))
+             (substitute* "spec/spec_helper.rb"
+               ((".*devtools/spec_helper.*") "\n")))))))
+    (native-inputs
+     (list
+      ruby-rspec
+      ruby-rspec-its
+      ruby-awesome-print
+      ruby-fuubar))
+    (home-page "https://github.com/lgierth/promise.rb")
+    (synopsis "Asynchronous operation library for Ruby")
+    (description "Promise is a Ruby implementation of the Promises/A+
+specification.  It provides 100% mutation coverage, tested on MRI 1.9, 2.0, 2.1,
+2.2, Rubinius, and JRuby.")
+    (license license:unlicense)))
+
+(define-public ruby-multicodecs
+  (package
+    (name "ruby-multicodecs")
+    (version "0.2.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "multicodecs" version))
+        (sha256
+          (base32 "0drq267di57l9zqw6zvqqimilz42rbc8z7392dwkk8wslq30s7v8"))))
+    (build-system ruby-build-system)
+    (home-page "https://github.com/SleeplessByte/ruby-multicodec")
+    (synopsis "Ruby implementation of multiformats/multicodec")
+    (description "Multicodecs is the ruby implementation of
+multiformats/multicodec, a canonical table of of codecs used by various
+multiformats.")
+    (license license:expat)))
+
+(define-public ruby-multihashes
+  (package
+    (name "ruby-multihashes")
+    (version "0.2.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "multihashes" version))
+        (sha256
+          (base32 "17wiyy3fiv8rpgdv9ca01yncsmaaf8yg15bg18wc7m9frss1vgqg"))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     (list
+      ruby-multicodecs))
+    (home-page "https://github.com/multiformats/ruby-multihash")
+    (synopsis "Multihash implementation for Ruby")
+    (description "Multihashes provides a simple, low-level multihash
+implementation for Ruby.  A multihash is a digest with an embedded hash function
+code")
+    (license license:expat)))
+
+(define-public ruby-lazy-object
+  (package
+    (name "ruby-lazy-object")
+    (version "0.0.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "lazy_object" version))
+        (sha256
+          (base32 "08px15lahc28ik9smvw1hgamf792gd6gq0s4k94yq1h7jq25wjn8"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:test-target "spec"))
+    (home-page "https://github.com/HornsAndHooves/lazy_object")
+    (synopsis "Object wrapper that forwards all calls to the reference object")
+    (description "LazyObject is an object wrapper that forwards all calls to the
+reference object.  This object is not created until the first method dispatch.")
+    (license license:expat)))
+
+(define-public ruby-citrus
+  (package
+    (name "ruby-citrus")
+    (version "3.0.2")
+    (source
+     (origin
+       (method git-fetch)
+       ;; Download from GitHub because the rubygems version does not contain
+       ;; files needed for tests.
+       (uri (git-reference
+             (url "https://github.com/mjackson/citrus")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "197wrgqrddgm1xs3yvjvd8vkvil4h4mdrcp16jmd4b57rxrrr769"))))
+    (build-system ruby-build-system)
+    (home-page "https://mjackson.github.io/citrus/")
+    (synopsis "Parsing Expressions for Ruby")
+    (description "Citrus is a parsing library for Ruby that combines the
+expressiveness of the language with the parsing expressions.")
+    (license license:expat)))
+
+(define-public ruby-cbor
+  (package
+    (name "ruby-cbor")
+    (version "0.5.9.6")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "cbor" version))
+        (sha256
+          (base32 "0511idr8xps9625nh3kxr68sdy6l3xy2kcz7r57g47fxb1v18jj3"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:test-target "spec"))
+    (native-inputs
+     (list
+      ruby-rspec
+      ruby-rake-compiler
+      ruby-yard))
+    (home-page "https://cbor.io/")
+    (synopsis "Concise Binary Object Representation")
+    (description "CBOR is a library for the
+@acronym{CBOR, Concise Binary Object Representation} format, based on
+Sadayuki Furuhashi's MessagePack library.")
+    (license license:asl2.0)))
+
+(define-public ruby-gem-release
+  (package
+    (name "ruby-gem-release")
+    (version "2.2.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "gem-release" version))
+        (sha256
+          (base32 "108rrfaiayi14zrqbb6z0cbwcxh8n15am5ry2a86v7c8c3niysq9"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; No rakefile
+     `(#:tests? #f))
+    (home-page "https://github.com/svenfuchs/gem-release")
+    (synopsis "Ruby gem plugin for release management")
+    (description "GemRelease is a gem plugin that aims at making gem development
+easier by automating repetitive work based on conventions, configuration, and
+templates.")
+    (license license:expat)))
+
+(define-public ruby-base32
+  (package
+    (name "ruby-base32")
+    (version "0.3.4")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "base32" version))
+        (sha256
+          (base32 "1fjs0l3c5g9qxwp43kcnhc45slx29yjb6m6jxbb2x1krgjmi166b"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list
+      ruby-gem-release))
+    (home-page "https://github.com/stesla/base32")
+    (synopsis "Ruby extension for base32 encoding and decoding")
+    (description "Base32 is a library which provides base32 decoding and
+encoding.")
+    (license license:expat)))
+
+(define-public ruby-dhall
+  (package
+    (name "ruby-dhall")
+    (version "0.5.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "dhall" version))
+        (sha256
+          (base32 "09wcq8xc1ynld04r2f332bx8cn7rjc4afaq8hm1dr2fc35jlpn6m"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; No test in gem archive
+     `(#:tests? #f))
+    (propagated-inputs
+      (list
+       ruby-base32
+       ruby-cbor
+       ruby-citrus
+       ruby-lazy-object
+       ruby-multihashes
+       ruby-promise
+       ruby-value-semantics))
+    (home-page "https://git.sr.ht/~singpolyma/dhall-ruby")
+    (synopsis "Ruby implementation of the Dhall configuration language")
+    (description "Dhall.rb is a Ruby implementation of the Dhall configuration
+language.  Dhall is a memory safe and non-Turing-complete configuration
+language.")
+    (license license:gpl3+)))
+
+(define-public ruby-money
+  (package
+    (name "ruby-money")
+    (version "6.16.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "money" version))
+        (sha256
+          (base32 "0jkmsj5ymadik7bvl670bqwmvhsdyv7hjr8gq9z293hq35gnyiyg"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; No rakefile.
+     `(#:tests? #f))
+    (propagated-inputs
+     (list
+      ruby-i18n))
+    (home-page "https://rubymoney.github.io/money/")
+    (synopsis "Currency conversion library for Ruby")
+    (description "RubyMoney provides a library for dealing with money and
+currency conversion.  Its features are:
+@itemize
+@item
+Provides a Money class which encapsulates all information about a certain
+amount of money, such as its value and its currency.
+@item
+Provides a Money::Currency class which encapsulates all information about a
+monetary unit.
+@item
+Represents monetary values as integers, in cents; so avoids floating point
+rounding errors.
+@item
+Represents currency as Money::Currency instances providing a high level of
+flexibility.
+@item Provides APIs for exchanging money from one currency to another.
+@end itemize")
+    (license license:expat)))
+
+(define-public ruby-monetize
+  (package
+    (name "ruby-monetize")
+    (version "1.11.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "monetize" version))
+        (sha256
+          (base32 "0cna2myxdbwfq0gn6k2hgrh368dq7wld3jklm96443ysykd0difn"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:test-target "spec"))
+    (native-inputs
+     (list
+      ruby-rspec))
+    (propagated-inputs
+     (list
+      ruby-money))
+    (home-page "https://github.com/RubyMoney/monetize")
+    (synopsis "Convert various objects into Money objects")
+    (description "Monetize provides a library for converting various objects
+into Money objects.")
+    (license license:expat)))
+
+(define-public ruby-money-open-exchange-rates
+  (package
+    (name "ruby-money-open-exchange-rates")
+    (version "1.4.0")
+    (source
+     (origin
+       (method git-fetch)
+       ;; Download from GitHub because the rubygems version does not contain
+       ;; Rakefile.
+       (uri (git-reference
+             (url "https://github.com/spk/money-open-exchange-rates")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "11xwqli8snr19k48yh8h77sal5vxd4snzq9gxg08v61f0574m3gw"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list
+      ruby-minitest
+      ruby-mocha
+      ruby-monetize
+      ruby-rake
+      ruby-rubocop
+      ruby-timecop
+      ruby-webmock))
+    (propagated-inputs
+     (list
+      ruby-money))
+    (home-page "https://spk.github.io/money-open-exchange-rates/")
+    (synopsis "Money open exchange rates for Ruby")
+    (description "This package provides a gem that calculates the exchange rate
+using published rates from open-exchange-rates.  Compatible with the money gem.")
+    (license license:expat)))
+
+(define-public ruby-roda
+  (package
+    (name "ruby-roda")
+    (version "3.57.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "roda" version))
+        (sha256
+          (base32 "0nkfxnbcfnriywvx9kpamp850cwjmqv8ssajc95d0aiyjr4kdrfy"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; No rakefile
+     `(#:tests? #f))
+    (propagated-inputs (list ruby-rack))
+    (home-page "https://roda.jeremyevans.net")
+    (synopsis "Routing Tree Web Toolkit")
+    (description "Roda is a routing tree web toolkit, designed for building fast
+and maintainable web applications in ruby.")
+    (license license:expat)))
+
+(define-public ruby-nori
+  (package
+    (name "ruby-nori")
+    (version "2.6.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "nori" version))
+        (sha256
+          (base32 "066wc774a2zp4vrq3k7k8p0fhv30ymqmxma1jj7yg5735zls8agn"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; Tests require too old version of rspec
+     `(#:tests? #f))
+    (native-inputs
+     (list ruby-nokogiri
+            ruby-rake
+            ruby-rspec))
+    (home-page "https://github.com/savonrb/nori")
+    (synopsis "XML to Hash translator")
+    (description "Nori is a simple XML parsing ripped from Crack which in-turn
+ripped from Merb.  It supports pluggable parsers and ships with both REXML and
+Nokogiri implementations.")
+    (license license:expat)))
+
+;; This package is deprecated per upstream and should be phased out.
+(define-public ruby-faraday-middleware
+  (package
+    (name "ruby-faraday-middleware")
+    (version "1.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "faraday_middleware" version))
+       (sha256
+        (base32 "1bw8mfh4yin2xk7138rg3fhb2p5g2dlmdma88k82psah9mbmvlfy"))))
+    (build-system ruby-build-system)
+    (arguments `(#:tests? #f))
+    (propagated-inputs (list ruby-faraday))
+    (home-page "https://github.com/lostisland/faraday_middleware")
+    (synopsis "Various middleware for Faraday")
+    (description "Faraday_Middleware is a collection of middleware for the
+Faraday-based API wrappers.")
+    (license license:expat)))
+
+(define-public ruby-faraday-multipart
+  (package
+    (name "ruby-faraday-multipart")
+    (version "1.0.4")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/lostisland/faraday-multipart")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0ywxhff40a688n50lxrn4d8y096l8sbrwp1jfz4zd3kdiiygclka"))))
+    (build-system ruby-build-system)
+    (arguments (list #:test-target "spec"))
+    (native-inputs (list ruby-faraday ruby-multipart-parser ruby-rspec))
+    (propagated-inputs (list ruby-multipart-post))
+    (synopsis "Multipart-post requests extension for Faraday")
+    (description "This Ruby gem extends Faraday to perform multipart-post
+requests.")
+    (home-page "https://github.com/lostisland/faraday-multipart")
+    (license license:expat)))
+
+(define-public ruby-bandwidth-iris
+  (package
+    (name "ruby-bandwidth-iris")
+    (version "7.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "ruby-bandwidth-iris" version))
+       (sha256
+        (base32 "131c4jhyvnrwbhizkks17fi9g85cwsq5f1p8zi408zyf63n7230d"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; XXX: Tests don't require helper for some reason, so all fail.
+     `(#:tests? #f))
+    (native-inputs
+     (list ruby-rspec
+           ruby-yard))
+    (propagated-inputs
+     (list ruby-activesupport
+           ruby-builder
+           ruby-faraday
+           ruby-faraday-middleware
+           ruby-nori))
+    (home-page "https://github.com/Bandwidth/ruby-bandwidth-iris")
+    (synopsis "Gem for integrating to Bandwidth's Iris API")
+    (description "Bandwidth IRIS is a Ruby SDK for Bandwidth Phone Number
+Dashboard.  It is a Ruby Client library for IRIS / BBS API.")
+    (license license:expat)))
+
+(define-public ruby-securerandom
+  (package
+    (name "ruby-securerandom")
+    (version "0.4.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "securerandom" version))
+       (sha256
+        (base32 "1cd0iriqfsf1z91qg271sm88xjnfd92b832z49p1nd542ka96lfc"))))
+    (build-system ruby-build-system)
+    (arguments '(#:tests? #f))  ; No tests found.
+    (synopsis "Interface for secure random number generator")
+    (description "This package provides a Ruby interface for secure random
+number generators.")
+    (home-page "https://github.com/ruby/securerandom")
+    (license (list license:bsd-2))))
+
+(define-public ruby-selenium-webdriver
+  (package
+    (name "ruby-selenium-webdriver")
+    (version "4.22.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "selenium-webdriver" version))
+              (sha256
+               (base32
+                "0rjxlivsh32xvjq78p1m1sr366aa04wms4hwb2r187ygrnmp0hv4"))))
+    (build-system ruby-build-system)
+    ;; FIXME: The gem release lacks test files, and the git checkout lacks
+    ;; JavaScript source that is generated using Bazel, which isn't available
+    ;; in Guix yet, so disable the test suite for now.
+    (arguments (list #:tests? #f))
+    (propagated-inputs (list ruby-base64
+                             ruby-rexml
+                             ruby-rubyzip
+                             ruby-websocket))
+    (synopsis "Selenium browser automation bindings for Ruby")
+    (description "Selenium implements the W3C WebDriver protocol to automate
+popular browsers.  It aims to mimic the behaviour of a real user as it
+interacts with the application's HTML.  It's primarily intended for web
+application testing, but any web-based task can be automated.  This package
+provides the Ruby bindings of Selenium.")
+    (home-page "https://www.selenium.dev/")
+    (license license:asl2.0)))
+
+(define-public ruby-sentry-core
+  (package
+    (name "ruby-sentry-core")
+    (version "5.3.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "sentry-ruby-core" version))
+        (sha256
+          (base32 "141mrw8wghhsjvln9m6ld3hap3xc5v901jjiz007xywy25725hyd"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; No rakefile in gem.
+     `(#:tests? #f))
+    (propagated-inputs
+      (list ruby-concurrent
+             ruby-faraday))
+    (home-page "https://sentry.io/for/ruby/")
+    (synopsis "Client interface for the Sentry error logger")
+    (description "Sentry-Core provides a gem that provides a client
+interface for the Sentry error logger.")
+    (license license:expat)))
+
+(define-public ruby-sentry
+  (package
+    (name "ruby-sentry")
+    (version "5.3.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "sentry-ruby" version))
+        (sha256
+          (base32 "0by9mvw8rklzpyx59vfija8h3ssfvxvf5nbqxfmygfy6lm1vdngz"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; No rakefile in gem
+     `(#:tests? #f))
+    (propagated-inputs
+      (list ruby-concurrent
+             ruby-faraday
+             ruby-sentry-core))
+    (home-page "https://sentry.io/for/ruby/")
+    (synopsis "Client interface for the Sentry error logger")
+    (description "Sentry provides a gem that provides a client
+interface for the Sentry error logger.")
+    (license license:expat)))
+
+(define-public ruby-webrick
+  (package
+    (name "ruby-webrick")
+    (version "1.8.1")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ruby/webrick")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1xb0mk3cghdir65nmj0mblprbf21blli7267b6yyvxclh307yp6s"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'extract-gemspec 'delete-problematic-tests
+                 (lambda _
+                   ;; The httresponse tests fail for
+                   ;; unknown reasons (see:
+                   ;; https://github.com/ruby/webrick/issues/112).
+                   (delete-file "test/webrick/test_httpresponse.rb"))))))
+    (home-page "https://github.com/ruby/webrick")
+    (synopsis "HTTP server toolkit")
+    (description "WEBrick is an HTTP server toolkit that can be configured as an
+HTTPS server, a proxy server, and a virtual-host server.")
+    (license license:bsd-2)))
+
+(define-public ruby-websocket
+  (let ((commit "950e416a19a76c7e6a673a7e5baa6283476dbec1")
+        (revision "1"))
+    (package
+      (name "ruby-websocket")
+      (version (git-version "1.2.9" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/imanel/websocket-ruby")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "1i6r0glpxy47zdf76aqgcpjgcgydla0733hfdhp628pmrinnkgwv"))
+                (file-name (git-file-name name version))))
+      (build-system ruby-build-system)
+      (arguments (list #:test-target "spec"
+                       #:phases #~(modify-phases %standard-phases
+                                    (add-after 'unpack 'disable-rubocop
+                                      (lambda _
+                                        (substitute* "Rakefile"
+                                          (("require 'rubocop/rake_task'") "")
+                                          (("RuboCop::RakeTask.new") "")))))))
+      (native-inputs
+       (list ruby-rspec
+             ruby-webrick))
+      (synopsis "WebSocket protocol Ruby library")
+      (description "This package provides a Ruby library to handle the WebSocket
+protocol.")
+      (home-page "https://github.com/imanel/websocket-ruby")
+      (license license:expat))))
+
+(define-public ruby-braintree
+  (package
+    (name "ruby-braintree")
+    (version "4.12.0")
+    (source
+     (origin
+       (method git-fetch)               ;for tests
+       (uri (git-reference
+             (url "https://github.com/braintree/braintree_ruby")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0gfgkymy3655drwgs42bj9ap9qib1l30sajxmypmp6s75m9w3gsh"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:test-target "test:unit"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'disable-rubocop
+            (lambda _
+              (substitute* "Rakefile"
+                (("sh \"rubocop\"") ""))))
+          (add-after 'unpack 'relax-requirements
+            (lambda _
+              (substitute* "Gemfile"
+                (("gem \"pry\".*") "gem 'pry'\n")
+                (("gem \"rake\".*") "gem 'rake'\n")
+                (("gem \"libxml-ruby\", \"3.2.0\"")
+                 "gem \"libxml-ruby\", \"~> 3.0.0\"")
+                (("gem \"rspec\", \"3.9.0\"")
+                 "gem \"rspec\", \">= 3.9.0\"")
+                (("gem \"webrick\", \"~>1.7.0\"")
+                 "gem \"webrick\", \">=1.7.0\"")
+                ((".*gem \"rubocop\".*") "")
+                ((".*gem \"rspec_junit_formatter\".*") "")))))))
+    (native-inputs
+     (list ruby-libxml
+           ruby-pry
+           ruby-rake
+           ruby-rspec
+           ruby-webrick))
+    (propagated-inputs
+     (list ruby-builder
+           ruby-rexml))
+    (home-page "https://www.braintreepayments.com/")
+    (synopsis "Integration access to the Braintree Gateway")
+    (description "Braintree provides resources and tools for developers to
+integrate Braintree's global payments platform.")
+    (license license:expat)))
+
+(define-public ruby-niceogiri
+  (package
+   (name "ruby-niceogiri")
+   (version "1.1.2")
+   (source
+    (origin
+     (method url-fetch)
+     (uri (rubygems-uri "niceogiri" version))
+     (sha256
+      (base32 "1ha93211bc9cvh23s9w89zz7rq8irpf64ccd9arvg8v1sxg2798a"))))
+   (build-system ruby-build-system)
+   (arguments
+    `(#:test-target "spec"
+      #:phases
+      (modify-phases %standard-phases
+        (add-after 'extract-gemspec 'less-strict-dependencies
+          (lambda _
+            (substitute* "niceogiri.gemspec"
+              (("2\\.7") "3.8")      ;rspec
+              ((".*dependency.*bundler.*") "\n")
+              ((".*dependency.*guard-rspec.*") "\n")))))))
+   (native-inputs
+    (list ruby-rspec
+           ruby-yard))
+   (propagated-inputs (list ruby-nokogiri))
+   (home-page "https://github.com/benlangfeld/Niceogiri")
+   (synopsis "Supplement for Nokogiri")
+   (description "Niceogiri provides wrappers and helpers for XML manipulation
+using Nokogiri.")
+   (license license:expat)))
+
+(define-public ruby-blather
+  (package
+    (name "ruby-blather")
+    (version "2.0.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "blather" version))
+        (sha256
+          (base32 "05ry2x835fj4pzk61282pcz86n018cr39zbgwbi213md74i90s7c"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; XXX: Tests require too old version of rspec.
+     `(#:tests? #f))
+    (native-inputs
+     (list ruby-countdownlatch
+            ruby-mocha
+            ruby-rb-fsevent
+            ruby-rspec
+            ruby-yard))
+    (propagated-inputs
+     (list ruby-activesupport
+            ruby-eventmachine
+            ruby-niceogiri
+            ruby-nokogiri
+            ruby-sucker-punch))
+    (home-page "https://github.com/adhearsion/blather")
+    (synopsis "XMPP Domain Specific Language for Ruby")
+    (description "Blather is a XMPP DSL for Ruby written on top of EventMachine
+and Nokogiri.")
+    (license license:expat)))
+
+(define-public ruby-wapiti
+  (package
+    (name "ruby-wapiti")
+    (version "2.1.0")
+    ;; the gem archive lacks tests
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/inukshuk/wapiti-ruby")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1273dqvn6flq2qv9qbp104rgc7zp1gqx4096s0v0z5f0qnhzc7d6"))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     (list ruby-builder
+           ruby-rexml))
+    (native-inputs
+     (list ruby-pry
+           ruby-rake-compiler
+           ruby-rspec
+           ruby-simplecov))
+    (arguments
+     (list
+      #:test-target "spec"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'replace-git-ls-files 'replace-another-git-ls-files
+            (lambda args
+              (substitute* "wapiti.gemspec"
+                (("`git ls-files spec`")
+                 "`find spec -type f | sort`"))))
+          (add-before 'build 'compile
+            (lambda args
+              (invoke "rake" "compile"))))))
+    (home-page "https://github.com/inukshuk/wapiti-ruby")
+    (synopsis "Wicked fast Conditional Random Fields for Ruby")
+    (description
+     "The Wapiti-Ruby gem provides a wicked fast linear-chain @acronym{CRF,
+Conditional Random Fields} API for sequence segmentation and labelling.  It is
+based on the codebase of @url{https://wapiti.limsi.fr, Wapiti}.")
+    (license license:bsd-2)))
+
+(define-public ruby-namae
+  (package
+    (name "ruby-namae")
+    (version "1.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "namae" version))
+              (sha256
+               (base32
+                "1j3nl1klkx3gymrdxfc1hlq4a8qlvhhl9aj5v1v08b9fz27sky0l"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list ruby-cucumber
+           ruby-rspec
+           ruby-simplecov))
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'extract-gemspec 'allow-newer-cucumber
+            (lambda args
+              (substitute* "Gemfile"
+                (("'cucumber', '[^']*'")
+                 "'cucumber'"))))
+          (replace 'check
+            ;; Avoid 'rake' so we don't need jeweler.
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (apply invoke
+                       "rspec"
+                       (find-files "spec" "_spec\\.rb$"))))))))
+    (home-page "https://github.com/berkmancenter/namae")
+    (synopsis "Parser for human names")
+    (description
+     "Namae (名前) is a parser for human names.  It recognizes personal names
+of various cultural backgrounds and tries to split them into their component
+parts (e.g., given and family names, honorifics etc.).")
+    (license (list license:bsd-2 license:agpl3+))))
+
+(define-public ruby-latex-decode
+  (package
+    (name "ruby-latex-decode")
+    (version "0.4.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/inukshuk/latex-decode")
+                    (commit (string-append "v" version))))
+              (sha256
+               (base32
+                "1f5j67ayd04pjkmzvn0hk7cr8yqvn0gyg9ns6a0vhzj2gwna9ihy"))
+              (file-name (git-file-name name version))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list ruby-cucumber
+           ruby-rspec))
+    (arguments
+     (list
+      #:test-target "cucumber"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'extract-gemspec 'avoid-bundler
+            (lambda args
+              (substitute* "Rakefile"
+                (("require 'bundler" orig)
+                 (string-append "# " orig " # patched for Guix"))
+                (("Cucumber::Rake::Task\\.new[(]:cucumber[)]" orig)
+                 (string-append orig " do |c|\n"
+                                "  c.bundler = false # patched for Guix\n"
+                                "end"))
+                (("Bundler\\.setup" orig)
+                 (string-append "true # " orig " # patched for Guix")))
+              (substitute* "cucumber.yml"
+                ;; thanks to avoiding bundler, we can't use this option
+                ((" --publish-quiet")
+                 ""))))
+          (add-after 'replace-git-ls-files 'replace-another-git-ls-files
+            (lambda args
+              (substitute* "latex-decode.gemspec"
+                (("`git ls-files -- [{]test,spec,features[}]/\\*`")
+                 "`find {test,spec,features} -type f | sort`")))))))
+    (home-page "https://github.com/inukshuk/latex-decode")
+    (synopsis "Convert LaTeX to Unicode")
+    (description
+     "This package provides a gem to convert LaTeX input to Unicode.  Its
+original use was as an input filter for BibTeX-Ruby, but it can be used
+independently to decode LaTeX.  Many of the patterns used by this Ruby gem are
+based on François Charette's equivalent Perl module @code{LaTeX::Decode}.")
+    (license license:gpl3+)))
+
+(define-public ruby-link-header
+  (package
+    (name "ruby-link-header")
+    (version "0.0.8")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "link_header" version))
+              (sha256
+               (base32
+                "1yamrdq4rywmnpdhbygnkkl9fdy249fg5r851nrkkxr97gj5rihm"))))
+    (build-system ruby-build-system)
+    (home-page "https://github.com/asplake/link_header")
+    (synopsis "Parse and format HTTP @code{Link} headers")
+    (description
+     "This gem provides the classes @code{LinkHeader} and
+@code{LinkHeader::Link}, which represent HTTP @code{Link} headers conforming
+to RFC 5988.  Objects can be constructed from and converted to text or a
+JSON-friendly @code{Array} representation.  They can also be used to generate
+corresponding HTML @code{link} elements.")
+    (license license:expat)))
+
+(define-public ruby-lint-roller
+  (package
+    (name "ruby-lint-roller")
+    (version "1.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "lint_roller" version))
+       (sha256
+        (base32 "11yc0d84hsnlvx8cpk4cbj6a4dz9pk0r1k29p0n1fz9acddq831c"))))
+    (build-system ruby-build-system)
+    (arguments '(#:tests? #f))  ;Circular dependency on ruby-standard.
+    (native-inputs (list ruby-minitest))
+    (synopsis "Specification for linter and formatter rulesets")
+    (description
+     "This package provides a plugin specification for Ruby linter and
+formatter rulesets.")
+    (home-page "https://github.com/standardrb/lint_roller")
+    (license license:expat)))
+
+(define-public ruby-rdf
+  (package
+    (name "ruby-rdf")
+    (version "3.2.8")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "rdf" version))
+              (sha256
+               (base32
+                "1cj0k8ryd8hgbkgqb5swvy6fiygxny3y5bln0my5gv6dbfv3gm20"))))
+    (build-system ruby-build-system)
+    (propagated-inputs (list ruby-link-header))
+    (arguments
+     (list #:tests? #f)) ;; tests have many cyclic dependencies
+    (home-page "https://ruby-rdf.github.io/")
+    (synopsis "Linked Data for Ruby")
+    (description
+     "This gem contains the core algorithms and classes used for doing basic
+programming with @acronym{RDF, Resource Description Framework} data,
+implemented in pure Ruby.")
+    (license license:unlicense)))
+
+(define-public ruby-rdf-vocab
+  (package
+    (name "ruby-rdf-vocab")
+    (version "3.2.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "rdf-vocab" version))
+              (sha256
+               (base32
+                "1bqmp9rfjvd56ajjz68ij6jla1wjf1fqg7bi4dpnjrsmn4pwaq7l"))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     (list ruby-rdf))
+    (arguments
+     (list #:tests? #f)) ;; tests have many cyclic dependencies
+    (home-page "https://github.com/ruby-rdf/rdf-vocab")
+    (synopsis "Common RDF vocabularies")
+    (description
+     "This gem extends @code{ruby-rdf} with several common @acronym{RDF,
+Resource Description Framework} vocabularies.")
+    (license license:unlicense)))
+
+(define-public ruby-rdiscount
+  (package
+    (name "ruby-rdiscount")
+    (version "2.2.7")
+    (source (origin
+              (method git-fetch)        ;for the full test suite
+              (uri (git-reference
+                    (url "https://github.com/davidfstr/rdiscount")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1lpfxq3gv0dgmnki9jgfnc8n9k4x9vyq9miqdxv6g4kp90qyfifc"))))
+    (build-system ruby-build-system)
+    (native-inputs (list perl))
+    (synopsis "Discount Markdown Processor for Ruby")
+    (description "Discount is an implementation of John Gruber's Markdown
+markup language in C.  It implements all of the language described in the
+markdown syntax document and passes the Markdown 1.0 test suite.")
+    (home-page "https://dafoster.net/projects/rdiscount/")
+    (license license:bsd-3)))
+
+(define-public ruby-bibtex-ruby
+  (package
+    (name "ruby-bibtex-ruby")
+    (version "6.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "bibtex-ruby" version))
+              (sha256
+               (base32
+                "0vynqa8q9hwghw6sdljr304b5gh11nqzy5nwqqwxmgy7pqyf7qw5"))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     (list ruby-latex-decode
+           ruby-rdf
+           ruby-rdf-vocab))
+    (native-inputs
+     (list ruby-cucumber
+           ruby-minitest
+           ruby-yard))
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'extract-gemspec 'avoid-bundler
+            (lambda args
+              (substitute* "Rakefile"
+                (("require 'bundler" orig)
+                 (string-append "# " orig " # patched for Guix"))
+                (("Bundler\\.setup" orig)
+                 (string-append "true # " orig " # patched for Guix"))))))))
+    (home-page "https://github.com/inukshuk/bibtex-ruby")
+    (synopsis "Rubyist's Swiss Army knife for all things BibTeX")
+    (description
+     "BibTeX-Ruby is the Rubyist's Swiss Army knife for all things BibTeX.
+It includes a parser for all common BibTeX objects and a sophisticated name
+parser that tokenizes correctly formatted names.  BibTeX-Ruby recognizes
+BibTeX string replacements, joins values containing multiple strings or
+variables, supports cross-references, and decodes common LaTeX formatting
+instructions to unicode.  If you are in a hurry, it also allows for easy
+export/conversion to formats such as YAML, JSON, CSL, and XML (BibTeXML).")
+    (license license:gpl3+)))
+
+(define-public ruby-unicode-scripts
+  (package
+    (name "ruby-unicode-scripts")
+    (version "1.8.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "unicode-scripts" version))
+              (sha256
+               (base32
+                "0rl6mn908yryhrg8j3mmna54gnrid2nph2kym00lbz6jwdih2a1b"))))
+    (build-system ruby-build-system)
+    (native-inputs (list ruby-minitest))
+    (arguments (list #:test-target "spec"))
+    (home-page "https://github.com/janlelis/unicode-scripts")
+    (synopsis "Unicode script classification library")
+    (description "This gem provides a simple interface for classifying Ruby
+strings using the Unicode @code{Script} and @code{Script_Extensions}
+properties.")
+    (license license:expat)))
+
+(define-public ruby-citeproc
+  (package
+    (name "ruby-citeproc")
+    (version "1.0.10")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "citeproc" version))
+              (sha256
+               (base32
+                "13vl5sjmksk5a8kjcqnjxh7kn9gn1n4f9p1rvqfgsfhs54p0m6l2"))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     (list ruby-namae))
+    (arguments
+     (list #:tests? #f)) ;; tests have a cyclic dependency
+    (home-page "https://github.com/inukshuk/citeproc")
+    (synopsis "Interface for Ruby citation processors")
+    (description
+     "CiteProc is a citation processor interface and citation data API based
+on the @acronym{CSL, Citation Style Language} specifications.  To actually
+process citations, a dedicated processor engine is required: a pure Ruby
+engine is available in the @code{citeproc-ruby} gem.")
+    (license (list license:agpl3+ license:bsd-2))))
+
+(define-public ruby-ed25519
+  (package
+    (name "ruby-ed25519")
+    (version "1.3.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/RubyCrypto/ed25519")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1jm5w2dyhyrndcx0d02v0gjbzl1abhbx2wkp3gxzwcndghmkz98r"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:test-target "spec"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'build 'compile
+            (lambda _
+              (invoke "rake" "compile")))
+          (add-after 'unpack 'remove-unnecessary-dependencies
+            (lambda _
+              ;; Coveralls relates to a network service, and RuboCop to code
+              ;; linting and both are unnecessary to run the tests
+              (substitute* "Gemfile"
+                ((".*coveralls.*")
+                 "\n")
+                ((".*rubocop.*")
+                 "\n"))
+              (substitute* "spec/spec_helper.rb"
+                (("require \"coveralls\"")
+                 "")
+                (("Coveralls.wear!")
+                 ""))
+              (substitute* "Rakefile"
+                (("require \"rubocop/rake_task\"")
+                 "")
+                (("RuboCop::RakeTask.new")
+                 "")))))))
+    (native-inputs (list ruby-rake-compiler ruby-rspec))
+    (synopsis
+     "Ruby binding to the Ed25519 elliptic curve public-key signature system")
+    (description
+     "This package provides a Ruby binding to the Ed25519 elliptic curve
+public-key signature system described in
+@url{https://www.ietf.org/rfc/rfc8032.txt, RFC 8032}.")
+    (home-page "https://github.com/RubyCrypto/ed25519")
+    (license license:expat)))
+
+(define-public ruby-edtf
+  (package
+    (name "ruby-edtf")
+    (version "3.1.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/inukshuk/edtf-ruby")
+                    (commit (string-append "v" version))))
+              (sha256
+               (base32
+                "18j8xq8zmrn41cs2gpd1i87agi9905asvnjqndky2cqb5zg3q14g"))
+              (snippet
+               ;; remove generated file
+               #~(delete-file "lib/edtf/parser.rb"))
+              (file-name (git-file-name name version))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     (list ruby-activesupport))
+    (native-inputs
+     (list ruby-cucumber
+           ruby-rspec))
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'extract-gemspec 'avoid-bundler
+            (lambda args
+              (substitute* "Rakefile"
+                (("require 'bundler" orig)
+                 (string-append "# " orig " # patched for Guix"))
+                (("bundle exec racc")
+                 "racc")
+                (("Cucumber::Rake::Task\\.new[(]:cucumber[)]" orig)
+                 (string-append orig " do |c|\n"
+                                "  c.bundler = false # patched for Guix\n"
+                                "end"))
+                (("Bundler\\.setup" orig)
+                 (string-append "true # " orig " # patched for Guix")))))
+          (add-after 'avoid-bundler 'patch-cucumber-options
+            (lambda args
+              (substitute* "cucumber.yml"
+                ;; this option is not supported, at least in our configuration
+                ((" --publish-quiet")
+                 ""))))
+          (add-before 'build 'compile
+            (lambda args
+              (invoke "rake" "racc")))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "rake")))))))
+    (home-page "https://github.com/inukshuk/edtf-ruby")
+    (synopsis "Ruby implementation of Extended Date/Time Format")
+    (description
+     "EDTF-Ruby provides a parser and an API for the @acronym{EDTF, Extended
+Date/Time Format} standard, implemented as an extension to Ruby's @code{Date}
+class.")
+    (license license:bsd-2)))
+
+(define-public ruby-gli
+  (package
+    (name "ruby-gli")
+    (version "2.21.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/davetron5000/gli")
+                    (commit (string-append "v" version))))
+              (sha256
+               (base32
+                "09b1r9hlx4dy2yq036nk7hc2nbswhia6q3na9v11z94yibc8mgja"))
+              (file-name (git-file-name name version))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list ruby-minitest
+           ruby-rainbow
+           ruby-rdoc
+           ruby-sdoc))
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'extract-gemspec 'patch-gemspec-version
+            (lambda args
+              (substitute* "gli.gemspec"
+                ;; this trick fails in our build environment
+                (("require File\\.join[(]\\[" orig)
+                 (string-append "# patched for Guix # " orig))
+                (("s\\.version = GLI::VERSION")
+                 #$(string-append "s.version = '"
+                                  (package-version this-package)
+                                  "' # patched for Guix")))))
+          (add-after 'replace-git-ls-files 'replace-another-git-ls-files
+            (lambda args
+              (substitute* "gli.gemspec"
+                (("`git ls-files -- [{]test,spec,features[}]/\\*`")
+                 "`find {test,spec,features} -type f | sort`"))))
+          (add-after 'replace-another-git-ls-files 'fix-rubyopt
+            (lambda args
+              (substitute* "Rakefile"
+                (("ENV\\[\"RUBYOPT\"]")
+                 "(ENV['RUBYOPT'] || '')")))))))
+    (home-page "https://davetron5000.github.io/gli/")
+    (synopsis "Git-Like Interface command-line parser")
+    (description
+     "GLI allows you to create command-line applications in Ruby with Git-Like
+Interfaces: that is, they take subcommands in the style of @command{git} and
+@command{gem}.  GLI uses a simple domain-specific language, but retains all
+the power of the built-in @code{OptionParser}.")
+    (license license:asl2.0)))
+
+(define-public ruby-anystyle-data
+  (package
+    (name "ruby-anystyle-data")
+    (version "1.3.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/inukshuk/anystyle-data")
+                    (commit (string-append "v" version))))
+              (sha256
+               (base32
+                "1jh880310m3gjdrk4m8rwwnsf0824zkf26clpr8p64sac2fyy907"))
+              (snippet
+               ;; remove pre-built file
+               #~(delete-file "lib/anystyle/data/dict.txt.gz"))
+              (patches
+               (search-patches "ruby-anystyle-data-immutable-install.patch"))
+              (file-name (git-file-name name version))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:tests? #f ;; there are none
+      #:modules
+      `((guix build ruby-build-system)
+        (guix build utils)
+        (srfi srfi-26))
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'replace-git-ls-files 'replace-another-git-ls-files
+            (lambda args
+              (substitute* "anystyle-data.gemspec"
+                (("`git ls-files lib README\\.md LICENSE`\\.split[(][^)]*[)]")
+                 (string-append
+                  "["
+                  (string-join
+                   (map (cut string-append "\"" <> "\"")
+                        `("README.md"
+                          "LICENSE"
+                          "lib/anystyle/data.rb"
+                          "lib/anystyle/data/dict.txt.gz"
+                          "lib/anystyle/data/setup.rb"
+                          "lib/anystyle/data/version.rb"))
+                   ", ")
+                  "]")))))
+          (add-before 'build 'compile-dict
+            (lambda args
+              (invoke "rake" "compile"))))))
+    (home-page "https://anystyle.io")
+    (synopsis "AnyStyle parser dictionary data")
+    (description
+     "This gem provides parser dictionary data for AnyStyle.")
+    (license license:bsd-2)))
+
+(define-public ruby-anystyle
+  (package
+    (name "ruby-anystyle")
+    (version "1.4.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/inukshuk/anystyle")
+                    (commit (string-append "v" version))))
+              (sha256
+               (base32
+                "0xhy7wj8v7iahikck6vxbdpncaz5w2gb11b32kmvg5ckgi2kz23p"))
+              (snippet
+               ;; There is an optional dependency on
+               ;; <https://github.com/feedbackmine/language_detector>, which
+               ;; seems like it was intended to be free software, but
+               ;; doesn't have a clear license statement.  Maybe someone can
+               ;; do more sleuthing, or else find a replacement?  See also
+               ;; <https://github.com/inukshuk/anystyle/issues/186>.  For
+               ;; now, patch it out, but leave a pointer to follow up.
+               #~(begin
+                   (use-modules (guix build utils))
+                   (substitute* "Gemfile"
+                     (("gem 'language_detector', github: '[^']*'" orig)
+                      (string-append "# " orig " # unclear license")))
+                   (substitute* "spec/anystyle/parser_spec.rb"
+                     (("language: 'en'," orig)
+                      (string-append "# " orig " # no lanugage_detector")))))
+              (patches
+               (search-patches
+                "ruby-anystyle-fix-dictionary-populate.patch"))
+              (file-name (git-file-name name version))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     (list ruby-anystyle-data
+           ruby-bibtex-ruby
+           ruby-namae
+           ruby-wapiti))
+    (native-inputs
+     (list ruby-byebug
+           ruby-citeproc
+           ruby-edtf
+           ruby-gdbm
+           ruby-rspec
+           ruby-unicode-scripts))
+    (arguments
+     (list
+      #:test-target "spec"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'extract-gemspec 'avoid-bundler
+            (lambda args
+              (substitute* "Rakefile"
+                (("require 'bundler" orig)
+                 (string-append "# " orig " # patched for Guix"))
+                (("Bundler\\.setup" orig)
+                 (string-append "true # " orig " # patched for Guix")))))
+          (add-after 'replace-git-ls-files 'replace-another-git-ls-files
+            (lambda args
+              (substitute* "anystyle.gemspec"
+                (("`git ls-files spec`")
+                 "`find spec -type f | sort`"))))
+          (add-after 'wrap 'populate-dictionaries
+            (lambda args
+              ;; We must initialize these files here, or they will never be
+              ;; usable with the default settings. A more flexible approach
+              ;; might use something like `Gem.find_files()` or
+              ;; XDG_DATA_DIRS.
+              (with-output-to-file "initialize-dictionaries.rb"
+                (lambda ()
+                  (display "\
+require 'anystyle/dictionary' # must come before 'anystyle/data'
+require 'anystyle/data'
+[:marshal, :gdbm].each do |adapter|
+  AnyStyle::Dictionary.create({adapter: adapter}).open().close()
+end
+")))
+              (let* ((old-gems (getenv "GEM_PATH"))
+                     (new-gems (string-append #$output
+                                              "/lib/ruby/vendor_ruby:"
+                                              old-gems)))
+                (dynamic-wind
+                  (lambda ()
+                    (setenv "GEM_PATH" new-gems))
+                  (lambda ()
+                    (invoke "ruby" "initialize-dictionaries.rb"))
+                  (lambda ()
+                    (setenv "GEM_PATH" old-gems)))))))))
+    (home-page "https://anystyle.io")
+    (synopsis "Fast and smart citation reference parsing (Ruby library)")
+    (description
+     "AnyStyle is a very fast and smart parser for academic reference lists
+and bibliographies.  AnyStyle uses powerful machine learning heuristics based
+on Conditional Random Fields and aims to make it easy to train the model with
+data that is relevant to your parsing needs.
+
+This package provides the Ruby module @code{AnyStyle}.  AnyStyle can also be
+used via the @command{anystyle} command-line utility or a web application,
+though the later has not yet been packaged for Guix.")
+    (license license:bsd-2)))
+
+(define-public anystyle
+  (package
+    (name "anystyle")
+    (version "1.4.5")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/inukshuk/anystyle-cli")
+                    (commit (string-append "v" version))))
+              (sha256
+               (base32
+                "10jx830mx9vh7rsz87ndvz8w5b5azd9s231vwyb0dqxs921v6qwy"))
+              (file-name (git-file-name name version))))
+    (build-system ruby-build-system)
+    (propagated-inputs
+     (list ruby-anystyle
+           ruby-bibtex-ruby
+           ruby-gli))
+    (native-inputs
+     (list ruby-gdbm
+           txt2man))
+    (arguments
+     (list
+      #:modules
+      `((guix build ruby-build-system)
+        (ice-9 popen)
+        (srfi srfi-1)
+        (guix build utils))
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'extract-gemspec 'less-strict-dependencies
+            (lambda args
+              (substitute* "anystyle-cli.gemspec"
+                (("'bibtex-ruby', '[^']*'")
+                 "'bibtex-ruby'"))))
+          (add-before 'build 'change-default-dictionary-adapter
+            (lambda args
+              ;; Since we always have gdbm available, using it will give a
+              ;; faster startup time, which is particularly worth-while for
+              ;; a command-line tool.
+              (substitute* "bin/anystyle"
+                (("default_value: 'ruby',")
+                 "default_value: 'gdbm', # patched for Guix"))))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              ;; There are no tests, but let's use this opportunity to do a
+              ;; basic test of our own that things run ok. It works especially
+              ;; well to test this here since we know the 'ruby-anystile'
+              ;; package is in its final, immutable installed form.
+              (when tests?
+                (let ((common
+                       `("require 'anystyle'"
+                         ,(string-append
+                           "pp AnyStyle.parse 'Derrida, J. (1967). L’écriture"
+                           " et la différence (1 éd.). Paris: Éditions du"
+                           " Seuil.'"))))
+                  (for-each
+                   (lambda (lines)
+                     (apply invoke "ruby"
+                            (fold-right (lambda (line lst)
+                                          (cons* "-e" line lst))
+                                        '()
+                                        lines)))
+                   `(,common
+                     ("require 'anystyle/dictionary'"
+                      "AnyStyle::Dictionary.defaults[:adapter] = :gdbm"
+                      ,@common)))))))
+          (add-after 'wrap 'check-cli
+            (lambda* (#:key tests? outputs #:allow-other-keys)
+              (when tests?
+                (with-output-to-file "check-cli.in"
+                  (lambda ()
+                    (for-each
+                     display
+                     '("Derrida, J. (1967). L’écriture et la différence "
+                       "(1 éd.). Paris: Éditions du Seuil.\n"))))
+                (invoke (search-input-file outputs "/bin/anystyle")
+                        "parse"
+                        "check-cli.in"))))
+          (add-after 'wrap 'generate-man-page
+            ;; generating a man page also tests that the command actually runs
+            (lambda args
+              (define (run-with-output-file file command . args)
+                (format (current-output-port)
+                        "running: ~s\nwith output to: ~s\n"
+                        (cons command args)
+                        file)
+                (unless (zero?
+                         (with-output-to-file file
+                           (lambda ()
+                             (status:exit-val
+                              (close-pipe
+                               (apply open-pipe* OPEN_WRITE command args))))))
+                  (error "command failed")))
+              (let ((anystyle (string-append #$output "/bin/anystyle")))
+                (run-with-output-file "intro.txt"
+                                      anystyle "--help")
+                (for-each (lambda (cmd)
+                            (let ((file (string-append cmd ".txt")))
+                              (run-with-output-file file
+                                                    anystyle cmd "--help")
+                              ;; indent headings to create subsections
+                              (substitute* file
+                                (("^[A-Z]" orig)
+                                 (string-append " " orig)))
+                              ;; generate a section heading
+                              (call-with-output-file
+                                  (string-append "section-" file)
+                                (lambda (out)
+                                  (format out "\n\n~a COMMAND\n\n"
+                                          (string-upcase cmd))))))
+                          '("check" "find" "parse" "train"))
+                (substitute* `("intro.txt"
+                               "check.txt" "find.txt" "parse.txt" "train.txt")
+                  ;; format "tag list" for txt2man"
+                  ((" - ")
+                   "    ")
+                  ;; restore formatting of the "name" sections
+                  (("(anystyle|check|find|parse|train)    ([A-Z])" _ cmd post)
+                   (string-append cmd " - " post)))
+                (run-with-output-file "anystyle.txt"
+                                      "cat"
+                                      "intro.txt"
+                                      "section-check.txt" "check.txt"
+                                      "section-find.txt" "find.txt"
+                                      "section-parse.txt" "parse.txt"
+                                      "section-train.txt" "train.txt")
+                (run-with-output-file
+                 "anystyle.1"
+                 "txt2man"
+                 "-v" "General Commands Manual" "-t" "anystyle" "-s" "1"
+                 "-r" #$(string-append "anystyle-cli "
+                                       (package-version this-package))
+                 "-B" "check" "-B" "find" "-B" "parse" "-B" "train"
+                 "anystyle.txt")
+                (install-file "anystyle.1"
+                              (string-append #$output "/share/man/man1"))))))))
+    (home-page "https://anystyle.io")
+    (synopsis "Fast and smart citation reference parsing")
+    (description
+     "AnyStyle is a very fast and smart parser for academic reference lists
+and bibliographies.  AnyStyle uses powerful machine learning heuristics based
+on Conditional Random Fields and aims to make it easy to train the model with
+data that is relevant to your parsing needs.
+
+This package provides the @command{anystyle} command-line utility.  AnyStyle
+can also be used as a Ruby library or as a web application, though the later
+has not yet been packaged for Guix.")
+    (license license:bsd-2)
+    (properties `((upstream-name . "anystyle-cli")))))
+
+(define-public ruby-google-protobuf
+  (package
+    (name "ruby-google-protobuf")
+    (version "3.25.3")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "google-protobuf" version))
+              (sha256
+               (base32
+                "1mnxzcq8kmyfb9bkzqnp019d1hx1vprip3yzdkkha6b3qz5rgg9r"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f))  ;; has no tests
+    (native-inputs (list ruby-rake))
+    (synopsis "Protocol Buffers are Google's data interchange format")
+    (description "This library contains the Ruby extension that implements
+Protocol Buffers functionality in Ruby.
+
+The Ruby extension makes use of generated Ruby code that defines message and
+enum types in a Ruby DSL.  You may write definitions in this DSL directly, but
+we recommend using protoc's Ruby generation support with @code{.proto} files.
+The build process in this directory only installs the extension; you need to
+install @code{protoc} (in package ruby-grpc-tools) as well to have Ruby code
+generation functionality.")
+    (home-page "https://protobuf.dev")
+    (license license:bsd-3)))
+
+(define-public ruby-googleapis-common-protos-types
+  (package
+    (name "ruby-googleapis-common-protos-types")
+    (version "1.13.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "googleapis-common-protos-types" version))
+              (sha256
+               (base32
+                "1zrxnv9s2q39f2nh32x7nbfi8lpwzmmn3ji4adglg8dlfr1xrz16"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f))  ;; has no tests
+    (propagated-inputs (list ruby-google-protobuf))
+    (synopsis "Common protocol buffer types used by Google APIs")
+    (description "Common protocol buffer types used by Google APIs")
+    (home-page "https://github.com/googleapis/common-protos-ruby")
+    (license license:asl2.0)))
+
+(define-public ruby-grpc
+  (package
+    (name "ruby-grpc")
+    (version "1.62.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "grpc" version))
+              (sha256
+               (base32
+                "03z8yq0z228g6xxxq6s2mmslpv6psrdmi30dpmhysr4px16d897n"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:tests? #f))  ;; has no tests
+    ;; TODO remove third-party sources (zlib, upb, utf8-range, re2, c-ares,
+    ;; boringssl-with-bazel, address_sorting, abseil-cpp), see Makefile
+    (propagated-inputs (list ruby-google-protobuf
+                             ruby-googleapis-common-protos-types))
+    (synopsis "GRPC system in Ruby")
+    (description "GRPC is a high performance, open-source universal RPC
+framework.  This package provides a ruby interface for it.")
+    (home-page "https://github.com/grpc/grpc/tree/master/src/ruby")
+    (license license:asl2.0)))
 
 ;;;
 ;;; Avoid adding new packages to the end of this file. To reduce the chances
-;;; of a merge conflict, place them above in alphabetic order.
+;;; of a merge conflict, place them above by existing packages with similar
+;;; functionality or similar names.
 ;;;
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 7fe53ba946..a7c6634e1d 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -1,41 +1,20 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2015 Pjotr Prins <pjotr.guix@thebird.nl>
-;;; Copyright © 2014-2017, 2021-2022, 2024 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2014, 2015 David Thompson <davet@gnu.org>
+;;; Copyright © 2015-2018 Ben Woodcroft <donttrustben@gmail.com>
+;;; Copyright © 2015 David Thompson <davet@gnu.org>
 ;;; Copyright © 2015, 2019 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2015, 2016, 2017 Ben Woodcroft <donttrustben@gmail.com>
-;;; Copyright © 2017 Nikita <nikita@n0.is>
-;;; Copyright © 2017, 2019-2022 Marius Bakke <marius@gnu.org>
-;;; Copyright © 2017-2025 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2017, 2018, 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
-;;; Copyright © 2017, 2018, 2019 Christopher Baines <mail@cbaines.net>
-;;; Copyright © 2018 Vasile Dumitrascu <va511e@yahoo.com>
-;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
-;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
-;;; Copyright © 2019 Mikhail Kirillov <w96k.ru@gmail.com>
+;;; Copyright © 2018 Danny Milosavljevic <dannym@scratchpost.org>
+;;; Copyright © 2019, 2020 Christopher Baines <mail@cbaines.net>
 ;;; Copyright © 2019 Jelle Licht <jlicht@fsfe.org>
-;;; Copyright © 2019 Brian Leung <bkleung89@gmail.com>
-;;; Copyright © 2019 Collin J. Doering <collin@rekahsoft.ca>
-;;; Copyright © 2019 Diego N. Barbato <dnbarbato@posteo.de>
-;;; Copyright © 2019 Brett Gilio <brettg@posteo.de>
 ;;; Copyright © 2020, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
-;;; Copyright © 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
-;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
-;;; Copyright © 2020 Holgr Peters <holger.peters@posteo.de>
-;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
-;;; Copyright © 2021 EuAndreh <eu@euandre.org>
-;;; Copyright © 2020 Tomás Ortín Fernández <tomasortin@mailbox.org>
-;;; Copyright © 2021 Giovanni Biscuolo <g@xelera.eu>
-;;; Copyright © 2022 Philip McGrath <philip@philipmcgrath.com>
-;;; Copyright © 2022-2025 Remco van 't Veer <remco@remworks.net>
-;;; Copyright © 2022 Taiju HIGASHI <higashi@taiju.info>
-;;; Copyright © 2023 Yovan Naumovski <yovan@gorski.stream>
-;;; Copyright © 2023, 2024 gemmaro <gemmaro.dev@gmail.com>
-;;; Copyright © 2023, 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
-;;; Copyright © 2023, 2024 Zheng Junjie <873216071@qq.com>
-;;; Copyright © 2023, 2024 Hartmut Goebel <h.goebel@crazy-compilers.com>
+;;; Copyright © 2020 Ryan Prior <rprior@protonmail.com>
+;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2023 Christopher Baines <mail@cbaines.net>
+;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2023 Zheng Junjie <873216071@qq.com>
 ;;; Copyright © 2025 Nicolas Graves <ngraves@ngraves.fr>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -96,7 +75,6 @@ (define-module (gnu packages ruby)
   #:use-module (gnu packages web-browsers)
   #:use-module (gnu packages serialization)
   #:use-module (guix packages)
-  #:use-module (guix deprecation)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix gexp)
@@ -105,15 +83,7 @@ (define-module (gnu packages ruby)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages web)
-  #:use-module (guix build-system ruby)
-  #:use-module ((srfi srfi-1) #:select (alist-delete)))
-
-(define %prawn-project-licenses
-  ;; This set of licenses applies to most (all?) components of the Prawn
-  ;; project (it is triple licensed).
-  (list license:ruby
-        license:gpl2+
-        license:gpl3+))
+  #:use-module (guix build-system ruby))
 
 (define-public ruby-3.4
   (package
@@ -343,17703 +313,6 @@ (define-public mruby
 matching.  mruby can be linked and embedded within your application.")
     (license license:expat)))
 
-(define-public ruby-commander
-  (package
-    (name "ruby-commander")
-    (version "4.6.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "commander" version))
-       (sha256
-        (base32
-         "1n8k547hqq9hvbyqbx2qi08g0bky20bbjca1df8cqq5frhzxq7bx"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:test-target "spec"
-      #:phases
-      #~(modify-phases %standard-phases
-          ;; Don't run or require rubocop, the code linting tool, as this is a
-          ;; bit unnecessary.
-          (add-after 'unpack 'dont-run-rubocop
-            (lambda _
-              (substitute* "Rakefile"
-                ((".*rubocop.*") "")
-                ((".*RuboCop.*") "")))))))
-    (propagated-inputs
-     (list ruby-highline))
-    (native-inputs
-     (list bundler ruby-rspec-core ruby-rspec-expectations
-           ruby-rspec-mocks ruby-simplecov))
-    (home-page "https://github.com/commander-rb/commander")
-    (synopsis "Library for building Ruby command-line executables")
-    (description
-     "Commander aims to be a complete solution for Ruby command-line
-executables.  Commander bridges the gap between other terminal related
-libraries (OptionParser, HighLine), while providing many new features, and an
-elegant API.")
-    (license license:expat)))
-
-(define-public ruby-highline
-  (package
-    (name "ruby-highline")
-    (version "2.0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "highline" version))
-       (sha256
-        (base32
-         "0gr6pckj2jayxw1gdgh9193j5jag5zrrqqlrnl4jvcwpyd3sn2zc"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:tests? #f)) ;; TODO: NameError: uninitialized constant SPEC
-    (native-inputs
-     (list bundler ruby-code-statistics))
-    (synopsis
-     "HighLine helps you build command-line interfaces")
-    (description
-     "HighLine provides a high-level IO library that provides validation,
-type conversion, and more for command-line interfaces.  HighLine also includes
-a menu system for providing multiple options to the user.")
-    (home-page "https://github.com/JEG2/highline")
-    (license (list license:gpl2 license:ruby))))
-
-(define-public ruby-hoe
-  (package
-    (name "ruby-hoe")
-    (version "4.2.2")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "hoe" version))
-              (sha256
-               (base32
-                "1rhj1zs02mpdw6f4fh3mpfmj0p5pfar7rfxm758pk7l931mm8pyn"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      ;; Circular dependency with minitest
-      #:tests? #f))
-    (synopsis "Ruby project management helper")
-    (description
-     "Hoe is a rake/rubygems helper for project Rakefiles.  It helps manage,
-maintain, and release projects and includes a dynamic plug-in system allowing
-for easy extensibility.  Hoe ships with plug-ins for all the usual project
-tasks including rdoc generation, testing, packaging, deployment, and
-announcement.")
-    (home-page "https://www.zenspider.com/projects/hoe.html")
-    (license license:expat)))
-
-(define-public ruby-hoe-3
-  (package
-    (inherit ruby-hoe)
-    (version "3.26.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "hoe" version))
-              (sha256
-               (base32
-                "02vmphnfzna1dbb1l5nczcvlvvsg4flr26bdhmvdyf447bpswa63"))))))
-
-(define-public ruby-rake-compiler
-  (package
-    (name "ruby-rake-compiler")
-    (version "1.2.9")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "rake-compiler" version))
-              (sha256
-               (base32
-                "01rnl94p1sr84xkbnh66db42qsndykbfx2z2fggxyxx9vnji6cjs"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; needs cucumber
-    (synopsis "Building and packaging helper for Ruby native extensions")
-    (description "Rake-compiler provides a framework for building and
-packaging native C and Java extensions in Ruby.")
-    (home-page "https://github.com/rake-compiler/rake-compiler")
-    (license license:expat)))
-
-(define-public ruby-rake-compiler-dock
-  (package
-    (name "ruby-rake-compiler-dock")
-    (version "1.3.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "rake-compiler-dock" version))
-              (sha256
-               (base32
-                "0yr5f72irvhmnk12q7bbr4qw0xwy7diqkbcvb4lygjbg7rvk3k8k"))))
-    (build-system ruby-build-system)
-    (arguments (list #:tests? #f))      ;test suite requires docker
-    (synopsis "Cross compiler environment for building Ruby gems")
-    (description "The code{rake-compiler-dock} gem provides a cross compiler
-environment for building gems on a variety of platforms (GNU/Linux, JRuby,
-Windows and Mac).")
-    (home-page "https://github.com/rake-compiler/rake-compiler-dock")
-    (license license:expat)))
-
-(define-public ruby-rsync
-  (package
-    (name "ruby-rsync")
-    (version "1.0.9")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "rsync" version))
-       (sha256
-        (base32
-         "0p8b27q1gvxilqfq2528xpwglzcm2myikkjxpqk7mwbwg9r6knxv"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:test-target "spec"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'remove-coveralls-requirement
-           (lambda _
-             (substitute* "spec/spec_helper.rb"
-               (("require 'coveralls'") "")
-               (("Coveralls.wear!") "")))))))
-    (native-inputs
-     (list bundler rsync ruby-rspec-core ruby-rspec-expectations
-           ruby-rspec-mocks))
-    (home-page "https://github.com/jbussdieker/ruby-rsync")
-    (synopsis "Ruby wrapper around rsync")
-    (description
-     "Ruby Rsync is a Ruby library that can synchronize files between remote
-hosts by wrapping the @file{rsync} binary.")
-    (license license:expat)))
-
-(define-public ruby-i18n
-  (package
-    (name "ruby-i18n")
-    (version "1.13.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "i18n" version))
-              (sha256
-               (base32
-                "1yk33slipi3i1kydzrrchbi7cgisaxym6pgwlzx7ir8vjk6wl90x"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; no tests
-    (propagated-inputs `(("concurrent-ruby" ,ruby-concurrent)))
-    (synopsis "Internationalization library for Ruby")
-    (description "Ruby i18n is an internationalization and localization
-solution for Ruby programs.  It features translation and localization,
-interpolation of values to translations, pluralization, customizable
-transliteration to ASCII, flexible defaults, bulk lookup, lambdas as
-translation data, custom key/scope separator, custom exception handlers, and
-an extensible architecture with a swappable backend.")
-    (home-page "https://github.com/ruby-i18n/i18n")
-    (license license:expat)))
-
-(define-public ruby-ice-nine
-  (package
-    (name "ruby-ice-nine")
-    (version "0.11.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "ice_nine" version))
-       (sha256
-        (base32 "1nv35qg1rps9fsis28hz2cq2fx1i96795f91q4nmkm934xynll2x"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:tests? #f))  ;Dependency on convoluted unpackaged ruby-devtools.
-    (synopsis "Deep Freeze Ruby Objects")
-    (description
-     "This package provides a function to deep freeze Ruby objects.")
-    (home-page "https://github.com/dkubb/ice_nine")
-    (license license:expat)))
-
-(define-public ruby-io-console
-  (package
-    (name "ruby-io-console")
-    (version "0.6.0")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/ruby/io-console/")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0gwxrp29b6awkid1sf85sbh529mnq6hb86m8c2443cm6nc4vr8qb"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:phases #~(modify-phases %standard-phases
-                        (add-after 'unpack 'delete-rakelib-files
-                          (lambda _
-                            ;; These depend on git and other extraneous
-                            ;; dependencies, and are loaded by rake.
-                            (delete-file-recursively "rakelib"))))))
-    (native-inputs (list ruby-rake-compiler))
-    (synopsis "Console capabilities library for IO instances")
-    (description "IO.console adds console capabilities to Ruby IO instances.")
-    (home-page "https://github.com/ruby/io-console")
-    (license license:bsd-2)))
-
-(define-public ruby-irb
-  (package
-    (name "ruby-irb")
-    (version "1.6.3")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "irb" version))
-              (sha256
-               (base32
-                "1h9s07n5v3z029v18924ws9vdkdc80n6llp9ccx77yg1krv2g0f3"))))
-    (build-system ruby-build-system)
-    ;; XXX: Disable the test suite, as it requires debug, which requires this
-    ;; package (dependency cycle).
-    (arguments (list #:tests? #f))
-    (propagated-inputs (list ruby-reline))
-    (synopsis "Ruby command-line tool for REPL (Read Eval Print Loop)")
-    (description "IRB is an interactive Ruby command-line tool for REPL (Read
-Eval Print Loop).")
-    (home-page "https://github.com/ruby/irb")
-    (license license:bsd-2)))
-
-(define-public ruby-irb-1.1.1
-  (package
-    (inherit ruby-irb)
-    (version "1.1.1")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "irb" version))
-              (sha256
-               (base32
-                "0h605w798s2bg9wg681ynvvzgdz1yy69gh387bl0khw9ll7wkn8v"))))))
-
-(define-public ruby-iruby
-  (package
-    (name "ruby-iruby")
-    (version "0.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "iruby" version))
-       (sha256
-        (base32
-         "1wdf2c0x8y6cya0n3y0p3p7b1sxkb2fdavdn2k58rf4rs37s7rzn"))))
-    (build-system ruby-build-system)
-    (arguments
-     ;; TODO: Tests currently fail.
-     ;;
-     ;; Finished in 1.764405s, 1.1335 runs/s, 5.1009 assertions/s.
-     ;;
-     ;;   1) Failure:
-     ;; IntegrationTest#test_interaction [/tmp/guix-build-ruby-iruby-0.3.drv-0/gem/test/integration_test.rb:25]:
-     ;; In [ expected
-     ;;
-     ;; 2 runs, 9 assertions, 1 failures, 0 errors, 0 skips
-     '(#:tests? #f
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-ipython
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "lib/iruby/command.rb"
-               (("version = `")
-                (string-append
-                 "version = `"
-                 (assoc-ref inputs "python-ipython")
-                 "/bin/"))
-               (("Kernel\\.exec\\('")
-                (string-append
-                 "Kernel.exec('"
-                 (assoc-ref inputs "python-ipython")
-                 "/bin/"))))))))
-    (inputs
-     (list python-ipython))
-    (propagated-inputs
-     (list ruby-bond
-           ruby-data_uri
-           ruby-mimemagic
-           ruby-multi-json
-           ruby-cztop
-           ;; Optional inputs
-           ruby-pry))
-    (synopsis "Ruby kernel for Jupyter/IPython")
-    (description
-     "This package provides a Ruby kernel for Jupyter/IPython frontends (e.g.
-notebook).")
-    (home-page "https://github.com/SciRuby/iruby")
-    (license license:expat)))
-
-;; RSpec is the dominant testing library for Ruby projects.  Even RSpec's
-;; dependencies use RSpec for their test suites!  To avoid these circular
-;; dependencies, we disable tests for all of the RSpec-related packages.
-(define-public ruby-rspec-support
-  (package
-    (name "ruby-rspec-support")
-    (version "3.13.2")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "rspec-support" version))
-              (sha256
-               (base32
-                "1v6v6xvxcpkrrsrv7v1xgf7sl0d71vcfz1cnrjflpf6r7x3a58yf"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; avoid dependency cycles
-    (synopsis "RSpec support library")
-    (description "Support utilities for RSpec gems.")
-    (home-page "https://github.com/rspec/rspec-support")
-    (license license:expat)))
-
-(define-public ruby-rspec-core
-  (package
-    (name "ruby-rspec-core")
-    (version "3.13.2")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "rspec-core" version))
-              (sha256
-               (base32
-                "001kazj244cb6fbkmh7ap74csbr78717qaskqzqpir1q8xpdmywl"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; avoid dependency cycles
-    (propagated-inputs
-     (list ruby-rspec-support))
-    (synopsis "RSpec core library")
-    (description "Rspec-core provides the RSpec test runner and example
-groups.")
-    (home-page "https://github.com/rspec/rspec-core")
-    (license license:expat)))
-
-(define-public ruby-rspec-core-2
-  (package (inherit ruby-rspec-core)
-    (version "2.14.8")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "rspec-core" version))
-              (sha256
-               (base32
-                "0psjy5kdlz3ph39br0m01w65i1ikagnqlg39f8p65jh5q7dz8hwc"))))
-    (arguments
-     (cons*
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'patch
-            (lambda _
-              (substitute* "lib/rspec/core/ruby_project.rb"
-                (("File\\.exists\\?") "File.exist?")))))
-      (package-arguments ruby-rspec-core)))
-    (propagated-inputs `())))
-
-(define-public ruby-date
-  (package
-    (name "ruby-date")
-    (version "3.3.3")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/ruby/date")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1jiqjnaap1jk1r8z37iicnzqha1rhc713qmcir17f4vnz8ac8v75"))))
-    (build-system ruby-build-system)
-    (arguments (list #:test-target "default"))
-    (native-inputs (list ruby-rake-compiler))
-    (synopsis "Ruby @code{Object} subclass with date comparison capability")
-    (description "This package provides a subclass of @code{Object} that
-includes the @code{Comparable} module for handling dates.")
-    (home-page "https://github.com/ruby/date")
-    (license license:bsd-2)))
-
-(define-public ruby-time
-  (package
-    (name "ruby-time")
-    (version "0.3.0")
-    (source (origin
-              (method git-fetch)  ; for tests
-              (uri (git-reference
-                    (url "https://github.com/ruby/time")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0jd6df2lxd60wcxyaf37j8v3nnfn952d5xhg6aap9zlcdmkk4g2n"))))
-    (build-system ruby-build-system)
-    (propagated-inputs (list ruby-date))
-    (native-inputs (list ruby-test-unit-ruby-core))
-    (synopsis
-     "Extends the Time class with methods for parsing and conversion")
-    (description
-     "When this gem is @code{require}d, it extends the Time class with with
-additional methods for parsing and converting Times.")
-    (home-page "https://github.com/ruby/time")
-    (license license:bsd-2)))
-
-(define-public ruby-diff-lcs
-  (package
-    (name "ruby-diff-lcs")
-    (version "1.3")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "diff-lcs" version))
-              (sha256
-               (base32
-                "18w22bjz424gzafv6nzv98h0aqkwz3d9xhm7cbr1wfbyas8zayza"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; avoid dependency cycles
-    (synopsis "Compute the difference between two Enumerable sequences")
-    (description "Diff::LCS computes the difference between two Enumerable
-sequences using the McIlroy-Hunt longest common subsequence (LCS) algorithm.
-It includes utilities to create a simple HTML diff output format and a
-standard diff-like tool.")
-    (home-page "https://github.com/halostatue/diff-lcs")
-    (license license:expat)))
-
-(define-public ruby-rspec-expectations
-  (package
-    (name "ruby-rspec-expectations")
-    (version "3.13.3")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "rspec-expectations" version))
-              (sha256
-               (base32
-                "0n3cyrhsa75x5wwvskrrqk56jbjgdi2q1zx0irllf0chkgsmlsqf"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; avoid dependency cycles
-    (propagated-inputs
-     (list ruby-diff-lcs ruby-rspec-support))
-    (synopsis "RSpec expectations library")
-    (description "Rspec-expectations provides a simple API to express expected
-outcomes of a code example.")
-    (home-page "https://github.com/rspec/rspec-expectations")
-    (license license:expat)))
-
-(define-public ruby-rspec-expectations-2
-  (package (inherit ruby-rspec-expectations)
-    (version "2.14.5")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "rspec-expectations" version))
-              (sha256
-               (base32
-                "1ni8kw8kjv76jvwjzi4jba00k3qzj9f8wd94vm6inz0jz3gwjqf9"))))
-    (propagated-inputs
-     (list ruby-diff-lcs))))
-
-(define-public ruby-sorcerer
-  (package
-    (name "ruby-sorcerer")
-    (version "2.0.1")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "sorcerer" version))
-        (sha256
-          (base32
-            "0d32ha9pp9slpmsm027pkdpbr9vc5jn2m8rl6hwwx6a87m8cr58h"))))
-    (build-system ruby-build-system)
-    (synopsis "Ripper-style abstract syntax tree to Ruby source generator")
-    (description "Sorcerer generates Ruby code from a Ripper-like abstract
-syntax tree (i.e. S-Expressions).  Sorcerer is targeted mainly at small
-snippets of Ruby code, expressible in a single line.  Longer examples may be
-re-sourced, but they will be rendered in a single-line format.")
-    (home-page "https://github.com/rspec-given/sorcerer")
-    (license license:expat)))
-
-(define-public ruby-sorted-set
-  (package
-    (name "ruby-sorted-set")
-    (version "1.0.3")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "sorted_set" version))
-              (sha256
-               (base32
-                "0brpwv68d7m9qbf5js4bg8bmg4v7h4ghz312jv9cnnccdvp8nasg"))))
-    (build-system ruby-build-system)
-    (propagated-inputs
-     (list ruby-rbtree ruby-set))
-    (synopsis
-     "Ruby Set variant whose elements are sorted in ascending order")
-    (description
-     "This package implements a variant of Set whose elements are sorted in
-ascending order")
-    (home-page "https://github.com/knu/sorted_set")
-    (license license:bsd-2)))
-
-(define-public ruby-given-core
-  (package
-    (name "ruby-given-core")
-    (version "3.8.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "given_core" version))
-       (sha256
-        (base32
-         "0w1pyhgb2am7c267s8v06dpd9qhmsk2x4hfr2aq8l8lh49ma227s"))))
-    (build-system ruby-build-system)
-    (arguments '(#:tests? #f))          ;no test suite for the core package
-    (propagated-inputs
-     (list ruby-sorcerer))
-    (synopsis "Core abstractions used by rspec-given and minitest-given")
-    (description "Given_core is the basic functionality behind rspec-given and
-minitest-given, extensions that allow the use of Given/When/Then terminology
-when defining specifications.")
-    (home-page "https://github.com/rspec-given/rspec-given")
-    (license license:expat)))
-
-(define-public ruby-rspec-given
-  (package
-    (name "ruby-rspec-given")
-    (version "3.8.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "rspec-given" version))
-       (sha256
-        (base32
-         "0xzzxjjzwrsp84p12sd6ab3jbm9kh7sbnqpxgc9mlfq3s3ll0fdj"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:test-target "rs"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-rakefile
-           (lambda _
-             (substitute* '("Rakefile" "rakelib/gemspec.rake")
-               (("require '\\./lib/given/.*") "")
-               (("Given::VERSION") (format #f "~s" ,version))
-               ;; Fix the error: "cannot load such file -- example_helper"
-               (("sh \"rspec")
-                "sh \"rspec -Ilib:examples"))))
-         (add-after 'extract-gemspec 'delete-failing-tests
-           ;; See: https://github.com/jimweirich/rspec-given/issues/57.
-           (lambda _
-             (substitute* ".gemspec"
-               (("\"spec/lib/given/natural_assertion_spec.rb\".freeze, ")
-                "")
-               (("\"examples/integration/failing_messages_spec.rb\".freeze, ")
-                ""))
-             (delete-file "spec/lib/given/natural_assertion_spec.rb")
-             (delete-file "examples/integration/failing_messages_spec.rb"))))))
-    (native-inputs
-     (list ruby-rspec ruby-minitest))
-    (propagated-inputs
-     (list ruby-given-core ruby-rspec))
-    (synopsis "Given/When/Then for RSpec and Minitest")
-    (description "Given is an RSpec extension that allows the use of
-Given/When/Then terminology when defining specifications, in a way similar to
-the Cucumber Gherkin language.")
-    (home-page "https://github.com/rspec-given/rspec-given")
-    (license license:expat)))
-
-(define-public ruby-rspec-its
-  (package
-    (name "ruby-rspec-its")
-    (version "1.3.0")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/rspec/rspec-its")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "02mlsc9d4d1cjj5vahi8v3q8hyn9fyiv8nnlidhgfh186qp20g1p"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:test-target "spec"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'dont-install-gems-from-gemfile
-           (lambda _
-             (substitute* "Gemfile"
-               (("rspec rspec-core rspec-expectations rspec-mocks rspec-support")
-                ""))))
-         (add-before 'build 'loosen-ffi-requirement
-           (lambda _
-             ;; Accept any version of ruby-ffi.
-             (substitute* "Gemfile"
-               (("  gem 'ffi', '~> 1\\.9\\.25'")
-                "  gem 'ffi'"))))
-         (add-before 'build 'remove-unnecessary-dependency-versions-from-gemfile
-           (lambda _
-             (substitute* "rspec-its.gemspec"
-               (("rake.*") "rake'\n")
-               (("spec.add_development_dependency 'cucumber'.*")
-                "spec.add_development_dependency 'cucumber'\n")
-               (("bundler.*") "bundler'\n")
-               (("\"aruba.*") "'aruba'\n")))))))
-    (propagated-inputs
-     (list ruby-rspec-core ruby-rspec-expectations))
-    (native-inputs
-     (list bundler ruby-cucumber ruby-ffi ruby-aruba))
-    (synopsis "RSpec extension that provides the @code{its} method")
-    (description
-     "RSpec::Its provides the its method as a short-hand to specify the expected
-value of an attribute.  For example, one can use @code{its(:size)\\{should
-eq(1)\\}}.")
-    (home-page "https://github.com/rspec/rspec-its")
-    (license license:expat)))
-
-;;; This variant is used to break a cycle with ruby-protobuf.
-(define-public ruby-rspec-its-minimal
-  (hidden-package
-   (package
-     (inherit ruby-rspec-its)
-     (arguments
-      (substitute-keyword-arguments (package-arguments ruby-rspec-its)
-        ((#:tests? _ #f) #f)))
-     (native-inputs '()))))
-
-(define-public ruby-rspec-mocks
-  (package
-    (name "ruby-rspec-mocks")
-    (version "3.13.2")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "rspec-mocks" version))
-              (sha256
-               (base32
-                "1vxxkb2sf2b36d8ca2nq84kjf85fz4x7wqcvb8r6a5hfxxfk69r3"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; avoid dependency cycles
-    (propagated-inputs
-     (list ruby-diff-lcs ruby-rspec-support))
-    (synopsis "RSpec stubbing and mocking library")
-    (description "Rspec-mocks provides RSpec's \"test double\" framework, with
-support for stubbing and mocking.")
-    (home-page "https://github.com/rspec/rspec-mocks")
-    (license license:expat)))
-
-(define-public ruby-rspec-mocks-2
-  (package (inherit ruby-rspec-mocks)
-    (version "2.14.6")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "rspec-mocks" version))
-              (sha256
-               (base32
-                "1fwsmijd6w6cmqyh4ky2nq89jrpzh56hzmndx9wgkmdgfhfakv30"))))
-    (propagated-inputs
-     (list ruby-diff-lcs))))
-
-(define-public ruby-rspec-block-is-expected
-  (package
-    (name "ruby-rspec-block-is-expected")
-    (version "1.0.5")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/pboling/rspec-block_is_expected")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1zi5z12lkw3fiwgr7g61845wj73asr2vzw4zsjv45klnnfspwass"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:phases #~(modify-phases %standard-phases
-                        (add-after 'unpack 'relax-requirements
-                          (lambda _
-                            (substitute* "Rakefile"
-                              (("require 'rubocop/rake_task'") "")
-                              (("RuboCop::RakeTask.new") ""))
-                            ;; Contains extraneous requirements not actually
-                            ;; needed for the test suite.
-                            (delete-file "Gemfile")))
-                        (add-before 'build 'drop-signing-key-requirement
-                          (lambda _
-                            (substitute* "rspec-block_is_expected.gemspec"
-                              (("spec.signing_key =.*")
-                               "spec.signing_key = nil")))))))
-    (native-inputs (list ruby-rspec-pending-for ruby-rspec-expectations))
-    (propagated-inputs (list ruby-rspec-core))
-    (synopsis "Simplify testing of blocks in RSpec")
-    (description "This RSpec plugin allows you to use @code{block_is_expected}
-similarly to how you would use @code{is_expected} if a block was wrapping the
-subject.")
-    (home-page "https://github.com/pboling/rspec-block_is_expected")
-    (license license:expat)))
-
-(define-public ruby-rspec-pending-for
-  (package
-    (name "ruby-rspec-pending-for")
-    (version "0.1.16")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/pboling/rspec-pending_for")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "107l560vm0kx25w5iy5rsk9ly8dxzr81b31284j514f4hkd0qv3m"))))
-    (build-system ruby-build-system)
-    (native-inputs (list ruby-rspec ruby-simplecov))
-    (propagated-inputs (list ruby-rspec-core ruby-ruby-engine
-                             ruby-ruby-version))
-    (synopsis "Skip RSpec tests for specific Ruby engines or versions")
-    (description "This RSpec plugin makes it easy to mark test cases as
-pending or skipped for a specific Ruby engine (e.g. MRI or JRuby) or version
-combinations.")
-    (home-page "https://github.com/pboling/rspec-pending_for")
-    (license license:expat)))
-
-(define-public ruby-rspec-rerun
-  (package
-    (name "ruby-rspec-rerun")
-    (version "1.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "rspec-rerun" version))
-       (sha256
-        (base32
-         "1gy7znkcaqhpccfnk2nvaqbsvgxy3q57cmjwkl9fi1zabaq5lbkj"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(;; No included tests
-       #:tests? #f))
-    (propagated-inputs (list ruby-rspec))
-    (synopsis "Track failed RSpec tests to re-run them")
-    (description
-     "This package provides an automated way to track, and then re-run failed
-RSpec tests.")
-    (home-page "https://github.com/dblock/rspec-rerun")
-    (license license:expat)))
-
-(define-public ruby-rspec-stubbed-env
-  ;; There is no release nor tag (see:
-  ;; https://github.com/pboling/rspec-stubbed_env/issues/7).
-  (let ((revision "0")
-        (commit "9d767dec77a6d130f6ad83c48a00a5c81b14b9fa"))
-    (package
-      (name "ruby-rspec-stubbed-env")
-      (version (git-version "1.0.0" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/pboling/rspec-stubbed_env")
-                      (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "1dy4m04h613dp0s59rknjd6h4lqs1h17mffc5kd8kh046mk8nr1p"))))
-      (build-system ruby-build-system)
-      (arguments
-       (list #:test-target "spec"
-             #:phases #~(modify-phases %standard-phases
-                          (add-after 'unpack 'streamline-requirements
-                            (lambda _
-                              ;; Remove extraneous development dependencies.
-                              (substitute* "rspec-stubbed_env.gemspec"
-                                ((".*bundler.*") "")
-                                ((".*rubocop.*") "")))))))
-      (native-inputs (list ruby-simplecov))
-      (propagated-inputs (list ruby-rspec))
-      (synopsis "RSpec plugin to stub environment variables")
-      (description
-       "This RSpec plugin can be used to stub environment variables in a scoped
-context for testing.")
-      (home-page "https://github.com/pboling/rspec-stubbed_env")
-      (license license:expat))))
-
-(define-public ruby-rspec-wait
-  (package
-    (name "ruby-rspec-wait")
-    (version "0.0.9")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "rspec-wait" version))
-        (sha256
-         (base32
-          "0gvj1bp5ccx001dyvcgk2j49s5sl6vs9fdaqqb08z3bd1554hsww"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda _
-             (invoke "rake" "spec"))))))
-    (native-inputs
-     (list bundler))
-    (propagated-inputs
-     (list ruby-rspec))
-    (home-page "https://github.com/laserlemon/rspec-wait")
-    (synopsis "Wait for conditions in RSpec")
-    (description
-     "RSpec::Wait strives to make it easier to test asynchronous or slow
-interactions.")
-    (license license:expat)))
-
-(define-public ruby-rspec
-  (package
-    (name "ruby-rspec")
-    (version "3.13.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "rspec" version))
-              (sha256
-               (base32
-                "14xrp8vq6i9zx37vh0yp4h9m0anx9paw200l1r5ad9fmq559346l"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; avoid dependency cycles
-    (propagated-inputs
-     (list ruby-rspec-core ruby-rspec-expectations ruby-rspec-mocks))
-    (synopsis "Behavior-driven development framework for Ruby")
-    (description "RSpec is a behavior-driven development (BDD) framework for
-Ruby.  This meta-package includes the RSpec test runner, along with the
-expectations and mocks frameworks.")
-    (home-page "https://rspec.info/")
-    (license license:expat)))
-
-(define-public ruby-rspec-2
-  (package (inherit ruby-rspec)
-    (version "2.14.1")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "rspec" version))
-              (sha256
-               (base32
-                "134y4wzk1prninb5a0bhxgm30kqfzl8dg06af4js5ylnhv2wd7sg"))))
-    (propagated-inputs
-     (list ruby-rspec-core-2 ruby-rspec-mocks-2 ruby-rspec-expectations-2))))
-
-(define-public ruby-rspec-debug
-  (package
-    (name "ruby-rspec-debug")
-    (version "0.2.0")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/ko1/rspec-debug")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "125p1zxjznkk765nyqvkksw8x1nbm7xk4sjc1wza2fyp5hvyiddn"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:test-target "spec"
-           #:phases #~(modify-phases %standard-phases
-                        (add-after 'extract-gemspec 'relax-dependencies
-                          (lambda _
-                            (substitute* "Gemfile"
-                              (("~>") ">=")))))))
-    (native-inputs (list ruby-rspec))
-    (propagated-inputs (list ruby-debug))
-    (synopsis "Invoke Ruby debugger when spec fails")
-    (description "This package can be used to have the execution stopped for
-inspection in the Ruby debugger upon encountering a failure.  To use it, set
-the @env{RSPEC_DEBUG} environment variable to @samp{true} then invoke the
-@command{rspec} command as usual.")
-    (home-page "https://github.com/ko1/rspec-debug")
-    (license license:expat)))
-
-(define-public ruby-specinfra
-  (package
-    (name "ruby-specinfra")
-    (version "2.88.1")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "specinfra" version))
-              (sha256
-               (base32
-                "07lap3sknncffpq9jw1x1mn9c5xxd058wxs5vnyz1y0lawdjfnsf"))))
-    (build-system ruby-build-system)
-    (propagated-inputs (list ruby-net-scp ruby-net-ssh ruby-net-telnet
-                             ruby-sfl))
-    (arguments
-     (list
-      #:test-target "spec"
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'extract-gemspec 'relax-dependencies
-            (lambda _
-              (substitute* "specinfra.gemspec"
-                (("%q<net-telnet>.freeze, \\[.*\\]")
-                 "%q<net-telnet>.freeze, [\">= 0\"]")))))))
-    (synopsis "Common layer for serverspec and itamae")
-    (description "This Gem provides a common layer for serverspec and
-itamae.")
-    (home-page "https://github.com/mizzy/specinfra")
-    (license license:expat)))
-
-(define-public ruby-serverspec
-  (package
-    (name "ruby-serverspec")
-    (version "2.42.3")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "serverspec" version))
-              (sha256
-               (base32
-                "0kfaqrqynly8n3dy5qrbjvx4lx6mk9a5vynwb7xwqj8bixm0mab4"))))
-    (build-system ruby-build-system)
-    (propagated-inputs (list ruby-multi-json ruby-rspec ruby-rspec-its
-                             ruby-specinfra))
-    (arguments
-     (list #:test-target "spec"))
-    (synopsis
-     "RSpec tests for servers configured by Puppet, Chef, Itamae, etc")
-    (description
-     "With Serverspec, you can write RSpec tests for checking your servers are
-configured correctly.
-
-Serverspec tests your servers’ actual state by executing command locally, via
-SSH, via WinRM, via Docker API and so on.  So you don’t need to install any
-agent softwares on your servers and can use any configuration management
-tools, Puppet, Ansible, CFEngine, Itamae and so on.
-
-But the true aim of Serverspec is to help refactoring infrastructure code.")
-    (home-page "https://serverspec.org/")
-    (license license:expat)))
-
-;; Bundler is yet another source of circular dependencies, so we must disable
-;; its test suite as well.
-(define-public bundler
-  (package
-    (name "bundler")
-    (version "2.4.18")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "bundler" version))
-              (sha256
-               (base32
-                "03ppd60cbwzlrhsidi7frj826ssmxzwd954ikjk7966l45qx5xxn"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; avoid dependency cycles
-    (synopsis "Ruby gem bundler")
-    (description "Bundler automatically downloads and installs a list of gems
-specified in a \"Gemfile\", as well as their dependencies.")
-    (home-page "https://bundler.io/")
-    (license license:expat)))
-
-(define-public ruby-base64
-  (package
-    (name "ruby-base64")
-    (version "0.2.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "base64" version))
-       (sha256
-        (base32 "01qml0yilb9basf7is2614skjp8384h2pycfx86cr8023arfj98g"))))
-    (build-system ruby-build-system)
-    (arguments '(#:tests? #f))  ; No tests bundled.
-    (synopsis "Base64 encoding/decoding in Ruby")
-    (description
-     "This package provides support for encoding and decoding binary data
-using a Base64 representation.")
-    (home-page "https://github.com/ruby/base64")
-    (license (list license:bsd-2))))
-
-(define-public ruby-builder
-  (package
-    (name "ruby-builder")
-    (version "3.2.4")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "builder" version))
-              (sha256
-               (base32
-                "045wzckxpwcqzrjr353cxnyaxgf0qg22jh00dcx7z38cys5g1jlr"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'patch
-            (lambda _
-              (substitute* "rakelib/tags.rake"
-                (("File\\.exists\\?") "File.exist?"))
-
-              ;; TODO This test is broken
-              ;; https://github.com/tenderlove/builder/issues/13
-              (substitute* "test/test_blankslate.rb"
-                (("test_late_included_module_in_kernel_is_ok")
-                 "test_late_included_module_in_kernel_is_ok
-    skip(\"test expected to fail\")
-"))
-              (substitute* "rakelib/tags.rake"
-                (("RVM_GEMDIR = .*") "RVM_GEMDIR = 'no-rvm-please'\n")))))))
-    (synopsis "Ruby library to create structured data")
-    (description "Builder provides a number of builder objects that make it
-easy to create structured data.  Currently the following builder objects are
-supported: XML Markup and XML Events.")
-    (home-page "https://github.com/tenderlove/builder")
-    (license license:expat)))
-
-(define-public ruby-bump
-  (package
-    (name "ruby-bump")
-    (version "0.7.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "bump" version))
-       (sha256
-        (base32
-         "1xinbr9rzh6cj75x24niwgqcnbhdxc68a8bc41lk8xv6fd906fym"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(;; No included tests
-       #:tests? #f))
-    (synopsis "Tool for working with Rubygems")
-    (description
-     "Bump provides commands to manage Rubygem versioning, updating to the
-next patch version for example.")
-    (home-page "https://github.com/gregorym/bump")
-    (license license:expat)))
-
-(define-public ruby-rjb
-  (package
-    (name "ruby-rjb")
-    (version "1.6.7")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "rjb" version))
-              (sha256
-               (base32
-                "0ck802bm8cklhmqsgzhsa0y8lg80qy52dp3m8rlld3zc5gv1rsb9"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:tests? #f ; no rakefile
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-before 'build 'set-java-home
-            (lambda* (#:key inputs #:allow-other-keys)
-              (setenv "JAVA_HOME" (assoc-ref inputs "jdk")))))))
-    (native-inputs
-     `(("jdk" ,icedtea "jdk")))
-    (synopsis "Ruby-to-Java bridge using the Java Native Interface")
-    (description "RJB is a bridge program that connects Ruby and Java via the
-Java Native Interface.")
-    (home-page "https://www.artonx.org/collabo/backyard/?RubyJavaBridge")
-    (license license:lgpl2.1+)))
-
-(define-public ruby-log4r
-  (package
-    (name "ruby-log4r")
-    (version "1.1.10")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "log4r" version))
-        (sha256
-          (base32
-            "0ri90q0frfmigkirqv5ihyrj59xm8pq5zcmf156cbdv4r4l2jicv"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; no Rakefile in gem
-    (synopsis "Flexible logging library for Ruby")
-    (description "Comprehensive and flexible logging library written
-in Ruby for use in Ruby programs.  It features a hierarchical logging
-system of any number of levels, custom level names, logger
-inheritance, multiple output destinations per log event, execution
-tracing, custom formatting, thread safteyness, XML and YAML
-configuration, and more.")
-     (home-page "http://log4r.rubyforge.org/")
-     (license license:bsd-3)))
-
-(define-public ruby-atoulme-antwrap
-  (package
-    (name "ruby-atoulme-antwrap")
-    (version "0.7.5")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "atoulme-Antwrap" version))
-              (sha256
-               (base32
-                "05s3iw44lqa81f8nfy5f0xjj808600h82zb9bsh46b9kcq2w2kmz"))))
-    (build-system ruby-build-system)
-    ;; Test data required for most of the tests are not included.
-    (arguments `(#:tests? #f))
-    (native-inputs
-     (list ruby-hoe))
-    (inputs
-     (list ruby-rjb))
-    (synopsis "Ruby wrapper for the Ant build tool")
-    (description "Antwrap is a Ruby module that wraps the Apache Ant build
-tool.  Antwrap can be used to invoke Ant tasks from a Ruby or a JRuby
-script.")
-    (home-page "http://rubyforge.org/projects/antwrap/")
-    (license license:expat)))
-
-(define-public ruby-atoulme-saikuro
-  (package
-    (name "ruby-atoulme-saikuro")
-    (version "1.2.1")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "atoulme-Saikuro" version))
-              (sha256
-               (base32
-                "0kvd2nsxffbza61d3q4j94wrbnbv50r1zy3a7q26f6k706fw1f19"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'fix-module-resolution
-            (lambda _
-              (substitute* "lib/saikuro.rb"
-                ;; irb 1.2.0 or later doesn't have RubyToken
-                (("require 'irb/ruby-lex'")
-                 "require 'rubygems'\ngem 'irb', '=1.1.1'\nrequire 'irb/ruby-lex'"))))
-          (delete 'check)
-          (add-after 'install 'check
-            (lambda* (#:key outputs #:allow-other-keys)
-              (let* ((out (assoc-ref outputs "out"))
-                     (saikuro (string-append out "/bin/saikuro")))
-                (setenv "GEM_PATH" (string-append
-                                    (getenv "GEM_PATH") ":"
-                                    #$output "/lib/ruby/vendor_ruby"))
-                (invoke saikuro "--cyclo" "--token" "--input_directory" "tests")))))))
-    (propagated-inputs (list ruby-irb-1.1.1
-                             ruby-e2mmap)) ;required by rubygems
-    (synopsis "Cyclomatic complexity analyzer")
-    (description "Saikuro is a Ruby cyclomatic complexity analyzer.  When
-given Ruby source code Saikuro will generate a report listing the cyclomatic
-complexity of each method found.  In addition, Saikuro counts the number of
-lines per method and can generate a listing of the number of tokens on each
-line of code.")
-    (home-page "http://www.github.com/atoulme/Saikuro")
-    ;; File headers contain the BSD-3 license and the README.rdoc says that
-    ;; "Saikuro uses the BSD license", but the LICENSE file contains the text
-    ;; of the Expat license.
-    (license license:bsd-3)))
-
-(define-public ruby-awesome-print
-  (package
-    (name "ruby-awesome-print")
-    (version "1.9.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "awesome_print" version))
-       (sha256
-        (base32
-         "0vkq6c8y2jvaw03ynds5vjzl1v9wg608cimkd3bidzxc0jvk56z9"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (replace 'check
-            (lambda _
-              ;; Remove failing test.
-              (for-each delete-file
-                        '("spec/ext/nokogiri_spec.rb"
-                          "spec/colors_spec.rb"
-                          "spec/formats_spec.rb"
-                          "spec/methods_spec.rb"
-                          "spec/misc_spec.rb"
-                          "spec/objects_spec.rb"))
-              (invoke "rspec" "-c" "spec"))))))
-    (native-inputs
-     (list ruby-nokogiri ruby-rspec ruby-simplecov))
-    (synopsis "Pretty print Ruby objects to visualize their structure")
-    (description
-     "Ruby dubugging companion: pretty print Ruby objects to visualize their
-structure.  Supports custom object formatting via plugins.")
-    (home-page "https://github.com/awesome-print/awesome_print")
-    (license license:expat)))
-
-(define-public ruby-pandoc-ruby
-  (package
-    (name "ruby-pandoc-ruby")
-    (version "2.1.4")
-    (source
-     (origin
-       (method git-fetch)               ;the gem lacks many test files
-       (uri (git-reference
-             (url "https://github.com/xwmx/pandoc-ruby")
-             (commit version)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "03a11clhycyn0jhc7g9davpqd83sn60jqwjy1y145ag9sq6sp935"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:tests? #f ; Disable tests since they depend on pandoc behavior
-                   ; and there are no upstream releases.
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-pandoc-path
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((pandoc (search-input-file inputs "/bin/pandoc")))
-               (substitute* "lib/pandoc-ruby.rb"
-                 (("@@pandoc_path = 'pandoc'")
-                  (format #f "@@pandoc_path = '~a'" pandoc)))
-               (substitute* "test/test_pandoc_ruby.rb"
-                 (("('|\")pandoc" _ quote)
-                  (string-append quote pandoc))
-                 (("\\^pandoc")
-                  ".*pandoc")))))
-         (add-after 'unpack 'adjust-tests
-           ;; The tests expect filenames with spaces.  Because they don't have
-           ;; spaces the quotes around the output are dropped automatically.
-           (lambda _
-             (substitute* "test/test_pandoc_ruby.rb"
-               (("\\\\\"#\\{file\\.path\\}\\\\\"") "#{file.path}"))))
-         (add-after 'extract-gemspec 'remove-Gemfile.lock
-           (lambda _
-             (delete-file "Gemfile.lock")
-             (substitute* "pandoc-ruby.gemspec"
-               (("Gemfile\\.lock") "")))))))
-    (native-inputs
-     (list ruby-mocha))
-    (inputs
-     (list pandoc))
-    (synopsis "Ruby wrapper for Pandoc")
-    (description "PandocRuby is a wrapper for Pandoc, a Haskell library with
-command line tools for converting one markup format to another.  Pandoc can
-convert documents from a variety of formats including markdown,
-reStructuredText, textile, HTML, DocBook, LaTeX, and MediaWiki markup to a
-variety of other formats, including markdown, reStructuredText, HTML, LaTeX,
-ConTeXt, PDF, RTF, DocBook XML, OpenDocument XML, ODT, GNU Texinfo, MediaWiki
-markup, groff man pages, HTML slide shows, EPUB, Microsoft Word docx, and
-more.")
-    (home-page "https://github.com/xwmx/pandoc-ruby")
-    (license license:expat)))
-
-(define-public ruby-patron
-  (package
-    (name "ruby-patron")
-    (version "0.13.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "patron" version))
-       (sha256
-        (base32
-         "0523gddx88zql2mq6655k60gy2ac8vybpzkcf90lmd9nx7wl3fi9"))))
-    (build-system ruby-build-system)
-    (inputs
-     (list curl))
-    (arguments
-     `(#:tests? #f))                    ; no included tests
-    (synopsis "Ruby HTTP client library based on @code{libcurl}")
-    (description
-     "Patron is a Ruby HTTP client library based on @code{libcurl}.  It does
-not try to expose the full power (read complexity) of @code{libcurl} but
-instead tries to provide a sane API while taking advantage of @code{libcurl}
-under the hood.")
-    (home-page "https://github.com/toland/patron")
-    (license license:expat)))
-
-(define-public ruby-slim
-  (package
-    (name "ruby-slim")
-    (version "5.2.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "slim" version))
-       (sha256
-        (base32
-         "1rqk7jn66wgx50b18ndhbppjq55rbcwgqg1rbhnhxwiggvzisdbj"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         ;; See: https://github.com/slim-template/slim/issues/857 and
-         ;; https://github.com/slim-template/slim/issues/858.
-         (add-after 'unpack 'skip-broken-tests
-           (lambda _
-             (substitute* "test/core/test_embedded_engines.rb"
-               (("def test_render_with_markdown")
-                "def skipped_test_render_with_markdown"))
-             (substitute* "test/translator/test_translator.rb"
-               (("raise (\"Missing test for.*)" _ tail)
-                (string-append "print " tail)))))
-         ;; See: https://salsa.debian.org/ruby-team/ruby-slim/-/commit/
-         ;; 824862bd99d1675bc699d8fc71ba965a785c1f44.
-         (add-after 'unpack 'prevent-bundler-interference
-           (lambda _
-             (substitute* "Rakefile"
-               (("require 'bundler/setup'") "nil")
-               (("Bundler::GemHelper\\.install_tasks") "nil")))))))
-    (native-inputs
-     (list ruby-rack-test ruby-rspec-core ruby-sinatra))
-    (propagated-inputs
-     (list ruby-temple ruby-tilt))
-    (synopsis "Minimalist template language for Ruby")
-    (description "Slim is a template language for Ruby that aims to reduce the
-syntax to the minimum while remaining clear.")
-    (home-page "http://slim-lang.com/")
-    (license license:expat)))
-
-(define-public ruby-asciidoctor
-  (package
-    (name "ruby-asciidoctor")
-    (version "2.0.20")
-    (source
-     (origin
-       (method git-fetch)               ;the gem release lacks a Rakefile
-       (uri (git-reference
-             (url "https://github.com/asciidoctor/asciidoctor")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "19qvilhwa9plg80ppspn5ys0ybl8qfyaicqbl9w316hk5ldwi1jq"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:test-target "test:all"
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'extract-gemspec 'strip-version-requirements
-            (lambda _
-              (delete-file "Gemfile")
-              (substitute* "asciidoctor.gemspec"
-                (("(.*add_.*dependency '[_A-Za-z0-9-]+').*" _ stripped)
-                 (string-append stripped "\n")))))
-          (add-after 'install 'install-man-page
-            (lambda* (#:key outputs #:allow-other-keys)
-              (install-file (search-input-file
-                             outputs (string-append "lib/ruby/vendor_ruby/"
-                                                    "gems/asciidoctor-"
-                                                    #$version
-                                                    "/man/asciidoctor.1"))
-                            (string-append #$output "/share/man/man1")))))))
-    (native-inputs
-     (list ruby-asciimath
-           ruby-coderay
-           ruby-cucumber
-           ruby-erubis
-           ruby-haml
-           ruby-minitest
-           ruby-nokogiri
-           ruby-open-uri-cached
-           ruby-rouge
-           ruby-rspec-expectations
-           ruby-simplecov
-           ruby-slim
-           ruby-tilt
-           ruby-erubi))
-    (synopsis "Converter from AsciiDoc content to other formats")
-    (description "Asciidoctor is a text processor and publishing toolchain for
-converting AsciiDoc content to HTML5, DocBook 5, PDF, and other formats.")
-    (home-page "https://asciidoctor.org")
-    (license license:expat)))
-
-(define-public ruby-asciidoctor/minimal
-  (hidden-package
-   (package
-     (inherit ruby-asciidoctor)
-     (arguments
-      (ensure-keyword-arguments
-       (package-arguments ruby-asciidoctor)
-       (list #:tests? #f)))
-     (native-inputs '()))))
-
-(define-public ruby-asciidoctor-multipage
-  (package
-    (name "ruby-asciidoctor-multipage")
-    (version "0.0.16")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/owenh000/asciidoctor-multipage")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0rnz7qxdw5qbi3qjplihhk468kv690njdi06yllgylc75k62ar1p"))))
-    (propagated-inputs (list ruby-asciidoctor ruby-slim))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (add-after 'extract-gemspec 'strip-version-requirements
-                    (lambda _
-                      (delete-file "Gemfile")
-                      (substitute* "asciidoctor-multipage.gemspec"
-                        (("(.*add_.*dependency '[_A-Za-z0-9-]+').*" _ stripped)
-                         (string-append stripped "\n"))))))))
-    (synopsis
-     "Asciidoctor extension for generating HTML output using multiple pages")
-    (description
-     "Asciidoctor generates single-page documents.  This extension
-splits documents up into multiple HTML pages according to their headings, with
-configurable levels.")
-    (license license:expat)
-    (home-page "https://github.com/owenh000/asciidoctor-multipage")))
-
-(define-public ruby-prawn-icon
-  (package
-    (name "ruby-prawn-icon")
-    (version "3.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "prawn-icon" version))
-       (sha256
-        (base32
-         "049k42bqy4iq9hddf7jah83b6qr8ka63w1d63illh1mf4f4dihdk"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:test-target "spec"
-       #:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'remove-unnecessary-dependencies
-                    (lambda _
-                      (substitute* '("Rakefile" "spec/spec_helper.rb")
-                        ((".*[Bb]undler.*") "")
-                        (("^require 'rubocop.*") "")
-                        (("^RuboCop.*") "")))))))
-    (native-inputs
-     (list ruby-pdf-inspector ruby-pdf-reader ruby-rspec ruby-simplecov))
-    (propagated-inputs
-     (list ruby-prawn))
-    (synopsis "Icon fonts for use with the Prawn PDF toolkit")
-    (description "@code{Prawn::Icon} provides various icon fonts including
-FontAwesome, PaymentFont and Foundation Icons for use with the Prawn PDF
-toolkit.")
-    (home-page "https://github.com/jessedoyle/prawn-icon/")
-    (license %prawn-project-licenses)))
-
-(define-public ruby-css-parser
-  (package
-    (name "ruby-css-parser")
-    (version "1.7.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "css_parser" version))
-       (sha256
-        (base32
-         "04c4dl8cm5rjr50k9qa6yl9r05fk9zcb1zxh0y0cdahxlsgcydfw"))))
-    (build-system ruby-build-system)
-    (arguments `(#:tests? #f))          ;gem doesn't ship with test suite
-    (propagated-inputs
-     (list ruby-addressable))
-    (synopsis "Ruby Cascading Style Sheets (CSS) parser")
-    (description "This package allows loading, parsing and cascading Cascading
-Style Sheets (CSS) rule sets in Ruby.")
-    (home-page "https://github.com/premailer/css_parser")
-    (license license:expat)))
-
-(define-public ruby-prism
-  (package
-    (name "ruby-prism")
-    (version "1.3.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                     (url "https://github.com/ruby/prism.git")
-                     (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "03bs2gbackc3c3k4p979l2p9v215jb1m5h7b44n6yzh18kaimc85"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'build
-           (lambda _
-             (setenv "CC" ,(cc-for-target))
-             (invoke "rake" "compile")))
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (setenv "GEM_HOME" (string-append (assoc-ref outputs "out")
-                                               "/lib/ruby/vendor_ruby"))
-             (invoke "rake" "install")
-             ;; Make build reproducible.
-             (for-each delete-file
-                       (find-files (string-append (assoc-ref outputs "out")
-                                                  "/lib/ruby/vendor_ruby")
-                                   "gem_make.out$")))))))
-    (native-inputs
-     (list ruby-rake ruby-rake-compiler))
-    (synopsis "Parser for Ruby source code")
-    (description "This package provides a parser for Ruby source code,
-written in C.")
-    (home-page "https://ruby.github.io/prism/")
-    (license license:expat)))
-
-(define-public ruby-prawn-svg
-  (package
-    (name "ruby-prawn-svg")
-    (version "0.36.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "prawn-svg" version))
-       (sha256
-        (base32 "008p1p334h3019x5w5bqvwgmly3g5n08s63va1261nwyvfb955jv"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:test-target "spec"
-           #:phases
-           #~(modify-phases %standard-phases
-               (add-after 'unpack 'do-not-use-bundler
-                 (lambda _
-                   (substitute* "spec/spec_helper.rb"
-                     ((".*[Bb]undler.*") ""))))
-               (replace 'check
-                 (lambda* (#:key tests? #:allow-other-keys)
-                   (when tests?
-                     ;; This test fails due to the recent rspec 3.12 used
-                     ;; (see: https://github.com/mogest/prawn-svg/issues/151).
-                     (delete-file "spec/prawn/svg/interface_spec.rb")
-                     (invoke "rspec" "-Ilib" "-rprawn-svg")))))))
-    (native-inputs (list ruby-rspec))
-    (propagated-inputs (list ruby-css-parser ruby-matrix ruby-prawn ruby-rexml))
-    (synopsis "SVG renderer for the Prawn PDF library")
-    (description "This library allows rendering Scalable Vector Graphics (SVG)
-graphics directly into a Portable Document Format (PDF) document using the
-Prawn module.")
-    (home-page "https://github.com/mogest/prawn-svg")
-    (license license:expat)))
-
-(define-public ruby-prawn-templates
-  (package
-    (name "ruby-prawn-templates")
-    (version "0.1.2")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/prawnpdf/prawn-templates")
-             (commit version)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "0wll54wxxwixpwazfn4ffbqvqbfrl01cfsv8y11vnlzy7isx5xvl"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'do-not-use-bundler
-                    (lambda _
-                      (substitute* "spec/spec_helper.rb"
-                        ((".*[Bb]undler.*") ""))))
-                  (replace 'check
-                    (lambda* (#:key tests? #:allow-other-keys)
-                      (when tests?
-                        (invoke "rspec")))))))
-    (native-inputs
-     (list ruby-pdf-inspector ruby-rspec))
-    (propagated-inputs
-     (list ruby-pdf-reader ruby-prawn))
-    (synopsis "Prawn extension to include or combine PDF documents")
-    (description "This @strong{unmaintained} package provides a Prawn
-extension that allows including other Portable Document Format (PDF) documents
-as background or combining several PDF documents into one.  This functionality
-used to be part of Prawn itself, but was extracted from Prawn 0.15.0 because
-of its many longstanding issues.")
-    (home-page "https://github.com/prawnpdf/prawn-templates")
-    (license %prawn-project-licenses)))
-
-(define-public ruby-polyglot
-  (package
-    (name "ruby-polyglot")
-    (version "0.3.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "polyglot" version))
-       (sha256
-        (base32
-         "1bqnxwyip623d8pr29rg6m8r0hdg08fpr2yb74f46rn1wgsnxmjr"))))
-    (build-system ruby-build-system)
-    (arguments `(#:tests? #f))           ;no test suite
-    (synopsis "Augment @code{require} to load non-Ruby file types")
-    (description "The Polyglot library allows a Ruby module to register a
-loader for the file type associated with a filename extension, and it augments
-@code{require} to find and load matching files.")
-    (home-page "https://github.com/cjheath/polyglot")
-    (license license:expat)))
-
-(define-public ruby-treetop
-  (package
-    (name "ruby-treetop")
-    (version "1.6.12")
-    (source
-     (origin
-       (method git-fetch)               ;no test suite in distributed gem
-       (uri (git-reference
-             (url "https://github.com/cjheath/treetop")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "0cgs6f9z0a9dq5fc03710zsch4gmh1771wq36mq81qsql4x9vksf"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:test-target "spec"))
-    (native-inputs
-     (list ruby-activesupport ruby-rr ruby-rspec))
-    (propagated-inputs
-     (list ruby-polyglot))
-    (synopsis "Ruby-based parsing DSL based on parsing expression grammars")
-    (description "This package provides a Ruby-based Parsing Expression
-Grammar (PEG) parser generator Domain Specific Language (DSL).")
-    (home-page "https://github.com/cjheath/treetop")
-    (license license:expat)))
-
-(define-public ruby-typhoeus
-  (package
-    (name "ruby-typhoeus")
-    (version "1.4.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "typhoeus" version))
-       (sha256
-        (base32
-         "1m22yrkmbj81rzhlny81j427qdvz57yk5wbcf3km0nf3bl6qiygz"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:tests? #f))                    ; no included tests
-    (propagated-inputs
-     (list ruby-ethon))
-    (synopsis "@code{libcurl} wrapper in Ruby")
-    (description
-     "Like a modern code version of the mythical beast with 100 serpent heads,
-Typhoeus runs HTTP requests in parallel while cleanly encapsulating handling
-logic.")
-    (home-page "https://github.com/typhoeus/typhoeus")
-    (license license:expat)))
-
-;;; A minimal variant used to build ruby-rubocop itself.
-(define ruby-rubocop-capybara-minimal
-  (package
-    (name "ruby-rubocop-capybara")
-    (version "2.21.0")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/rubocop/rubocop-capybara")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "19r2s782r9ch2g1lxgrvk22d9qqkxi69brza16bfwp2rl2064qnc"))))
-    (build-system ruby-build-system)
-    (arguments (list #:tests? #f))
-    (synopsis "Capybara plugin for RuboCop")
-    (description "This package provides a RuboCop plugin that can be used for
-code style checking of Capybara test files (RSpec, Cucumber, Minitest).")
-    (home-page "https://github.com/rubocop/rubocop-capybara")
-    (license license:expat)))
-
-(define-public ruby-rubocop-capybara
-  (package
-    (inherit ruby-rubocop-capybara-minimal)
-    (arguments
-     (list #:test-target "spec"
-           #:phases #~(modify-phases %standard-phases
-                        (add-after 'unpack 'relax-requirements
-                          (lambda _
-                            (substitute* "Gemfile"
-                              (("gem 'rubocop-rspec', '~> 2.16.0'")
-                               "gem 'rubocop-rspec', '>= 2.16.0'")
-                              (("gem 'danger'.*") "")))))))
-    (native-inputs
-     (list ruby-bump
-           ruby-rack
-           ruby-rake
-           ruby-rspec
-           ruby-rubocop
-           ruby-rubocop-performance-minimal
-           ruby-rubocop-rake-minimal
-           ruby-rubocop-rspec-minimal
-           ruby-simplecov
-           ruby-yard))))
-
-(define-public ruby-rubocop-factory-bot
-  (package
-    (name "ruby-rubocop-factory-bot")
-    (version "2.26.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "rubocop-factory_bot" version))
-       (sha256
-        (base32 "1aljadsjx7affcarzbhz7pydpy6fgqb8hl951y0cmrffxpa3rqcd"))))
-    (build-system ruby-build-system)
-    (arguments '(#:tests? #f))  ; No tests bundled.
-    (synopsis "Code style checking for factory_bot files")
-    (description
-     "This package provides a plugin for the @code{RuboCop} code style
-enforcing & linting tool for @code{factory_bot} files.")
-    (home-page "https://github.com/rubocop/rubocop-factory_bot")
-    (license license:expat)))
-
-;;; A minimal variant used to build ruby-rubocop itself.
-(define ruby-rubocop-rake-minimal
-  (package
-    (name "ruby-rubocop-rake")
-    (version "0.6.0")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/rubocop/rubocop-rake")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1r53szwglikbir1fvpz4i51p915khrrkl6rp61zcx3dcrclkr3ld"))))
-    (build-system ruby-build-system)
-    (arguments (list #:tests? #f))      ;avoid extra dependencies
-    (synopsis "RuboCop plugin for Rake")
-    (description "This package provides a RuboCop plugin for Rake.")
-    (home-page "https://github.com/rubocop/rubocop-rake")
-    (license license:expat)))
-
-(define-public ruby-rubocop-rake
-  (package
-    (inherit ruby-rubocop-rake-minimal)
-    (arguments
-     (list #:test-target "spec"))
-    (native-inputs
-     (list ruby-rake
-           ruby-rspec
-           ruby-rubocop
-           ruby-rubocop-rspec))
-    (propagated-inputs
-     (list ruby-rubocop))))
-
-;;; A minimal variant used to build ruby-rubocop itself.
-(define ruby-rubocop-rspec-minimal
-  (package
-    (name "ruby-rubocop-rspec")
-    (version "2.26.0")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/rubocop/rubocop-rspec")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "1w9whadx60kv4vlbnk77b5yyhhfcg717r9cr334zqznqr1bqr8mh"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:tests? #f  ;avoid extra dependencies
-           #:phases
-           #~(modify-phases %standard-phases
-               (add-after 'unpack 'relax-requirements
-                 (lambda _
-                   (substitute* "Gemfile"
-                     (("gem 'danger'.*") "")))))))
-    (propagated-inputs (list ruby-rubocop-factory-bot))
-    (synopsis "Code style checking for RSpec files")
-    (description "This package provides a plugin for the RuboCop code style
-enforcing & linting tool.")
-    (home-page "https://github.com/rubocop/rubocop-rspec")
-    (license license:expat)))
-
-(define-public ruby-rubocop-rspec
-  (package
-    (inherit ruby-rubocop-rspec-minimal)
-    (arguments
-     (substitute-keyword-arguments
-         (package-arguments ruby-rubocop-rspec-minimal)
-       ((#:tests? _ #f) #t)
-       ((#:test-target _ "test") "spec")))
-    (native-inputs
-     (list ruby-bump
-           ruby-rack
-           ruby-rspec
-           ruby-rubocop-performance-minimal
-           ruby-rubocop-rake-minimal
-           ruby-simplecov
-           ruby-yard))
-    (propagated-inputs
-     (list ruby-rubocop
-           ruby-rubocop-ast
-           ruby-rubocop-capybara
-           ruby-rubocop-factory-bot))))
-
-(define-public ruby-rubocop-packaging
-  (package
-    (name "ruby-rubocop-packaging")
-    (version "0.5.2")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-              (url "https://github.com/utkarsh2102/rubocop-packaging")
-              (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "08jsfp42z0aj32002z2hz8vkmza0jvnrqk9rk2v0xb8qdxkgbx3l"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:test-target "spec"
-           #:phases
-           #~(modify-phases %standard-phases
-               (add-after 'unpack 'skip-problematic-tests
-                 (lambda _
-                   ;; Tests are actually running fine, except for a prefix.
-                   ;; This doesn't impair functionality, ignored for now.
-                   (delete-file
-                    "spec/rubocop/cop/packaging/gemspec_git_spec.rb"))))))
-    (propagated-inputs
-     (list ruby-rubocop))
-    (native-inputs
-     (list ruby-rspec
-           ruby-yard
-           ruby-bump))
-    (synopsis
-     "Collection of RuboCop checks for downstream compatibility issues")
-    (description
-     "This package provides a collection of RuboCop cops to check for
-downstream compatibility issues in the Ruby code.")
-    (home-page "https://github.com/utkarsh2102/rubocop-packaging")
-    (license license:expat)))
-
-(define-public ruby-rubocop-performance
-  (package
-    (name "ruby-rubocop-performance")
-    (version "1.23.1")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-              (url "https://github.com/rubocop/rubocop-performance")
-              (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "0d1p6pgrcnj58q1g0np5j4vbk7wavj31b4bapi5p4gckqlnc7xjd"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:tests? #f  ; tests require a git checkout of rubocop's source code.
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'replace-git-ls-files
-           (lambda _
-             (substitute* "rubocop-performance.gemspec"
-               (("`git ls-files -z config lib LICENSE.txt README.md`")
-                "`find config lib LICENSE.txt README.md \
--type f -print0 |sort -z`"))))
-         (add-before 'check 'set-HOME
-           (lambda _
-             (setenv "HOME" "/tmp"))))))
-    (propagated-inputs
-     (list ruby-rubocop ruby-rubocop-ast))
-    (native-inputs
-     (list ruby-bump ruby-yard))
-    (synopsis "Performance optimizations checkers for Ruby code")
-    (description "This package provides a collection of RuboCop cops to check
-for performance optimizations in Ruby code.")
-    (home-page "https://docs.rubocop.org/rubocop-performance/")
-    (license license:expat)))
-
-(define-public ruby-rubocop-performance-minimal
-  (hidden-package
-   (package
-     (inherit ruby-rubocop-performance)
-     (arguments
-      (substitute-keyword-arguments (package-arguments ruby-rubocop-performance)
-        ((#:tests? _ #f) #f)))
-     (propagated-inputs '())
-     (native-inputs '()))))
-
-(define-public ruby-stud
-  (package
-    (name "ruby-stud")
-    (version "0.0.23")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "stud" version))
-              (sha256
-               (base32
-                "0qpb57cbpm9rwgsygqxifca0zma87drnlacv49cqs2n5iyi6z8kb"))))
-    (build-system ruby-build-system)
-    (native-inputs (list ruby-rspec))
-    (arguments
-     (list #:phases #~(modify-phases %standard-phases
-                        ;; No Rakefile is included, so run rspec directly.
-                        (replace 'check
-                          (lambda* (#:key tests? #:allow-other-keys)
-                            (when tests?
-                              (invoke "rspec")))))))
-    (synopsis "Retries, worker supervision, resource pools and more for Ruby")
-    (description "The Stud Ruby library adds a few things missing from the
-standard Ruby library such as:
-@table @code
-@item {Stud::Try}
-Retry on failure, with back-off, where failure is any exception.
-@item {Stud::Pool}
-Generic resource pools.
-@item {Stud::Task}
-Tasks (threads that can return values, exceptions, etc.)
-@item {Stud.interval}
-Interval execution (do X every N seconds).
-@item {Stud::Buffer}
-Batch and flush behavior.
-@end itemize")
-    (home-page "https://github.com/jordansissel/ruby-stud")
-    (license license:asl2.0)))
-
-(define-public ruby-standard-custom
-  (package
-    (name "ruby-standard-custom")
-    (version "1.0.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "standard-custom" version))
-       (sha256
-        (base32 "0av55ai0nv23z5mhrwj1clmxpgyngk7vk6rh58d4y1ws2y2dqjj2"))))
-    (build-system ruby-build-system)
-    (arguments '(#:tests? #f))  ;Circular dependency on ruby-standard.
-    (propagated-inputs (list ruby-lint-roller ruby-rubocop))
-    (synopsis "Plugin of custom cops for Standard Ruby")
-    (description
-     "This package provides a implementations of custom cops that are bundled
-as defaults in Standard Ruby.")
-    (home-page "https://github.com/standardrb/standard-custom")
-    (license license:expat)))
-
-(define-public ruby-standard-performance
-  (package
-    (name "ruby-standard-performance")
-    (version "1.6.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "standard-performance" version))
-       (sha256
-        (base32 "1x298w3wmq8cavbsg903wc3arxp3xh2x8263brvy128436m732rd"))))
-    (build-system ruby-build-system)
-    (arguments '(#:tests? #f))  ;Circular dependency on ruby-standard.
-    (propagated-inputs (list ruby-lint-roller ruby-rubocop-performance))
-    (synopsis "Standard Ruby Plugin for rubocop-performance")
-    (description
-     "This package is a Standard Ruby Plugin providing configuration for
-@code{rubocop-performance}.")
-    (home-page "https://github.com/standardrb/standard-performance")
-    (license license:expat)))
-
-(define-public ruby-standard
-  (package
-    (name "ruby-standard")
-    (version "1.37.0")
-    (source
-     (origin
-       (method git-fetch)               ;no test suite in distributed gem
-       (uri (git-reference
-             (url "https://github.com/testdouble/standard")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "0gm9fn6fz41aya34xz7kzda8xxs7h98n7cjx66qbcy2w0qhs40wc"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'set-HOME
-            (lambda _
-              ;; Some tests fail otherwise.
-              (setenv "HOME" "/tmp")))
-          (add-after 'unpack 'relax-requirements
-            (lambda _
-              (substitute* "standard.gemspec"
-                (("\"rubocop\", \".*\"")
-                 (string-append
-                  "\"rubocop\", \"~> "
-                  #$(package-version
-                     (this-package-input "ruby-rubocop"))
-                  "\""))
-                (("\"rubocop-performance\", \".*\"")
-                 (string-append
-                  "\"rubocop-performance\", \"~> "
-                  #$(package-version
-                     (this-package-input "ruby-rubocop-performance"))
-                  "\"")))))
-          (add-after 'unpack 'delete-problematic-tests
-            ;; These tests fail for unknown reasons (see:
-            ;; https://github.com/testdouble/standard/issues/532).
-            (lambda _
-              (delete-file "test/standard_test.rb")
-              (substitute* "test/standard/base_test.rb"
-                ((".*test_configures_all_rubocop_cops.*" all)
-                 (string-append all
-                                "      skip('fails on guix')\n"))))))))
-    (native-inputs
-     (list ruby-simplecov))
-    (propagated-inputs
-     (list ruby-language-server-protocol
-           ruby-lint-roller
-           ruby-rubocop
-           ruby-rubocop-performance
-           ruby-standard-custom
-           ruby-standard-performance))
-    (synopsis "Ruby Style Guide, with linter & automatic code fixer")
-    (description "Standard is a port of StandardJS.  Like StandardJS, it aims
-to save time in the following ways:
-@itemize
-@item No configuration.
-@item Automatically format code.
-@item Catch style issues and programmer errors early.
-@end itemize")
-    (home-page "https://github.com/testdouble/standard")
-    (license license:expat)))
-
-(define-public ruby-chunky-png
-  (package
-    (name "ruby-chunky-png")
-    (version "1.4.0")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/wvanbergen/chunky_png")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "05qwj72dy2fcy0n2jnf3bfriybfj36m7s6pv9xash6295dbcp901"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:ruby ruby-3.1
-      #:test-target "spec"
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'disable-bundler
-            (lambda _
-              (substitute* (find-files "." "\\.rb$")
-                (("require.*bundler/setup.*") "")))))))
-    (native-inputs
-     (list bundler ruby-rspec ruby-standard ruby-yard))
-    (synopsis "Ruby library to handle PNG images")
-    (description "ChunkyPNG is a pure Ruby library that can read and write
-Portable Network Graphics (PNG) images without depending on an external image
-library.  It tries to be memory efficient and reasonably fast.  It has
-features such as:
-@itemize
-@item
-Decoding support for any image that the PNG standard allows.  This includes all
-standard color modes, all bit depths, all transparency, and interlacing and
-filtering options.
-@item
-Encoding support for images of all color modes (true color, grayscale, and
-indexed) and transparency for all these color modes.  The best color mode is
-chosen automatically, based on the amount of used colors.
-@item Read/write access to the image's pixels.
-@item Read/write access to all image metadata that is stored in chunks.
-@item
-Memory efficiency: @code{fixnum} are used, i.e. 4 or 8 bytes of memory per
-pixel, depending on the hardware).
-@item
-Performance: ChunkyPNG is reasonably fast for Ruby standards, by only using
-integer math and a highly optimized saving routine.
-@item Interoperability with RMagick.
-@end itemize
-
-ChunkyPNG is vulnerable to decompression bombs and can run out of memory when
-loading a specifically crafted PNG file.  This is hard to fix in pure Ruby.
-Deal with untrusted images in a separate process, e.g., by using @code{fork}
-or a background processing library.")
-    (home-page "https://github.com/wvanbergen/chunky_png/wiki")
-    (license license:expat)))
-
-(define-public ruby-text-hyphen
-  (package
-    (name "ruby-text-hyphen")
-    (version "1.5.0")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "text-hyphen" version))
-        (sha256
-          (base32
-            "01js0wxz84cc5hzxgqbcqnsa0y6crhdi6plmgkzyfm55p0rlajn4"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list ruby-hoe))
-    (synopsis "Ruby library to hyphenate words in various languages")
-    (description "Text::Hyphen is a Ruby library to hyphenate words in various
-languages using Ruby-fied versions of TeX hyphenation patterns.  It will
-properly hyphenate various words according to the rules of the language the
-word is written in.  The algorithm is based on that of the TeX typesetting
-system by Donald E.  Knuth.")
-    (home-page "https://github.com/halostatue/text-hyphen")
-    ;; The whole is licensed under the Expat license, but parts use various
-    ;; versions of the LaTeX Project Public License.
-    (license license:expat)))
-
-(define-public ruby-open-uri-cached
-  (package
-    (name "ruby-open-uri-cached")
-    (version "1.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "open-uri-cached" version))
-       (sha256
-        (base32
-         "03v0if3jlvbclnd6jgjk94fbhf0h2fq1wxr0mbx7018sxzm0biwr"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:tests? #f))                    ;no test suite
-    (synopsis "OpenURI with transparent disk caching")
-    (description "OpenURI with transparent disk caching, which is
-useful to avoid making excessive queries, for example when scraping
-web pages.")
-    (home-page "https://github.com/tigris/open-uri-cached")
-    (license license:expat)))
-
-(define-public ruby-asciidoctor-pdf
-  (package
-    (name "ruby-asciidoctor-pdf")
-    (version "2.3.19")
-    (source
-     (origin
-       (method git-fetch)               ;no test suite in the distributed gem
-       (uri (git-reference
-             (url "https://github.com/asciidoctor/asciidoctor-pdf")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "1l8my8jj4aww2yad80n6f7hs76lq5gicld8dy014pw90pk3x43mp"))
-       (patches
-        (search-patches
-         "ruby-asciidoctor-pdf-support-prawn-svg-0_36.patch"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:test-target "spec"
-      #:phases
-      #~(modify-phases %standard-phases
-          ;; The tests rely on the Gem being installed, so move the check
-          ;; phase after the install phase.
-          (delete 'check)
-          (add-after 'install 'check
-            (lambda* (#:key tests? #:allow-other-keys)
-              (setenv "GEM_PATH" (string-append
-                                  (getenv "GEM_PATH") ":"
-                                  #$output "/lib/ruby/vendor_ruby"))
-              (when tests?
-                (invoke "rspec" "-t" "~visual" "-t" "~cli"
-                        "-t" "~network")))))))
-    (native-inputs
-     (list ruby-chunky-png
-           ruby-coderay
-           ruby-pdf-inspector
-           ruby-rouge
-           ruby-rspec))
-    (propagated-inputs
-     (list ruby-asciidoctor
-           ruby-concurrent
-           ruby-prawn
-           ruby-prawn-icon
-           ruby-prawn-svg
-           ruby-prawn-table
-           ruby-prawn-templates
-           ruby-text-hyphen
-           ruby-treetop
-           ruby-ttfunk))
-    (synopsis"AsciiDoc to Portable Document Format (PDF)} converter")
-    (description "Asciidoctor PDF is an extension for Asciidoctor that
-converts AsciiDoc documents to Portable Document Format (PDF) using the Prawn
-PDF library.  It has features such as:
-@itemize
-@item Direct AsciiDoc to PDF conversion
-@item Configuration-driven theme (style and layout)
-@item Scalable Vector Graphics (SVG) support
-@item PDF document outline (i.e., bookmarks)
-@item Table of contents page(s)
-@item Document metadata (title, authors, subject, keywords, etc.)
-@item Internal cross reference links
-@item Syntax highlighting with Rouge, Pygments, or CodeRay
-@item Page numbering
-@item Customizable running content (header and footer)
-@item
-“Keep together” blocks (i.e., page breaks avoided in certain block content)
-@item Orphaned section titles avoided
-@item Autofit verbatim blocks (as permitted by base_font_size_min setting)
-@item Table border settings honored
-@item Font-based icons
-@item Custom TrueType (TTF) fonts
-@item Double-sided printing mode (margins alternate on recto and verso pages)
-@end itemize")
-    (home-page "https://asciidoctor.org/docs/asciidoctor-pdf")
-    (license license:expat)))
-
-(define-public ruby-ast
-  (package
-    (name "ruby-ast")
-    (version "2.4.2")
-    (source
-     (origin
-       (method git-fetch)               ;no test included in gem from v2.4.1
-       (uri (git-reference
-             (url "https://github.com/whitequark/ast")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "0vm94yml8rknr7z034vg6s3fpx6lml2prz9fn3hr67cx0143bb4h"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'remove-coveralls-requirement
-           (lambda _
-             (substitute* "test/helper.rb"
-               (("require 'coveralls'") "")
-               (("Coveralls::SimpleCov::Formatter") ""))))
-         (add-after 'extract-gemspec 'remove-unnecessary-requirements
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "ast.gemspec"
-               ((".*coveralls.*") "\n")
-               (("%q<rest-client>.*") "%q<rest-client>.freeze, [\">= 0\"])\n")
-               (("%q<mime-types>.*") "%q<mime-types>.freeze, [\">= 0\"])\n")
-               (("%q<rake>.*") "%q<rake>.freeze, [\">= 0\"])\n")
-               (("12\\.3") "13.0")))))))
-    (native-inputs
-     (list bundler
-           ruby-bacon
-           ruby-bacon-colored-output
-           ruby-json-pure
-           ruby-kramdown
-           ruby-mime-types
-           ruby-racc
-           ruby-rest-client
-           ruby-simplecov
-           ruby-yard))
-    (synopsis "Library for working with Abstract Syntax Trees")
-    (description
-     "@code{ast} is a Ruby library for working with Abstract Syntax Trees.
-It does this through immutable data structures.")
-    (home-page "https://whitequark.github.io/ast/")
-    (license license:expat)))
-
-(define-public ruby-sporkmonger-rack-mount
-  ;; Testing the addressable gem requires a newer commit than that released, so
-  ;; use an up to date version.
-  (let ((revision "1")
-        (commit "076aa2c47d9a4c081f1e9bcb56a826a9e72bd5c3"))
-    (package
-      (name "ruby-sporkmonger-rack-mount")
-      (version (git-version "0.8.3" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/sporkmonger/rack-mount")
-                      (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "1scx273g3xd93424x9lxc4zyvcp2niknbw5mkz6wkivpf7xsyxdq"))))
-      (build-system ruby-build-system)
-      (arguments
-       ;; Tests currently fail so disable them.
-       ;; https://github.com/sporkmonger/rack-mount/pull/1
-       `(#:tests? #f))
-      (propagated-inputs (list ruby-rack))
-      (synopsis "Stackable dynamic tree based Rack router")
-      (description
-       "@code{Rack::Mount} supports Rack's @code{X-Cascade} convention to
-continue trying routes if the response returns pass.  This allows multiple
-routes to be nested or stacked on top of each other.")
-      (home-page "https://github.com/sporkmonger/rack-mount")
-      (license license:expat))))
-
-(define-public ruby-ci-reporter
-  (package
-    (name "ruby-ci-reporter")
-    (version "2.1.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "ci_reporter" version))
-              (sha256
-               (base32
-                "0qcafasmjjr8a5gzr4k92ncm6h2943skwllhjzwz8spawdwc7dla"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:test-target "rspec"))
-    (propagated-inputs
-     (list ruby-builder ruby-rexml))
-    (native-inputs
-     (list bundler ruby-rspec))
-    (synopsis "Generate XML reports of runs test")
-    (description
-     "@code{CI::Reporter} is an add-on to Ruby testing frameworks that allows
-you to generate XML reports of your test runs.  The resulting files can be
-read by a continuous integration system that understands Ant's JUnit report
-format.")
-    (home-page "https://github.com/nicksieger/ci_reporter")
-    (license license:expat)))
-
-(define-public ruby-console
-  (package
-    (name "ruby-console")
-    (version "1.16.2")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "console" version))
-              (sha256
-               (base32
-                "0y1bv3kd1l9p0k5n3anvvjxdrcq113pyngz2g29i9mvdgbbx7kq2"))))
-    (build-system ruby-build-system)
-    ;; XXX: Disable test suite to avoid dependency cycles with ruby-samovar.
-    (arguments (list #:tests? #f))
-    (propagated-inputs (list ruby-fiber-local))
-    (synopsis "Console logging library for Ruby")
-    (description "This gem provides beautiful console logging for Ruby
-applications.  It implements fast, buffered log output and has the following
-features:
-@itemize
-@item Thread safe global logger with per-fiber context
-@item Carry along context with nested loggers
-@item Enable/disable log levels per class
-@item Detailed logging of exceptions
-@item Beautiful logging to the terminal or structured logging using JSON.
-@end itemize")
-    (home-page "https://github.com/socketry/console")
-    (license license:expat)))
-
-(define-public ruby-contracts
-  (package
-    (name "ruby-contracts")
-    (version "0.17.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "contracts" version))
-       (sha256
-        (base32
-         "1sclvlwnlxfaj1595xd0rn3x3w0ljic3vqgnx6476lr7x8xbpbiv"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:test-target "spec"
-      #:phases
-      #~(modify-phases %standard-phases
-          ;; Don't run or require rubocop, the code linting tool, as this is a
-          ;; bit unnecessary.
-          (add-after 'unpack 'dont-run-rubocop
-            (lambda _
-              (substitute* "Rakefile"
-                ((".*rubocop.*") "")
-                ((".*RuboCop.*") "")))))))
-    (native-inputs
-     (list ruby-rspec))
-    (synopsis "Method contracts for Ruby")
-    (description
-     "This library provides contracts for Ruby.  A contract describes the
-correct inputs and output for a method, and will raise an error if a incorrect
-value is found.")
-    (home-page "https://github.com/egonSchiele/contracts.ruby")
-    (license license:bsd-2)))
-
-(define-public ruby-crack
-  (package
-    (name "ruby-crack")
-    (version "0.4.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "crack" version))
-       (sha256
-        (base32
-         "1cr1kfpw3vkhysvkk3wg7c54m75kd68mbm9rs5azdjdq57xid13r"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (for-each (lambda (file)
-                           (display file)(display "\n")
-                           (invoke "ruby" "-Ilib" "-Itest" "-rrubygems" file))
-                         (find-files "test" ".*rb$"))))))))
-    (synopsis "Simple JSON and XML parsing for Ruby")
-    (description
-     "@code{crack} provides really simple JSON and XML parsing, extracted from
-code in Merb and Rails.")
-    (home-page "https://github.com/jnunemaker/crack")
-    (license license:expat)))
-
-(define-public ruby-clamp
-  (package
-    (name "ruby-clamp")
-    (version "1.3.2")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "clamp" version))
-              (sha256
-               (base32
-                "08m0syh06bhx8dqn560ivjg96l5cs5s3l9jh2szsnlcdcyl9jsjg"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:test-target "spec"
-           #:phases #~(modify-phases %standard-phases
-                        (add-after 'unpack 'do-not-require-rubocop
-                          (lambda _
-                            (substitute* "Rakefile"
-                              (("require \"rubocop/rake_task\"")
-                               "")
-                              (("RuboCop::RakeTask.new")
-                               "")))))))
-    (native-inputs (list ruby-rspec))
-    (synopsis "Command-line parsing library for Ruby")
-    (description "Clamp provides an object-model for command-line utilities.
-It handles parsing of command-line options, and generation of usage help.")
-    (home-page "https://github.com/mdub/clamp")
-    (license license:expat)))
-
-(define-public ruby-cliver
-  (package
-    (name "ruby-cliver")
-    (version "0.3.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "cliver" version))
-       (sha256
-        (base32
-         "096f4rj7virwvqxhkavy0v55rax10r4jqf8cymbvn4n631948xc7"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         ;; Avoid a incompatibility between rspec@2 and rake. Using rspec@3
-         ;; would be nice, but the tests look to be incompatible:
-         ;;
-         ;; NoMethodError: undefined method `last_comment'
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (invoke "rspec")))))))
-    (native-inputs
-     (list bundler ruby-rspec-2))
-    (synopsis "Assertions for command-line dependencies in Ruby")
-    (description
-     "@code{cliver} provides a way to detect missing command-line
-dependencies, including versions.")
-    (home-page "https://github.com/yaauie/cliver")
-    (license license:expat)))
-
-(define-public ruby-czmq-ffi-gen
-  (package
-    (name "ruby-czmq-ffi-gen")
-    (version "0.13.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "czmq-ffi-gen" version))
-       (sha256
-        (base32
-         "1yf719dmf4mwks1hqdsy6i5kzfvlsha69sfnhb2fr2cgk2snbys3"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f ;; Tests are not included in the release on rubygems.org
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-lib_dirs
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "lib/czmq-ffi-gen/czmq/ffi.rb"
-               (("lib\\_dirs = \\[.*\\]")
-                (string-append "lib_dirs = ['"
-                               (assoc-ref inputs "czmq") "/lib"
-                               "']")))
-             (substitute* "lib/czmq-ffi-gen/libzmq.rb"
-               (("lib\\_dirs = \\[.*\\]")
-                (string-append "lib_dirs = ['"
-                               (assoc-ref inputs "zeromq") "/lib"
-                               "']"))))))))
-    (inputs
-     (list zeromq czmq))
-    (propagated-inputs (list ruby-ffi))
-    (synopsis "Low-level Ruby bindings for CZMQ (generated using zproject)")
-    (description
-     "These Ruby bindings are not intended to be directly used, but rather
-used by higher level bindings like those provided by CZTop.")
-    (home-page
-     "https://github.com/paddor/czmq-ffi-gen")
-    (license license:isc)))
-
-(define-public ruby-cztop
-  (package
-    (name "ruby-cztop")
-    (version "0.12.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "cztop" version))
-       (sha256
-        (base32
-         "0yqbpaiw5d7f271d73lyrsh8xpx6n4zi6xqwfgi00dacxrq3s3fa"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:test-target "spec"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-lib_paths
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "lib/cztop/poller/zmq.rb"
-               (("lib\\_paths = \\[.*\\]")
-                (string-append "lib_paths = ['"
-                               (assoc-ref inputs "zeromq") "/lib"
-                               "']"))))))))
-    (native-inputs
-     (list bundler ruby-rspec))
-    (inputs
-     (list zeromq))
-    (propagated-inputs
-     (list ruby-czmq-ffi-gen))
-    (synopsis "CZMQ Ruby bindings")
-    (description
-     "CZMQ Ruby bindings, based on the generated low-level FFI bindings of
-CZMQ.  The focus of of CZTop is on being easy to use and providing first class
-support for security mechanisms.")
-    (home-page "https://github.com/paddor/cztop")
-    (license license:isc)))
-
-(define-public ruby-saikuro-treemap
-  (package
-    (name "ruby-saikuro-treemap")
-    (version "0.2.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "saikuro_treemap" version))
-              (sha256
-               (base32
-                "0w70nmh43mwfbpq20iindl61siqqr8acmf7p3m7n5ipd61c24950"))))
-    (build-system ruby-build-system)
-    ;; Some of the tests fail because the generated JSON has keys in a
-    ;; different order.  This is a problem with the test suite rather than any
-    ;; of the involved libraries.
-    (arguments `(#:tests? #f))
-    (propagated-inputs
-     (list ruby-json-pure ruby-atoulme-saikuro))
-    (synopsis "Generate complexity treemap based on saikuro analysis")
-    (description
-     "This gem generates a treemap showing the complexity of Ruby code on
-which it is run.  It uses Saikuro under the covers to analyze Ruby code
-complexity.")
-    (home-page "https://github.com/ThoughtWorksStudios/saikuro_treemap")
-    (license license:expat)))
-
-(define-public ruby-oauth2
-  (package
-    (name "ruby-oauth2")
-    (version "2.0.9")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://gitlab.com/oauth-xx/oauth2")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "191j1f4gjw8wij1jy2fvddgi8cv1mm0ki7v0b0795clix1avnj29"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:modules '((guix build ruby-build-system)
-                       (guix build utils)
-                       (ice-9 regex)
-                       (ice-9 textual-ports))
-           #:phases
-           #~(modify-phases %standard-phases
-               (add-after 'unpack 'relax-requirements
-                          (lambda _
-                            (substitute* "Gemfile"
-                              (("^linting = .*")
-                               "linting = false\n")
-                              (("^coverage = .*")
-                               "coverage = false\n")
-                              (("^debug = .*")
-                               "debug = false\n"))
-                            (substitute* "spec/spec_helper.rb"
-                              (("^RUN_COVERAGE = .*")
-                               "RUN_COVERAGE = false\n")
-                              (("^ALL_FORMATTERS = .*")
-                               "ALL_FORMATTERS = false\n"))))
-               (add-after 'unpack 'skip-problematic-test
-                 (lambda _
-                   ;; XXX: substitute* can't match 2 lines.
-                   (with-atomic-file-replacement
-                    "spec/oauth2/client_spec.rb"
-                    (lambda (in out)
-                      (let* ((pattern "\
-    context 'when parse: :xml but response is JSON' do\n\
-      it 'returns a configured AccessToken' do\n")
-                             (content (get-string-all in))
-                             (matched (string-match pattern content)))
-                        (if matched
-                            (format out "~a    skip('fails on guix')~%~a"
-                                    (string-take content (match:end matched))
-                                    (string-drop content (match:end matched)))
-                            (display content out))))))))))
-    (native-inputs
-     (list bundler
-           ruby-addressable
-           ruby-backports
-           ruby-rexml
-           ruby-rspec-block-is-expected
-           ruby-rspec-pending-for
-           ruby-rspec-stubbed-env
-           ruby-silent-stream))
-    (propagated-inputs
-     (list ruby-faraday
-           ruby-jwt
-           ruby-multi-xml
-           ruby-rack
-           ruby-snaky-hash
-           ruby-version-gem))
-    (synopsis "Ruby wrapper for the OAuth 2.0")
-    (description
-     "This package provides a Ruby wrapper for the OAuth 2.0 protocol built
-with a similar style to the original OAuth spec.")
-    (home-page "https://github.com/oauth-xx/oauth2")
-    (license license:expat)))
-
-(define-public ruby-omniauth
-  (package
-    (name "ruby-omniauth")
-    (version "2.1.1")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/omniauth/omniauth")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1mm7a4ll7ymamrbsl63yi6i34qpwmh2nh5a9kj961gja1iz2gyd1"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:phases
-           #~(modify-phases %standard-phases
-               (add-after 'unpack 'relax-requirements
-                 (lambda _
-                   (substitute* "spec/helper.rb"
-                     ;; This condition is used to require coveralls and
-                     ;; simplecov; override it to avoid these extraneous
-                     ;; requirements.
-                     (("RUBY_VERSION >= '1.9'")
-                      "false")
-                     (("require 'rack/freeze'") "")))))))
-    (native-inputs (list ruby-rspec))
-    (propagated-inputs (list ruby-hashie ruby-rack ruby-rack-test
-                             ruby-rack-protection))
-    (synopsis "Generalized Rack framework for multiple-provider authentication")
-    (description
-     "This package provides a generalized Rack framework for multiple-provider
-authentication.")
-    (home-page "https://github.com/omniauth/omniauth")
-    (license license:expat)))
-
-(define-public ruby-omniauth-oauth2
-  (package
-    (name "ruby-omniauth-oauth2")
-    (version "1.8.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "omniauth-oauth2" version))
-       (sha256
-        (base32
-         "0y4y122xm8zgrxn5nnzwg6w39dnjss8pcq2ppbpx9qn7kiayky5j"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:phases
-           #~(modify-phases %standard-phases
-               (add-after 'unpack 'relax-requirements
-                 (lambda _
-                   (substitute* "spec/helper.rb"
-                     ;; This condition is used to require coveralls and
-                     ;; simplecov; override it to avoid these extraneous
-                     ;; requirements.
-                     (("RUBY_VERSION >= \"1.9\"")
-                      "false")))))))
-    (propagated-inputs (list ruby-oauth2 ruby-omniauth))
-    (native-inputs (list ruby-rspec ruby-rack-test ruby-webmock))
-    (synopsis "Abstract OAuth2 strategy for OmniAuth")
-    (description
-     "This library provides a generic OAuth2 strategy for OmniAuth.  It
-doesn't provide a way to gather user information, so should be used as a
-building block for authentication strategies.")
-    (home-page "https://github.com/omniauth/omniauth-oauth2")
-    (license license:expat)))
-
-(define-public ruby-open4
-  (package
-  (name "ruby-open4")
-  (version "1.3.4")
-  (source
-    (origin
-      (method url-fetch)
-      (uri (rubygems-uri "open4" version))
-      (sha256
-        (base32
-          "1cgls3f9dlrpil846q0w7h66vsc33jqn84nql4gcqkk221rh7px1"))))
-  (build-system ruby-build-system)
-  (arguments
-   '(#:phases
-     (modify-phases %standard-phases
-       (add-after 'unpack 'patch
-         (lambda _
-           (substitute* "rakefile"
-             ;; Update the Rakefile so it works
-             (("-rubygems") "-rrubygems")
-             (("Config") "RbConfig"))))
-       (add-before 'check 'set-LIB
-         (lambda _
-           ;; This is used in the rakefile when running the tests
-           (setenv "LIB" "open4"))))))
-  (synopsis "Open child processes from Ruby and manage them easily")
-  (description
-    "@code{Open4} is a Ruby library to run child processes and manage their
-input and output.")
-  (home-page "https://github.com/ahoward/open4")
-  (license license:ruby)))
-
-(define-public ruby-options
-  (package
-    (name "ruby-options")
-    (version "2.3.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "options" version))
-       (sha256
-        (base32
-         "1s650nwnabx66w584m1cyw82icyym6hv5kzfsbp38cinkr5klh9j"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f ;; TODO: NameError: uninitialized constant Config
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'check 'set-LIB
-           (lambda _
-             ;; This is used in the Rakefile, and setting it avoids an issue
-             ;; with running the tests.
-             (setenv "LIB" "options"))))))
-    (synopsis "Ruby library to parse options from *args cleanly")
-    (description
-     "The @code{options} library helps with parsing keyword options in Ruby
-functions.")
-    (home-page "https://github.com/ahoward/options")
-    (license license:ruby)))
-
-(define-public ruby-erubi
-  (package
-    (name "ruby-erubi")
-    (version "1.11.0")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/jeremyevans/erubi")
-             (commit version)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "0y4qskz260fjwbnjps5z5yygjwgh6ds0f97lfa9gsmh6zqa1lvvx"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:test-target "spec"))
-    (native-inputs (list ruby-minitest
-                         ruby-minitest-global-expectations))
-    (synopsis "ERB template engine for Ruby")
-    (description
-     "Erubi is a ERB template engine for Ruby.  It is a simplified fork of
-Erubis")
-    (home-page "https://github.com/jeremyevans/erubi")
-    (license license:expat)))
-
-(define-public ruby-erubis
-  (package
-    (name "ruby-erubis")
-    (version "2.7.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "erubis" version))
-       (sha256
-        (base32
-         "1fj827xqjs91yqsydf0zmfyw9p4l2jz5yikg3mppz6d7fi8kyrb3"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; tests do not run properly with Ruby 2.0
-    (synopsis "Implementation of embedded Ruby (eRuby)")
-    (description
-     "Erubis is a fast implementation of embedded Ruby (eRuby) with several
-features such as multi-language support, auto escaping, auto trimming spaces
-around @code{<% %>}, a changeable embedded pattern, and Ruby on Rails
-support.")
-    (home-page "http://www.kuwata-lab.com/erubis/")
-    (license license:expat)))
-
-(define-public ruby-ethon
-  (package
-    (name "ruby-ethon")
-    (version "0.12.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "ethon" version))
-       (sha256
-        (base32
-         "0gggrgkcq839mamx7a8jbnp2h7x2ykfn34ixwskwb0lzx2ak17g9"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:tests? #f  ; no included tests
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'libcurl-use-absolute-reference
-            (lambda* (#:key inputs #:allow-other-keys)
-              (substitute* "lib/ethon/curls/settings.rb"
-                (("libcurl', 'libcurl\\.so\\.4")
-                 (search-input-file inputs "/lib/libcurl.so"))))))))
-    (inputs
-     (list curl))
-    (propagated-inputs
-     (list ruby-ffi))
-    (synopsis "Very lightweight @code{libcurl} wrapper")
-    (description
-     "Ethon is a very basic @code{libcurl} wrapper using ffi.")
-    (home-page "https://github.com/typhoeus/ethon")
-    (license license:expat)))
-
-(define-public ruby-execjs
-  (package
-    (name "ruby-execjs")
-    (version "2.7.0")
-    (source
-     (origin
-       ;; fetch from github as the gem does not contain testing code
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/rails/execjs")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "0c0vd2mmqq3ar4plbwi2wsbr31vn4h45i19r5km66skydnnbp1y6"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list bundler
-           ;; The test suite tests all the available backends. Currently, this just
-           ;; means the node backend.
-           ;;
-           ;; PASSED: test:node
-           ;; SKIPPED: test:duktape, ;; test:javascriptcore, test:jscript,
-           ;; test:miniracer, test:rubyracer, ;; test:rubyrhino, test:v8
-           node-lts))
-    (synopsis "Run JavaScript code from Ruby")
-    (description
-     "ExecJS lets you run JavaScript code from Ruby.  It automatically picks a
-runtime to evaluate your JavaScript program, then returns the result to you as
-a Ruby object.")
-    (home-page "https://github.com/rails/execjs")
-    (license license:expat)))
-
-(define-public ruby-fakefs
-  (package
-    (name "ruby-fakefs")
-    (version "2.8.0")
-    (home-page "https://github.com/fakefs/fakefs")
-    (source (origin
-              ;; The Rubygems release does not contain tests.
-              (method git-fetch)
-              (uri (git-reference
-                    (url home-page)
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0a3vq6cllml279j77hxipmbln31pjw6di3zdgpzqvhqgazv55v10"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:phases (modify-phases %standard-phases
-                  (replace 'replace-git-ls-files
-                    (lambda _
-                      (substitute* "fakefs.gemspec"
-                        (("`git ls-files lib README.md LICENSE`")
-                         "`find lib README.md LICENSE -type f | sort`"))))
-                  (add-before 'check 'remove-version-constraints
-                    (lambda _
-                      ;; Drop hard version requirements for test dependencies.
-                      (substitute* "fakefs.gemspec"
-                        (("(.*add_development_dependency .*), .*" _ dep)
-                         (string-append dep "\n"))))))))
-    (native-inputs
-     (list ruby-bump ruby-maxitest ruby-pry ruby-rubocop ruby-rspec))
-    (synopsis "Fake file system for Ruby")
-    (description
-     "This package provides a fake file system for use in test suites.  It
-avoids the need for manually creating temporary directories, or dealing
-with platform intricacies in @code{File} and @code{FileUtils}.")
-    (license license:expat)))
-
-(define-public ruby-orderedhash
-  (package
-    (name "ruby-orderedhash")
-    (version "0.0.6")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "orderedhash" version))
-              (sha256
-               (base32
-                "0fryy7f9jbpx33jq5m402yqj01zcg563k9fsxlqbhmq638p4bzd7"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; no test suite
-    (synopsis "Ruby library providing an order-preserving hash")
-    (description "Orderedhash is a Ruby library providing a hash
-implementation that preserves the order of items and features some array-like
-extensions.")
-    (home-page "http://codeforpeople.com/lib/ruby/orderedhash/")
-    (license license:public-domain)))
-
-(define-public ruby-libxml
-  (package
-    (name "ruby-libxml")
-    (version "3.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "libxml-ruby" version))
-       (sha256
-        (base32
-         "0xy8wmjwjcnv36zi042678ncjzpxvy351ccbv7mzkns2n3kxfp54"))))
-    (build-system ruby-build-system)
-    (inputs
-     (list zlib libxml2))
-    (arguments
-     '(#:tests? #f ; test suite hangs for unknown reason
-       #:gem-flags
-       (list "--no-document"            ; TODO: Re-enable when documentation
-                                        ; generation works
-             "--"
-             (string-append "--with-xml2-include="
-                            (assoc-ref %build-inputs "libxml2")
-                            "/include/libxml2" ))))
-    (synopsis "Ruby bindings for GNOME Libxml2")
-    (description "The Libxml-Ruby project provides Ruby language bindings for
-the GNOME Libxml2 XML toolkit.")
-    (home-page "https://xml4r.github.com/libxml-ruby")
-    (license license:expat)))
-
-(define-public ruby-lino
-  (package
-    (name "ruby-lino")
-    (version "3.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "lino" version))
-       (sha256
-        (base32
-         "1zq9dza040fgjvr9imh7z2lgxrcyc5ac100rqimsnsf9bpfz3fsm"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; No included tests
-    (propagated-inputs
-     (list ruby-hamster ruby-open4))
-    (synopsis "Build and execute commands in Ruby")
-    (description
-     "@code{Lino} provides an interface to run external commands.  It provides
-an interface to add options as well as managing the standard input, output and
-error streams.")
-    (home-page "https://github.com/tobyclemson/lino")
-    (license license:expat)))
-
-(define-public ruby-x25519
-  (package
-    (name "ruby-x25519")
-    (version "1.0.10")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/RubyCrypto/x25519")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1g0311ly32f6hfn4q5fvkbjbl2bhv1l9fx6s0kglxfsrwq51926y"))
-              (patches
-               (search-patches
-                "ruby-x25519-automatic-fallback-non-x86_64.patch"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:test-target "spec"
-           #:phases #~(modify-phases %standard-phases
-                        (add-after 'unpack 'remove-unnecessary-dependencies
-                          (lambda _
-                            (substitute* "Gemfile"
-                              ((".*rubocop.*")
-                               ""))
-                            (substitute* "Rakefile"
-                              (("require \"rubocop/rake_task\"")
-                               "")
-                              (("RuboCop::RakeTask.new")
-                               ""))))
-                        (add-before 'build 'compile
-                          (lambda _
-                            (invoke "rake" "compile"))))))
-    (native-inputs (list ruby-rake-compiler ruby-rspec))
-    (synopsis "Cryptography library for Ruby providing the X25519
-Diffie-Hellman function")
-    (description
-     "The x25519 gem is an efficient public key cryptography library for
-Ruby providing key exchange/agreement via the X25519 (as known as
-Curve25519) Elliptic Curve Diffie-Hellman function as described in
-@url{https://www.ietf.org/rfc/rfc7748.txt, RFC 7748}.")
-    (home-page "https://github.com/RubyCrypto/x25519")
-    (license license:bsd-3)))
-
-(define-public ruby-xml-simple
-  (package
-    (name "ruby-xml-simple")
-    (version "1.1.5")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "xml-simple" version))
-              (sha256
-               (base32
-                "0xlqplda3fix5pcykzsyzwgnbamb3qrqkgbrhhfz2a2fxhrkvhw8"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; no test suite
-    (synopsis "Simple Ruby library for XML processing")
-    (description "This library provides a simple API for XML processing in
-Ruby.")
-    (home-page "https://github.com/maik/xml-simple")
-    (license license:ruby)))
-
-(define-public ruby-xpath
-  (package
-    (name "ruby-xpath")
-    (version "3.2.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "xpath" version))
-              (sha256
-               (base32
-                "0bh8lk9hvlpn7vmi6h4hkcwjzvs2y0cmkk3yjjdr8fxvj6fsgzbd"))))
-    (build-system ruby-build-system)
-    (arguments (list #:phases #~(modify-phases %standard-phases
-                                  (replace 'check
-                                    (lambda* (#:key tests? #:allow-other-keys)
-                                      (when tests?
-                                        (invoke "rspec" "spec" )))))))
-    (native-inputs (list ruby-pry ruby-rspec))
-    (propagated-inputs (list ruby-nokogiri))
-    (synopsis "Ruby DSL for generating XPath expressions")
-    (description "XPath is a Ruby domain-specific language (DSL) for
-generating XPath expressions.")
-    (home-page "https://github.com/teamcapybara/xpath")
-    (license license:expat)))
-
-(define-public ruby-thor
-  (package
-    (name "ruby-thor")
-    (version "1.2.2")
-    (source (origin
-              ;; Pull from git because the gem has no tests.
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/rails/thor")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1k3z2mlhaig5ycapjxwybb19z7ca0q1876i6csfmv2j0hf1hnc0z"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'remove-coveralls-dependency
-            (lambda _
-              ;; Do not hook the test suite into the online coveralls service.
-              (substitute* "Gemfile"
-                ((".*coveralls.*") ""))
-              (substitute* "spec/helper.rb"
-                (("require \"coveralls\"") "")
-                (("Coveralls::SimpleCov::Formatter") ""))))
-          (add-after 'unpack 'disable-problematic-tests
-            (lambda _
-              ;; These tests attempt to check the git repository for
-              ;; tabs vs spaces, double vs single quotes, etc, and
-              ;; depend on the git checkout.
-              (delete-file "spec/quality_spec.rb")
-              (substitute* "spec/parser/options_spec.rb"
-                ;; This test fails for unknown reasons (see:
-                ;; https://github.com/rails/thor/issues/814).
-                (("it \"raises an error for unknown switches" all)
-                 (string-append "x" all)))))
-          (replace 'check
-            (lambda* (#:key tests? #:allow-other-keys)
-              (when tests?
-                (invoke "rspec" "spec" )))))))
-    (native-inputs (list ruby-rspec ruby-simplecov ruby-webmock))
-    (synopsis "Ruby toolkit for building command-line interfaces")
-    (description "Thor is a toolkit for building powerful command-line
-interfaces.")
-    (home-page "http://whatisthor.com/")
-    (license license:expat)))
-
-(define-public ruby-lumberjack
-  (package
-    (name "ruby-lumberjack")
-    (version "1.0.13")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "lumberjack" version))
-              (sha256
-               (base32
-                "06im7gcg42x77yhz2w5da2ly9xz0n0c36y5ks7xs53v0l9g0vf5n"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list ruby-rspec ruby-timecop))
-    (synopsis "Logging utility library for Ruby")
-    (description "Lumberjack is a simple logging utility that can be a drop in
-replacement for Logger or ActiveSupport::BufferedLogger.  It provides support
-for automatically rolling log files even with multiple processes writing the
-same log file.")
-    (home-page "https://github.com/bdurand/lumberjack")
-    (license license:expat)))
-
-(define-public ruby-rbnacl
-  (package
-    (name "ruby-rbnacl")
-    (version "7.1.1")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "rbnacl" version))
-              (sha256
-               (base32
-                "0y8yzianlkc9w6sbqy8iy8l0yym0y6x7p5rjflkfixq76fqmhvzk"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'remove-unnecessary-dependencies
-            (lambda _
-              ;; Coveralls relates to a network service, and Rubocop to code
-              ;; linting and both are unnecessary to run the tests
-              (substitute* "Gemfile"
-                ((".*rubocop.*")
-                 "\n")
-                ((".*guard-rspec.*")
-                 "\n")
-                ((".*coveralls.*")
-                 "\n"))
-              (substitute* "spec/spec_helper.rb"
-                (("require \"coveralls\"")
-                 "")
-                (("Coveralls.wear!")
-                 ""))))
-          (add-after 'unpack 'use-libsodium-from-store
-            (lambda* (#:key inputs #:allow-other-keys)
-              (substitute* '("lib/rbnacl/init.rb"
-                             "lib/rbnacl/sodium.rb")
-                (("ffi_lib \\[.+\\]")
-                 (string-append "ffi_lib [\""
-                                (assoc-ref inputs "libsodium")
-                                "/lib/libsodium.so" "\"]")))))
-          ;; Run Rspec directly to avoid the Rubocop dependency in the
-          ;; Rakefile
-          (replace 'check
-            (lambda* (#:key tests? #:allow-other-keys)
-              (when tests?
-                (invoke "rspec")))))))
-    (propagated-inputs (list ruby-ffi))
-    (inputs (list libsodium))
-    (native-inputs (list bundler ruby-rspec))
-    (synopsis "Ruby FFI binding to libsodium")
-    (description
-     "This package provides Ruby FFI bindings to the Networking and
-Cryptography (NaCl) library, also known as libsodium.  This provides a
-high-level toolkit for building cryptographic systems and protocols.")
-    (home-page "https://github.com/RubyCrypto/rbnacl")
-    (license license:expat)))
-
-(define-public ruby-rbtree
-  (package
-    (name "ruby-rbtree")
-    (version "0.4.6")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "rbtree" version))
-              (sha256
-               (base32
-                "1z0h1x7fpkzxamnvbw1nry64qd6n0nqkwprfair29z94kd3a9vhl"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-before 'build 'extconf
-            (lambda _
-              (invoke "ruby" "extconf.rb")
-              (invoke "make" "install" (string-append "prefix=" #$output))))
-          (replace 'check
-            (lambda* (#:key tests? #:allow-other-keys)
-              (when tests?
-                (invoke "ruby" "-I." "test.rb")))))))
-    (synopsis "Ruby implementation of a sorted associative collection")
-    (description
-     "This package provides a RBTree is a sorted associative collection that
-is implemented with a Red-Black Tree.  It maps keys to values like a Hash, but
-maintains its elements in ascending key order.  The interface is the almost
-identical to that of Hash.")
-    (home-page "http://rbtree.rubyforge.org/")
-    (license license:expat)))
-
-(define-public ruby-rgl
-  (package
-    (name "ruby-rgl")
-    (version "0.6.6")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "rgl" version))
-              (sha256
-               (base32
-                "0dji1k9knrf8cxm5psd3pgd9i8f7cfq182jwjpi1pwxw15axf496"))))
-    (build-system ruby-build-system)
-  (arguments
-   (list
-    #:phases
-    #~(modify-phases %standard-phases
-        (add-after 'unpack 'remove-unnecessary-dependencies
-          (lambda _
-            (substitute* "Gemfile"
-              ;; Caring about coverage is a not a packager's task but a
-              ;; developer's
-              ;;(("gem \"simplecov\"") "")
-              ;; CodeClimate is an online service, and is unnecessary for
-              ;; running the tests
-              (("gem \"codeclimate-test-reporter\", .*") "\n")))))))
-    (native-inputs (list ruby-test-unit ruby-simplecov ruby-yard graphviz-minimal))
-    (propagated-inputs (list ruby-pairing-heap ruby-rexml ruby-stream))
-    (synopsis "Framework for graph data structures and algorithms")
-    (description "RGL is a framework for graph data structures and algorithms.
-The design of the library is much influenced by the Boost Graph Library (BGL)
-which is written in C++.")
-    (home-page "https://github.com/monora/rgl")
-    (license license:bsd-2)))
-
-(define-public ruby-hkdf
-  (package
-    (name "ruby-hkdf")
-    (version "1.0.0")
-    (source
-      (origin
-        (method git-fetch)
-        (uri (git-reference
-               (url "https://github.com/jtdowney/hkdf")
-               (commit (string-append "v" version))))
-        (file-name (git-file-name name version))
-        (sha256
-         (base32
-          "1xqwdmxfnhagivwgb5v9ilwpb4jxlsqwj7pnj43d65zzg5m8p9r5"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:test-target "default"))
-    (native-inputs
-     (list ruby-rspec))
-    (synopsis "HMAC-based Key Derivation Function")
-    (description
-     "This package provides a Ruby implementation of RFC5869: @acronym{HKDF,
-HMAC-based Extract-and-Expand Key Derivation Function}.  The goal of HKDF is to
-take some source key material and generate suitable cryptographic keys from it.")
-    (home-page "https://github.com/jtdowney/hkdf")
-    (license license:expat)))
-
-(define-public ruby-nenv
-  (package
-    (name "ruby-nenv")
-    (version "0.3.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "nenv" version))
-              (sha256
-               (base32
-                "0r97jzknll9bhd8yyg2bngnnkj8rjhal667n7d32h8h7ny7nvpnr"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:tests? #f)) ; no tests included
-    (native-inputs
-     (list ruby-rspec bundler))
-    (synopsis "Ruby interface for modifying the environment")
-    (description "Nenv provides a convenient wrapper for Ruby's ENV to modify
-and inspect the environment.")
-    (home-page "https://github.com/e2/nenv")
-    (license license:expat)))
-
-(define-public ruby-ptools
-  (package
-    (name "ruby-ptools")
-    (version "1.5.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "ptools" version))
-              (sha256
-               (base32
-                "0damllbshkxycrwjv80sz78h76dw7r9z54d17mb5cbha1daq9q2d"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:test-target "spec:all"
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'patch
-            (lambda _
-              (substitute* "Rakefile"
-                ;; Don't require rubocop
-                (("require 'rubocop/rake_task'") "")
-                (("RuboCop::RakeTask.new") "")
-                ;; Do not attempt to sign the gem.
-                (("spec\\.signing_key = .*") ""))
-
-              (substitute* "spec/binary_spec.rb"
-                (("/bin/ls")    (which "ls"))
-                (("/bin/cat")   (which "cat"))
-                (("/bin/chmod") (which "chmod"))
-                (("/bin/df")    (which "df"))))))))
-    (native-inputs
-     (list ruby-rspec))
-    (synopsis "Extra methods for Ruby's @code{File} class")
-    (description
-     "The @dfn{ptools} (power tools) library extends Ruby's core @code{File}
-class with many additional methods modelled after common POSIX tools, such as
-@code{File.which} for finding executables, @code{File.tail} to print the last
-lines of a file, @code{File.wc} to count words, and so on.")
-    (home-page "https://github.com/djberg96/ptools")
-    (license license:artistic2.0)))
-
-(define-public ruby-permutation
-  (package
-    (name "ruby-permutation")
-    (version "0.1.8")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "permutation" version))
-              (sha256
-               (base32
-                "13crwk2vfbzv99czva7881027dbcnidihmvx2jc58z2vm3bp9sl8"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-rakefile
-          (lambda _
-            (substitute* "Rakefile"
-              (("require 'rake/gempackagetask'")
-               "require 'rubygems/package_task'")
-              (("include Config") ""))))
-         (replace 'check
-          (lambda _
-            (invoke "ruby" "-Ilib" "test/test.rb"))))))
-    (synopsis "Library to perform operations with sequence permutations")
-    (description "This package provides a Ruby library to perform different
-operations with permutations of sequences, such as strings and arrays.")
-    (home-page "https://flori.github.io/permutation")
-    (license license:gpl2))) ; GPL 2 only
-
-(define-public ruby-shellany
-  (package
-    (name "ruby-shellany")
-    (version "0.0.1")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "shellany" version))
-              (sha256
-               (base32
-                "1ryyzrj1kxmnpdzhlv4ys3dnl2r5r3d2rs2jwzbnd1v96a8pl4hf"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:test-target "default"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-version-test
-          (lambda _
-            (substitute* "spec/shellany_spec.rb"
-              (("^RSpec") "require \"shellany\"\nRSpec")))))))
-    (native-inputs
-     (list ruby-rspec ruby-nenv bundler))
-    (synopsis "Capture command output")
-    (description "Shellany is a Ruby library providing functions to capture
-the output produced by running shell commands.")
-    (home-page "https://rubygems.org/gems/shellany")
-    (license license:expat)))
-
-(define-public ruby-notiffany
-  (package
-    (name "ruby-notiffany")
-    (version "0.1.3")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "notiffany" version))
-              (sha256
-               (base32
-                "0f47h3bmg1apr4x51szqfv3rh2vq58z3grh4w02cp3bzbdh6jxnk"))))
-    (build-system ruby-build-system)
-    ;; Tests are not included in the gem.
-    (arguments `(#:tests? #f))
-    (propagated-inputs
-     (list ruby-shellany ruby-nenv))
-    (native-inputs
-     (list bundler))
-    (synopsis "Wrapper library for notification libraries")
-    (description "Notiffany is a Ruby wrapper library for notification
-libraries such as Libnotify.")
-    (home-page "https://github.com/guard/notiffany")
-    (license license:expat)))
-
-(define-public ruby-forking-test-runner
-  (package
-    (name "ruby-forking-test-runner")
-    (version "1.6.0")
-    (home-page "https://github.com/grosser/forking_test_runner")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference (url home-page)
-                                  (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1mrglzkj2nrgisccf2f30zbfmcs0awv1g3lw994b2az90fl39x8m"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:test-target "spec"
-       ;; FIXME: ActiveRecord depends on sqlite3 1.3.6, but Guix has
-       ;; 1.4.1, which in turn breaks the tests that use ActiveRecord.
-       #:tests? #f
-       #:phases (modify-phases %standard-phases
-                  (replace 'replace-git-ls-files
-                    (lambda _
-                      (substitute* "forking_test_runner.gemspec"
-                        (("`git ls-files lib/ bin/ MIT-LICENSE`")
-                         "`find lib/ bin/ MIT-LICENSE -type f | sort`"))))
-                  (add-before 'check 'remove-version-constraints
-                    (lambda _
-                      ;; Ignore hard coded version constraints for the tests.
-                      (delete-file "Gemfile.lock")))
-                  (add-before 'check 'set-HOME
-                    (lambda _
-                      ;; Many tests invoke Bundler, and fails when Bundler
-                      ;; warns that /homeless-shelter does not exist.
-                      (setenv "HOME" "/tmp"))))))
-    (native-inputs
-     (list ruby-activerecord ruby-bump ruby-rspec ruby-sqlite3 ruby-wwtd))
-    (propagated-inputs
-     (list ruby-parallel-tests))
-    (synopsis "Run every test in a fork")
-    (description
-     "This package is a wrapper around @code{parallel_tests} that runs every
-test in a fork to avoid pollution and get clean output per test.")
-    (license license:expat)))
-
-(define-public ruby-formatador
-  (package
-    (name "ruby-formatador")
-    (version "0.2.5")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "formatador" version))
-              (sha256
-               (base32
-                "1gc26phrwlmlqrmz4bagq1wd5b7g64avpx0ghxr9xdxcvmlii0l0"))))
-    (build-system ruby-build-system)
-    ;; Circular dependency: Tests require ruby-shindo, which requires
-    ;; ruby-formatador at runtime.
-    (arguments `(#:tests? #f))
-    (synopsis "Ruby library to format text on stdout")
-    (description "Formatador is a Ruby library to format text printed to the
-standard output stream.")
-    (home-page "https://github.com/geemus/formatador")
-    (license license:expat)))
-
-(define-public ruby-fuubar
-  (package
-    (name "ruby-fuubar")
-    (version "2.3.2")
-    (source
-     (origin
-       ;; Fetch from the git repository, as the gem package doesn't include
-       ;; the tests.
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/thekompanee/fuubar")
-             (commit (string-append "releases/v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "0jm1x2xp13csbnadixaikj7mlkp5yk4byx51npm56zi13izp7259"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(;; TODO: Some tests fail, unsure why.
-       ;; 21 examples, 7 failures
-       #:tests? #f
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'build 'delete-certificate
-           (lambda _
-             ;; Remove 's.cert_chain' as we do not build with a private key
-             (substitute* "fuubar.gemspec"
-               ((".*cert_chain.*") "")
-               ((".*signing_key.*") ""))))
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (invoke "rspec")))))))
-    (native-inputs
-     (list bundler))
-    (propagated-inputs
-     (list ruby-rspec-core ruby-progressbar))
-    (synopsis "Fuubar is an RSpec formatter that uses a progress bar")
-    (description
-     "Fuubar is an RSpec formatter that uses a progress bar instead of a
-string of letters and dots as feedback.  It also stops on the first test
-failure.")
-    (home-page "https://github.com/thekompanee/fuubar")
-    (license license:expat)))
-
-(define-public ruby-haml
-  (package
-    (name "ruby-haml")
-    (version "5.0.4")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "haml" version))
-       (sha256
-        (base32
-         "1q0a9fvqh8kn6wm97fcks6qzbjd400bv8bx748w8v87m7p4klhac"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; No included tests
-    (propagated-inputs
-     (list ruby-tilt ruby-temple))
-    (synopsis "Haml is a Ruby library to generate HTML documents")
-    (description
-     "@acronym{Haml, HTML Abstraction Markup Language} is a layer on top of
-HTML or XML that is designed to express the structure of documents using
-indentation rather than closing tags.  It was originally envisioned as a
-plugin for Ruby on Rails, but it can function as a stand-alone templating
-engine.")
-    (home-page "https://haml.info/")
-    (license license:expat)))
-
-(define-public ruby-hamster
-  (package
-  (name "ruby-hamster")
-  (version "3.0.0")
-  (source
-    (origin
-      (method url-fetch)
-      (uri (rubygems-uri "hamster" version))
-      (sha256
-        (base32
-          "1n1lsh96vnyc1pnzyd30f9prcsclmvmkdb3nm5aahnyizyiy6lar"))))
-  (build-system ruby-build-system)
-  (arguments
-   (list
-    ;; Only supports Ruby 2 currently
-    #:ruby ruby-2.7
-    #:phases
-    #~(modify-phases %standard-phases
-        (add-after 'unpack 'remove-unnecessary-dependencies
-          (lambda _
-            ;; pry is a debugging tool, and is unnecessary when running the
-            ;; tests
-            (substitute* "spec/lib/hamster/vector/insert_spec.rb"
-              (("require 'pry'") ""))
-            (substitute* "spec/spec_helper.rb"
-              (("require \"pry\"") "")
-              ;; CodeClimate is an online service, and is unnecessary for
-              ;; running the tests
-              (("require \"codeclimate-test-reporter\"") "")
-              (("CodeClimate.*\n") ""))))
-        ;; No Rakefile is included, so run rspec directly.
-        (replace 'check
-          (lambda* (#:key tests? #:allow-other-keys)
-            (when tests?
-              (invoke "ruby" (which "rspec"))))))))
-  (propagated-inputs
-   (list ruby-concurrent))
-  (native-inputs
-   (list ruby-rspec))
-  (synopsis "Efficient, immutable, thread-safe collection classes for Ruby")
-  (description
-    "Hamster provides 6 persistent data structures: @code{Hash}, @code{Vector},
-@code{Set}, @code{SortedSet}, @code{List}, and @code{Deque} (which works as an
-immutable queue or stack).")
-  (home-page "https://github.com/hamstergem/hamster")
-  (license license:expat)))
-
-(define-public ruby-hashdiff
-  (package
-    (name "ruby-hashdiff")
-    (version "1.0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "hashdiff" version))
-       (sha256
-        (base32
-         "1nynpl0xbj0nphqx1qlmyggq58ms1phf5i03hk64wcc0a17x1m1c"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         ;; Run tests directly via rspec to avoid depending on rubocop.
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (invoke "rspec")))))))
-    (native-inputs
-     (list bundler ruby-rspec-2))
-    (synopsis "HashDiff computes the smallest difference between two hashes")
-    (description
-     "HashDiff is a Ruby library to compute the smallest difference between
-two hashes.")
-    (home-page "https://github.com/liufengyun/hashdiff")
-    (license license:expat)))
-
-(define-public ruby-hydra-minimal
-  ;; No releases yet.
-  (let ((commit "a4cab705a8a281e4356cb6a05a1946443ad9d53b")
-        (revision "1"))
-    (package
-      (name "ruby-hydra-minimal")
-      (version (git-version "0.0.0" revision commit))
-      (home-page "https://github.com/hyphenation/hydra")
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference (url home-page) (commit commit)))
-                (file-name (git-file-name name version))
-                ;; byebug is a non-essential debugging utility that brings in
-                ;; many dependencies.
-                (patches (search-patches "ruby-hydra-minimal-no-byebug.patch"))
-                (sha256
-                 (base32
-                  "1swzab7i4cqk1bck7p5m3bh526jh0v6m9qq720r3270zbjc8x8z3"))))
-      (build-system ruby-build-system)
-      (arguments
-       ;; Avoid rspec dependency.
-       '(#:tests? #f))
-      (synopsis "Ruby hyphenation patterns")
-      (description
-       "ruby-hydra-minimal is a Ruby library for working with hyphenation patterns.
-It is a low-dependency variant of ruby-hydra.")
-      (license license:expat))))
-
-;; Pinned variant for use by texlive
-(define-public ruby-hydra-minimal/pinned
-  (hidden-package
-   (package
-     (inherit ruby-hydra-minimal)
-     (arguments
-      (cons* #:ruby ruby-2.7
-             (package-arguments ruby-hydra-minimal))))))
-
-(define-public ruby-hydra
-  (package
-    (inherit ruby-hydra-minimal)
-    (name "ruby-hydra")
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'make-files-writable
-            (lambda _
-              (for-each make-file-writable (find-files "."))))
-          (replace 'check
-            (lambda* (#:key tests? #:allow-other-keys)
-              (when tests?
-                (invoke "rspec")))))))
-    (native-inputs
-     (list ruby-rspec))
-    (description
-     "ruby-hydra is a Ruby library for working with hyphenation patterns.")))
-
-(define-public ruby-shindo
-  (package
-    (name "ruby-shindo")
-    (version "0.3.11")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "shindo" version))
-              (sha256
-               (base32
-                "1wccg3a4g3agfyszipkdnbcgsazcfwdbz1gv51q8m17m9plvpzdp"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:test-target "tests"
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'fix-tests
-            (lambda _
-              (substitute* "tests/tests_helper.rb"
-                (("-rrubygems") ""))))
-          ;; Move the 'check phase to after 'install, to use installed shindo.
-          (delete 'check)
-          (add-after 'install 'configure-tests
-            (lambda* (#:key tests? #:allow-other-keys)
-              (when tests?
-                (setenv "GEM_PATH"
-                        (string-append
-                         (getenv "GEM_PATH") ":"
-                         #$output "/lib/ruby/vendor_ruby"))
-                (setenv "PATH"
-                        (string-append
-                         (getenv "PATH") ":" #$output "/bin")))))
-          (add-after 'configure-tests 'check
-            (assoc-ref %standard-phases 'check)))))
-    (propagated-inputs
-     (list ruby-formatador))
-    (synopsis "Simple depth first Ruby testing")
-    (description "Shindo is a simple depth first testing library for Ruby.")
-    (home-page "https://github.com/geemus/shindo")
-    (license license:expat)))
-
-(define-public ruby-rubygems-tasks
-  (package
-    (name "ruby-rubygems-tasks")
-    (version "0.2.5")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "rubygems-tasks" version))
-              (sha256
-               (base32
-                "1x3sz3n2dlknd3v7w1mrq6f0ag6pwzhjvg7z29p75w3p42ma1gbx"))))
-    (build-system ruby-build-system)
-    ;; Tests need Internet access.
-    (arguments `(#:tests? #f))
-    (synopsis "Rake tasks for managing and releasing Ruby Gems")
-    (description "Rubygems-task provides Rake tasks for managing and releasing
-Ruby Gems.")
-    (home-page "https://github.com/postmodern/rubygems-tasks")
-    (license license:expat)))
-
-(define-public ruby-rubyzip
-  (package
-    (name "ruby-rubyzip")
-    (version "2.3.2")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/rubyzip/rubyzip")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "03p8c990n6c1r4g64w0vv7z2iaswisl07l2f1lbh1s78cvmlmfxx"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'disable-rubocop
-           (lambda _
-             (substitute* "Rakefile"
-               (("require 'rubocop/rake_task'") "")
-               (("RuboCop::RakeTask.new") ""))))
-         (add-before 'check 'patch-tests
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "test/gentestfiles.rb"
-               (("/usr/bin/zip") (which "zip")))))
-         (add-after 'patch-source-shebangs 'unpatch-some-source-shebangs
-           (lambda _
-             ;; The tests compare zipped files with data test files; since the
-             ;; zip files do not have their shebangs patched, the data files
-             ;; compared with their extracted version must also be left
-             ;; un-patched.
-             (substitute* (find-files "test/data" "\\.(txt|rb)$")
-               (((which "ruby"))
-                "/usr/bin/env ruby")))))))
-    (native-inputs
-     (list bundler ruby-simplecov zip unzip))
-    (synopsis "Ruby module is for reading and writing zip files")
-    (description
-     "The rubyzip module provides ways to read from and create zip files.")
-    (home-page "https://github.com/rubyzip/rubyzip")
-    (license license:bsd-2)))
-
-(define-public ruby-silent-stream
-  (package
-    (name "ruby-silent-stream")
-    (version "1.0.6")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "silent_stream" version))
-              (sha256
-               (base32
-                "10381fpvjzfjvhgfyv700607fpa29firgf52w5w5536m4fh6x63m"))))
-    (build-system ruby-build-system)
-    (synopsis "ActiveSupport stream silencing without ActiveSupport")
-    (description "SilentStream is an extraction of some parts of
-ActiveSupport's Kernel Reporting Core Extensions around silencing IO
-streams.")
-    (home-page "https://github.com/pboling/silent_stream")
-    (license license:expat)))
-
-(define-public ruby-simplecov-html
-  (package
-    (name "ruby-simplecov-html")
-    (version "0.12.3")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "simplecov-html" version))
-              (sha256
-               (base32
-                "0yx01bxa8pbf9ip4hagqkp5m0mqfnwnw2xk8kjraiywz4lrss6jb"))))
-    (build-system ruby-build-system)
-    (arguments `(#:tests? #f)) ; there are no tests
-    (native-inputs
-     (list bundler))
-    (synopsis "Default HTML formatter for SimpleCov code coverage tool")
-    (description "This package provides the default HTML formatter for
-the SimpleCov code coverage tool for Ruby version 1.9 and above.")
-    (home-page "https://github.com/simplecov-ruby/simplecov-html")
-    (license license:expat)))
-
-(define-public ruby-simplecov-json-formatter
-  (package
-    (name "ruby-simplecov-json-formatter")
-    (version "0.1.4")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "simplecov_json_formatter" version))
-              (sha256
-               (base32
-                "0a5l0733hj7sk51j81ykfmlk2vd5vaijlq9d5fn165yyx3xii52j"))))
-    (build-system ruby-build-system)
-    ;; The test suite is disabled because it requires simplecov, which
-    ;; requires this, introducing a dependency cycle.
-    (arguments (list #:tests? #f))
-    (synopsis "JSON formatter for SimpleCov")
-    (description "This package provides a JSON formatter for SimpleCov, the
-Ruby code coverage tool.")
-    (home-page
-     "https://github.com/codeclimate-community/simplecov_json_formatter")
-    (license license:expat)))
-
-(define-public ruby-simplecov
-  (package
-    (name "ruby-simplecov")
-    (version "0.22.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "simplecov" version))
-              (sha256
-               (base32
-                "198kcbrjxhhzca19yrdcd6jjj9sb51aaic3b0sc3pwjghg3j49py"))))
-    (build-system ruby-build-system)
-    ;; Simplecov depends on rubocop for code style checking at build time.
-    ;; Rubocop needs simplecov at build time.
-    (arguments `(#:tests? #f))
-    (propagated-inputs
-     (list ruby-json
-           ruby-docile
-           ruby-simplecov-html
-           ruby-simplecov-json-formatter))
-    (synopsis "Code coverage framework for Ruby")
-    (description "SimpleCov is a code coverage framework for Ruby with a
-powerful configuration library and automatic merging of coverage across test
-suites.")
-    (home-page "https://github.com/simplecov-ruby/simplecov")
-    (license license:expat)))
-
-(define-public ruby-simplecov-lcov
-  (package
-    (name "ruby-simplecov-lcov")
-    (version "0.8.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "simplecov-lcov" version))
-              (sha256
-               (base32
-                "1h8kswnshgb9zidvc88f4zjy4gflgz3854sx9wrw8ppgnwfg6581"))))
-    (build-system ruby-build-system)
-    ;; The test suite fails half of its tests; it seems to rely on older
-    ;; versions of simplecov, rspec, possibly others (see:
-    ;; https://github.com/fortissimo1997/simplecov-lcov/issues/29).
-    (arguments (list #:tests? #f
-                     #:test-target "spec"))
-    (native-inputs
-     (list ruby-activesupport
-           ruby-coveralls
-           ruby-rspec
-           ruby-simplecov))
-    (synopsis "SimpleCov formatter to generate a lcov style coverage")
-    (description "This package provides a SimpleCov formatter to generate a
-lcov-style coverage report.")
-    (home-page "https://github.com/fortissimo1997/simplecov-lcov")
-    (license license:expat)))
-
-(define-public ruby-snaky-hash
-  (package
-    (name "ruby-snaky-hash")
-    (version "2.0.1")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference       ;for tests
-                    (url "https://gitlab.com/oauth-xx/snaky_hash")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0zmixxzi2g2d75zii65bq037j4g67p25l6aqddbmmwizspsp5az6"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:phases #~(modify-phases %standard-phases
-                        (add-after 'unpack 'relax-requirements
-                          (lambda _
-                            (substitute* "Gemfile"
-                              (("^linting = .*")
-                               "linting = false\n")
-                              (("^coverage = .*")
-                               "coverage = false\n")
-                              (("^debug = .*")
-                               "debug = false\n"))
-                            (substitute* "spec/spec_helper.rb"
-                              (("^RUN_COVERAGE = .*")
-                               "RUN_COVERAGE = false\n")
-                              (("^ALL_FORMATTERS = .*")
-                               "ALL_FORMATTERS = false\n"))))
-                        (add-before 'build 'drop-signing-key-requirement
-                          (lambda _
-                            (substitute* "snaky_hash.gemspec"
-                              (("spec.signing_key =.*")
-                               "spec.signing_key = nil")))))))
-    (native-inputs (list ruby-rspec ruby-rspec-block-is-expected))
-    (propagated-inputs (list ruby-hashie ruby-version-gem))
-    (synopsis "Hash keys and look-ups normalization Ruby library")
-    (description "The SnakyHash Ruby library provides classes for normalizing
-hash keys and look-ups, and a pseudo-object interface.")
-    (home-page "https://gitlab.com/oauth-xx/snaky_hash")
-    (license license:expat)))
-
-(define-public ruby-useragent
-  (package
-    (name "ruby-useragent")
-    (version "0.16.10")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "useragent" version))
-              (sha256
-               (base32
-                "1fv5kvq494swy0p17h9qya9r50w15xsi9zmvhzb8gh55kq6ki50p"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; no test suite
-    (synopsis "HTTP user agent parser for Ruby")
-    (description "UserAgent is a Ruby library that parses and compares HTTP
-User Agents.")
-    (home-page "https://github.com/gshutler/useragent")
-    (license license:expat)))
-
-(define-public ruby-backports
-  (package
-  (name "ruby-backports")
-  (version "3.11.4")
-  (source
-    (origin
-      (method url-fetch)
-      (uri (rubygems-uri "backports" version))
-      (sha256
-        (base32
-          "1hshjxww2h7s0dk57njrygq4zpp0nlqrjfya7zwm27iq3rhc3y8g"))))
-  (build-system ruby-build-system)
-  (arguments
-   '(;; TODO: This should be default, but there is one test failure
-     #:test-target "all_spec"))
-  (native-inputs
-   (list ruby-mspec ruby-activesupport))
-  (synopsis "Backports of the features in newer Ruby versions")
-  (description
-    "Backports enables more compatibility across Ruby versions by providing
-backports of some features.")
-  (home-page "https://github.com/marcandre/backports")
-  (license license:expat)))
-
-(define-public ruby-bacon
-  (package
-    (name "ruby-bacon")
-    (version "1.2.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "bacon" version))
-              (sha256
-               (base32
-                "1f06gdj77bmwzc1k5iragl1595hbn67yc7sqvs56ca8plrr2vmai"))))
-    (build-system ruby-build-system)
-    (synopsis "Small RSpec clone")
-    (description "Bacon is a small RSpec clone providing all essential
-features.")
-    (home-page "https://github.com/chneukirchen/bacon")
-    (license license:expat)))
-
-(define-public ruby-bacon-bits
-  (package
-    (name "ruby-bacon-bits")
-    (version "0.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "bacon-bits" version))
-       (sha256
-        (base32
-         "1ghpj8ja94lhi8rgi872hqk4fd2amz2k7g9znd64z5dj7v6l0dmx"))))
-    (build-system ruby-build-system)
-    (arguments
-     ;; No tests
-     '(#:tests? #f))
-    (propagated-inputs (list ruby-bacon))
-    (synopsis "Extensions to Bacon, for disabling tests, before and after
-blocks and more")
-    (description
-     "This extends the bacon testing framework with useful extensions to
-disable tests, have before and after blocks that run once and more.")
-    (home-page "https://github.com/cldwalker/bacon-bits")
-    (license license:expat)))
-
-(define-public ruby-bacon-colored-output
-  (package
-    (name "ruby-bacon-colored-output")
-    (version "1.1.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "bacon-colored_output" version))
-       (sha256
-        (base32
-         "1znyh3vkfdlmf19p3k4zip88ibym41dn5g4p4n5hmks2iznb7qpx"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(;; No included tests
-       #:tests? #f))
-    (propagated-inputs
-     (list ruby-bacon))
-    (synopsis "Colored output for Bacon test framework")
-    (description
-     "This package adds color through ANSI escape codes to Bacon test
-output.")
-    (home-page "https://github.com/whitequark/bacon-colored_output")
-    (license license:expat)))
-
-(define-public ruby-bake
-  (package
-    (name "ruby-bake")
-    (version "0.18.2")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/ioquatix/bake")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "19yi1fxzz9n580gig3p3j6nxbgcfcassa6b0q07jkqrzxdqn7xhn"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:phases
-           #~(modify-phases %standard-phases
-               (add-after 'unpack 'sanitize-dependencies
-                 (lambda _
-                   ;; These dependencies are not needed to build and run tests
-                   ;; and contain circular dependencies.
-                   (substitute* "gems.rb"
-                     ((".*'bake-modernize'.*") "")
-                     ((".*'bake-gem'.*") "")
-                     ((".*'bake-github-pages'.*") "")
-                     ((".*'utopia-project'.*") ""))))
-               (add-before 'build 'drop-signing-key-requirement
-                 (lambda _
-                   (substitute* "bake.gemspec"
-                     (("spec.signing_key =.*")
-                      "spec.signing_key = nil"))))
-               (replace 'check
-                 (lambda* (#:key tests? #:allow-other-keys)
-                   (when tests?
-                     (invoke "rspec")))))))
-    (native-inputs (list ruby-covered ruby-rspec))
-    (propagated-inputs (list ruby-samovar))
-    (synopsis "Replacement for rake with a simpler syntax")
-    (description "Bake is a task execution tool, inspired by Rake, but
-codifying many of the use cases which are typically implemented in an ad-hoc
-manner.")
-    (home-page "https://github.com/ioquatix/bake")
-    (license license:expat)))
-
-(define-public ruby-bake-test
-  (package
-    (name "ruby-bake-test")
-    (version "0.2.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "bake-test" version))
-              (sha256
-               (base32
-                "1p6kfpncj0s4zyynrrq6c735jvh0dnwyv7kfqym4rpyka4f85qdp"))))
-    (build-system ruby-build-system)
-    ;; XXX: Disable the test suite to avoid a circular dependency with
-    ;; ruby-sus.
-    (arguments (list #:tests? #f))
-    (propagated-inputs (list ruby-bake))
-    (synopsis "Test suite automatic runner for Ruby")
-    (description "@command{bake-test} automatically discovers how to run local
-test suites for Ruby projects.  It supports @command{rspec}, @command{sus}, as
-well as @samp{rake}.")
-    (home-page "https://github.com/ioquatix/bake-test")
-    (license license:expat)))
-
-(define-public ruby-bake-test-external
-  (package
-    (name "ruby-bake-test-external")
-    (version "0.3.2")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "bake-test-external" version))
-              (sha256
-               (base32
-                "0749xc7jkz1c5gsq1giwhrqy6s6xqm48bdvs414372881wki2jmh"))))
-    (build-system ruby-build-system)
-    ;; The test suite relies on git and network access to clone external
-    ;; repositories.
-    (arguments (list #:tests? #f))
-    (propagated-inputs (list ruby-bake))
-    (synopsis "Continuous integration extension for Bake")
-    (description "Bake Test External adds a @samp{test:external} action to the
-@command{bake} command to run the test suites of dependent projects to check
-for breakage.")
-    (home-page "https://github.com/ioquatix/bake-test-external")
-    (license license:expat)))
-
-(define-public ruby-connection-pool
-  (package
-    (name "ruby-connection-pool")
-    (version "2.4.1")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/mperham/connection_pool")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1iijshb1n9xl5knvpzzx0vqlw7v7mskiw1cpfj1cmdmssavyhsx5"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'patch
-            (lambda _
-              (substitute* "Rakefile"
-                (("require \"standard/rake\"") "")
-                ((":\"standard:fix\",") "")))))))
-    (native-inputs
-     (list bundler))
-    (synopsis "Generic connection pool for Ruby")
-    (description "Connection_pool provides a generic connection pooling
-interface for Ruby programs.")
-    (home-page "https://github.com/mperham/connection_pool")
-    (license license:expat)))
-
-(define-public ruby-fast-gettext
-  (package
-    (name "ruby-fast-gettext")
-    (version "4.1.0")
-    (home-page "https://github.com/grosser/fast_gettext")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference (url home-page)
-                                  (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "04p9s0r67xgvckab9ydb3fbnrc7g20p5c05z2zsacynlkp9x5jp9"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:test-target "spec"
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-before 'check 'remove-version-constraints
-            (lambda _
-              (delete-file "Gemfile.lock"))))))
-    (native-inputs
-     (list ;; For tests.
-           ruby-activerecord
-           ruby-activesupport
-           ruby-bump
-           ruby-forking-test-runner
-           ruby-i18n
-           ruby-rubocop
-           ruby-rubocop-packaging
-           ruby-rspec
-           ruby-single-cov
-           ruby-sqlite3
-           ruby-wwtd))
-    (synopsis "Fast implementation of @code{GetText}")
-    (description
-     "This package provides an alternative implementation of the Ruby
-@code{GetText} library that is approximately 12x faster yet thread safe.")
-    ;; Some parts are covered by the Ruby license, see file headers.
-    (license (list license:expat license:ruby))))
-
-(define-public ruby-fiber-local
-  (package
-    (name "ruby-fiber-local")
-    (version "1.0.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/socketry/fiber-local")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0pp5b81h0lysdnphgprkixh1az0fkrgir5sbcp0mm8arxf3f8m90"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:phases
-           #~(modify-phases %standard-phases
-               (add-after 'extract-gemspec 'sanitize-dependencies
-                 (lambda _
-                   ;; This pulls in extraneous maintenance dependencies.
-                   (delete-file "gems.rb")
-                   ;; Depending on ruby-covered would introduce a dependency
-                   ;; cycle with it.
-                   (substitute* '("fiber-local.gemspec" "spec/spec_helper.rb")
-                     ((".*covered.*") ""))))
-               (replace 'check
-                 (lambda* (#:key tests? #:allow-other-keys)
-                   (when tests?
-                     (invoke "rspec")))))))
-    (native-inputs (list ruby-rspec))
-    (synopsis "Ruby module to simplify fiber-local state management")
-    (description "This package provides a class-level mixin to make managing
-fiber-local state easy.  It provides easy access to a fiber-local state from a
-fiber, and defaults to a shared thread-local state.")
-    (home-page "https://github.com/socketry/fiber-local")
-    (license license:expat)))
-
-(define-public ruby-flores
-  (let ((commit "92fded00b04b1e3d308edb7440d7b7ab2c89ab5e")
-        (revision "0"))
-    (package
-      (name "ruby-flores")
-      (version (git-version "0.0.8" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/jordansissel/ruby-flores")
-               (commit commit)))
-         (sha256
-          (base32 "0jvnw0jli2zzxklfk751vfbi4acf9lijppk67346j3b2qxqi8xms"))
-         (patches
-          (search-patches "ruby-flores-fix-deprecations.patch"))))
-      (build-system ruby-build-system)
-      (arguments
-       (list #:phases
-             #~(modify-phases %standard-phases
-                 (add-after 'unpack 'fix-gemspec
-                   (lambda _
-                     (substitute* "flores.gemspec"
-                       ;; Since this is not a git repository, do not call 'git'.
-                       (("git ls-files") "find . -type f |sort"))))
-                 (replace 'check
-                   (lambda* (#:key tests? #:allow-other-keys)
-                     (when tests?
-                       (invoke "ruby" (which "rspec"))))))))
-      (native-inputs (list ruby-rspec ruby-simplecov))
-      (synopsis "Fuzzing, randomization, and stress testing library")
-      (description "Flores is a fuzzing, randomization, and stress library to
-help tests uncover more bugs.")
-      (home-page "https://github.com/jordansissel/ruby-flores")
-      (license license:asl2.0))))
-
-(define-public ruby-ipaddr
-  (package
-    (name "ruby-ipaddr")
-    (version "1.2.6")
-    (source (origin
-              (method git-fetch)  ;for tests
-              (uri (git-reference
-                    (url "https://github.com/ruby/ipaddr")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0h3z8i1fa8s4gx48322fflhpkzghd4bmd9109hglsgdkic7b0dyp"))))
-    (build-system ruby-build-system)
-    (native-inputs (list ruby-test-unit-ruby-core))
-    (synopsis "Manipulate IP addresses")
-    (description "This package provides a set of methods to manipulate an IP
-address.  Both IPv4 and IPv6 are supported.")
-    (home-page "https://github.com/ruby/ipaddr")
-    (license license:bsd-2)))
-
-(define-public ruby-fake-ftp
-  (package
-    (name "ruby-fake-ftp")
-    (version "0.3.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "fake_ftp" version))
-              (sha256
-               (base32
-                "1zl9q9m4x7lz9890g0h1qqj7hcxnwzpjfnfbxadjblps7b5054q4"))))
-    (build-system ruby-build-system)
-    (native-inputs (list ruby-rspec ruby-rubocop ruby-simplecov))
-    (arguments
-     '(#:test-target "spec"))
-    (synopsis "Fake FTP server for use with ruby tests")
-    (description "This package allows you to test FTP implementations in ruby.
-It is a minimal single-client FTP server that can be bound to any arbitrary
-port on localhost.")
-    (home-page "https://rubygems.org/gems/fake_ftp")
-    (license license:expat)))
-
-(define-public ruby-net-telnet
-  (package
-    (name "ruby-net-telnet")
-    (version "0.2.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "net-telnet" version))
-              (sha256
-               (base32
-                "16nkxc79nqm7fd6w1fba4kb98vpgwnyfnlwxarpdcgywz300fc15"))))
-    (build-system ruby-build-system)
-    (synopsis "Telnet client functionality")
-    (description "This package provides telnet client functionality.")
-    (home-page "https://github.com/ruby/net-telnet")
-    (license license:bsd-2)))
-
-(define-public ruby-net-ftp
-  (package
-    (name "ruby-net-ftp")
-    (version "0.3.4")
-    (source (origin
-              (method git-fetch)  ;for tests
-              (uri (git-reference
-                    (url "https://github.com/ruby/net-ftp")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "11b1sw7c4c7xrhn5li5m0wylw42hp52jp6pqacyb43hkw1m5zr36"))))
-    (build-system ruby-build-system)
-    (propagated-inputs (list ruby-net-protocol ruby-time))
-    (synopsis "File Transfer Protocol client library")
-    (description "This class implements the File Transfer Protocol.  If you
-have used a command-line FTP program, and are familiar with the commands, you
-will be able to use this class easily.  Some extra features are included to
-take advantage of Ruby's style and strengths.")
-    (home-page "https://github.com/ruby/net-ftp")
-    (license license:bsd-2)))
-
-(define-public ruby-net-http-persistent
-  (package
-    (name "ruby-net-http-persistent")
-    (version "4.0.2")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "net-http-persistent" version))
-              (sha256
-               (base32
-                "0i1as2lgnw7b4jid0gw5glv5hnxz36nmfsbr9rmxbcap72ijgy03"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list ruby-connection-pool
-           ruby-hoe
-           ruby-rake-manifest))
-    (synopsis "Persistent HTTP connection manager")
-    (description "Net::HTTP::Persistent manages persistent HTTP connections
-using Net::HTTP, supporting reconnection and retry according to RFC 2616.")
-    (home-page "https://github.com/drbrain/net-http-persistent")
-    (license license:expat)))
-
-(define-public ruby-net-imap
-  (package
-    (name "ruby-net-imap")
-    (version "0.3.4")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/ruby/net-imap")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0nx49i1n9q1wpancqaac2srrpb8mb43mc8wryyqyhpgki2grwyxw"))))
-    (build-system ruby-build-system)
-    (arguments
-     ;; The test suite appears to rely on RFCs it tries fetching from the
-     ;; network (see: https://github.com/ruby/net-imap/issues/136).
-     (list #:tests? #f
-           #:phases
-           #~(modify-phases %standard-phases
-               (add-before 'replace-git-ls-files 'adjust-for-git-ls-files
-                 (lambda _
-                   ;; Adjust the git ls-files invocation so that it matches
-                   ;; the expected pattern.
-                   (substitute* "net-imap.gemspec"
-                     (("`git ls-files -z 2>/dev/null`")
-                      "`git ls-files -z`")))))))
-    (propagated-inputs (list ruby-date ruby-net-protocol))
-    (synopsis "Ruby client api for Internet Message Access Protocol")
-    (description "@code{Net::IMAP} implements Internet Message Access
-Protocol (IMAP) client functionality.  The protocol is described in
-@url{https://tools.ietf.org/html/rfc3501, IMAP}.")
-    (home-page "https://github.com/ruby/net-imap")
-    (license license:bsd-2)))
-
-(define-public ruby-net-pop
-  (package
-    (name "ruby-net-pop")
-    (version "0.1.2")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/ruby/net-pop")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "05vz6a56va2rbr7ld78gdzwy1j5mzs98cz82ax5aqa83pzzk6jld"))))
-    (build-system ruby-build-system)
-    (propagated-inputs (list ruby-net-protocol))
-    (synopsis "Ruby client library for POP3")
-    (description "This library provides functionality for retrieving email via
-POP3, the Post Office Protocol version 3, as specified by
-@url{http://www.ietf.org/rfc/rfc1939.txt, RFC1939}.")
-    (home-page "https://github.com/ruby/net-pop")
-    (license license:bsd-2)))
-
-(define-public ruby-net-smtp
-  (package
-    (name "ruby-net-smtp")
-    (version "0.3.3")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/ruby/net-smtp")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0ca2wh45xvc09rv6v6sz3vbnkzrjzk5c4l6dk50zk4dwxvghma8r"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-before 'check 'regenerate-certificate
-            ;; On version 0.5.0 a Makefile was introduced to regenerated
-            ;; the certificates, and instead of calling openssl directory
-            ;; we could do (with-directory-excursion "test/net/fixtures"
-            ;; (invoke "make" "regen_certs"). However the certificate is
-            ;; expired versions before 0.5.0 as well.
-            (lambda _
-              (with-directory-excursion "test/net/fixtures"
-                (invoke
-                 "openssl" "req" "-new" "-key" "server.key" "-out"
-                 "server.csr" "-subj"
-                 "/C=JP/ST=Shimane/O=Ruby Core Team/OU=Ruby Test/CN=localhost")
-                (invoke "openssl" "req" "-new" "-x509" "-days" "3650"
-                        "-key" "server.key" "-out" "cacert.pem" "-subj"
-                        (string-append
-                         "/C=JP/ST=Shimane/L=Matz-e city/O=Ruby "
-                         "Core Team/CN=Ruby Test "
-                         "CA/emailAddress=security@ruby-lang.org"))
-                (invoke "openssl" "x509" "-days" "3650" "-CA" "cacert.pem"
-                        "-CAkey" "server.key" "-set_serial" "00" "-in"
-                        "server.csr" "-req" "-out" "server.crt")))))))
-    (native-inputs (list openssl))
-    (propagated-inputs (list ruby-net-protocol))
-    (synopsis "Simple Mail Transfer Protocol client library for Ruby")
-    (description "This library provides functionality to send Internet mail
-via SMTP, the Simple Mail Transfer Protocol.  The SMTP protocol specification
-is known as @url{http://www.ietf.org/rfc/rfc2821.txt, RFC2821}.")
-    (home-page "https://github.com/ruby/net-smtp")
-    (license license:bsd-2)))
-
-(define-public ruby-pleaserun
-  (package
-    (name "ruby-pleaserun")
-    (version "0.0.32")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "pleaserun" version))
-              (sha256
-               (base32
-                "1aykf0l8327bqkkf5xd9jcglsib973zpy37cfnlf4j0vp0cdpn2d"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:phases
-           #~(modify-phases %standard-phases
-               (add-after 'extract-gemspec 'relax-requirements
-                 (lambda _
-                   (substitute* "pleaserun.gemspec"
-                     ;; Mustache is pinned at 0.99.8, for portability with
-                     ;; older Rubies.
-                     (("dependency\\(%q<mustache>.freeze.*")
-                      "dependency(%q<mustache>.freeze)\n"))))
-               (replace 'check
-                 (lambda* (#:key tests? #:allow-other-keys)
-                   (when tests?
-                     ;; The cli_spec.rb test fails non-deterministically with
-                     ;; a Errno::EISDIR error (see:
-                     ;; https://github.com/jordansissel/pleaserun/issues/155)
-                     (invoke "rspec" "--exclude-pattern"
-                             "spec/pleaserun/cli_spec.rb")))))))
-    (native-inputs (list ruby-flores ruby-rspec))
-    (propagated-inputs (list ruby-cabin
-                             ruby-clamp
-                             ruby-dotenv
-                             ruby-insist
-                             ruby-mustache
-                             ruby-stud))
-    (synopsis "Init scripts and service definitions generation tool")
-    (description "Pleaserun is a tool to generate startup scripts and service
-definitions.  It targets service managers such as systemd, Upstart, launchd,
-sysv init, and runit.")
-    (home-page "https://github.com/jordansissel/pleaserun")
-    (license license:asl2.0)))
-
-(define-public ruby-power-assert
-  (package
-    (name "ruby-power-assert")
-    (version "1.1.5")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "power_assert" version))
-              (sha256
-               (base32
-                "1dii0wkfa0jm8sk9b20zl1z4980dmrjh0zqnii058485pp3ws10s"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f))                    ; No included tests
-    (native-inputs
-     (list bundler))
-    (synopsis "Assert library with descriptive assertion messages")
-    (description "Power-assert is an assertion library providing descriptive
-assertion messages for tests.")
-    (home-page "https://github.com/k-tsj/power_assert")
-    (license (list license:bsd-2 license:ruby))))
-
-(define-public ruby-powerpack
-  (package
-    (name "ruby-powerpack")
-    (version "0.1.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "powerpack" version))
-       (sha256
-        (base32
-         "1f71axvlhnxja0k17qqxdi4qh5ck807hqg4i3j6cgy8fgzmyg7rg"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:test-target "spec"))
-    (native-inputs
-     (list bundler ruby-rspec ruby-yard))
-    (synopsis "Useful extensions to core Ruby classes")
-    (description
-     "This package provides a few useful extensions to core Ruby classes,
-including @code{Array}, @code{Enumerable}, @code{Hash}, @code{Numeric}, and
-@code{String}.")
-    (home-page "https://github.com/bbatsov/powerpack")
-    (license license:expat)))
-
-(define-public ruby-locale
-  (package
-    (name "ruby-locale")
-    (version "2.1.2")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "locale" version))
-              (sha256
-               (base32
-                "1sls9bq4krx0fmnzmlbn64dw23c4d6pz46ynjzrn9k8zyassdd0x"))))
-    (build-system ruby-build-system)
-    ;; ruby-test-unit is required to run tests, but that needs ruby-packnga,
-    ;; which needs ruby-gettext, which needs ruby-locale.  To break the
-    ;; dependency cycle we disable tests.
-    (arguments `(#:tests? #f))
-    (native-inputs
-     (list bundler ruby-yard/minimal))
-    (synopsis "Ruby library providing basic localization APIs")
-    (description
-     "Ruby-Locale is the pure ruby library which provides basic APIs for
-localization.")
-    (home-page "https://github.com/ruby-gettext/locale")
-    (license (list license:lgpl3+ license:ruby))))
-
-(define-public ruby-temple
-  (package
-    (name "ruby-temple")
-    (version "0.10.0")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/judofyr/temple")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0rr9fnlcgj9nm3b6hzzjsvcw8x3y7z48j7slk7xxff2mh8s7y3y0"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:phases
-           #~(modify-phases %standard-phases
-               (add-after 'replace-git-ls-files 'replace-more-git-ls-files
-                 (lambda _
-                   (substitute* "temple.gemspec"
-                     ;; There no longer are test, spec or features
-                     ;; directories.
-                     ((".*`git ls-files -- \\{test,spec,features}/\\*`.*")
-                      "")
-                     ;; There isn't any bin directory either.
-                     ((".*`git ls-files -- bin/\\*`.*")
-                      ""))))
-               (replace 'check
-                 (lambda* (#:key tests? #:allow-other-keys)
-                   (when tests?
-                     (invoke "rspec")))))))
-    (native-inputs (list ruby-bacon ruby-erubi ruby-rspec ruby-tilt))
-    (synopsis "Template compilation framework in Ruby")
-    (description "Temple is an abstraction and framework for compiling
-templates to pure Ruby.")
-    (home-page "https://github.com/judofyr/temple")
-    (license license:expat)))
-
-(define-public ruby-text
-  (package
-    (name "ruby-text")
-    (version "1.3.1")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "text" version))
-              (sha256
-               (base32
-                "1x6kkmsr49y3rnrin91rv8mpc3dhrf3ql08kbccw8yffq61brfrg"))))
-    (build-system ruby-build-system)
-    (synopsis "Collection of text algorithms for Ruby")
-    (description
-     "This package provides a collection of text algorithms: Levenshtein,
-Soundex, Metaphone, Double Metaphone, Porter Stemming.")
-    (home-page "https://github.com/threedaymonk/text")
-    (license license:expat)))
-
-(define-public ruby-gdbm
-  (package
-    (name "ruby-gdbm")
-    (version "2.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "gdbm" version))
-       (sha256
-        (base32 "0xxygf50b2fvy8lcn2vip27vq32p607d3lwd1diplvkajijq8q8b"))))
-    (build-system ruby-build-system)
-    (arguments '(#:tests? #f))  ; No bundled tests.
-    (inputs (list gdbm))
-    (synopsis "Ruby extension for GNU dbm")
-    (description "This package provides a Ruby extension for GNU dbm.")
-    (home-page "https://github.com/ruby/gdbm")
-    (license license:bsd-2)))
-
-(define-public ruby-gettext
-  (package
-    (name "ruby-gettext")
-    (version "3.4.4")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "gettext" version))
-              (sha256
-               (base32
-                "11hlxkk2yr9wjwd3nf8kgmsjcd8wf35yqlxi9wpvrgmvrk9n9a2k"))))
-    (build-system ruby-build-system)
-    ;; ruby-test-unit is required to run tests, but that needs ruby-packnga,
-    ;; which needs ruby-gettext.  To break the dependency cycle we disable
-    ;; tests.
-    (arguments `(#:tests? #f))
-    (propagated-inputs
-     (list ruby-locale ruby-text ruby-erubi))
-    (native-inputs
-     (list bundler ruby-yard/minimal))
-    (synopsis "GNU gettext-like program for Ruby")
-    (description
-     "Gettext is a GNU gettext-like program for Ruby.  The catalog
-file (po-file) used is the same as that used by GNU gettext, allowing you to
-use GNU gettext tools for maintenance.")
-    (home-page "https://ruby-gettext.github.com/")
-    (license (list license:lgpl3+ license:ruby))))
-
-(define-public ruby-packnga
-  (package
-    (name "ruby-packnga")
-    (version "1.0.4")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "packnga" version))
-              (sha256
-               (base32
-                "1vv2j0i43s4xid2km5hgrrxqlqpwgq8nlm8kaxfg2531c1vwfsd4"))))
-    (build-system ruby-build-system)
-    ;; ruby-test-unit is required to run tests, but that needs ruby-packnga.
-    ;; To break the dependency cycle we disable tests.
-    (arguments `(#:tests? #f))
-    (propagated-inputs
-     (list ruby-gettext ruby-yard))
-    (native-inputs
-     (list bundler))
-    (synopsis "Utility library to package internationalized libraries")
-    (description
-     "Packnga is a library to translate to many languages using YARD.")
-    (home-page "https://ranguba.org/packnga/")
-    (license license:lgpl2.0+)))
-
-(define-public ruby-test-construct
-  (package
-    (name "ruby-test-construct")
-    (version "2.0.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "test_construct" version))
-       (sha256
-        (base32
-         "17q7rw92l7r4zh6rkvzrn4dyl8p8p77217vaa1wf7nsv8k5541vy"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list bundler ruby-mocha-1 ruby-rspec))
-    (synopsis "Creates temporary files and directories for testing")
-    (description
-     "TestConstruct is a @acronym{DSL, Domain Specific Language} for creating
-temporary files and directories during tests.")
-    (home-page "https://github.com/bhb/test_construct")
-    (license license:expat)))
-
-(define-public ruby-test-unit
-  (package
-    (name "ruby-test-unit")
-    (version "3.6.0")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/test-unit/test-unit")
-                    (commit version)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0w1m432q3y5v9lkak8yyxadak3z17bsp6afni97i4zjdgfz7niz2"))))
-    (build-system ruby-build-system)
-    (propagated-inputs
-     (list ruby-power-assert))
-    (native-inputs
-     (list bundler ruby-packnga ruby-yard))
-    (synopsis "Unit testing framework for Ruby")
-    (description "@code{Test::Unit} is unit testing framework for Ruby, based
-on xUnit principles.  These were originally designed by Kent Beck, creator of
-extreme programming software development methodology, for Smalltalk's SUnit.
-It allows writing tests, checking results and automated testing in Ruby.")
-    (home-page "https://test-unit.github.io/")
-    (license (list license:psfl license:ruby))))
-
-(define-public ruby-test-unit/minimal
-  (hidden-package
-   (package
-     (inherit ruby-test-unit)
-     (arguments
-      (ensure-keyword-arguments
-       (package-arguments ruby-test-unit)
-       (list #:tests? #f)))
-     (native-inputs '()))))
-
-(define-public ruby-test-unit-ruby-core
-  (package
-    (name "ruby-test-unit-ruby-core")
-    (version "1.0.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "test-unit-ruby-core" version))
-       (sha256
-        (base32 "1i7fa4hlj6xiqvjaikagwrmiyc21jzyswvd4grjbfqysziwsxygc"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:tests? #f))  ; contains no tests
-    (synopsis "Additional test assertions for Ruby standard libraries")
-    (description "This package provides additional test assertions for Ruby
-standard libraries.")
-    (home-page "https://github.com/ruby/test-unit-ruby-core")
-    (license license:ruby)))
-
-(define-public ruby-mapping
-  (package
-    (name "ruby-mapping")
-    (version "1.1.1")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/ioquatix/mapping")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0yhmqp8mprjqf9m7wzc4hhi50qbfax86r89w852csns0ijaffjjs"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:test-target "spec"
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'patch
-            (lambda _
-              (substitute* "spec/mapping/model_spec.rb"
-                ;; From https://github.com/ioquatix/mapping/pull/2
-                (("offset:") "offset =")))))))
-    (native-inputs (list ruby-rspec))
-    (synopsis "Map model objects based on their class to a given output model")
-    (description "The @code{mapping} gem maps model objects based on their
-class to a given output model.  It is useful for versioning external
-interfaces (e.g. JSON APIs) or processing structured data from one format to
-another.")
-    (home-page "https://github.com/ioquatix/mapping")
-    (license license:expat)))
-
-(define-public ruby-markaby
-  (package
-    (name "ruby-markaby")
-    (version "0.9.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "markaby" version))
-       (sha256
-        (base32
-         "1j4jc31ycydbkh5h3q6zwidzpavg3g5mbb5lqyaczd3jrq78rd7i"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          ;; Run rspec manually without using the Rakefile, as the versions of
-          ;; Rake and RSpec 2 are incompatible:
-          ;;
-          ;; NoMethodError: undefined method `last_comment'
-          (replace 'check
-            (lambda* (#:key tests? #:allow-other-keys)
-              ;; Skip some broken tests, this should be redundant with the
-              ;; next release
-              (delete-file "spec/markaby/markaby_test_unit_spec.rb")
-              (substitute* "spec/markaby/markaby_spec.rb"
-                (("generated.should == str")
-                 "# Test broken: generated.should == str"))
-
-              (when tests?
-                (invoke "rspec")))))))
-    (propagated-inputs
-     (list ruby-builder))
-    (native-inputs
-     (list bundler ruby-rspec-2))
-    (synopsis "Write HTML pages in pure Ruby")
-    (description
-     "Markaby allows writing HTML packages in pure Ruby.  This is similar to
-the functionality provided by @acronym{ERB, Embedded Ruby}, but without the
-mixture of HTML and additional ERB syntax.")
-    (home-page "https://markaby.github.io/")
-    (license license:expat)))
-
-(define-public ruby-maruku
-  (package
-    (name "ruby-maruku")
-    (version "0.7.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "maruku" version))
-       (sha256
-        (base32
-         "1r7bxpgnx2hp3g12bjrmdrpv663dfqxsdp0af69kjhxmaxpia56x"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(;; TODO: 3 tests seem to fail due to HTML encoding issues
-       #:tests? #f
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (invoke "rspec")))))))
-    (native-inputs
-     (list ruby-rspec ruby-simplecov ruby-nokogiri-diff))
-    (synopsis "Markdown interpreter in Ruby")
-    (description
-     "Maruku is a Markdown interpreter in Ruby.  It can export Markdown to
-HTML, and PDF through LaTeX.")
-    (home-page "https://github.com/bhollis/maruku")
-    (license license:expat)))
-
-(define-public ruby-metaclass
-  (package
-    (name "ruby-metaclass")
-    (version "0.0.4")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "metaclass" version))
-              (sha256
-               (base32
-                "0hp99y2b1nh0nr8pc398n3f8lakgci6pkrg4bf2b2211j1f6hsc5"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'add-test-unit-to-search-path
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let* ((test-unit (assoc-ref inputs "ruby-test-unit")))
-               (substitute* "Rakefile"
-                 (("t\\.libs << \"test\"" line)
-                  (string-append line "; t.libs << \""
-                                 test-unit "/lib/ruby/vendor_ruby"
-                                 "/gems/test-unit-"
-                                 ,(package-version ruby-test-unit)
-                                 "/lib\"")))))))))
-    (native-inputs
-     (list bundler ruby-test-unit/minimal))
-    (synopsis "Ruby library adding metaclass method to all objects")
-    (description
-     "Metaclass is a Ruby library adding a @code{metaclass} method to all Ruby
-objects.")
-    (home-page "https://github.com/floehopper/metaclass")
-    (license license:expat)))
-
-(define-public ruby-mkmf-lite
-  (package
-    (name "ruby-mkmf-lite")
-    (version "0.5.2")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "mkmf-lite" version))
-              (sha256
-               (base32
-                "0rqa5kzswhqkj7r9mqrqz4mjd2vdxsblgybb52gj3mwr1gwvl4c5"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          ;; Avoid rubocop dependency
-          (replace 'check
-            (lambda* (#:key tests? #:allow-other-keys)
-              (when tests?
-                (invoke "rspec")))))))
-    (propagated-inputs
-     (list ruby-ptools))
-    (native-inputs
-     (list ruby-rspec))
-    (synopsis "Lightweight alternative to @code{mkmf}")
-    (description
-     "@code{mkmf-lite} is a light version of Ruby's @code{mkmf.rb} designed
-for use as a library.  It does not create packages, builds, or log files of
-any kind.  Instead, it provides mixin methods that you can use in FFI or tests
-to check for the presence of header files, constants, and so on.")
-    (home-page "https://github.com/djberg96/mkmf-lite")
-    (license license:asl2.0)))
-
-(define-public ruby-msgpack
-  (package
-    (name "ruby-msgpack")
-    (version "1.7.5")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/msgpack/msgpack-ruby")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0d759pjgxgrxw18kmk81yv9brc141b4d8gszlp4vdnpvwvb96nln"))))
-    (build-system ruby-build-system)
-    (arguments (list #:test-target "spec"))
-    (native-inputs
-     (list ruby-rake-compiler
-           ruby-ruby-memcheck
-           ruby-rspec
-           ruby-yard))
-    (synopsis "Efficient object serialization library for Ruby")
-    (description "MessagePack is a binary-based efficient object serialization
-library.  It enables to exchange structured objects between many languages
-like JSON.  Unlike JSON, it is very fast and small.")
-    (home-page "https://msgpack.org/")
-    (license license:asl2.0)))
-
-(define-public ruby-mspec
-  (package
-    (name "ruby-mspec")
-    (version "1.9.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "mspec" version))
-       (sha256
-        (base32
-         "0wmyh2n40m4srwdx9z6h6g6p46k02pzyhcsja3hqcw5h5b0hfmhd"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(;; TODO: 3 test failures
-       ;; ./spec/mocks/mock_spec.rb:82
-       ;; ./spec/utils/name_map_spec.rb:151
-       ;; ./spec/utils/name_map_spec.rb:155
-       #:tests? #f
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'extract-gemspec 'change-dependency-constraints
-           (lambda _
-             (substitute* "mspec.gemspec"
-               (("rake.*") "rake>)\n")
-               (("rspec.*") "rspec>)\n"))))
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (invoke "rspec" "spec")))))))
-    (native-inputs
-     (list bundler ruby-rake ruby-rspec))
-    (synopsis "MSpec is a specialized framework for RubySpec")
-    (description
-     "MSpec is a specialized framework that is syntax-compatible with RSpec 2
-for basic features.  MSpec contains additional features that assist in writing
-specs for Ruby implementations in ruby/spec.")
-    (home-page "http://rubyspec.org")
-    (license license:expat)))
-
-(define-public ruby-mysql2
-  (package
-    (name "ruby-mysql2")
-    (version "0.5.2")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/brianmario/mysql2")
-             (commit version)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "11lvfgc2rmvkm52jp0nbi6pvhk06klznghr7llldfw8basl9n5wv"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(;; TODO: Tests require a running MySQL/MariaDB service
-       #:tests? #f
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'replace-git-ls-files
-           (lambda _
-             (substitute* "mysql2.gemspec"
-               (("git ls-files .*`") "find . -type f |sort`"))))
-         (add-before 'install 'set-MAKEFLAGS
-           (lambda* (#:key outputs #:allow-other-keys)
-             (setenv "MAKEFLAGS"
-                     (string-append
-                      "V=1 "
-                      "prefix=" (assoc-ref outputs "out")))))
-         ;; Move the 'check phase to after 'install, as then you can test
-         ;; using the installed mysql2 gem in the store.
-         (delete 'check)
-         (add-after 'install 'check
-           (lambda* (#:key outputs tests? #:allow-other-keys)
-             (setenv "GEM_PATH"
-                     (string-append
-                      (getenv "GEM_PATH")
-                      ":"
-                      (assoc-ref outputs "out") "/lib/ruby/vendor_ruby"))
-             (when tests?
-               (invoke "rspec")))))))
-    (inputs
-     `(("mariadb-dev" ,mariadb "dev")
-       ("zlib" ,zlib)))
-    (native-inputs
-     (list ruby-rspec ruby-rake-compiler))
-    (synopsis "MySQL library for Ruby, binding to libmysql")
-    (description
-     "This package provides a simple, fast MySQL library for Ruby, binding to
-libmysql.")
-    (home-page "https://github.com/brianmario/mysql2")
-    (license license:expat)))
-
-(define-public ruby-blankslate
-  (package
-    (name "ruby-blankslate")
-    (version "3.1.3")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "blankslate" version))
-              (sha256
-               (base32
-                "0fwkb4d1j9gc7vdwn2nxvwgy2g5wlag4c4bp7bl85jvq0kgp6cyx"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-          (lambda _ (invoke "rspec" "spec/"))))))
-    (native-inputs
-     (list bundler ruby-rspec))
-    (synopsis "Abstract base class with no predefined methods")
-    (description
-     "BlankSlate provides an abstract base class with no predefined
-methods (except for @code{__send__} and @code{__id__}).  BlankSlate is useful
-as a base class when writing classes that depend upon
-@code{method_missing} (e.g. dynamic proxies).")
-    (home-page "https://github.com/masover/blankslate")
-    (license license:expat)))
-
-(define-public ruby-bond
-  (package
-    (name "ruby-bond")
-    (version "0.5.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "bond" version))
-       (sha256
-        (base32
-         "1r19ifc4skyl2gxnifrxa5jvbbay9fb2in79ppgv02b6n4bhsw90"))))
-    (build-system ruby-build-system)
-    (arguments
-     ;; The test suite fails (see:
-     ;; https://github.com/cldwalker/bond/issues/46).
-     `(#:tests? #f))
-    (native-inputs
-     (list ruby-bacon ruby-bacon-bits ruby-mocha-on-bacon))
-    (synopsis "Bond can provide custom autocompletion for arguments, methods
-and more")
-    (description
-     "Bond can autocomplete argument(s) to methods, uniquely completing per
-module, per method and per argument.  Bond provides a configuration system and
-a DSL for creating custom completions and completion rules.  Bond can also
-load completions that ship with gems.  Bond is able to offer more than irb's
-completion since it uses the full line of input when completing as opposed to
-irb's last-word approach.")
-    (home-page "http://tagaholic.me/bond/")
-    (license license:expat)))
-
-(define-public ruby-idn-ruby
-  (package
-    (name "ruby-idn-ruby")
-    (version "0.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "idn-ruby" version))
-       (sha256
-        (base32
-         "07vblcyk3g72sbq12xz7xj28snpxnh3sbcnxy8bglqbfqqhvmawr"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (delete 'check)
-         (add-after 'install 'check
-           (lambda* (#:key tests? outputs #:allow-other-keys)
-             (when tests?
-               (let* ((gem-file (cadr (find-files "." "\\.gem")))
-                      (name-and-version (basename gem-file ".gem")))
-                 (apply invoke
-                        "ruby" "--verbose"
-                        (string-append "-I"
-                                       (assoc-ref outputs "out")
-                                       "/lib/ruby/vendor_ruby/gems/"
-                                       name-and-version
-                                       "/lib")
-                        (find-files "./test" ".*\\.rb")))))))))
-    (inputs
-     (list libidn))
-    (synopsis "Ruby Bindings for the GNU LibIDN library")
-    (description
-     "Ruby Bindings for the GNU LibIDN library, an implementation of the
-Stringprep, Punycode and IDNA specifications.  These are used to encode and
-decode internationalized domain + names according to the IDNA2003
-specifications.
-
-Included are the most important parts of the Stringprep, Punycode and IDNA
-APIs like performing Stringprep processings, encoding to and decoding from
-Punycode strings and converting entire domain names to and from the ACE
-encoded form.")
-    (home-page "https://github.com/deepfryed/idn-ruby")
-    (license license:asl2.0)))
-
-(define-public ruby-insist
-  (package
-    (name "ruby-insist")
-    (version "1.0.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "insist" version))
-              (sha256
-               (base32
-                "0bw3bdwns14mapbgb8cbjmr0amvwz8y72gyclq04xp43wpp5jrvg"))))
-    (build-system ruby-build-system)
-    (arguments (list #:phases #~(modify-phases %standard-phases
-                                  (replace 'check
-                                    (lambda* (#:key tests? #:allow-other-keys)
-                                      (when tests?
-                                        (invoke "ruby" "test/testing.rb")))))))
-    (synopsis "Testing tool for Ruby")
-    (description "This package provides a simple block-driven assertion
-library for both testing and for production code that attempts to make test
-definitions more readable.")
-    (home-page "https://github.com/jordansissel/ruby-insist/")
-    (license license:asl2.0)))
-
-(define-public ruby-introspection
-  (package
-    (name "ruby-introspection")
-    (version "0.0.4")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "introspection" version))
-              (sha256
-               (base32
-                "1y2nbijkc0zlfmn9ss6588ilarq2kbn2i7w7pwwsli66dj84zgca"))))
-    (build-system ruby-build-system)
-    (propagated-inputs
-     (list ruby-metaclass))
-    (native-inputs
-     (list bundler
-           ruby-blankslate))
-    (synopsis "Dynamic inspection of the method hierarchy on a Ruby object")
-    (description
-     "Introspection provides tools to inspect the hierarchy of method
-definitions on a Ruby object.")
-    (home-page "https://github.com/floehopper/introspection")
-    (license license:expat)))
-
-(define-public ruby-redcarpet
-  (package
-    (name "ruby-redcarpet")
-    (version "3.5.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "redcarpet" version))
-              (sha256
-               (base32
-                "0skcyx1h8b5ms0rp2zm3ql6g322b8c1adnkwkqyv7z3kypb4bm7k"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         ;; The gem archive does not include the conformance tests.
-         (add-after 'unpack 'disable-conformance-tests
-          (lambda _
-            (substitute* "Rakefile"
-              (("task :test => %w\\[test:unit test:conformance\\]")
-               "task :test => %w[test:unit]")))))))
-    (native-inputs
-     (list bundler ruby-test-unit ruby-rake-compiler))
-    (synopsis "Extensible Markdown to (X)HTML converter")
-    (description
-     "Redcarpet is an extensible Ruby library for Markdown processing and
-conversion to (X)HTML.")
-    (home-page "https://github.com/vmg/redcarpet")
-    (license license:expat)))
-
-(define-public ruby-reline
-  (package
-    (name "ruby-reline")
-    (version "0.3.3")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/ruby/reline")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1papa4f4prjml9qk6yydi4k5a4zgbzmxmbhd8fz9kfg1i34s35cw"))))
-    (build-system ruby-build-system)
-    (propagated-inputs (list ruby-io-console))
-    (synopsis "GNU Readline or Editline implementation in Ruby")
-    (description "Reline is a pure Ruby alternative GNU Readline or Editline
-implementation.")
-    (home-page "https://github.com/ruby/reline")
-    (license (list license:bsd-2 license:ruby)))) ;dual license
-
-(define-public ruby-rerun
-  (package
-  (name "ruby-rerun")
-  (version "0.13.0")
-  (source
-    (origin
-      (method url-fetch)
-      (uri (rubygems-uri "rerun" version))
-      (sha256
-        (base32
-          "1cskvxk8z8vmfail8na7hj91hs0qnvds9nydj04zi3dbddgnbmvz"))))
-  (build-system ruby-build-system)
-  (arguments
-   '(#:tests? #f)) ; No included tests
-  (propagated-inputs
-   (list ruby-listen))
-  (synopsis "Run a process, and restart when some monitored files change")
-  (description
-    "Rerun is a tool to launch programs, then monitor the file system, and
-restart the program when any of the monitored files change.  It's written in
-Ruby, but can be used for all programs.")
-  (home-page "https://github.com/alexch/rerun/")
-  (license license:expat)))
-
-(define-public ruby-maxitest
-  (package
-    (name "ruby-maxitest")
-    (version "5.1.0")
-    (home-page "https://github.com/grosser/maxitest")
-    (source (origin
-              ;; Pull from git because the gem does not contain tests.
-              (method git-fetch)
-              (uri (git-reference
-                    (url home-page)
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0qj410krfm497ggmf71xpnabbb6814y0585by4nlzyjvg9hpgg3m"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:test-target "default"
-      #:phases
-      #~(modify-phases %standard-phases
-          (replace 'replace-git-ls-files
-            (lambda _
-              (substitute* "maxitest.gemspec"
-                (("`git ls-files lib/ bin/ MIT-LICENSE Readme.md`")
-                 "`find lib/ bin/ MIT-LICENSE Readme.md -type f | sort`"))))
-          (add-before 'check 'remove-version-constraints
-            (lambda _
-              ;; Don't use specific versions of dependencies, instead
-              ;; take whatever is available in Guix.
-              (delete-file "Gemfile.lock")))
-          (add-before 'check 'add-mtest-on-PATH
-            (lambda _
-              ;; Tests use 'mtest' which is not automatically added on
-              ;; PATH.
-              (setenv "PATH" (string-append (getcwd) "/bin:"
-                                            (getenv "PATH"))))))))
-    (native-inputs
-     (list procps
-           ruby-bump
-           ruby-rspec
-           ruby-wwtd))
-    (propagated-inputs
-     (list ruby-minitest))
-    (synopsis "Minitest with extra features")
-    (description
-     "Maxitest is a wrapper around Minitest with extra functionality such
-as timeouts, an @command{mtest} executable that can run tests by line
-number, support for interrupted tests, better backtraces, and more.")
-    (license license:expat)))
-
-(define-public ruby-mocha
-  (package
-    (name "ruby-mocha")
-    (version "2.0.4")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "mocha" version))
-              (sha256
-               (base32
-                "18xn9gm9yypavy9yck71fplan19hy5697mwd1rwzz7vizh3ip7bd"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-before 'check 'remove-rubocop-dependency
-            (lambda _
-              ;; Disable dependency on Rubocop, which is just a linter,
-              ;; and would introduce a circular dependency.
-              (substitute* "Gemfile"
-                ((".*rubocop.*") "")))))))
-    (propagated-inputs
-     (list ruby-ruby2-keywords))
-    (native-inputs
-     (list ruby-psych-3
-           ruby-introspection))
-    (synopsis "Mocking and stubbing library for Ruby")
-    (description
-     "Mocha is a mocking and stubbing library with JMock/SchMock syntax, which
-allows mocking and stubbing of methods on real (non-mock) classes.")
-    (home-page "https://mocha.jamesmead.org/")
-    ;; Mocha can be used with either license at the users choice.
-    (license (list license:expat license:ruby))))
-
-(define-public ruby-mocha-1
-  (package
-    (inherit ruby-mocha)
-    (version "1.13.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "mocha" version))
-              (sha256
-               (base32
-                "15s53ggsykk69kxqvs4416s8yxdhz6caggva55n8sjgy4ixzwp10"))))
-    (arguments
-     '(#:tests? #f))))
-
-(define-public ruby-mocha-on-bacon
-  (package
-    (name "ruby-mocha-on-bacon")
-    (version "0.2.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "mocha-on-bacon" version))
-       (sha256
-        (base32
-         "1h49b33rq889hn8x3wp9byczl91va16jh1w4d2wyy4yj23icdrcp"))))
-    (build-system ruby-build-system)
-    (arguments
-     ;; rubygems.org release missing tests
-     '(#:tests? #f))
-    (propagated-inputs (list ruby-mocha))
-    (synopsis "Mocha adapter for Bacon")
-    (description
-     "This package provides a Mocha adapter for Bacon, allowing you to use the
-Mocha stubbing and mocking library with Bacon, a small RSpec clone.")
-    (home-page
-     "https://github.com/alloy/mocha-on-bacon")
-    (license license:expat)))
-
-(define-public ruby-net-ssh
-  (package
-    (name "ruby-net-ssh")
-    (version "7.1.0")
-    (source (origin
-              (method git-fetch) ;for tests
-              (uri (git-reference
-                    (url "https://github.com/net-ssh/net-ssh")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1dkbyzpl31jygnnva5sa754vk42q1fih4qz5ipqw5gqiafrrlb91"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list bundler
-           ruby-bcrypt-pbkdf
-           ruby-ed25519
-           ruby-mocha
-           ruby-rbnacl
-           ruby-test-unit
-           ruby-x25519))
-    (synopsis "Ruby implementation of the SSH2 client protocol")
-    (description "@code{Net::SSH} is a pure-Ruby implementation of the SSH2
-client protocol.  It allows you to write programs that invoke and interact
-with processes on remote servers, via SSH2.")
-    (home-page "https://github.com/net-ssh/net-ssh")
-    (license license:expat)))
-
-(define-public ruby-net-scp
-  (package
-    (name "ruby-net-scp")
-    (version "4.0.1.rc3")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/net-ssh/net-scp")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "136mb8idxdkxkadx827027nyxcsvvv2wivz5dnjqy8g6ic0h9dzn"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list bundler ruby-test-unit ruby-mocha-1))
-    (propagated-inputs
-     (list ruby-net-ssh))
-    (synopsis "Pure-Ruby SCP client library")
-    (description "@code{Net::SCP} is a pure-Ruby implementation of the SCP
-client protocol.")
-    (home-page "https://github.com/net-ssh/net-scp")
-    (license license:expat)))
-
-(define-public ruby-net-sftp
-  (package
-    (name "ruby-net-sftp")
-    (version "4.0.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "net-sftp" version))
-              (sha256
-               (base32
-                "0r33aa2d61hv1psm0l0mm6ik3ycsnq8symv7h84kpyf2b7493fv5"))))
-    (build-system ruby-build-system)
-    (propagated-inputs (list ruby-net-ssh))
-    (synopsis "Pure Ruby implementation of the SFTP client protocol")
-    (description
-     "@code{Net::SFTP} is a pure Ruby implementation of the SFTP
-protocol (specifically, versions 1 through 6 of the SFTP protocol).  Note that
-this is the “Secure File Transfer Protocol”, typically run over an SSH
-connection, and has nothing to do with the FTP protocol.")
-    (home-page "https://github.com/net-ssh/net-sftp")
-    (license license:expat)))
-
-(define-public ruby-minima
-  (package
-    (name "ruby-minima")
-    (version "2.5.1")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "minima" version))
-              (sha256
-               (base32
-                "1gk7jmriiswda1ykjzpsw9cpiya4m9n0yrh0h6xnrc8zcfy543jj"))))
-    (arguments
-     (list #:phases #~(modify-phases %standard-phases
-                        (replace 'check
-                          (lambda* (#:key tests? #:allow-other-keys)
-                            (when tests?
-                              (invoke "jekyll" "build"))
-                            ;; Without the following, an attempt to remove
-                            ;; minima-<version>.gem is made during installation,
-                            ;; which will fail.
-                            (delete-file #$(string-append "_site/minima-"
-                                                          version ".gem")))))))
-    (build-system ruby-build-system)
-    (propagated-inputs (list jekyll ruby-jekyll-feed ruby-jekyll-seo-tag))
-    (synopsis "Beautiful, minimal theme for Jekyll")
-    (description
-     "Minima is a one-size-fits-all Jekyll theme for writers.  It's Jekyll's
-default (and first) theme.  It's what you get when you run @code{jekyll new}.")
-    (home-page "https://github.com/jekyll/minima")
-    (license license:expat)))
-
-(define-public ruby-minitest
-  (package
-    (name "ruby-minitest")
-    (version "5.18.1")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "minitest" version))
-              (sha256
-               (base32
-                "1kg9wh7jlc9zsr3hkhpzkbn0ynf4np5ap9m2d8xdrb8shy0y6pmb"))))
-    (build-system ruby-build-system)
-    (native-inputs (list ruby-hoe))
-    (home-page "https://github.com/minitest/minitest")
-    (synopsis "Small test suite library for Ruby")
-    (description "Minitest provides a complete suite of Ruby testing
-facilities supporting TDD, BDD, mocking, and benchmarking.")
-    (license license:expat)))
-
-(define-public ruby-minitest-around
-  (package
-    (name "ruby-minitest-around")
-    (version "0.5.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "minitest-around" version))
-       (sha256
-        (base32
-         "15ywnqx0719jl9c25yqfshmwcir57i5f4hr1ra9v9vay9ylcwndr"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'extract-gemspec 'remove-unnecessary-dependency-versions
-           (lambda _
-             (substitute* "minitest-around.gemspec"
-               (("%q<cucumber>.*") "%q<cucumber>, [\">= 0\"])\n")))))))
-    (propagated-inputs
-     (list ruby-minitest))
-    (native-inputs
-     (list bundler ruby-cucumber ruby-bump ruby-test-construct))
-    (synopsis "Run code around tests in Minitest")
-    (description
-     "This library provides a way to run code around tests in Minitest,
-written using either the unit test or spec style.")
-    (home-page "https://github.com/splattael/minitest-around")
-    (license license:expat)))
-
-(define-public ruby-minitest-retry
-  (package
-    (name "ruby-minitest-retry")
-    (version "0.2.2")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "minitest-retry" version))
-              (sha256
-               (base32
-                "1c1zq0b1a9y0hbqphq4ybijnjldlis1g6kyhx92q2ynnqfmzhfga"))))
-    (build-system ruby-build-system)
-    (propagated-inputs (list ruby-minitest))
-    (synopsis "Minitest extension to re-run failing tests")
-    (description "This package provides the @code{Minitest::Retry} class,
-which extends Minitest to allow retrying tests when they fail.")
-    (home-page "https://github.com/y-yagi/minitest-retry")
-    (license license:expat)))
-
-(define-public ruby-minitest-sprint
-  (package
-    (name "ruby-minitest-sprint")
-    (version "1.1.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "minitest-sprint" version))
-              (sha256
-               (base32
-                "179d6pj56l9xzm46fqsqj10mzjkr1f9fv4cxa8wvchs97hqz33w1"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list ruby-hoe ruby-minitest))
-    (synopsis "Fast test suite runner for minitest")
-    (description "Minitest-sprint is a test runner for minitest that makes it
-easier to re-run individual failing tests.")
-    (home-page "https://github.com/seattlerb/minitest-sprint")
-    (license license:expat)))
-
-(define-public ruby-minitest-stub-const
-  (package
-    (name "ruby-minitest-stub-const")
-    (version "0.6")                     ;for Rakefile
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/adammck/minitest-stub-const")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0cz4r9fxplx94c7wakx0998n2gv7l21prn8pfpw6z2c33k3g2xar"))))
-    (build-system ruby-build-system)
-    (synopsis "Stub constants for the duration of a block in MiniTest")
-    (description "This package provides a MiniTest extension to stub constants
-for the duration of a block in MiniTest.")
-    (home-page "https://github.com/adammck/minitest-stub-const")
-    (license license:expat)))
-
-(define-public ruby-minitest-bacon
-  (package
-    (name "ruby-minitest-bacon")
-    (version "1.0.3")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "minitest-bacon" version))
-              (sha256
-               (base32
-                "0zhdwcl6bgha61qiyfvr7zs7ywaxc33wmj9xhxl8jdmpdvifvfaj"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list ruby-hoe))
-    (inputs
-     (list ruby-minitest))
-    (synopsis "Bacon compatibility library for minitest")
-    (description "Minitest-bacon extends minitest with bacon-like
-functionality, making it easier to migrate test suites from bacon to minitest.")
-    (home-page "https://github.com/seattlerb/minitest-bacon")
-    (license license:expat)))
-
-(define-public ruby-minitest-focus
-  (package
-    (name "ruby-minitest-focus")
-    (version "1.3.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "minitest-focus" version))
-       (sha256
-        (base32
-         "13kd2dkd9akfb99ziqndz9mir5iynyfyj2l45mcibab6mq5k8g67"))))
-    (build-system ruby-build-system)
-    (propagated-inputs
-     (list ruby-minitest))
-    (native-inputs
-     (list ruby-hoe))
-    (synopsis "Allows a few specific tests to be focused on")
-    (description
-     "@code{minitest-focus} gives the ability focus on a few tests with ease
-without having to use command-line arguments.  It introduces a @code{focus}
-class method for use in testing classes, specifying that the next defined test
-is to be run.")
-    (home-page "https://github.com/seattlerb/minitest-focus")
-    (license license:expat)))
-
-(define-public ruby-minitest-power-assert
-  (package
-    (name "ruby-minitest-power-assert")
-    (version "0.3.1")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "minitest-power_assert" version))
-              (sha256
-               (base32
-                "1dazl6nbxjvvmi5jamrsygkz396s29b7cd841ni6qy4izk8jd9b7"))))
-    (build-system ruby-build-system)
-    (propagated-inputs (list ruby-minitest ruby-power-assert))
-    (synopsis "Power Assert implementation for Minitest")
-    (description "This gem provides a Power Assert implementation for
-Minitest.  It is inspired by the @code{test-unit-power_assert} gem.")
-    (home-page "https://github.com/hsbt/minitest-power_assert")
-    (license license:bsd-2)))
-
-(define-public ruby-minitest-profile
-  (package
-    (name "ruby-minitest-profile")
-    (version "0.0.2")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "minitest-profile" version))
-              (sha256
-               (base32
-                "13h4nwbq6yv7hsaa7dpj90lry4rc5qqnpzvm9n2s57mm2xi31xfa"))))
-    (build-system ruby-build-system)
-    (synopsis "Display the slowest tests in a MiniTest suite")
-    (description "This package provides a MiniTest plugin for displaying the
-slowest tests in a minitest suite.")
-    (home-page "https://github.com/nmeans/minitest-profile")
-    (license license:expat)))
-
-(define-public ruby-minitest-proveit
-  (package
-    (name "ruby-minitest-proveit")
-    (version "1.0.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "minitest-proveit" version))
-              (sha256
-               (base32
-                "0k1hpr8lgkgygfivgcsnnib7xjlf9ribgpn7yidvb4q0l0q2yfmr"))))
-    (build-system ruby-build-system)
-    (native-inputs (list ruby-hoe))
-    (propagated-inputs (list ruby-minitest))
-    (synopsis "Assertion-based tests extension for MiniTest")
-    (description "The @code{minitest-proveit} MiniTest extension ensures all
-tests to prove success (via at least one assertion) rather than rely on the
-absence of failure.")
-    (home-page "https://github.com/seattlerb/minitest-proveit")
-    (license license:expat)))
-
-(define-public ruby-minitest-moar
-  (package
-    (name "ruby-minitest-moar")
-    (version "0.0.4")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "minitest-moar" version))
-       (sha256
-        (base32
-         "0nb83blrsab92gcy6nfpw39njys7zisia8pw4igzzfzfl51cis0x"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'check 'clean-dependencies
-           (lambda _
-             ;; Remove all gems defined in the Gemfile because these are not
-             ;; truly needed.
-             (substitute* "Gemfile"
-               (("gem .*") ""))
-             ;; Remove byebug as not needed to run tests.
-             (substitute* "test/test_helper.rb"
-               (("require 'byebug'") "")))))))
-    (native-inputs
-     (list bundler ruby-minitest))
-    (synopsis "Extra features and changes to MiniTest")
-    (description "@code{MiniTest Moar} add some additional features and
-changes some default behaviours in MiniTest.  For instance, Moar replaces the
-MiniTest @code{Object#stub} with a global @code{stub} method.")
-    (home-page "https://github.com/dockyard/minitest-moar")
-    (license license:expat)))
-
-(define-public ruby-minitest-bonus-assertions
-  (package
-    (name "ruby-minitest-bonus-assertions")
-    (version "3.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "minitest-bonus-assertions" version))
-       (sha256
-        (base32
-         "1hbq9jk904xkz868yha1bqcm6azm7kmjsll2k4pn2nrcib508h2a"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:tests? #f          ; Test suite has bitrotted.
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-before 'check 'clean-dependencies
-            (lambda _
-              ;; Remove unneeded require statement that would entail another
-              ;; dependency.
-              (substitute* "test/minitest_config.rb"
-                (("require 'minitest/bisect'") "")))))))
-    (native-inputs
-     (list ruby-hoe
-           ruby-minitest-focus
-           ruby-minitest-moar))
-    (synopsis "Bonus assertions for @code{Minitest}")
-    (description
-     "Minitest bonus assertions provides extra MiniTest assertions.  For
-instance, it provides @code{assert_true}, @code{assert_false} and
-@code{assert_set_equal}.")
-    (home-page "https://github.com/halostatue/minitest-bonus-assertions")
-    (license license:expat)))
-
-(define-public ruby-minitest-reporters
-  (package
-    (name "ruby-minitest-reporters")
-    (version "1.3.6")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "minitest-reporters" version))
-       (sha256
-        (base32
-         "1a3das80rwgys5rj48i5ly144nvszyqyi748bk9bss74jblcf5ay"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         ;; Remove the requirement on Rubocop, as it isn't useful to run, and
-         ;; including it as an input can lead to circular dependencies.
-         (add-after 'unpack 'remove-rubocop-from-Rakefile
-           (lambda _
-             (substitute* "Rakefile"
-               (("require 'rubocop/rake\\_task'") "")
-               (("RuboCop::RakeTask\\.new\\(:rubocop\\)") "[].each"))))
-         (add-after 'extract-gemspec 'remove-rubocop-from-gemspec
-           (lambda _
-             (substitute* "minitest-reporters.gemspec"
-               ((".*%q<rubocop>.*") "\n")))))))
-    (propagated-inputs
-     (list ruby-ansi ruby-builder ruby-minitest ruby-progressbar))
-    (native-inputs
-     (list bundler ruby-maruku))
-    (synopsis "Enhanced reporting for Minitest tests")
-    (description
-     "@code{minitest/reporters} provides a custom Minitest runner to improve
-how the test state is reported.  A number of different reporters are
-available, including a spec reporter, progress bar reporter, a HTML
-reporter.")
-    (home-page "https://github.com/kern/minitest-reporters")
-    (license license:expat)))
-
-(define-public ruby-minitest-rg
-  (package
-    (name "ruby-minitest-rg")
-    (version "5.2.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "minitest-rg" version))
-       (sha256
-        (base32
-         "0sq509ax1x62rd0w10b0hcydcxyk5bxxr3fwrgxv02r8drq2r354"))))
-    (build-system ruby-build-system)
-    (arguments
-     ;; Some tests fail even outside Guix, so disable tests.
-     ;; https://github.com/blowmage/minitest-rg/issues/12
-     ;; https://github.com/blowmage/minitest-rg/pull/13
-     `(#:tests? #f))
-    (propagated-inputs
-     (list ruby-minitest))
-    (synopsis "Coloured output for Minitest")
-    (description
-     "@code{minitest-rg} changes the colour of the output from Minitest.")
-    (home-page "https://blowmage.com/minitest-rg/")
-    (license license:expat)))
-
-(define-public ruby-minitest-global-expectations
-  (package
-    (name "ruby-minitest-global-expectations")
-    (version "1.0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "minitest-global_expectations"
-                          version))
-       (sha256
-        (base32
-         "1pp3k2608spj4kvqy2y16hs18an917g6vwgvphrfhjviac83090x"))))
-    (build-system ruby-build-system)
-    (propagated-inputs
-     (list ruby-minitest))
-    (synopsis "Adjust minitest behaviour for calling expectation methods")
-    (description
-     "Minitest-global_expectations allows continued use of expectation methods
-on all objects.  Calling expectation methods on all objects was deprecated in
-minitest 5.12, and is planned to be removed from minitest 6.")
-    (home-page "https://github.com/jeremyevans/minitest-global_expectations")
-    (license license:expat)))
-
-(define-public ruby-minitest-hooks
-  (package
-    (name "ruby-minitest-hooks")
-    (version "1.5.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "minitest-hooks" version))
-       (sha256
-        (base32 "11jb31dl5kbpyl3kgxql0p7da9066r2aqw54y5q6cni9nmld3zf5"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f))  ; No tests bundled.
-    (native-inputs
-     (list ruby-sequel ruby-sqlite3))
-    (synopsis "Hooks for the minitest framework")
-    (description
-     "Minitest-hooks adds @code{around}, @code{before_all}, @code{after_all},
-@code{around_all} hooks for Minitest.  This allows, for instance, running each
-suite of specs inside a database transaction, running each spec inside its own
-savepoint inside that transaction.  This can significantly speed up testing
-for specs that share expensive database setup code.")
-    (home-page "https://github.com/jeremyevans/minitest-hooks")
-    (license license:expat)))
-
-(define-public ruby-daemons
-  (package
-    (name "ruby-daemons")
-    (version "1.2.5")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "daemons" version))
-              (sha256
-               (base32
-                "15smbsg0gxb7nf0nrlnplc68y0cdy13dm6fviavpmw7c630sring"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:tests? #f)) ; no test suite
-    (synopsis "Daemonize Ruby programs")
-    (description "Daemons provides a way to wrap existing Ruby scripts to be
-run as a daemon and to be controlled by simple start/stop/restart commands.")
-    (home-page "https://github.com/thuehlinger/daemons")
-    (license license:expat)))
-
-(define-public ruby-dalli
-  (package
-    (name "ruby-dalli")
-    (version "3.2.4")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/petergoldstein/dalli")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1hhqqv1j3zd2y0vr6maaabsflrvkf1x0i6z8n725mhqydp3f9gwp"))))
-    (build-system ruby-build-system)
-    ;; Disable tests to avoid a dependency cycle with ruby-activesupport,
-    ;; through ruby-ruby-prof.
-    (arguments (list #:tests? #f))
-    (synopsis "High performance memcached client for Ruby")
-    (description "Dalli is a high performance pure Ruby client for accessing
-memcached servers.  Dalli supports:
-
-@itemize
-@item Simple and complex memcached configurations
-@item Fail-over between memcached instances
-@item Fine-grained control of data serialization and compression
-@item Thread-safe operation
-@item SSL/TLS connections to memcached
-@item SASL authentication.
-@end itemize
-
-The name is a variant of Salvador Dali for his famous painting The Persistence
-of Memory.")
-    (home-page "https://github.com/petergoldstein/dalli")
-    (license license:expat)))
-
-(define-public ruby-data_uri
-  (package
-    (name "ruby-data_uri")
-    (version "0.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "data_uri" version))
-       (sha256
-        (base32
-         "0fzkxgdxrlbfl4537y3n9mjxbm28kir639gcw3x47ffchwsgdcky"))))
-    (build-system ruby-build-system)
-    (synopsis "URI class for parsing data URIs")
-    (description
-     "Data @acronym{URI, universal resource identifier}s allow resources to be
-embedded inside a URI.  The URI::Data class provides support for parsing these
-URIs using the normal URI.parse method.")
-    (home-page "https://github.com/dball/data_uri")
-    (license license:expat)))
-
-(define-public ruby-debug
-  (package
-    (name "ruby-debug")
-    (version "1.7.2")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "debug" version))
-              (sha256
-               (base32
-                "0x59508j69w9p275gabysv521n210pd3n060gqfgsiqjms1h0ldf"))))
-    (build-system ruby-build-system)
-    (arguments (list #:test-target "test_all"))
-    (propagated-inputs (list ruby-irb ruby-reline))
-    (synopsis "Debugging functionality for Ruby")
-    (description "Debugging functionality for Ruby.  This is completely
-rewritten debug.rb which was contained by the ancient Ruby versions.  It is
-included with Ruby itself, but this package is made available so that the
-latest version can be made available independently from Ruby.")
-    (home-page "https://github.com/ruby/debug")
-    (license license:bsd-2)))
-
-(define-public ruby-deep-merge
-  (package
-    (name "ruby-deep-merge")
-    (version "1.2.1")
-    (home-page "https://github.com/danielsdeleo/deep_merge")
-    ;; The Rubygem source does not contain the gemspec required for tests.
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference (url home-page) (commit version)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0c9rk23ilhc0n4489y6lda2wzphpzh6ish6fahlbpjhxn82wb931"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list ruby-minitest))
-    (synopsis "Recursively merge hashes")
-    (description
-     "Deep Merge is a set of utility functions for @code{Hash}.  It permits
-you to merge elements inside a hash together recursively.")
-    (license license:expat)))
-
-(define-public ruby-delayed-job
-  (package
-    (name "ruby-delayed-job")
-    (version "4.1.11")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "delayed_job" version))
-              (sha256
-               (base32
-                "0s2xg72ljg4cwmr05zi67vcyz8zib46gvvf7rmrdhsyq387m2qcq"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:phases
-           #~(modify-phases %standard-phases
-               (add-after 'unpack 'disable-bundler
-                 (lambda _
-                   (substitute* "Rakefile"
-                     (("require 'bundler/setup'") "")
-                     (("Bundler::GemHelper\\.install_tasks") ""))))
-               (add-after 'unpack 'disable-rubocop
-                 (lambda _
-                   (substitute* "Rakefile"
-                     (("require 'rubocop/rake_task'") "")
-                     (("RuboCop::RakeTask.new") ""))))
-               (add-after 'extract-gemspec 'remove-dependency-on-actionmailer
-                 (lambda _
-                   (substitute* "spec/helper.rb"
-                     (("require 'action_mailer'") ""))
-                   (substitute* "delayed_job.gemspec"
-                     (("\"spec/performable_mailer_spec.rb\".freeze, ") ""))
-                   (delete-file "spec/performable_mailer_spec.rb"))))))
-    (native-inputs
-     (list ruby-activerecord
-           ruby-rspec
-           ruby-simplecov
-           ruby-simplecov-lcov
-           ruby-zeitwerk
-           ruby-mini-portile-2))
-    (propagated-inputs
-     (list ruby-activesupport))
-    (synopsis "Asynchronous background tasks execution library")
-    (description "Delayed_job (or DJ) encapsulates the common pattern of
-asynchronously executing longer tasks in the background.  It is a direct
-extraction from Shopify where the job table is responsible for a multitude of
-core tasks.")
-    (home-page "https://github.com/collectiveidea/delayed_job")
-    (license license:expat)))
-
-(define-public ruby-git
-  (package
-    (name "ruby-git")
-    (version "1.3.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "git" version))
-              (sha256
-               (base32
-                "1waikaggw7a1d24nw0sh8fd419gbf7awh000qhsf411valycj6q3"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:tests? #f ; no tests
-       #:phases (modify-phases %standard-phases
-                  (add-after 'install 'patch-git-binary
-                    (lambda* (#:key inputs outputs #:allow-other-keys)
-                      ;; Make the default git binary an absolute path to the
-                      ;; store.
-                      (let ((git    (search-input-file inputs "/bin/git"))
-                            (config (string-append
-                                     (assoc-ref outputs "out")
-                                     "/lib/ruby/vendor_ruby/gems/git-"
-                                     ,version "/lib/git/config.rb")))
-                        (substitute* (list config)
-                          (("'git'")
-                           (string-append "'" git "'")))))))))
-    (inputs
-     (list git))
-    (synopsis "Ruby wrappers for Git")
-    (description "Ruby/Git is a Ruby library that can be used to create, read
-and manipulate Git repositories by wrapping system calls to the git binary.")
-    (home-page "https://github.com/schacon/ruby-git")
-    (license license:expat)))
-
-(define-public ruby-hocon
-  (package
-    (name "ruby-hocon")
-    (version "1.4.0")
-    (home-page "https://github.com/puppetlabs/ruby-hocon")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference (url home-page) (commit version)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "04wgv0pwrghawnl6qp346z59fvp9v37jymq8p0lsrzxa6nvrykmk"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (replace 'check
-            (lambda* (#:key tests? #:allow-other-keys)
-              (if tests?
-                  (invoke "rspec")
-                  (format #t "test suite not run~%")))))))
-    (native-inputs
-     (list bundler ruby-rspec))
-    (synopsis "HOCON config library")
-    (description
-     "This package provides Ruby support for the @acronym{HOCON,
-Human-Optimized Config Object Notation} configuration file format.  It
-supports parsing and modifying HOCON and JSON files, and rendering parsed
-objects back to a @code{String}.")
-    (license license:asl2.0)))
-
-(define-public ruby-slop
-  (package
-    (name "ruby-slop")
-    (version "4.10.1")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "slop" version))
-              (sha256
-               (base32
-                "1iyrjskgxyn8i1679qwkzns85p909aq77cgx2m4fs5ygzysj4hw4"))))
-    (build-system ruby-build-system)
-    (synopsis "Ruby command line option parser")
-    (description "Slop provides a Ruby domain specific language for gathering
-options and parsing command line flags.")
-    (home-page "https://github.com/leejarvis/slop")
-    (license license:expat)))
-
-(define-public ruby-slop-3
-  (package (inherit ruby-slop)
-    (version "3.6.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "slop" version))
-              (sha256
-               (base32
-                "00w8g3j7k7kl8ri2cf1m58ckxk8rn350gp4chfscmgv6pq1spk3n"))))))
-
-(define-public ruby-multi-xml
-  (package
-    (name "ruby-multi-xml")
-    (version "0.6.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "multi_xml" version))
-       (sha256
-        (base32
-         "0lmd4f401mvravi1i1yq7b2qjjli0yq7dfc4p1nj5nwajp7r6hyj"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; No included tests
-    (synopsis "Swappable XML backends for Ruby")
-    (description
-     "@code{MultiXml} provides swappable XML backends utilizing either LibXML,
-Nokogiri, Ox, or REXML.")
-    (home-page "https://github.com/sferik/multi_xml")
-    (license license:expat)))
-
-(define-public ruby-multipart-parser
-  (package
-    (name "ruby-multipart-parser")
-    (version "0.1.1")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "multipart-parser" version))
-              (sha256
-               (base32
-                "0xb4p475yrfm883h9kn80a021myn17dvs50wpa1djzcmlq7p0882"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases #~(modify-phases %standard-phases
-                   (add-after 'unpack 'skip-failing-test
-                     ;; One test fails for unknown reasons (see:
-                     ;; https://github.com/danabr/multipart-parser/issues/7).
-                     (lambda _
-                       (substitute* "test/multipart_parser/reader_test.rb"
-                         (("def test_long" all)
-                          (string-append all "\n      return true"))))))))
-    (synopsis "Parser for multipart MIME messages")
-    (description "@code{multipart-parser} is a simple parser for multipart
-MIME messages, written in Ruby, based on felixge/node-formidable's parser.  It
-has the following characteristics:
-@itemize
-@item Pure Ruby
-@item Event-driven API
-@item Only supports one level of multipart parsing
-@item Does not perform I/O
-@item Does not depend on any other library.
-@end itemize")
-    (home-page "https://github.com/danabr/multipart-parser")
-    (license license:expat)))
-
-(define-public ruby-multipart-post
-  (package
-    (name "ruby-multipart-post")
-    (version "2.0.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "multipart-post" version))
-              (sha256
-               (base32
-                "09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list bundler))
-    (synopsis "Multipart POST library for Ruby")
-    (description "Multipart-Post Adds multipart POST capability to Ruby's
-net/http library.")
-    (home-page "https://github.com/nicksieger/multipart-post")
-    (license license:expat)))
-
-(define-public ruby-multi-json
-  (package
-    (name "ruby-multi-json")
-    (version "1.15.0")
-    (source
-     (origin
-       (method git-fetch)
-       ;; Tests are not distributed at rubygems.org so download from GitHub
-       ;; instead.
-       (uri (git-reference
-              (url "https://github.com/intridea/multi_json")
-              (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "0mkdvy6i00yyksjvnv6znh7wf89j9506qzzjq6bsbmbkyqrszp4d"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      ;; TODO Tests don't currently work with Ruby 3
-      #:tests? #f
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-before 'check 'pre-check
-            (lambda _
-              ;; As seen in the .travis.yml file.
-              (setenv "SKIP_ADAPTERS" "gson,jr_jackson,nsjsonserialization"))))))
-    (native-inputs
-     (list ruby-rspec ruby-json-pure ruby-oj ruby-yajl-ruby))
-    (synopsis "Common interface to multiple JSON libraries for Ruby")
-    (description
-     "This package provides a common interface to multiple JSON libraries,
-including Oj, Yajl, the JSON gem (with C-extensions), the pure-Ruby JSON gem,
-NSJSONSerialization, gson.rb, JrJackson, and OkJson.")
-    (home-page "https://github.com/intridea/multi_json")
-    (license license:expat)))
-
-(define-public ruby-multi-test
-  (package
-    (name "ruby-multi-test")
-    (version "0.1.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "multi_test" version))
-       (sha256
-        (base32
-         "1sx356q81plr67hg16jfwz9hcqvnk03bd9n75pmdw8pfxjfy1yxd"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(;; Tests require different sets of specific gem versions to be available,
-       ;; and there is no gemfile that specifies the newest versions of
-       ;; dependencies to be tested.
-       #:tests? #f))
-    (synopsis
-     "Interface to testing libraries loaded into a running Ruby process")
-    (description
-     "@code{multi_test} provides a uniform interface onto whatever testing
-libraries that have been loaded into a running Ruby process to help control
-rogue test/unit/autorun requires.")
-    (home-page "https://github.com/cucumber/multi_test")
-    (license license:expat)))
-
-(define-public ruby-arr-pm
-  (package
-    (name "ruby-arr-pm")
-    (version "0.0.12")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "arr-pm" version))
-              (sha256
-               (base32
-                "0fddw0vwdrr7v3a0lfqbmnd664j48a9psrjd3wh3k4i3flplizzx"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:phases
-           #~(modify-phases %standard-phases
-               (replace 'check
-                 (lambda* (#:key tests? #:allow-other-keys)
-                   (when tests?
-                     (invoke "rspec")))))))
-    (native-inputs (list ruby-flores ruby-insist ruby-rspec ruby-stud))
-    (synopsis "RPM reader/writer library written in Ruby")
-    (description "This library allows reading and writing RPM packages.  It is
-used by the @command{fpm} tool.  It is written in pure Ruby because
-@code{librpm} is not available on all systems and requires many
-dependencies.")
-    (home-page "https://github.com/jordansissel/ruby-arr-pm")
-    (license license:asl2.0)))
-
-(define-public ruby-arel
-  (package
-    (name "ruby-arel")
-    (version "9.0.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "arel" version))
-              (sha256
-               (base32
-                "1jk7wlmkr61f6g36w9s2sn46nmdg6wn2jfssrhbhirv5x9n95nk0"))))
-    (build-system ruby-build-system)
-    (arguments '(#:tests? #f)) ; no tests
-    (home-page "https://github.com/rails/arel")
-    (synopsis "SQL AST manager for Ruby")
-    (description "Arel is an SQL @dfn{Abstract Syntax Tree} (AST) manager for
-Ruby.  It simplifies the generation of complex SQL queries and adapts to
-various relational database implementations.")
-    (license license:expat)))
-
-(define-public ruby-minitar
-  ;; We package from the GitHub source to fix the security issue reported at
-  ;; https://github.com/halostatue/minitar/issues/16.
-  (let ((commit "e25205ecbb6277ae8a3df1e6a306d7ed4458b6e4"))
-    (package
-      (name "ruby-minitar")
-      (version (string-append "0.5.4-1." (string-take commit 8)))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/halostatue/minitar")
-               (commit commit)))
-         (file-name (string-append name "-" version "-checkout"))
-         (sha256
-          (base32
-           "1iywfx07jgjqcmixzkxk9zdwfmij1fyg1z2jlwzj15cj7s99qlfv"))))
-      (build-system ruby-build-system)
-      (arguments
-       '(#:tests? #f)) ; missing a gemspec
-      (synopsis "Ruby library and utility for handling tar archives")
-      (description
-       "Archive::Tar::Minitar is a pure-Ruby library and command-line utility
-that provides the ability to deal with POSIX tar archive files.")
-      (home-page "http://www.github.com/atoulme/minitar")
-      (license (list license:gpl2+ license:ruby)))))
-
-(define-public ruby-mini-portile
-  (package
-    (name "ruby-mini-portile")
-    (version "0.6.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "mini_portile" version))
-       (sha256
-        (base32
-         "0h3xinmacscrnkczq44s6pnhrp4nqma7k056x5wv5xixvf2wsq2w"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; tests require network access
-    (synopsis "Ports system for Ruby developers")
-    (description "Mini-portile is a port/recipe system for Ruby developers.
-It provides a standard way to compile against specific versions of libraries
-to reproduce user environments.")
-    (home-page "https://github.com/flavorjones/mini_portile")
-    (license license:expat)))
-
-(define-public ruby-mini-portile-2
-  (package
-    (inherit ruby-mini-portile)
-    (version "2.8.2")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "mini_portile2" version))
-              (sha256
-               (base32
-                "0z7f38iq37h376n9xbl4gajdrnwzq284c9v1py4imw3gri2d5cj6"))))))
-
-(define-public ruby-nokogiri
-  (package
-    (name "ruby-nokogiri")
-    (version "1.15.2")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/sparklemotion/nokogiri")
-                    (commit "a6ad20b3edc8f020043ccfe5d9ec6ae9af103720")))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1n0vlg6v58jw3qzgyihz1dh5fvp4js1qgdh75j0kn47nvyiw3jxj"))
-              (patches (search-patches "ruby-nokogiri.patch"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:gem-flags #~(list "--" "--use-system-libraries"
-                               (string-append "--with-xml2-include="
-                                              #$(this-package-input "libxml2")
-                                              "/include/libxml2"))
-           #:phases #~(modify-phases %standard-phases
-                        (add-after 'install 'delete-mkmf.log
-                          (lambda _
-                            ;; Rubygems installs build log files that embed volatile file
-                            ;; names (see:
-                            ;; https://github.com/rubygems/rubygems/issues/6259).
-                            (for-each delete-file
-                                      (find-files #$output "^mkmf\\.log$"))))
-                        (delete 'check)
-                        (add-after 'install 'check
-                          (lambda* (#:key tests? #:allow-other-keys)
-                            (setenv "GEM_PATH" (string-append
-                                                (getenv "GEM_PATH") ":"
-                                                #$output "/lib/ruby/vendor_ruby"))
-                            (when tests?
-                              (for-each (lambda (file)
-                                          (invoke "ruby" "-Itest" file))
-                                        (find-files "test" "^test_.*\\.rb"))))))))
-    (native-inputs (list ruby-hoe ruby-rubyzip))
-    (inputs (list zlib libxml2 libxslt))
-    (propagated-inputs (list ruby-mini-portile-2 ruby-pkg-config))
-    (synopsis "HTML, XML, SAX, and Reader parser for Ruby")
-    (description "Nokogiri (鋸) parses and searches XML/HTML, and features
-both CSS3 selector and XPath 1.0 support.")
-    (home-page "https://nokogiri.org/")
-    (license license:expat)))
-
-(define-public ruby-method-source
-  (package
-    (name "ruby-method-source")
-    (version "1.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "method_source" version))
-       (sha256
-        (base32
-         "1pnyh44qycnf9mzi1j6fywd5fkskv3x7nmsqrrws0rjn5dd4ayfp"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:test-target "spec"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'remove-git-ls-files
-           (lambda* (#:key outputs #:allow-other-keys)
-             (substitute* "Rakefile"
-               (("git ls-files") "find . -type f")))))))
-    (native-inputs
-     (list ruby-rspec))
-    (synopsis "Retrieve the source code for Ruby methods")
-    (description "Method_source retrieves the source code for Ruby methods.
-Additionally, it can extract source code from Proc and Lambda objects or just
-extract comments.")
-    (home-page "https://github.com/banister/method_source")
-    (license license:expat)))
-
-(define-public ruby-coderay
-  (package
-    (name "ruby-coderay")
-    (version "1.1.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "coderay" version))
-       (sha256
-        (base32
-         "15vav4bhcc2x3jmi3izb11l4d9f3xv8hp2fszb7iqmpsccv1pz4y"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; missing test files
-    (synopsis "Ruby syntax highlighting library")
-    (description "Coderay is a Ruby library that provides syntax highlighting
-for select languages.")
-    (home-page "http://coderay.rubychan.de")
-    (license license:expat)))
-
-(define-public ruby-cuke-modeler
-  (package
-    (name "ruby-cuke-modeler")
-    (version "3.20.1")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/enkessler/cuke_modeler")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0xbnx1blxm4kfhfwfh58n2ja40p2kfw8hbbz60dlzvghz25vcwy6"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:test-target "default"
-           #:phases
-           #~(modify-phases %standard-phases
-               (add-after 'unpack 'improve-reproducibility
-                 (lambda _
-                   (substitute*
-                       "testing/rspec/spec/unit/cuke_modeler_unit_spec.rb"
-                     (("#\\{Time.now.year\\}") ""))))
-               (add-after 'unpack 'relax-requirements
-                 (lambda _
-                   (substitute* "Gemfile"
-                     ;; Cucumber appears pinned to an older version for no
-                     ;; particular reason (see:
-                     ;; https://github.com/enkessler/cuke_modeler/issues/14).
-                     (("'cucumber', '2.2.0'")
-                      "'cucumber', '>= 2.2.0'")
-                     (("^gherkin_major_version_used = .*")
-                      (string-append
-                       "gherkin_major_version_used = "
-                       #$(car
-                          (string-split
-                           (package-version
-                            (this-package-input "ruby-cucumber-gherkin")) #\.))
-                       "\n")))
-                   ;; Disable Bundler.
-                   (substitute* "bin/console"
-                     (("require 'bundler/setup'") ""))
-                   (substitute* "rakefiles/testing_tasks.rb"
-                     (("'bundle', 'exec', ") ""))
-                   ;; Remove extraneous dependencies.
-                   (substitute* "cuke_modeler.gemspec"
-                     ((".*bundler.*") "")
-                     ((".*rubocop.*") "")
-                     ((".*yard.*") ""))
-                   (substitute* "Rakefile"
-                     (("Rainbow.enabled = true") "")
-                     (("require_relative 'rakefiles/documentation_tasks'") "")
-                     (("require_relative 'rakefiles/other_tasks'") "")
-                     (("require_relative 'rakefiles/release_tasks'") "")))))))
-    (native-inputs
-     (list ruby-childprocess
-           ruby-cucumber
-           ruby-rainbow
-           ruby-rspec
-           ruby-simplecov
-           ruby-simplecov-lcov))
-    (propagated-inputs (list ruby-cucumber-gherkin))
-    (synopsis "Gherkin test suite analysis tool")
-    (description "CukeModeler facilitates modeling a test suite that is
-written in Gherkin (e.g.  Cucumber, SpecFlow, Lettuce, etc.).  It does this by
-providing an abstraction layer on top of the Abstract Syntax Tree (AST) that
-the @code{cucumber-gherkin} generates when parsing features, as well as
-providing models for feature files and directories in order to be able to have
-a fully traversable model tree of a test suite's structure.  These models can
-then be analyzed or manipulated more easily than the underlying AST layer.")
-    (home-page "https://github.com/enkessler/cuke_modeler")
-    (license license:expat)))
-
-(define-public ruby-parallel-tests
-  (package
-    (name "ruby-parallel-tests")
-    (version "4.9.0")
-    (home-page "https://github.com/grosser/parallel_tests")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url home-page)
-                    (commit (string-append "v" version))))
-              (file-name (string-append name version))
-              (sha256
-               (base32
-                "0ljb17i1bvlr0y1avwishcrg60h48bj6iwgkp8yrck08wcs7b338"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:test-target "spec"             ;avoid rubocop dependency
-       #:phases (modify-phases %standard-phases
-                  (add-after 'patch-source-shebangs 'patch-shell-invocations
-                    (lambda _
-                      (substitute* '("lib/parallel_tests/tasks.rb"
-                                     "spec/parallel_tests/tasks_spec.rb")
-                        (("/bin/sh") (which "sh"))
-                        (("/bin/bash") (which "bash")))))
-                  (add-before 'check 'relax-requirements
-                    (lambda _
-                      ;; Remove hard coded version constraints, instead just
-                      ;; use whatever versions are available in Guix.
-                      (delete-file "Gemfile.lock")
-                      (substitute* "Gemfile"
-                        (("'minitest',.*")
-                         "'minitest'\n")
-                        (("'cucumber',.*")
-                         "'cucumber'\n")
-                        ;; Do not depend on a git-fetched spinach version.
-                        (("gem 'spinach',.*")
-                         "gem 'spinach'\n")
-                        ((".*rubocop.*") ""))))
-                  (add-before 'check 'disable-rails-test
-                    (lambda _
-                      ;; XXX: This test attempts to download and run the test
-                      ;; suites of multiple Rails versions(!) directly.
-                      (delete-file "spec/rails_spec.rb")))
-                  (add-before 'check 'disable-problematic-tests
-                    (lambda _
-                      ;; This test fails, probably because of the newer
-                      ;; Cucumber version used here.
-                      (delete-file "spec/parallel_tests/cucumber/\
-failure_logger_spec.rb")                      ))
-                  (add-before 'check 'set-HOME
-                    (lambda _
-                      ;; Some tests check the output of Bundler, and fail when
-                      ;; Bundler warns that /homeless-shelter does not exist.
-                      (setenv "HOME" "/tmp"))))))
-    (native-inputs
-     (list ruby-bump
-           ruby-cucumber
-           ruby-cuke-modeler
-           ruby-minitest
-           ruby-rake
-           ruby-rspec
-           ruby-spinach))
-    (propagated-inputs
-     (list ruby-parallel))
-    (synopsis "Run tests in parallel")
-    (description
-     "This package can speed up @code{Test::Unit}, @code{RSpec},
-@code{Cucumber}, and @code{Spinach} tests by running them concurrently
-across multiple CPU cores.")
-    (license license:expat)))
-
-(define-public ruby-parser
-  (package
-    (name "ruby-parser")
-    (version "3.3.7.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "parser" version))
-       (sha256
-        (base32
-         "16qi2qhpszm842awxghmsp64yvvawafq96w5jw98irz3f4bh2jbl"))))
-    (build-system ruby-build-system)
-    (arguments '(#:tests? #f))          ; tests not included in gem
-    (native-inputs (list bundler ruby-cliver ruby-simplecov))
-    (inputs (list ragel))
-    (propagated-inputs (list ruby-ast ruby-racc))
-    (synopsis "Ruby parser written in pure Ruby")
-    (description
-     "This package provides a Ruby parser written in pure Ruby.")
-    (home-page "https://github.com/whitequark/parser")
-    (license license:expat)))
-
-(define-public ruby-set
-  (package
-    (name "ruby-set")
-    (version "1.0.3")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "set" version))
-              (sha256
-               (base32
-                "07kc057nrkddrybqmlbmgf9x7nsmbc3ni6gy1z6xjx5b838vlj33"))))
-    (build-system ruby-build-system)
-    (synopsis
-     "Ruby class to deal with collections of unordered, unique values")
-    (description
-     "This package provides a class to deal with collections of unordered,
-unique values")
-    (home-page "https://github.com/ruby/set")
-    (license license:bsd-2)))
-
-(define-public ruby-sexp-processor
-  (package
-    (name "ruby-sexp-processor")
-    (version "4.17.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "sexp_processor" version))
-       (sha256
-        (base32
-         "0vzz9mhg4kkdqf179pm30i204h7iskanxrk53j0csf0qrrs4iajd"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list ruby-hoe
-           ruby-minitest
-           ruby-minitest-proveit))
-    (synopsis "ParseTree fork which includes generic S-exp processing tools")
-    (description "The sexp_processor package is derived from ParseTree, but
-contrary to ParseTree, it includes all the generic S-exp processing tools.
-Amongst the included tools are @code{Sexp}, @code{SexpProcessor} and
-@code{Environment}")
-    (home-page "https://github.com/seattlerb/sexp_processor")
-    (license license:expat)))
-
-(define-public ruby-ruby-parser
-  (package
-    (name "ruby-ruby-parser")
-    (version "3.20.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "ruby_parser" version))
-       (sha256
-        (base32
-         "0q851n8654wkjrq8jawq8vi5yhr1y9vpyr2vj7cnn3sa4ikg6d3z"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'patch
-            (lambda _
-              (substitute* "Rakefile"
-                (("`which bison`")
-                 (string-append "\"" (which "bison") "\""))
-                (("which unifdef")
-                 (which "unifdef"))))))))
-    (native-inputs
-     (list ruby-hoe
-           ruby-racc
-           unifdef
-           bison
-           ruby-minitest))
-    (propagated-inputs
-     (list ruby-sexp-processor))
-    (home-page "https://github.com/seattlerb/ruby_parser/")
-    (synopsis "Ruby parser written in pure Ruby")
-    (description "The ruby_parser (RP) package provides a Ruby parser written
-in pure Ruby.  It outputs S-expressions which can be manipulated and converted
-back to Ruby via the @code{ruby2ruby} library.")
-    (license license:expat)))
-
-(define-public ruby-ruby-version
-  (package
-    (name "ruby-ruby-version")
-    (version "1.0.2")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "ruby_version" version))
-              (sha256
-               (base32
-                "0lvc7bd5ps3w2vq2wb02i0pi3vfcx2rnckx2ix4rjym1qf52kb2j"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:phases
-           #~(modify-phases %standard-phases
-               (add-after 'extract-gemspec 'delete-gem-files
-                 ;; There are some pre-built files in the source, and
-                 ;; registered in the .gemspec (see:
-                 ;; https://github.com/janlelis/ruby_version/issues/1).
-                 (lambda _
-                   (delete-file-recursively "pkg")
-                   (substitute* "ruby_version.gemspec"
-                     (("\"pkg/ruby_version-1.0.0.gem\".freeze, ")
-                      "")
-                     (("\"pkg/ruby_version-1.0.1.gem\".freeze, ")
-                      ""))))
-               (add-after 'extract-gemspec 'relax-requirements
-                 (lambda _
-                   (delete-file "Gemfile.lock")
-                   (substitute* "ruby_version.gemspec"
-                     (("\"Gemfile.lock\".freeze, ") "")
-                     ;; Allow a newers versions of development dependencies.
-                     (("~>") ">=")))))))
-    (native-inputs (list ruby-rdoc ruby-rubygems-tasks ruby-rspec))
-    (synopsis "Ruby class for checking the Ruby version")
-    (description "This package provides a @code{RubyVersion} class which
-offers a convenient Domain Specific Language (DSL) for checking for the right
-Ruby version.")
-    (home-page "https://github.com/janlelis/ruby_version")
-    (license license:expat)))
-
-(define-public ruby-prawn-manual-builder
-  (package
-    (name "ruby-prawn-manual-builder")
-    (version "0.3.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "prawn-manual_builder" version))
-       (sha256
-        (base32 "1vlg5w7wq43g2hgpgra2nrcxj1kb4ayqliz4gmja2rhs037j2vzs"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f                      ; no included tests
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'extract-gemspec 'patch-gemspec
-           (lambda _
-             (substitute* ".gemspec"
-               ;; Loosen the requirement for pdf-inspector
-               (("~> 1\\.0\\.7") ">= 0")))))))
-    (propagated-inputs
-     (list ruby-coderay))
-    (synopsis "Tool for writing manuals for Prawn and Prawn accessories")
-    (description
-     "This package provides a tool for writing manuals for Prawn and Prawn
-accessories")
-    (home-page "https://github.com/prawnpdf/prawn-manual_builder")
-    (license %prawn-project-licenses)))
-
-(define-public ruby-progress_bar
-  (package
-    (name "ruby-progress_bar")
-    (version "1.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "progress_bar" version))
-       (sha256
-        (base32
-         "1qc40mr6p1z9a3vlpnsg1zfgk1qswviql2a31y63wpv3vr6b5f48"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:test-target "spec"))
-    (propagated-inputs
-     (list ruby-highline ruby-options))
-    (native-inputs
-     (list bundler ruby-rspec ruby-timecop))
-    (synopsis
-     "Ruby library for displaying progress bars")
-    (description
-     "ProgressBar is a simple library for displaying progress bars.  The
-maximum value is configurable, and additional information can be displayed
-like the percentage completion, estimated time remaining, elapsed time and
-rate.")
-    (home-page "https://github.com/paul/progress_bar")
-    (license license:wtfpl2)))
-
-(define-public ruby-progressbar
-  (package
-    (name "ruby-progressbar")
-    (version "1.10.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "ruby-progressbar" version))
-       (sha256
-        (base32 "1k77i0d4wsn23ggdd2msrcwfy0i376cglfqypkk2q77r2l3408zf"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(;; TODO: There looks to be a circular dependency with ruby-fuubar.
-       #:tests? #f))
-    (synopsis "Text progress bar library for Ruby")
-    (description
-     "Ruby/ProgressBar is an flexible text progress bar library for Ruby.
-The output can be customized with a formatting system.")
-    (home-page "https://github.com/jfelchner/ruby-progressbar")
-    (license license:expat)))
-
-(define-public ruby-latest-ruby
-  (package
-    (name "ruby-latest-ruby")
-    (version "3.1.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "latest_ruby" version))
-              (sha256
-               (base32
-                "15rqwgxzpnkzdiz8m02jra0zq5sx0fiz61vkfrj1ls6slqfhnzqg"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; No Rakefile
-    (synopsis "Answers the question of what the latest Ruby version is")
-    (description "Knows about MRI, Rubinius, JRuby, MagLev and MacRuby.")
-    (home-page "https://github.com/kyrylo/latest_ruby")
-    (license license:zlib)))
-
-(define-public ruby-pry
-  (package
-    (name "ruby-pry")
-    (version "0.14.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "pry" version))
-       (sha256
-        (base32
-         "0k9kqkd9nps1w1r1rb7wjr31hqzkka2bhi8b518x78dcxppm9zn4"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; no tests
-    (propagated-inputs
-     (list ruby-coderay ruby-method-source))
-    (synopsis "Ruby REPL")
-    (description "Pry is an IRB alternative and runtime developer console for
-Ruby.  It features syntax highlighting, a plugin architecture, runtime
-invocation, and source and documentation browsing.")
-    (home-page "https://cobaltbluemedia.com/pryrepl/")
-    (license license:expat)))
-
-(define-public ruby-pry-doc
-  (package
-    (name "ruby-pry-doc")
-    (version "1.4.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "pry-doc" version))
-              (sha256
-               (base32
-                "1pp43n69p6bjvc640wgcz295w1q2v9awcqgbwcqn082dbvq5xvnx"))))
-    (build-system ruby-build-system)
-    (propagated-inputs (list ruby-pry ruby-yard))
-    (native-inputs (list ruby-latest-ruby ruby-rspec ruby-rake)) ;for tests
-    (synopsis "Provides YARD and extended documentation support for Pry")
-    (description
-     "Pry Doc is a Pry REPL plugin.  It provides extended documentation
-support for the REPL by means of improving the @code{show-doc} and
-@code{show-source} commands.  With help of the plugin the commands are
-be able to display the source code and the docs of Ruby methods and
-classes implemented in C.")
-    (home-page "https://github.com/pry/pry-doc")
-    (license license:expat)))
-
-(define-public ruby-single-cov
-  (package
-    (name "ruby-single-cov")
-    (version "1.9.1")
-    (home-page "https://github.com/grosser/single_cov")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference (url home-page)
-                                  (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1w4k81f2mdg620m6pwkrqayddnz9mr8qx0myqn33mw8k6imfip05"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:test-target "spec"             ;to avoid rubocop requirement
-       #:phases (modify-phases %standard-phases
-                  (replace 'replace-git-ls-files
-                    (lambda _
-                      (substitute* "single_cov.gemspec"
-                        (("`git ls-files lib/ bin/ MIT-LICENSE`")
-                         ;; There no longer appear to be a 'bin'
-                         ;; sub-directory.
-                         "`find lib/ MIT-LICENSE -type f | sort`"))))
-                  (add-before 'check 'remove-version-constraints
-                    (lambda _
-                      (delete-file "Gemfile.lock")))
-                  (add-before 'check 'relax-requirements
-                    (lambda _
-                      ;; Remove extraneous requirements.
-                      (substitute* "Rakefile"
-                        ((".*require.*bump.*") ""))
-                      (substitute* "Gemfile"
-                        ((".*gem \"bump\".*") "")
-                        ((".*gem \"rubocop\".*") ""))))
-                  (add-before 'check 'disable-failing-test
-                    (lambda _
-                      ;; XXX: This test copies assets from minitest, but can
-                      ;; not cope with the files being read-only.  Just skip
-                      ;; it for now.
-                      (substitute* "specs/single_cov_spec.rb"
-                        (("it \"complains when coverage is bad\"")
-                         "xit \"complains when coverage is bad\"")))))))
-    (native-inputs (list ruby-minitest ruby-rspec ruby-simplecov))
-    (synopsis "Code coverage reporting tool")
-    (description
-     "This package provides actionable code coverage reports for Ruby
-projects.  It has very little overhead and can be easily integrated with
-development tools to catch coverage problems early.")
-    (license license:expat)))
-
-(define-public ruby-oedipus-lex
-  (package
-    (name "ruby-oedipus-lex")
-    (version "2.6.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "oedipus_lex" version))
-       (sha256
-        (base32
-         "06l4d3l75vhdcmnavnkzr7bd39rb0njxhkbmwrw6ni64z2hlj7w7"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list ruby-hoe
-           ruby-minitest))
-    (synopsis "Ruby lexer")
-    (description
-     "Oedipus Lex is a lexer generator in the same family as Rexical and Rex.
-It is based primarily on generating code much like you would a hand-written
-lexer.  It uses StrScanner within a multi-level case statement.  As such,
-Oedipus matches on the first match, not the longest.")
-    (home-page "https://github.com/seattlerb/oedipus_lex")
-    (license license:expat)))
-
-(define-public ruby-guard
-  (package
-    (name "ruby-guard")
-    (version "2.13.0")
-    (source (origin
-              (method git-fetch)
-              ;; The gem does not include a Rakefile, nor does it contain a
-              ;; gemspec file, nor does it come with the tests.  This is why
-              ;; we fetch the tarball from Github.
-              (uri (git-reference
-                     (url "https://github.com/guard/guard")
-                     (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "16pxcszr0g2jnl3090didxh1d8z5m2mly14m3w4rspb8fmclsnjs"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:tests? #f ; tests require cucumber
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'remove-git-ls-files
-          (lambda* (#:key outputs #:allow-other-keys)
-            (substitute* "guard.gemspec"
-              (("git ls-files -z") "find . -type f -print0"))))
-         (replace 'build
-          (lambda _
-            (invoke "gem" "build" "guard.gemspec"))))))
-    (propagated-inputs
-     (list ruby-formatador
-           ruby-listen
-           ruby-lumberjack
-           ruby-nenv
-           ruby-notiffany
-           ruby-pry
-           ruby-shellany
-           ruby-thor))
-    (native-inputs
-     (list bundler ruby-rspec))
-    (synopsis "Tool to handle events on file system modifications")
-    (description
-     "Guard is a command line tool to easily handle events on file system
-modifications.  Guard automates various tasks by running custom rules whenever
-file or directories are modified.")
-    (home-page "https://guardgem.org/")
-    (license license:expat)))
-
-(define-public ruby-spinach
-  (package
-    (name "ruby-spinach")
-    (version "0.12.0")
-    (home-page "https://github.com/codegram/spinach")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "spinach" version))
-              (sha256
-               (base32
-                "1v9nvpvlgjx698dc4q2p1l45sxm5fjjzfxayrkyzb9nv0q0xfjsp"))))
-    (build-system ruby-build-system)
-    (arguments
-       ;; FIXME: Disable tests altogether because they depend on 'capybara'
-       ;; which in turn depends on many other unpackaged gems.  Enable once
-       ;; capybara is available.
-       '(#:tests? #f))
-    (propagated-inputs
-     (list ruby-colorize ruby-gherkin-ruby))
-    (synopsis "Gherkin-based BDD framework")
-    (description
-     "Spinach is a high-level @acronym{BDD, Behavior-driven development}
-framework that leverages the expressive @code{Gherkin} language to help you
-define executable specifications of your code.")
-    (license license:expat)))
-
-(define-public ruby-timers
-  (package
-    (name "ruby-timers")
-    (version "4.3.5")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/socketry/timers")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1vvahlhk6i1xks1bsha6s64pjjxhagmzvvf1q9h6z3lpcba43rpx"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:phases
-           #~(modify-phases %standard-phases
-               (add-before 'build 'prune-gems.rb
-                 (lambda _
-                   (substitute* "gems.rb"
-                     ;; These are only required for maintenance.
-                     ((".*gem \"bake-modernize\".*") "")
-                     ((".*gem \"bake-gem\".*") "")
-                     ;; Not actually required by the tests.
-                     ((".*gem 'benchmark-ips'.*") "")
-                     ((".*gem \"ruby-prof\".*") ""))))
-               (add-before 'build 'remove-missing-signing-key
-                 (lambda _
-                   ;; Otherwise, the build fails with ENOENT.
-                   (substitute* "timers.gemspec"
-                     ((".*spec.signing_key.*") ""))))
-               (replace 'check
-                 (lambda* (#:key tests? #:allow-other-keys)
-                   (when tests?
-                     (invoke "bake" "test")))))))
-    (native-inputs
-     (list ruby-covered
-           ruby-bake-test
-           ruby-bake-test-external
-           ruby-sus))
-    (synopsis "Collection of Ruby timer classes")
-    (description "Timers offers a collections of one-shot and periodic timers,
-intended for use with event loops such as async.")
-    (home-page "https://github.com/socketry/timers")
-    (license license:expat)))
-
-(define-public ruby-tilt
-  (package
-    (name "ruby-tilt")
-    (version "2.2.0")
-    (source
-     (origin
-       (method git-fetch)               ;the distributed gem lacks tests
-       (uri (git-reference
-             (url "https://github.com/jeremyevans/tilt")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "056zm4vzx9xjwl7zgmb17hzb91qx5cvzk60wvsxchfybvl03gn5d"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-before 'check 'set-SASS_IMPLEMENTATION
-            (lambda _
-              (setenv "SASS_IMPLEMENTATION" "sassc"))))))
-    (propagated-inputs
-     (list ruby-pandoc-ruby ruby-sassc))
-    (native-inputs
-     (list bundler ruby-yard ruby-builder ruby-erubis ruby-markaby))
-    (synopsis "Generic interface to multiple Ruby template engines")
-    (description
-     "Tilt is a thin interface over a number of different Ruby template
-engines in an attempt to make their usage as generic as possible.")
-    (home-page "https://github.com/rtomayko/tilt/")
-    (license license:expat)))
-
-(define-public ruby-thread-safe
-  (package
-    (name "ruby-thread-safe")
-    (version "0.3.6")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "thread_safe" version))
-       (sha256
-        (base32
-         "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; needs simplecov, among others
-    (synopsis "Thread-safe utilities for Ruby")
-    (description "The thread_safe library provides thread-safe collections and
-utilities for Ruby.")
-    (home-page "https://github.com/ruby-concurrency/thread_safe")
-    (license license:asl2.0)))
-
-(define-public ruby-tzinfo
-  (package
-    (name "ruby-tzinfo")
-    (version "2.0.6")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-              ;; Pull from git because the gem has no tests.
-              (url "https://github.com/tzinfo/tzinfo")
-              (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "1n1gzjqwwnx209h8d054miva0y7x17db2ahy7jav5r25ibhh7rgm"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'skip-safe-tests
-            (lambda _
-              (substitute* "test/test_utils.rb"
-                (("def safe_test\\(options = \\{\\}\\)")
-                 "def safe_test(options = {})
-      skip('The Guix build environment has an unsafe load path')"))))
-          (add-before 'check 'pre-check
-            (lambda _
-              (setenv "HOME" (getcwd))
-              (substitute* "Gemfile"
-                (("simplecov.*") "simplecov'\n"))))
-          (replace 'check
-            (lambda* (#:key tests? test-target #:allow-other-keys)
-              (when tests?
-                (invoke "bundler" "exec" "rake" test-target)))))))
-    (propagated-inputs
-     (list ruby-concurrent))
-    (native-inputs
-     (list ruby-simplecov))
-    (synopsis "Time zone library for Ruby")
-    (description "TZInfo is a Ruby library that provides daylight savings
-aware transformations between times in different time zones.")
-    (home-page "https://tzinfo.github.io")
-    (license license:expat)))
-
-(define-public ruby-tzinfo-data
-  (package
-    (name "ruby-tzinfo-data")
-    (version "1.2023.3")
-    (source
-     (origin
-       (method git-fetch)
-       ;; Download from GitHub because the rubygems version does not contain
-       ;; Rakefile or tests.
-       (uri (git-reference
-              (url "https://github.com/tzinfo/tzinfo-data")
-              (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "1v3fpfmw485lsc9bfqfcasb9j25g9ywfpmmk648l2vdsh7nipilf"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'patch-source
-            (lambda* (#:key inputs #:allow-other-keys)
-              (substitute* "Rakefile"
-                (("URI\\.parse\\(url\\)\\.open")
-                 "URI.open(url)")
-                (("https://data.iana.org/time-zones/releases")
-                 (assoc-ref inputs "tzdata")))))
-          (add-before 'check 'pre-check
-            (lambda _
-              (setenv "HOME" (getcwd))
-              (substitute* "Rakefile"
-                ;; Don't need gpg, and it may break after a time.
-                (("gpg ") "echo ")
-                (("    sh\\(\\\"make -C" text)
-                 (string-append "    sh(\"sed -i 's@/bin/sh@sh@' #{tzdb_combined_path}/Makefile \")\n"
-                                "    sh(\"sed -i 's@cc=@cc?=@' #{tzdb_combined_path}/Makefile \")\n" text)))
-              (setenv "cc" #$(cc-for-target)))))))
-    (propagated-inputs
-     (list ruby-tzinfo))
-    (native-inputs
-     `(("tzdata"
-        ,(file-union "tzdata-for-ruby-tzdata-info"
-           `(("tzdata2023c.tar.gz"
-              ,(origin
-                 (method url-fetch)
-                 (uri "https://data.iana.org/time-zones/releases/tzdata2023c.tar.gz")
-                 (sha256
-                  (base32
-                   "0p4nvp5bdxxdqh269nvvcfrpycbbfwm31al5whwbpsaa3dfhnl9z"))))
-             ("tzdata2023c.tar.gz.asc"
-              ,(origin
-                 (method url-fetch)
-                 (uri "https://data.iana.org/time-zones/releases/tzdata2023c.tar.gz.asc")
-                 (sha256
-                  (base32
-                   "0mrmhczs5qnj1zp6gh4pg6fm0iblr2jmzy0fgh9slinwxmn7pv6m"))))
-             ("tzcode2023c.tar.gz"
-              ,(origin
-                 (method url-fetch)
-                 (uri "https://data.iana.org/time-zones/releases/tzcode2023c.tar.gz")
-                 (sha256
-                  (base32
-                   "1rqln88ki0jagi372nqyn7bs03rf2l33081sy2835mwsn4mpzla6"))))
-             ("tzcode2023c.tar.gz.asc"
-              ,(origin
-                 (method url-fetch)
-                 (uri "https://data.iana.org/time-zones/releases/tzcode2023c.tar.gz.asc")
-                 (sha256
-                  (base32
-                   "0jbx8xjv75qfh7bxa2xmrf97r37057y89rhmrq1gz8s6b8qlzb2i")))))))))
-    (synopsis "Data from the IANA Time Zone database")
-    (description
-     "This library provides @code{TZInfo::Data}, which contains data from the
-IANA Time Zone database packaged as Ruby modules for use with @code{TZInfo}.")
-    (home-page "https://tzinfo.github.io")
-    (license license:expat)))
-
-(define-public ruby-rb-inotify
-  (package
-    (name "ruby-rb-inotify")
-    (version "0.10.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "rb-inotify" version))
-       (sha256
-        (base32
-         "1jm76h8f8hji38z3ggf4bzi8vps6p7sagxn3ab57qc0xyga64005"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:tests? #f ; there are no tests
-      #:phases
-      #~(modify-phases %standard-phases
-          ;; Building the gemspec with rake is not working here since it is
-          ;; generated with Jeweler.  It is also unnecessary because the
-          ;; existing gemspec does not use any development tools to generate a
-          ;; list of files.
-          (replace 'build
-            (lambda _
-              (invoke "gem" "build" "rb-inotify.gemspec"))))))
-    (propagated-inputs
-     (list ruby-ffi))
-    (native-inputs
-     (list ruby-yard))
-    (synopsis "Ruby wrapper for Linux's inotify")
-    (description "rb-inotify is a simple wrapper over the @code{inotify} Linux
-kernel subsystem for monitoring changes to files and directories.")
-    (home-page "https://github.com/nex3/rb-inotify")
-    (license license:expat)))
-
-(define-public ruby-pry-editline
-  (package
-    (name "ruby-pry-editline")
-    (version "1.1.2")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "pry-editline" version))
-              (sha256
-               (base32
-                "1pjxyvdxvw41xw3yyl18pwzix8hbvn6lgics7qcfhjfsf1zs8x1z"))))
-    (build-system ruby-build-system)
-    (arguments `(#:tests? #f)) ; no tests included
-    (native-inputs
-     (list bundler))
-    (synopsis "Open the current REPL line in an editor")
-    (description
-     "This gem provides a plugin for the Ruby REPL to enable opening the
-current line in an external editor.")
-    (home-page "https://github.com/tpope/pry-editline")
-    (license license:expat)))
-
-(define-public ruby-sdoc
-  (package
-    (name "ruby-sdoc")
-    (version "1.1.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "sdoc" version))
-              (sha256
-               (base32
-                "1am73dldx1fqlw2xny5vyk00pgkisg6bvs0pa8jjd7c19drjczrd"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'check 'set-rubylib-and-patch-gemfile
-          (lambda _
-            (setenv "RUBYLIB" "lib")
-            (substitute* "sdoc.gemspec"
-              (("s.add_runtime_dependency.*") "\n")
-              (("s.add_dependency.*") "\n"))
-            (substitute* "Gemfile"
-              (("gem \"rake\".*")
-               "gem 'rake'\ngem 'rdoc'\ngem 'json'\n")))))))
-    (propagated-inputs
-     (list ruby-json))
-    (native-inputs
-     (list bundler ruby-minitest ruby-hoe))
-    (synopsis "Generate searchable RDoc documentation")
-    (description
-     "SDoc is an RDoc documentation generator to build searchable HTML
-documentation for Ruby code.")
-    (home-page "https://github.com/voloko/sdoc")
-    (license license:expat)))
-
-(define-public ruby-tins
-  (package
-    (name "ruby-tins")
-    (version "1.29.1")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "tins" version))
-              (sha256
-               (base32
-                "0nzp88y19rqlcizp1nw8m44fvfxs9g3bhjpscz44dwfawfrmr0cb"))))
-    (build-system ruby-build-system)
-    ;; This gem needs gem-hadar at development time, but gem-hadar needs tins
-    ;; at runtime.  To avoid the dependency on gem-hadar we disable rebuilding
-    ;; the gemspec.
-    (arguments
-     `(#:tests? #f ; there are no tests
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'build
-          (lambda _
-            ;; "lib/spruz" is a symlink.  Leaving it in the gemspec file
-            ;; causes an error.
-            (substitute* "tins.gemspec"
-              (("\"lib/spruz\", ") ""))
-            (invoke "gem" "build" "tins.gemspec"))))))
-    (propagated-inputs
-     (list ruby-sync))
-    (synopsis "Assorted tools for Ruby")
-    (description "Tins is a Ruby library providing assorted tools.")
-    (home-page "https://github.com/flori/tins")
-    (license license:expat)))
-
-(define-public ruby-gemtext
-  (package
-    (name "ruby-gemtext")
-    (version "1.0.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "gemtext" version))
-       (sha256
-        (base32 "1z559f5z0zvwnqgnny0zf4mppiary020ljxwpw3bdxi2hr9aj3gp"))))
-    (build-system ruby-build-system)
-    (synopsis "Gemtext parser for Ruby")
-    (description
-     "This package is a Ruby parser library for Gemtext (hypertext format
-which is intended to serve as the native response format of the Gemini
-file transfer protocol) and produces a document object of various
-nodes.")
-    (home-page "https://github.com/exastencil/gemtext")
-    (license license:expat)))
-
-(define-public ruby-gem-hadar
-  (package
-    (name "ruby-gem-hadar")
-    (version "1.11.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "gem_hadar" version))
-              (sha256
-               (base32
-                "160abb3l4n3gkhd86f22n981bhqxkbf5ym6fhsk796pix6696pd5"))))
-    (build-system ruby-build-system)
-    ;; This gem needs itself at development time. We disable rebuilding of the
-    ;; gemspec to avoid this loop.
-    (arguments
-     `(#:tests? #f ; there are no tests
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'build
-          (lambda _
-            (invoke "gem" "build" "gem_hadar.gemspec"))))))
-    (propagated-inputs
-     (list git-minimal/pinned ruby-tins ruby-yard))
-    (synopsis "Library for the development of Ruby gems")
-    (description
-     "This library contains some useful functionality to support the
-development of Ruby gems.")
-    (home-page "https://github.com/flori/gem_hadar")
-    (license license:expat)))
-
-(define-public ruby-term-ansicolor
-  (package
-    (name "ruby-term-ansicolor")
-    (version "1.7.1")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "term-ansicolor" version))
-              (sha256
-               (base32
-                "1xq5kci9215skdh27npyd3y55p812v4qb4x2hv3xsjvwqzz9ycwj"))))
-    (build-system ruby-build-system)
-    ;; Rebuilding the gemspec seems to require git, even though this is not a
-    ;; git repository, so we just build the gem from the existing gemspec.
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'fix-test
-            (lambda -
-              (substitute* "tests/hsl_triple_test.rb"
-                (("0\\\\\\.0%")
-                 "0\\.?0?%"))))
-          (replace 'build
-            (lambda _
-              (invoke "gem" "build" "term-ansicolor.gemspec"))))))
-    (propagated-inputs
-     (list ruby-tins))
-    (native-inputs
-     (list ruby-gem-hadar))
-    (synopsis "Ruby library to control the attributes of terminal output")
-    (description
-     "This Ruby library uses ANSI escape sequences to control the attributes
-of terminal output.")
-    (home-page "https://flori.github.io/term-ansicolor/")
-    ;; There is no mention of the "or later" clause.
-    (license license:gpl2)))
-
-(define-public ruby-immutable-struct
-  (let ((commit "bb67ad8fa2117e8031c3f4333b4c25c8bcd3afff")
-        (revision "0"))
-    (package
-      (name "ruby-immutable-struct")
-      (version (git-version "2.4.1" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/stitchfix/immutable-struct")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32
-           "0vsr2spypjf0i7ppg2a0gj3mjj5k3dyqsx224cbsxw51p6cc11c1"))))
-      (build-system ruby-build-system)
-      (arguments
-       (list
-        #:phases
-        #~(modify-phases %standard-phases
-            (replace 'check
-              (lambda* (#:key tests? #:allow-other-keys)
-                (when tests?
-                  (invoke "ruby" (which "rspec"))))))))
-      (native-inputs
-       (list ruby-rspec))
-      (synopsis "Ruby library for creating immutable struct classes")
-      (description
-       "This package provides a library to help create value objects without
-the pain of Ruby's Struct (or its setters).")
-      (home-page "https://stitchfix.github.io/immutable-struct/")
-      (license license:expat))))
-
-(define-public ruby-faker
-  (package
-    (name "ruby-faker")
-    (version "3.2.0")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/faker-ruby/faker")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "1wwdwh5qwaxnd9dl6732mj6b953l5r32r4936pj5680963iagq59"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'remove-rubocop-from-rakefile
-            (lambda _
-              (substitute* "Rakefile"
-                (("require 'rubocop/rake_task'") "")
-                (("RuboCop::RakeTask\\.new") "")))))))
-    (native-inputs (list ruby-yard ruby-simplecov ruby-timecop))
-    (propagated-inputs (list ruby-i18n))
-    (synopsis "Library for generating fake data")
-    (description "Faker is a port of Data::Faker from Perl. It is used to
-easily generate fake data: names, addresses, phone numbers, etc.")
-    (home-page "https://github.com/faker-ruby/faker")
-    (license license:expat)))
-
-(define-public ruby-terraform
-  (package
-  (name "ruby-terraform")
-  (version "1.7.0")
-  (source
-   (origin
-     (method git-fetch)
-     (uri (git-reference
-           (url "https://github.com/infrablocks/ruby_terraform")
-           (commit (string-append "v" version))))
-     (file-name (git-file-name name version))
-     (sha256
-      (base32
-       "18d1qkf2rbbvc2f0dxni85i2l2g8zn5kzh0v8zr1b86r1wjy6rvd"))))
-  (build-system ruby-build-system)
-  (arguments
-   (list
-    #:test-target "spec"
-    #:phases
-    #~(modify-phases %standard-phases
-        (add-after 'unpack 'disable-bundler
-          (lambda _
-            (substitute* "spec/spec_helper.rb"
-              (("require 'bundler/setup'") ""))))
-        (add-before 'check 'disable-falinig-tests
-          (lambda _
-            (substitute* "spec/ruby_terraform/commands/plan_spec.rb"
-              (("it 'logs an error raised when running the command'")
-               "xit 'logs an error raised when running the command'")
-              (("it 'raises execution error when an error occurs running the command'")
-               "xit 'raises execution error when an error occurs running the command'"))))
-        (replace 'check
-          (lambda* (#:key tests? #:allow-other-keys)
-            (when tests?
-              (invoke "rspec")))))))
-  (native-inputs
-   (list ruby-rspec
-         ruby-faker
-         ruby-simplecov))
-  (propagated-inputs
-   (list ruby-lino ruby-immutable-struct))
-  (synopsis "Ruby wrapper around the Terraform command line interface")
-  (description
-   "This package provides a Ruby wrapper around the Terraform command line
-interface so that Terraform can be more easily invoked from Ruby code.")
-  (home-page "https://github.com/infrablocks/ruby_terraform")
-  (license license:expat)))
-
-(define-public ruby-pstree
-  (package
-    (name "ruby-pstree")
-    (version "0.3.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "pstree" version))
-              (sha256
-               (base32
-                "0ld3ng37y92kv9vqnachw1l3n07hsc8hrnjs9d840liw0mysf1vp"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list ruby-gem-hadar bundler))
-    (synopsis "Create a process tree data structure")
-    (description
-     "This library uses the output of the @code{ps} command to create a
-process tree data structure for the current host.")
-    (home-page "https://github.com/flori/pstree")
-    ;; There is no mention of the "or later" clause.
-    (license license:gpl2)))
-
-(define-public ruby-psych
-  (package
-    (name "ruby-psych")
-    (version "5.1.0")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/ruby/psych")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0m3668y79jcv2h9p7w74awwdyz13rpfr24w4nzh3iz96kxwssz83"))))
-    (build-system ruby-build-system)
-    (inputs
-     (list libyaml))
-    (native-inputs
-     (list ruby-rake-compiler))
-    (synopsis "Ruby YAML parser and emitter")
-    (description
-     "Psych is a YAML parser and emitter.  Psych leverages libyaml for its
-YAML parsing and emitting capabilities.  In addition to wrapping libyaml,
-Psych also knows how to serialize and de-serialize most Ruby objects to and
-from the YAML format.")
-    (home-page "https://github.com/ruby/psych")
-    (license license:expat)))
-
-(define-public ruby-psych-3
-  (package
-    (inherit ruby-psych)
-    (version "3.3.4")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/ruby/psych")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name "ruby-psych" version))
-              (sha256
-               (base32
-                "11f7bxbhaj5697izap7hfbiln6lfk5cks78a498mkyhs2ylhl0fc"))))
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (replace 'check
-            (lambda* (#:key tests? #:allow-other-keys)
-              (when tests?
-                (invoke "bundle" "exec" "rake" "default")))))))))
-
-(define-public ruby-utils
-  (package
-    (name "ruby-utils")
-    (version "0.9.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "utils" version))
-              (sha256
-               (base32
-                "196zhgcygrnx09bb9mh22qas03rl9avzx8qs0wnxznpin4pffwcl"))))
-    (build-system ruby-build-system)
-    (propagated-inputs
-     (list ruby-tins ruby-term-ansicolor ruby-pstree ruby-pry-editline))
-    (native-inputs
-     (list ruby-gem-hadar bundler))
-    (synopsis "Command line tools for working with Ruby")
-    (description
-     "This package provides assorted command line tools that may be useful
-when working with Ruby code.")
-    (home-page "https://github.com/flori/utils")
-    ;; There is no mention of the "or later" clause.
-    (license license:gpl2)))
-
-(define-public ruby-jaro-winkler
-  (package
-    (name "ruby-jaro-winkler")
-    (version "1.5.4")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "jaro_winkler" version))
-       (sha256
-        (base32 "1y8l6k34svmdyqxya3iahpwbpvmn3fswhwsvrz0nk1wyb8yfihsh"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f))                    ; no included tests
-    (synopsis "Ruby implementation of Jaro-Winkler distance algorithm")
-    (description
-     "@code{jaro_winkler} is an implementation of Jaro-Winkler distance
-algorithm.  It is written as a C extension and will fallback to a pure Ruby
-implementation on platforms where this is unsupported.")
-    (home-page "https://github.com/tonytonyjan/jaro_winkler")
-    (license license:expat)))
-
-(define-public ruby-json
-  (package
-    (name "ruby-json")
-    (version "2.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "json" version))
-       (sha256
-        (base32
-         "01v6jjpvh3gnq6sgllpfqahlgxzj50ailwhj9b3cd20hi2dx0vxp"))))
-    (build-system ruby-build-system)
-    (arguments '(#:tests? #f)) ; dependency cycle with sdoc
-    (synopsis "JSON library for Ruby")
-    (description "This Ruby library provides a JSON implementation written as
-a native C extension.")
-    (home-page "http://json-jruby.rubyforge.org/")
-    (license (list license:ruby license:gpl2)))) ; GPL2 only
-
-(define-public ruby-json-pure
-  (package
-    (name "ruby-json-pure")
-    (version "2.6.3")
-    (source
-     (origin
-       ;; For tests
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/flori/json.git")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "0551269c98a07m6bl594syh5vknrm3c636a4dxis9jpsb7vf7lfx"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'fix-rakefile
-            (lambda _
-              (substitute* "Rakefile"
-                ;; Since this is not a git repository, do not call 'git'.
-                (("`git ls-files`") "`find . -type f |sort`")))))))
-    (native-inputs
-     (list bundler ragel ruby-simplecov ruby-test-unit which))
-    (synopsis "JSON implementation in pure Ruby")
-    (description
-     "This package provides a JSON implementation written in pure Ruby.")
-    (home-page "https://flori.github.io/json/")
-    (license license:ruby)))
-
-(define-public ruby-jwt
-  (package
-    (name "ruby-jwt")
-    (version "2.7.1")
-    (source
-     (origin
-       ;; For tests
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/jwt/ruby-jwt")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "12ss6knfis6a6a41qndalnlvq3yykhpg6igzll8qyssnnwi9zdw7"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:test-target "test"
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'remove-unnecessary-dependencies
-            (lambda _
-              (substitute* "ruby-jwt.gemspec"
-                (("spec\\.add_development_dependency 'appraisal'") "")
-                (("spec\\.add_development_dependency 'simplecov'") ""))
-              (substitute* "Gemfile"
-                (("gem 'rubocop'.*") ""))
-              (substitute* "Rakefile"
-                (("require 'rubocop/rake_task'") "")
-                (("RuboCop::RakeTask\\.new\\(:rubocop\\)") ""))
-              (substitute* "spec/spec_helper.rb"
-                (("require 'simplecov.*") "\n")
-                ;; Use [].each to disable running the SimpleCov configuration
-                ;; block
-                (("SimpleCov\\.configure") "[].each")
-                (("require 'codeclimate-test-reporter'") "")
-                (("require 'codacy-coverage'") "")
-                (("Codacy::Reporter\\.start") "")))))))
-    (native-inputs
-     (list bundler ruby-rspec ruby-rbnacl))
-    (synopsis "Ruby implementation of the JSON Web Token standard")
-    (description
-     "This package provides a pure Ruby implementation of the RFC 7519 OAuth
-@acronym{JWT, JSON Web Token} standard.")
-    (home-page "https://github.com/jwt/ruby-jwt")
-    (license license:expat)))
-
-;; Even though this package only provides bindings for a Mac OSX API it is
-;; required by "ruby-listen" at runtime.
-(define-public ruby-rb-fsevent
-  (package
-    (name "ruby-rb-fsevent")
-    (version "0.10.3")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "rb-fsevent" version))
-              (sha256
-               (base32
-                "1lm1k7wpz69jx7jrc92w3ggczkjyjbfziq5mg62vjnxmzs383xx8"))))
-    (build-system ruby-build-system)
-    ;; Tests need "guard-rspec", which needs "guard".  However, "guard" needs
-    ;; "listen", which needs "rb-fsevent" at runtime.
-    (arguments `(#:tests? #f))
-    (synopsis "FSEvents API with signals catching")
-    (description
-     "This library provides Ruby bindings for the Mac OSX FSEvents API.")
-    (home-page "https://rubygems.org/gems/rb-fsevent")
-    (license license:expat)))
-
-(define-public ruby-listen
-  (package
-    (name "ruby-listen")
-    (version "3.8.0")
-    (source
-     (origin
-       ;; The gem does not include a Rakefile, so fetch from the Git
-       ;; repository.
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/guard/listen")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "1skkglml094dw1xr4742in1rwwa84ld0mz4nkw6qa8pwhx48x2n5"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:test-target "spec"
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'fix-files-in-gemspec
-            (lambda _
-              (substitute* "listen.gemspec"
-                (("`git ls-files -z`")
-                 "`find . -type f -printf '%P\\\\0' |sort -z`"))))
-          (add-before 'check 'remove-unnecessary-dependencies'
-            (lambda _
-              (substitute* "Rakefile"
-                ;; Rubocop is for code linting, and is unnecessary for running
-                ;; the tests.
-                ((".*rubocop.*") "")))))))
-    (native-inputs
-     (list bundler ruby-rspec))
-    (inputs
-     (list ;; ruby-thor is used for the command line interface, and is referenced
-           ;; in the wrapper, and therefore just needs to be an input.
-           ruby-thor))
-    (propagated-inputs
-     (list ruby-rb-fsevent ruby-rb-inotify))
-    (synopsis "Listen to file modifications")
-    (description "The Listen gem listens to file modifications and notifies
-you about the changes.")
-    (home-page "https://github.com/guard/listen")
-    (license license:expat)))
-
-(define-public ruby-loofah
-  (package
-    (name "ruby-loofah")
-    (version "2.21.3")
-    (home-page "https://github.com/flavorjones/loofah")
-    (source
-     (origin
-       ;; Build from git because the gem lacks tests.
-       (method git-fetch)
-       (uri (git-reference (url home-page)
-                           (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "1lh7cf56y1b0h090ahphvz7grq581phsamdl0rq59y0q9bqwrhg0"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list ruby-hoe ruby-hoe-markdown ruby-rr))
-    (propagated-inputs
-     (list ruby-nokogiri ruby-crass))
-    (synopsis "Ruby library for manipulating and transforming HTML/XML")
-    (description
-     "Loofah is a general library for manipulating and transforming HTML/XML
-documents and fragments.  It's built on top of Nokogiri and libxml2.")
-    (license license:expat)))
-
-(define-public ruby-crass
-  (package
-    (name "ruby-crass")
-    (version "1.0.6")
-    (home-page "https://github.com/rgrove/crass")
-    (source (origin
-              ;; The gem does not contain tests, so pull from git.
-              (method git-fetch)
-              (uri (git-reference
-                    (url home-page)
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1gbsb81psgb6xhnwpx4s409jc0mk0gijh039sy5xyi8jpaaadp40"))))
-    (build-system ruby-build-system)
-    (synopsis "Pure Ruby CSS parser")
-    (description
-     "Crass is a pure Ruby CSS parser based on the CSS Syntax Level 3 spec.")
-    (license license:expat)))
-
-;;; The ruby-nokogumbo package has been absorbed into ruby-nokogiri.
-(define-public ruby-nokogumbo
-  (deprecated-package "ruby-nokogumbo" ruby-nokogiri))
-
-(define-public ruby-samovar
-  (package
-    (name "ruby-samovar")
-    (version "2.1.4")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/ioquatix/samovar")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "05pc5xlbv44anx0sfqssh0xhxg297bvl5slsl7k1vnka4k5fhax6"))))
-    (build-system ruby-build-system)
-    (native-inputs (list ruby-covered ruby-rspec))
-    (propagated-inputs (list ruby-console ruby-mapping))
-    (synopsis "Flexible option parser for Ruby")
-    (description "Samovar is a modern framework for building command-line
-tools and applications.  It provides a declarative class-based DSL for
-building command-line parsers that include automatic documentation generation.
-It helps you keep your functionality clean and isolated where possible.")
-    (home-page "https://github.com/ioquatix/samovar")
-    (license license:expat)))
-
-(define-public ruby-sanitize
-  (package
-    (name "ruby-sanitize")
-    (version "6.0.0")
-    (home-page "https://github.com/rgrove/sanitize")
-    (source (origin
-              (method git-fetch)
-              ;; The gem does not include the Rakefile, so we download the
-              ;; source from Github.
-              (uri (git-reference
-                    (url home-page)
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0p1a28vx95vscy9xzzyyddzgb9496x42a5i2ka39cpxbl5f3gkl0"))))
-    (build-system ruby-build-system)
-    (propagated-inputs (list ruby-crass ruby-nokogiri))
-    (native-inputs (list ruby-minitest))
-    (synopsis "Whitelist-based HTML and CSS sanitizer")
-    (description
-     "Sanitize is a whitelist-based HTML and CSS sanitizer.  Given a list of
-acceptable elements, attributes, and CSS properties, Sanitize will remove all
-unacceptable HTML and/or CSS from a string.")
-    (license license:expat)))
-
-(define-public ruby-sync
-  (package
-    (name "ruby-sync")
-    (version "0.5.0")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "sync" version))
-        (sha256
-         (base32
-          "1z9qlq4icyiv3hz1znvsq1wz2ccqjb1zwd6gkvnwg6n50z65d0v6"))))
-    (build-system ruby-build-system)
-    (synopsis "Ruby module with a two-phase lock and counter")
-    (description "This package provides a Ruby module that provides a two-phase
-lock with a counter.")
-    (home-page "https://github.com/ruby/sync")
-    (license license:bsd-2)))
-
-(define-public ruby-oj
-  (package
-    (name "ruby-oj")
-    (version "3.13.9")
-    (source
-     (origin
-       (method git-fetch)
-       ;; Version on rubygems.org does not contain Rakefile, so download from
-       ;; GitHub instead.
-       (uri (git-reference
-              (url "https://github.com/ohler55/oj")
-              (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "0a24zd28y58nyhjxgrpn2k9p72vzj3zbmdrcsbhwbdycj7nn9fpd"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:test-target "test_all"
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'check 'disable-bundler
-           (lambda _
-             (substitute* "Rakefile"
-               (("Bundler\\.with_clean_env") "1.times")
-               (("bundle exec ") "")))))))
-    (native-inputs
-     (list bundler ruby-rspec ruby-rake-compiler))
-    (synopsis "JSON parser for Ruby optimized for speed")
-    (description
-     "Oj is a JSON parser and generator for Ruby, where the encoding and
-decoding of JSON is implemented as a C extension to Ruby.")
-    (home-page "https://www.ohler.com/oj/")
-    (license (list license:expat     ; Ruby code
-                   license:bsd-3)))) ; extension code
-
-(define-public ruby-ox
-  (package
-    (name "ruby-ox")
-    (version "2.6.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "ox" version))
-       (sha256
-        (base32
-         "0fmk62b1h2i79dfzjj8wmf8qid1rv5nhwfc17l489ywnga91xl83"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; no tests
-    (synopsis "Optimized XML library for Ruby")
-    (description
-     "Optimized XML (Ox) is a fast XML parser and object serializer for Ruby
-written as a native C extension.  It was designed to be an alternative to
-Nokogiri and other Ruby XML parsers for generic XML parsing and as an
-alternative to Marshal for Object serialization.")
-    (home-page "https://www.ohler.com/ox")
-    (license license:expat)))
-
-(define-public ruby-redcloth
-  (package
-    (name "ruby-redcloth")
-    (version "4.3.2")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "RedCloth" version))
-              (sha256
-               (base32
-                "0m9dv7ya9q93r8x1pg2gi15rxlbck8m178j1fz7r5v6wr1avrrqy"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:tests? #f ; no tests
-       #:phases
-       (modify-phases %standard-phases
-         ;; Redcloth has complicated rake tasks to build various versions for
-         ;; multiple targets using RVM.  We don't want this so we just use the
-         ;; existing gemspec.
-         (replace 'build
-          (lambda _
-            (invoke "gem" "build" "redcloth.gemspec"))))))
-    (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-diff-lcs" ,ruby-diff-lcs)
-       ("ruby-rspec-2" ,ruby-rspec-2)))
-    (synopsis "Textile markup language parser for Ruby")
-    (description
-     "RedCloth is a Ruby parser for the Textile markup language.")
-    (home-page "http://redcloth.org")
-    (license license:expat)))
-
-(define-public ruby-pg
-  (let ((commit "378b7a35c12292625460ef2f33373de7114bf255")
-        (revision "0"))
-  (package
-    (name "ruby-pg")
-    (version (git-version "1.5.9" revision commit))
-    (home-page "https://github.com/ged/ruby-pg")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url home-page)
-             (commit commit)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "1aq6kakyghgbb4yykxxl9ziaaa7jbdbyc7vz6avyxhlby1jkj0m8"))
-       (patches
-        (search-patches "ruby-pg-fix-connect-timeout.patch"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:test-target "spec"
-      #:phases
-      #~(modify-phases %standard-phases
-               (add-before 'build 'compile
-                 (lambda _
-                   (invoke "rake" "compile")))
-               ;; Some tests rely on postgresql_lib_path.rb, but it is not
-               ;; available until the gem is installed.  Run tests after
-               ;; installing to work around it.
-               (delete 'check)
-               (add-after 'install 'check
-                 (lambda* (#:key tests? #:allow-other-keys)
-                   (let ((new-gem (string-append #$output
-                                                 "/lib/ruby/vendor_ruby")))
-                     (setenv "GEM_PATH"
-                             (string-append (getenv "GEM_PATH") ":" new-gem))
-                     (when tests?
-                       (invoke "rspec"))))))))
-    (native-inputs (list ruby-rake-compiler ruby-hoe ruby-rspec))
-    (inputs (list postgresql))
-    (synopsis "Ruby interface to PostgreSQL")
-    (description "Pg is the Ruby interface to the PostgreSQL RDBMS.  It works
-with PostgreSQL 9.3 and later.")
-    (license license:ruby))))
-
-(define-public ruby-byebug
-  (package
-    (name "ruby-byebug")
-    (version "11.1.3")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/deivid-rodriguez/byebug")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "0vyy3k2s7dcndngj6m8kxhs1vxc2c93dw8b3yyand3srsg9ffpij"))
-       (modules '((guix build utils)))
-       (snippet
-        '(begin
-           ;; Remove wrappers that try to setup a bundle environment.
-           (with-directory-excursion "bin"
-             (for-each delete-file '("bundle" "rake" "rubocop"))
-             ;; ruby-minitest doesn't come with a launcher, so fix the one
-             ;; provided.
-             (substitute* "minitest"
-               (("load File\\.expand_path\\(\"bundle\".*") "")
-               (("require \"bundler/setup\".*") "")))))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'sanitize-dependencies
-            (lambda _
-              (substitute* "Rakefile"
-                ((".*chandler/tasks.*") ""))))
-          (add-after 'unpack 'skip-tmp-path-sensitive-test
-            (lambda _
-              (substitute* "test/commands/where_test.rb"
-                (("unless /cygwin\\|mswin\\|mingw\\|darwin/.*")
-                 "unless true\n"))))
-          (add-before 'build 'compile
-            (lambda _
-              (invoke "rake" "compile")))
-          (add-before 'check 'patch-tests
-            (lambda _
-              ;; srand': no implicit conversion of nil into Integer (TypeError)
-              (delete-file "test/minitest_runner_test.rb")
-              ;; Expects 5, gets 162. From a file containing ~10 lines.
-              (substitute* "test/commands/finish_test.rb"
-                (("test_finish_inside_autoloaded_files")
-                 "finish_inside_autoloaded_files"))))
-          (add-before 'check 'set-home
-            (lambda _
-              (setenv "HOME" (getcwd)))))))
-    (native-inputs
-     (list bundler
-           ruby-minitest
-           ruby-pry
-           ruby-rake-compiler
-           ruby-rubocop
-           ruby-yard))
-    (synopsis "Debugger for Ruby 2")
-    (description "Byebug is a Ruby 2 debugger implemented using the Ruby 2
-TracePoint C API for execution control and the Debug Inspector C API for call
-stack navigation.  The core component provides support that front-ends can
-build on.  It provides breakpoint handling and bindings for stack frames among
-other things and it comes with a command line interface.")
-    (home-page "https://github.com/deivid-rodriguez/byebug")
-    (license license:bsd-2)))
-
-(define-public ruby-netrc
-  (package
-    (name "ruby-netrc")
-    (version "0.11.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "netrc" version))
-              (sha256
-               (base32
-                "0gzfmcywp1da8nzfqsql2zqi648mfnx6qwkig3cv36n9m0yy676y"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           ;; There is no Rakefile and minitest can only run one file at once,
-           ;; so we have to iterate over all test files.
-           (lambda _
-             (for-each (lambda (file)
-                         (invoke "ruby" "-Itest" file))
-                       (find-files "./test" "test_.*\\.rb"))))
-         (add-before 'check 'patch-tests-for-newer-ruby
-           (lambda _
-             (substitute* "test/test_netrc.rb"
-               (("Dir.pwd, '.netrc'") "Netrc.home_path, '.netrc'")))))))
-    (native-inputs
-     (list ruby-minitest))
-    (synopsis "Library to read and update netrc files")
-    (description
-     "This library can read and update netrc files, preserving formatting
-including comments and whitespace.")
-    (home-page "https://github.com/geemus/netrc")
-    (license license:expat)))
-
-(define-public ruby-unf-ext
-  (package
-    (name "ruby-unf-ext")
-    (version "0.0.8.2")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "unf_ext" version))
-              (sha256
-               (base32
-                "1yj2nz2l101vr1x9w2k83a0fag1xgnmjwp8w8rw4ik2rwcz65fch"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'build 'build-ext
-           (lambda _ (invoke "rake" "compile:unf_ext")))
-         (add-before 'check 'lose-rake-compiler-dock-dependency
-           (lambda _
-             ;; rake-compiler-dock is listed in the gemspec, but only
-             ;; required when cross-compiling.
-             (substitute* "unf_ext.gemspec"
-               ((".*rake-compiler-dock.*") "")))))))
-    (native-inputs
-     (list bundler ruby-rake-compiler ruby-test-unit))
-    (synopsis "Unicode normalization form support library")
-    (description
-     "This package provides unicode normalization form support for Ruby.")
-    (home-page "https://github.com/knu/ruby-unf_ext")
-    (license license:expat)))
-
-(define-public ruby-tdiff
-  ;; Use a newer than released snapshot so that rspec-2 is not required.
-  (let ((commit "b662a6048f08abc45c1a834e5f34dd1c662935e2"))
-    (package
-      (name "ruby-tdiff")
-      (version (string-append "0.3.3-1." (string-take commit 8)))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/postmodern/tdiff")
-                      (commit commit)))
-                (file-name (string-append name "-" version "-checkout"))
-                (sha256
-                 (base32
-                  "0n3gq8rx49f7ln6zqlshqfg2mgqyy30rsdjlnki5mv307ykc7ad4"))))
-      (build-system ruby-build-system)
-      (native-inputs
-       (list ruby-rspec ruby-yard/minimal ruby-rubygems-tasks))
-      (synopsis "Calculate the differences between two tree-like structures")
-      (description
-       "This library provides functions to calculate the differences between two
-tree-like structures.  It is similar to Ruby's built-in @code{TSort} module.")
-      (home-page "https://github.com/postmodern/tdiff")
-      (license license:expat))))
-
-(define-public ruby-nokogiri-diff
-  ;; Use a newer than released snapshot so that rspec-2 is not required.
-  (let ((commit "a38491e4d8709b7406f2cae11a50226d927d06f5"))
-    (package
-      (name "ruby-nokogiri-diff")
-      (version (string-append "0.2.0-1." (string-take commit 8)))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/postmodern/nokogiri-diff")
-                      (commit commit)))
-                (file-name (string-append name "-" version "-checkout"))
-                (sha256
-                 (base32
-                  "1ah2sfjh9n1p0ln2wkqzfl448ml7j4zfy6dhp1qgzq2m41php6rf"))))
-      (build-system ruby-build-system)
-      (propagated-inputs
-       (list ruby-tdiff
-             ruby-nokogiri))
-      (native-inputs
-       (list ruby-rspec ruby-yard/minimal ruby-rubygems-tasks))
-      (synopsis "Calculate the differences between two XML/HTML documents")
-      (description
-       "@code{Nokogiri::Diff} adds the ability to calculate the
-differences (added or removed nodes) between two XML/HTML documents.")
-      (home-page "https://github.com/postmodern/nokogiri-diff")
-      (license license:expat))))
-
-(define-public ruby-racc
-  (package
-    (name "ruby-racc")
-    (version "1.5.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "racc" version))
-       (sha256
-        (base32
-         "178k7r0xn689spviqzhvazzvxfq6fyjldxb3ywjbgipbfi4s8j1g"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:tests? #f))            ; Fails while parsing test instructions.
-    (native-inputs
-     (list ruby-hoe ruby-rake-compiler))
-    (synopsis "LALR(1) parser generator for Ruby")
-    (description
-     "Racc is a LALR(1) parser generator.  It is written in Ruby itself, and
-generates Ruby program.")
-    (home-page "https://i.loveruby.net/en/projects/racc/")
-    (license (list
-              ;; Generally licensed under the LGPL2.1, and some files also
-              ;; available under the same license as Ruby.
-              license:lgpl2.1
-              license:ruby))))
-
-(define-public ruby-rack
-  (package
-    (name "ruby-rack")
-    ;; Do not upgrade to version 3, as Rails doesn't support it yet.
-    (version "2.2.7")
-    (source
-     (origin
-       (method git-fetch)               ;for tests
-       (uri (git-reference
-             (url "https://github.com/rack/rack")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "02r41fr61x0jfhraizc6bsgs40p8mlpvnzix71zwmcvibg384ify"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-before 'check 'fix-tests
-            (lambda _
-              ;; This test fails in the build environment (and passes outside
-              ;; of it).
-              (substitute* "test/spec_files.rb"
-                (("res.body.must_equal expected_body") ""))
-              ;; A few of the tests use the length of a file on disk for
-              ;; Content-Length and Content-Range headers.  However, this file
-              ;; has a shebang in it which an earlier phase patches, growing
-              ;; the file size from 193 to 239 bytes when the store prefix is
-              ;; "/gnu/store".
-              (let ((size-diff (- (string-length (which "ruby"))
-                                  (string-length "/usr/bin/env ruby"))))
-                (substitute* '("test/spec_files.rb")
-                  (("208" bytes)
-                   (number->string (+ (string->number bytes) size-diff)))
-                  (("bytes(.)22-33" all delimiter)
-                   (string-append "bytes"
-                                  delimiter
-                                  (number->string (+ 22 size-diff))
-                                  "-"
-                                  (number->string (+ 33 size-diff)))))))))))
-    (native-inputs
-     (list ruby-minitest
-           ruby-minitest-global-expectations
-           ruby-webrick))
-    (synopsis "Unified web application interface for Ruby")
-    (description "Rack provides a minimal, modular and adaptable interface for
-developing web applications in Ruby.  By wrapping HTTP requests and responses,
-it unifies the API for web servers, web frameworks, and software in between
-into a single method call.")
-    (home-page "https://github.com/rack/rack")
-    (license license:expat)))
-
-(define-public ruby-rack-next
-  (package
-    (inherit ruby-rack)
-    (name "ruby-rack")
-    (version "3.0.7")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/rack/rack")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0msf14655nfcq1kgmib6932lgzm9nw3nb0m3c7nh6nj4sx30yxfr"))))
-    (arguments '())))
-
-(define-public ruby-rackup
-  (package
-    (name "ruby-rackup")
-    (version "2.1.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/rack/rackup")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "19b7sy700zjwaw7x47qpxvhnnz5hrp5bhrxfyljgagrli824dajy"))))
-    (build-system ruby-build-system)
-    (native-inputs (list ruby-minitest-global-expectations))
-    (inputs (list ruby-rack-next ruby-webrick))
-    (synopsis "Command line interface (CLI) for running for Rack applications")
-    (description "This package provides a command line interface for running
-for Rack applications.")
-    (home-page "https://github.com/rack/rackup")
-    (license license:expat)))
-
-(define-public ruby-rackup-1
-  (package
-    (inherit ruby-rackup)
-    (name "ruby-rackup")
-    (version "1.0.1")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/rack/rackup")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1xdfxsz7jx2gwfq212y9mca6q0i5s7kyqbfcscy1315awg57ynyp"))))))
-
-(define-public ruby-rack-cache
-  (package
-    (name "ruby-rack-cache")
-    (version "1.13.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "rack-cache" version))
-              (sha256
-               (base32
-                "1cqpax628h2mhnsjfg91c3klxwx2pkvaj061cisb0saqa99b0jgm"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      ;; The test suite depends on ruby-memcached, which is not available in
-      ;; Guix and bundles a very dated copy of memcached (undesirable).
-      #:tests? #f))
-    (propagated-inputs (list ruby-rack))
-    (synopsis "Component to enable HTTP caching for Rack-based applications")
-    (description "Rack::Cache is suitable as a drop-in component to enable
-HTTP caching for Rack-based applications that produce freshness (Expires,
-Cache-Control) and/or validation (Last-Modified, ETag) information.")
-    (home-page "https://github.com/rtomayko/rack-cache")
-    (license license:expat)))
-
-(define-public ruby-rack-test
-  (package
-    (name "ruby-rack-test")
-    (version "2.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "rack-test" version))
-       (sha256
-        (base32
-         "1ysx29gk9k14a14zsp5a8czys140wacvp91fja8xcja0j1hzqq8c"))))
-    (build-system ruby-build-system)
-    (arguments
-     ;; Disable tests because of circular dependencies: requires sinatra,
-     ;; which requires rack-protection, which requires rack-test.  Instead
-     ;; simply require the library.
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (invoke "ruby" "-Ilib" "-r" "rack/test")))))))
-    (propagated-inputs
-     (list ruby-rack))
-    (synopsis "Testing API for Rack applications")
-    (description
-     "Rack::Test is a small, simple testing API for Rack applications.  It can
-be used on its own or as a reusable starting point for Web frameworks and
-testing libraries to build on.")
-    (home-page "https://github.com/rack/rack-test")
-    (license license:expat)))
-
-(define-public ruby-rack-session
-  (package
-    (name "ruby-rack-session")
-    ;; Stay on version 1 until all the rack users such as Rails can use rack 3
-    ;; (rack-session 2 requires rack 3).
-    (version "1.0.1")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/rack/rack-session")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0rv955wd7ckp5jgy5c229wmajh48jpcy8s0iv5i8ma61wf7qw0i1"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list ruby-minitest-global-expectations
-           ruby-minitest-sprint))
-    (propagated-inputs
-     (list ruby-rack))
-    (synopsis "Session management for Rack")
-    (description "This package provides a session management implementation
-for Rack.")
-    (home-page "https://github.com/rack/rack-session")
-    (license license:expat)))
-
-(define-public ruby-rack-protection
-  (package
-    (name "ruby-rack-protection")
-    (version "3.0.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "rack-protection" version))
-       (sha256
-        (base32
-         "1a12m1mv8dc0g90fs1myvis8vsgr427k1arg1q4a9qlfw6fqyhis"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(;; Tests missing from the gem.
-       #:tests? #f))
-    (propagated-inputs
-     (list ruby-rack))
-    (native-inputs
-     (list bundler ruby-rspec-2 ruby-rack-test))
-    (synopsis "Rack middleware that protects against typical web attacks")
-    (description "Rack middleware that can be used to protect against typical
-web attacks.  It can protect all Rack apps, including Rails.  For instance, it
-protects against cross site request forgery, cross site scripting,
-clickjacking, directory traversal, session hijacking and IP spoofing.")
-    (home-page "https://github.com/sinatra/sinatra/tree/master/rack-protection")
-    (license license:expat)))
-
-(define-public ruby-rainbow
-  (package
-    (name "ruby-rainbow")
-    (version "3.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "rainbow" version))
-       (sha256
-        (base32
-         "0bb2fpjspydr6x0s8pn1pqkzmxszvkfapv0p4627mywl7ky4zkhk"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         ;; Run rspec directly, to avoid requiring Rubocop which is used from
-         ;; the Rakefile.
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (invoke "rspec")))))))
-    (native-inputs
-     (list bundler ruby-rspec))
-    (synopsis "Colorize printed text on ANSI terminals")
-    (description
-     "@code{rainbow} provides a string presenter object to colorize strings by
-wrapping them in ANSI escape codes.")
-    (home-page "https://github.com/sickill/rainbow")
-    (license license:expat)))
-
-(define-public ruby-rr
-  (package
-    (name "ruby-rr")
-    (version "1.2.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "rr" version))
-       (sha256
-        (base32
-         "1n9g78ba4c2zzmz8cdb97c38h1xm0clircag00vbcxwqs4dq0ymp"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; test files not included
-    (native-inputs
-     (list bundler ruby-rspec))
-    (synopsis "Ruby test double framework")
-    (description
-     "RR is a test double framework that features a rich selection of double
-techniques and a terse syntax.")
-    (home-page "https://rr.github.io/rr/")
-    (license license:expat)))
-
-(define-public ruby-rest-client
-  (package
-    (name "ruby-rest-client")
-    (version "2.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "rest-client" version))
-       (sha256
-        (base32
-         "1qs74yzl58agzx9dgjhcpgmzfn61fqkk33k1js2y5yhlvc5l19im"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      ;; TODO Some tests are currently broken
-      #:tests? #f
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-before 'check 'remove-unnecessary-development-dependencies
-            (lambda _
-              (substitute* "rest-client.gemspec"
-                ;; Remove rubocop as it's unused. Rubocop also indirectly
-                ;; depends on this package through ruby-parser and ruby-ast so
-                ;; this avoids a dependency loop.
-                ((".*rubocop.*") "\n")
-                ;; Remove pry as it's unused, it's a debugging tool
-                ((".*pry.*") "\n")
-                ;; Remove an unnecessarily strict rdoc dependency
-                ((".*rdoc.*") "\n"))))
-          (add-before 'check 'delete-network-dependent-tests
-            (lambda _
-              (delete-file "spec/integration/request_spec.rb")
-              (delete-file "spec/integration/httpbin_spec.rb")))
-          (replace 'check
-            (lambda* (#:key tests? #:allow-other-keys)
-              (when tests?
-                (invoke "rspec")))))))
-    (propagated-inputs
-     (list ruby-http-accept-1
-           ruby-http-cookie
-           ruby-mime-types
-           ruby-netrc))
-    (native-inputs
-     (list bundler
-           ruby-webmock-2
-           ruby-rspec))
-    (synopsis "Simple HTTP and REST client for Ruby")
-    (description
-     "@code{rest-client} provides a simple HTTP and REST client for Ruby,
-inspired by the Sinatra microframework style of specifying actions:
-@code{get}, @code{put}, @code{post}, @code{delete}.")
-    (home-page "https://github.com/rest-client/rest-client")
-    (license license:expat)))
-
-(define-public ruby-rubocop-ast
-  (package
-    (name "ruby-rubocop-ast")
-    (version "1.37.0")
-    (source
-     (origin
-       (method git-fetch)               ;no test suite in distributed gem
-       (uri (git-reference
-             (url "https://github.com/rubocop/rubocop-ast")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "1ww1vxcx6qaih4g68mrbq4xlgrqbv8w7cqxdaz629sazpw2hkycs"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:test-target "spec"
-       #:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'relax-dependencies
-                    (lambda _
-                      (substitute* "Gemfile"
-                        (("gem 'simplecov', '~> 0.10', '< 0.18'")
-                         "gem 'simplecov', '~> 0.10'"))))
-                  (add-before 'build 'generate-lexer
-                    (lambda _
-                      (setenv "RUBOCOP_VERSION" "none")
-                      (invoke "rake" "generate")))
-                  (replace 'replace-git-ls-files
-                    (lambda _
-                      (substitute* "rubocop-ast.gemspec"
-                        (("`git ls-files(.*)`" _ files)
-                         (format #f "`find ~a -type f| sort`" files))))))))
-    (native-inputs
-     (list ruby-bump
-           ruby-oedipus-lex
-           ruby-prism
-           ruby-racc
-           ruby-rake
-           ruby-rspec
-           ruby-simplecov))
-    (propagated-inputs
-     (list ruby-parser))
-    (synopsis "RuboCop's AST extensions and NodePattern functionality")
-    (description "Rubocop::AST extends @code{ruby-parser} with classes used
-by RuboCop to deal with Ruby's Abstract Syntax Tree (AST), in particular:
-@itemize
-@item @code{RuboCop::AST::Node}
-@item @code{RuboCop::AST::NodePattern}
-@end itemize")
-    (home-page "https://rubocop.org/")
-    (license license:expat)))
-
-(define-public ruby-rexml
-  (package
-    (name "ruby-rexml")
-    (version "3.2.5")
-    (source
-     (origin
-       (method git-fetch)               ;no tests in distributed gem
-       (uri (git-reference
-             (url "https://github.com/ruby/rexml")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "13n6vaa80drqic2wri4q6k22qzvsn683vp5s8c9dllil6x04kn0x"))))
-    (build-system ruby-build-system)
-    (synopsis "XML toolkit for Ruby")
-    (description "Inspired by Electric XML library for Java, REXML aims to be
-easy-to-use API, small and fast.  It supports both tree and stream document
-parsing.")
-    (home-page "https://github.com/ruby/rexml")
-    (license license:bsd-2)))
-
-(define-public ruby-character-set
-  (package
-    (name "ruby-character-set")
-    (version "1.4.0")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "character_set" version))
-        (sha256
-          (base32
-            "0affq9n77vwy897ri2zhmfinfagf37hcwwimrccy1bcxan9mj3h3"))))
-    (build-system ruby-build-system)
-    (arguments '(#:tests? #f))          ;avoid a cycle with ruby-regexp-parser
-    (synopsis "Ruby library to manipulate Unicode")
-    (description "CharacterSet is a C-extended Ruby library to work with sets
-of Unicode code points.  It can read and write these sets in various formats
-and implements the @code{stdlib} @code{Set} interface for them.  It also
-offers an alternate paradigm of @code{String} processing which grants much
-better performance than @code{Regexp} and @code{String} methods from the
-@code{stdlib} where applicable.  Many parts can be used independently, e.g.:
-@itemize
-@item @code{CharacterSet::Character}
-@item @code{CharacterSet::Parser}
-@item @code{CharacterSet::Writer}
-@item @code{RangeCompressor}
-@end itemize")
-    (home-page "https://github.com/jaynetics/character_set")
-    (license license:expat)))
-
-(define-public ruby-range-compressor
-  (package
-    (name "ruby-range-compressor")
-    (version "1.2.0")
-    (source
-      (origin
-        (method git-fetch)
-        (uri (git-reference
-              (url "https://github.com/janosch-x/range_compressor")
-              (commit (string-append "v" version))))
-        (file-name (git-file-name name version))
-        (sha256
-         (base32
-          "1zmc44si5ac2h7r1x4f1j8z5yr6wz528c7dssh0g70fmczs3pfga"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:test-target "spec"
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'extract-gemspec 'strip-version-requirements
-            (lambda _
-              (substitute* "range_compressor.gemspec"
-                (("(.*add_.*dependency '[_A-Za-z0-9-]+').*" _ stripped)
-                 (string-append stripped "\n"))))))))
-    (native-inputs
-     (list ruby-rspec
-           ruby-sorted-set))
-    (synopsis "Simple arrays of objects to arrays of ranges compressor")
-    (description "RangeCompresses is a tiny library that allows compressing
-arrays of objects into arrays of ranges.  For example, it can turn the
-following: @code{[1, 2, 3, 4, 6, 8, 9, 10]} into @code{[1..4, 6..6, 8..10]}.")
-    (home-page "https://github.com/janosch-x/range_compressor")
-    (license license:expat)))
-
-(define-public ruby-regexp-property-values
-  (let ((commit "03007a66c912949a7130b973cc0eca109c20811f")
-        (revision "1"))
-    (package
-      (name "ruby-regexp-property-values")
-      (version (git-version "1.0.0" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference              ;no test suite in distributed gem
-               (url "https://github.com/jaynetics/regexp_property_values")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32
-           "1zsax784p16zdkf60lyq9z924zvsafhx9ckxx9srsgkyiqrifi1s"))))
-      (build-system ruby-build-system)
-      (arguments
-       '(#:test-target "default"))
-      (native-inputs
-       (list ruby-character-set ruby-rake ruby-rake-compiler
-             ruby-range-compressor ruby-rspec))
-      (synopsis "Inspect Ruby's regex engine property values")
-      (description "This small library lets you see which property values are
-supported by the regular expression engine of the Ruby version you are running
-and can directly read out their code point ranges.  In other words, it
-determines all supported values for @code{\\p{value}} expressions and what
-they match.")
-      (home-page "https://github.com/jaynetics/regexp_property_values")
-      (license license:expat))))
-
-(define-public ruby-regexp-parser
-  (package
-    (name "ruby-regexp-parser")
-    (version "2.6.0")
-    (source
-     (origin
-       (method git-fetch)               ;bin/test missing from gem
-       (uri (git-reference
-             (url "https://github.com/ammar/regexp_parser")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "07dx96gjvpa07dsdnzpwhhwc7qpxakjgws7d7wbnkbs20fyvx55x"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:test-target "default"
-       #:phases (modify-phases %standard-phases
-                  (add-before 'build 'compile-scanner.rb
-                    (lambda _
-                      (invoke "rake" "build")
-                      ;; XXX: This is needed otherwise the install
-                      ;; phase fails to delete the installed cached
-                      ;; gem file.
-                      (delete-file-recursively "pkg"))))))
-    (native-inputs
-     (list ragel ruby-ice-nine ruby-regexp-property-values ruby-rspec))
-    (synopsis "Regular expression parser library for Ruby")
-    (description "A Ruby gem for tokenizing, parsing, and transforming regular
-expressions.  It comprises the following components:
-@itemize
-@item A scanner/tokenizer based on Ragel,
-@item A lexer that produces a stream of token objects,
-@item A parser that produces a tree of Expression objects.
-@end itemize")
-    (home-page "https://github.com/ammar/regexp_parser")
-    (license license:expat)))
-
-(define-public ruby-test-queue
-  (package
-    (name "ruby-test-queue")
-    (version "0.4.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "test-queue" version))
-       (sha256
-        (base32
-         "0hvm3n1qrqxqilhqk4rjivw3gcrd08zz1i6am9qzg1ppjxv6f36f"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (invoke "rspec")))))))
-    (native-inputs
-     (list ruby-rspec))
-    (synopsis "Minitest/RSpec parallel test runner for CI environments")
-    (description "The test-queue module is a parallel test runner,
-built using a centralized queue to ensure optimal distribution of
-tests between workers.  It is specifically optimized for Continuous
-Integration (CI) environments: build statistics from each run are
-stored locally and used to sort the queue at the beginning of the next
-run.")
-    (home-page "https://github.com/tmm1/test-queue")
-    (license license:expat)))
-
-(define-public ruby-rubocop
-  (package
-    (name "ruby-rubocop")
-    (version "1.68.0")
-    (source
-     (origin
-       (method git-fetch)               ;no tests in distributed gem
-       (uri (git-reference
-             (url "https://github.com/rubocop/rubocop")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "0pfsrgkg2dhb6a2rknciqskgxgmb9kf48rvbkhay9n8n6m712v2w"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:test-target "default"
-       ;; TODO: Figure out why test hangs.
-       #:tests? ,(not (or (%current-target-system)
-                          (target-riscv64?)))
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'check 'set-home
-           (lambda _
-             (setenv "HOME" (getcwd))))
-         ;; Rubocop depends on itself for tests, directly and indirectly. By
-         ;; regenerating the TODO list we test rubocop against itself and
-         ;; forgo adjusting the test suite to our environment each release.
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (make-file-writable ".rubocop_todo.yml")
-               (invoke "./exe/rubocop" "--auto-gen-config")))))))
-    (native-inputs
-     (list ruby-pry
-           ruby-rake
-           ruby-rspec
-           ruby-rubocop-ast
-           ruby-rubocop-capybara-minimal
-           ruby-rubocop-factory-bot
-           ruby-rubocop-minimal
-           ruby-rubocop-performance-minimal
-           ruby-rubocop-rake-minimal
-           ruby-rubocop-rspec-minimal
-           ruby-simplecov
-           ruby-stackprof
-           ruby-test-queue
-           ruby-webmock
-           ruby-yard))
-    (propagated-inputs
-     (list ruby-json
-           ruby-language-server-protocol
-           ruby-parallel
-           ruby-parser
-           ruby-progressbar
-           ruby-rainbow
-           ruby-regexp-parser
-           ruby-rexml
-           ruby-rubocop-ast
-           ruby-unicode-display-width))
-    (synopsis "Ruby code style checking tool")
-    (description
-     "@code{rubocop} is a Ruby code style checking tool.  It aims to enforce
-the community-driven Ruby Style Guide.")
-    (home-page "https://github.com/rubocop/rubocop")
-    (license license:expat)))
-
-(define-public ruby-rubocop-minimal
-  (hidden-package
-   (package
-     (inherit ruby-rubocop)
-     (arguments
-      (substitute-keyword-arguments (package-arguments ruby-rubocop)
-        ((#:tests? _ #f) #f)))
-     (propagated-inputs '())
-     (native-inputs '()))))
-
-(define-public ruby-contest
-  (package
-    (name "ruby-contest")
-    (version "0.1.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "contest" version))
-       (sha256
-        (base32
-         "1p9f2292b7b0fbrcjswvj9v01z7ig5ig52328wyqcabgb553qsdf"))))
-    (build-system ruby-build-system)
-    (synopsis "Write declarative tests using nested contexts")
-    (description
-     "Contest allows writing declarative @code{Test::Unit} tests using nested
-contexts without performance penalties.")
-    (home-page "https://github.com/citrusbyte/contest")
-    (license license:expat)))
-
-(define-public ruby-creole
-  (package
-    (name "ruby-creole")
-    (version "0.5.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "creole" version))
-       (sha256
-        (base32
-         "00rcscz16idp6dx0dk5yi5i0fz593i3r6anbn5bg2q07v3i025wm"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list ruby-bacon))
-    (synopsis "Creole markup language converter")
-    (description
-     "Creole is a lightweight markup language and this library for converting
-creole to @code{HTML}.")
-    (home-page "https://github.com/minad/creole")
-    (license license:ruby)))
-
-(define-public ruby-docile
-  (package
-    (name "ruby-docile")
-    (version "1.1.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "docile" version))
-       (sha256
-        (base32
-         "0m8j31whq7bm5ljgmsrlfkiqvacrw6iz9wq10r3gwrv5785y8gjx"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; needs github-markup, among others
-    (synopsis "Ruby EDSL helper library")
-    (description "Docile is a Ruby library that provides an interface for
-creating embedded domain specific languages (EDSLs) that manipulate existing
-Ruby classes.")
-    (home-page "https://ms-ati.github.io/docile/")
-    (license license:expat)))
-
-(define-public ruby-middleware
-  (package
-    (name "ruby-middleware")
-    (version "0.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "middleware" version))
-       (sha256
-        (base32
-         "0703nkf2v371wqr41c04x5qid7ww45cxqv3hnlg07if3b3xrm9xl"))))
-    (build-system ruby-build-system)
-    (arguments '(#:tests? #f))          ;no test suite
-    (synopsis "Implementation of a middleware abstraction for Ruby")
-    (description "Middleware is a generalized implementation of a middleware
-abstraction for Ruby.")
-    (home-page "https://github.com/mitchellh/middleware")
-    (license license:expat)))
-
-(define-public ruby-benchmark-ips
-  (package
-    (name "ruby-benchmark-ips")
-    (version "2.12.0")
-    (source
-     (origin
-       (method git-fetch)               ;no tests in distributed gem
-       (uri (git-reference
-             (url "https://github.com/evanphx/benchmark-ips")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "19pa2a1lgjzrxcz6vxwfiq5qq337vr15bbbpc2mfwzljdlx5059s"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'patch
-            (lambda _
-              (substitute* "Gemfile"
-                (("gem 'rake'.*")
-                 "gem 'rake'"))
-              (substitute* "benchmark-ips.gemspec"
-                (("git ls-files -- examples lib")
-                 "find examples lib -type f | sort")))))))
-    (native-inputs
-     (list ruby-hoe))
-    (synopsis "Iterations per second enhancement for the Ruby Benchmark module")
-    (description "Benchmark-ips enhances the Ruby Benchmark module with the
-iterations per second count.  For short snippets of code, it can automatically
-figure out how many times to run the code to get interesting data.")
-    (home-page "https://github.com/evanphx/benchmark-ips")
-    (license license:expat)))
-
-(define-public ruby-ffi-rzmq-core
-  (package
-    (name "ruby-ffi-rzmq-core")
-    (version "1.0.7")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "ffi-rzmq-core" version))
-       (sha256
-        (base32
-         "0amkbvljpjfnv0jpdmz71p1i3mqbhyrnhamjn566w0c01xd64hb5"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-                  (add-after 'unpack 'patch-libzmq-search-path
-                    (lambda* (#:key inputs #:allow-other-keys)
-                      (let ((zeromq (assoc-ref inputs "zeromq")))
-                        (substitute* "lib/ffi-rzmq-core/libzmq.rb"
-                          (("/usr/local/lib")
-                           (string-append zeromq "/lib"))))))
-                  (replace 'check
-                    (lambda _
-                      (invoke "rspec"))))))
-    (native-inputs
-     (list ruby-rspec))
-    (inputs
-     (list zeromq))
-    (propagated-inputs (list ruby-ffi))
-    (synopsis "Low-level Ruby FFI wrapper for the ZeroMQ networking library")
-    (description "This library only provides the FFI wrapper for the ZeroMQ
-networking library.  It can be used to implement a Ruby API for the ZeroMQ
-library.")
-    (home-page "https://github.com/chuckremes/ffi-rzmq-core")
-    (license license:expat)))
-
-(define-public ruby-ffi-rzmq
-  (package
-    (name "ruby-ffi-rzmq")
-    (version "2.0.7")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "ffi-rzmq" version))
-       (sha256
-        (base32
-         "14a5kxfnf8l3ngyk8hgmk30z07aj1324ll8i48z67ps6pz2kpsrg"))))
-    (build-system ruby-build-system)
-    (arguments '(#:phases (modify-phases %standard-phases
-                            (replace 'check
-                              (lambda* (#:key tests? #:allow-other-keys)
-                                (when tests?
-                                  (invoke "rspec")))))))
-    (native-inputs
-     (list ruby-rspec))
-    (propagated-inputs
-     (list ruby-ffi-rzmq-core))
-    (synopsis "High-level Ruby wrapper for the ZeroMQ networking library")
-    (description "This library provides a high-level API that wraps the ZeroMQ
-networking library using the Ruby foreign function interface (FFI).  It is a
-pure Ruby wrapper, hence is compatible with any Ruby runtime that has support
-for FFI.")
-    (home-page "https://github.com/chuckremes/ffi-rzmq")
-    (license license:expat)))
-
-(define-public ruby-sawyer
-  (package
-    (name "ruby-sawyer")
-    (version "0.9.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "sawyer" version))
-       (sha256
-        (base32
-         "1jks1qjbmqm8f9kvwa81vqj39avaj9wdnzc531xm29a55bb74fps"))))
-    (build-system ruby-build-system)
-    (propagated-inputs
-     (list ruby-addressable ruby-faraday))
-    (synopsis "Experimental hypermedia agent for Ruby")
-    (description "Sawyer is an experimental hypermedia agent for Ruby built on
-top of Faraday.")
-    (home-page "https://github.com/lostisland/sawyer")
-    (license license:expat)))
-
-(define-public ruby-octokit
-  (package
-    (name "ruby-octokit")
-    (version "6.1.1")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/octokit/octokit.rb")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "02bcmh0b0v80cis1l80lhzxw8adb69xkz6qgg4m7qcmj3y5arwmk"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'remove-unnecessary-dependencies
-            (lambda _
-              (substitute* "spec/spec_helper.rb"
-                (("require 'pry-byebug'") "")))))))
-    (native-inputs
-     (list ruby-faraday-multipart
-           ruby-jwt
-           ruby-mime-types
-           ruby-multi-json
-           ruby-netrc
-           ruby-rbnacl
-           ruby-rspec
-           ruby-simplecov
-           ruby-webmock
-           ruby-vcr-expat))
-    (propagated-inputs (list ruby-faraday ruby-sawyer))
-    (synopsis "Ruby toolkit for the GitHub API")
-    (description "Octokit wraps the GitHub API in a flat API client that
-follows Ruby conventions and requires little knowledge of REST.")
-    (home-page "https://github.com/octokit/octokit.rb")
-    (license license:expat)))
-
-(define-public ruby-hashicorp-checkpoint
-  (package
-    (name "ruby-hashicorp-checkpoint")
-    (version "0.1.5")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "hashicorp-checkpoint" version))
-              (sha256
-               (base32
-                "1z6mwzvd7p2wqhmk07dwrhvm0ncgqm7pxn0pr2k025rwsspp9bsd"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:tests? #f)) ;; no need to test, useless outside HashiCorp anyway
-    (synopsis "Internal HashiCorp service to check version information")
-    (description "This package is probably useless outside of internal
-HashiCorp use.  It is open source for disclosure and because HashiCorp's open
-source projects must be able to link to it.")
-    (home-page "https://github.com/hashicorp/ruby-checkpoint")
-    (license license:mpl2.0)))
-
-(define-public ruby-vagrant-cloud
-  (package
-    (name "ruby-vagrant-cloud")
-    (version "3.1.1")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/hashicorp/vagrant_cloud")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0bnjd8b86lrgj5ar1l7pg5if95bv0sxa75mz7x2ikqyz6q8rmjb3"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:test-target "spec"))
-    (native-inputs (list ruby-rspec ruby-webmock))
-    (propagated-inputs (list ruby-excon ruby-log4r ruby-rexml))
-    (synopsis "Vagrant Cloud API library")
-    (description "This library provides the functionality to create, modify,
-and delete boxes, versions, and providers on HashiCorp's Vagrant Cloud.")
-    (home-page "https://github.com/hashicorp/vagrant_cloud")
-    (license license:asl2.0)))
-
-(define-public ruby-libvirt
-  (package
-    (name "ruby-libvirt")
-    (version "0.8.2")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "ruby-libvirt" version))
-              (sha256
-               (base32
-                "0v6vj5vs9v01zr00bflqpfczhwcyc6jdf8k2dqn42lq6d87si77d"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:tests? #f)) ; tests require access to libvirt socket
-    (native-inputs (list pkg-config))
-    (inputs (list libvirt))
-    (synopsis "Ruby bindings for libvirt")
-    (description "This package provides Ruby language binding for libvirt's
-native C API.")
-    (home-page "https://ruby.libvirt.org/")
-    (license license:lgpl2.1+)))
-
-(define-public ruby-fog-core
-  (package
-    (name "ruby-fog-core")
-    (version "2.4.0")
-    (source (origin
-              (method git-fetch)        ; for tests
-              (uri (git-reference
-                    (url "https://github.com/fog/fog-core")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "184vpi81az7raz98652m7d98ikabdl9di37dgal0adr76q57j03c"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-before 'check 'set-home
-            (lambda _
-              (setenv "HOME" "/tmp"))))))
-    (native-inputs (list ruby-minitest-stub-const))
-    (propagated-inputs (list ruby-builder ruby-excon ruby-formatador
-                             ruby-mime-types))
-    (synopsis "Shared classes and tests for fog providers and services")
-    (description "@code{fog} is a Ruby cloud services library.  This package
-provides shared classes and tests for @code{fog} providers and services.")
-    (home-page "https://github.com/fog/fog-core")
-    (license license:expat)))
-
-(define-public ruby-fog-json
-  (package
-    (name "ruby-fog-json")
-    (version "1.2.0")
-    (source (origin
-              (method git-fetch)        ; for tests
-              (uri (git-reference
-                    (url "https://github.com/fog/fog-json")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0f4hbmhy22b1gbkzd3pnj5xvljp6bl7inc2y4fxh29nrmcn4pgb0"))))
-    (build-system ruby-build-system)
-    (native-inputs (list ruby-minitest))
-    (propagated-inputs (list ruby-fog-core ruby-multi-json))
-    (synopsis "JSON parsing tools used by @code{fog} providers")
-    (description "This package containse the JSON parsing tools shared between
-a number of providers in the @code{fog} gem.  @code{fog} is a Ruby cloud
-services library.")
-    (home-page "https://github.com/fog/fog-json")
-    (license license:expat)))
-
-(define-public ruby-fog-xml
-  (package
-    (name "ruby-fog-xml")
-    (version "0.1.5")
-    (source (origin
-              (method git-fetch)        ; for tests
-              (uri (git-reference
-                    (url "https://github.com/fog/fog-xml")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1v896k9j44axhgvwjvk1j0amy27a9fm6ynv656fxqa1m2wib6dzh"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          ;; Run tests via bundler so rake picks up the minitest gem from
-          ;; native-inputs, not the one installed otherwise.  This is required
-          ;; since turn@0.9.7 needs minitest@4 and can not be upgraded to
-          ;; minitest@5.
-          (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (invoke "bundle" "exec" "rake")))))))
-    (native-inputs (list ruby-minitest ruby-pry ruby-coveralls))
-    (propagated-inputs (list ruby-fog-core ruby-nokogiri))
-    (synopsis "XML parsing tools used by @code{fog} providers")
-    (description "This package containse the XML parsing tools shared between
-a number of providers in the @code{fog} gem.  @code{fog} is a Ruby cloud
-services library.")
-    (home-page "https://github.com/fog/fog-xml")
-    (license license:expat)))
-
-(define-public ruby-fog-libvirt
-  (package
-    (name "ruby-fog-libvirt")
-    (version "0.12.0")
-    (source (origin
-              (method git-fetch)        ; for tests
-              (uri (git-reference
-                    (url "https://github.com/fog/fog-libvirt")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0b1qafb0l24anmr8fviwhp9vj14g0fic0mkg9n1i11h68zhqkj2v"))))
-    (build-system ruby-build-system)
-    (native-inputs (list ruby-minitest-stub-const ruby-mocha ruby-net-ssh
-                         ruby-netrc ruby-octokit ruby-pry ruby-rubocop
-                         ruby-shindo ruby-simplecov ruby-yard ))
-    (propagated-inputs (list ruby-fog-core ruby-fog-json ruby-fog-xml
-                             ruby-json ruby-libvirt))
-    (synopsis "Ruby libvirt provider, either standalone or as a module for
-@code{fog}")
-    (description "This library can be used as a module for @code{fog} or as
-standalone libvirt provider.  @code{fog} is a Ruby cloud services library.")
-    (home-page "https://github.com/fog/fog-libvirt")
-    (license license:expat)))
-
-(define-public ruby-pry-byebug
-  (package
-    (name "ruby-pry-byebug")
-    (version "3.10.1")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/deivid-rodriguez/pry-byebug")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "0z8rhvmr9qmlbk8c8h6jbig5qd5xbdg9qihvx3g0cv1whqzbfikq"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'sanitize-dependencies
-                    (lambda _
-                      (substitute* "Rakefile"
-                        ((".*chandler/tasks.*") ""))))
-                  (add-before 'check 'set-home
-                    (lambda _
-                      (setenv "HOME" (getcwd)))))))
-    (native-inputs (list ruby-rubocop ruby-simplecov))
-    (propagated-inputs (list ruby-byebug ruby-pry))
-    (synopsis "Step-by-step debugging and stack navigation in Pry")
-    (description "This package adds step-by-step debugging and stack
-navigation capabilities to @code{pry}, using @code{byebug}.")
-    (home-page "https://github.com/deivid-rodriguez/pry-byebug")
-    (license license:expat)))
-
-(define-public ruby-stackprof
-  (package
-    (name "ruby-stackprof")
-    (version "0.2.27")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "stackprof" version))
-       (sha256
-        (base32 "03788mbipmihq2w7rznzvv0ks0s9z1321k1jyr6ffln8as3d5xmg"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-before 'check 'patch-gemspec
-            (lambda _
-              (substitute* "stackprof.gemspec"
-                (("rake-compiler.*")
-                 "rake-compiler>.freeze, [\"> 0.9\"])\n")
-                (("mocha.*")
-                 "mocha>.freeze, [\"> 0.14\"])\n"))))
-          (add-before 'check 'skip-dubious-test
-            (lambda _
-              (substitute* "test/test_stackprof.rb"
-                ;; This unreliable test can fail with "Expected 0 to be >= 1."
-                (("def test_(cputime)" _ name)
-                 (string-append "def skip_" name))
-                ;; This test often fails
-                (("def test_gc") "def skip_test_gc")
-                ;; This test is known to fail on 32-bit systems.
-                ;; /gnu/store/...-stackprof-0.2.27.gem
-                (("def test_raw") "def skip_test_raw"))))
-          (add-before 'check 'build-tests
-            (lambda _
-              (invoke "rake" "compile")))
-          (replace 'check
-            (lambda* (#:key tests? #:allow-other-keys)
-              (when tests?
-                (invoke "bundle" "exec" "rake" "default")))))))
-    (native-inputs
-     (list bundler ruby-mocha-1 ruby-rake-compiler))
-    (synopsis "Sampling profiler for Ruby code")
-    (description
-     "@code{stackprof} is a fast sampling profiler for Ruby code, with cpu,
-wallclock and object allocation samplers.")
-    (home-page "https://github.com/tmm1/stackprof")
-    (license license:expat)))
-
-(define-public ruby-bindex
-  (package
-    (name "ruby-bindex")
-    (version "0.8.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "bindex" version))
-       (sha256
-        (base32 "0zmirr3m02p52bzq4xgksq4pn8j641rx5d4czk68pv9rqnfwq7kv"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:test-target "default"
-           #:phases
-           #~(modify-phases %standard-phases
-               (add-after 'unpack 'avoid-bundler
-                 (lambda _
-                   (substitute* "Rakefile"
-                     (("^Bundler::.*") "")))))))
-    (native-inputs (list bundler ruby-rake-compiler))
-    (synopsis "Bindings for Ruby exceptions")
-    (description
-     "This package provides bindings for any kind of Ruby exceptions.")
-    (home-page "https://github.com/gsamokovarov/bindex")
-    (license license:expat)))
-
-(define-public ruby-binding-of-caller
-  (package
-    (name "ruby-binding-of-caller")
-    (version "0.8.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "binding_of_caller" version))
-       (sha256
-        (base32
-         "05syqlks7463zsy1jdfbbdravdhj9hpj5pv2m74blqpv8bq4vv5g"))))
-    (build-system ruby-build-system)
-    ;; Attempting to run the test suite fails with a rake deprecation error
-    ;; (see: https://github.com/banister/binding_of_caller/issues/76).
-    (arguments '(#:tests? #f))
-    (propagated-inputs
-     (list ruby-debug-inspector))
-    (synopsis "Retrieve the binding of a method's caller")
-    (description "The @code{binding_of_caller} module provides the
-@code{Binding#of_caller} method.  It allows accessing bindings from upper
-frames in the call stack and can evaluate code in that context.")
-    (home-page "https://github.com/banister/binding_of_caller")
-    (license license:expat)))
-
-(define-public ruby-pry-stack-explorer
-  (package
-    (name "ruby-pry-stack-explorer")
-    (version "0.5.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "pry-stack_explorer" version))
-       (sha256
-        (base32
-         "157rd2n9pfvcmmicm0xkq8z4p6famaj13syrpra6b4032qpb1wn0"))))
-    (build-system ruby-build-system)
-    (arguments '(#:tests? #f))          ;no test suite in gem release
-    (propagated-inputs
-     (list ruby-binding-of-caller ruby-pry))
-    (synopsis "Call-stack navigation plugin for the Pry REPL")
-    (description "@code{pry-stack_explorer} is a plugin for the Pry REPL that
-add support to navigate the call-stack.")
-    (home-page "https://github.com/pry/pry-stack_explorer")
-    (license license:expat)))
-
-(define-public ruby-varint
-  (package
-    (name "ruby-varint")
-    (version "0.1.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "varint" version))
-       (sha256
-        (base32
-         "1y0l2qc64cwsyv76ygg9bbjnk86riz2kq73kmn87gdrlmpiyrdac"))))
-    (build-system ruby-build-system)
-    (arguments '(#:tests? #f))          ;no test suite
-    (synopsis "Variable length integers (varint) C extension for Ruby")
-    (description "This package provides a small C extension to speed up
-variable length integers (varint) in Ruby Protocol Buffers.")
-    (home-page "https://github.com/liquidm/varint")
-    (license license:bsd-3)))
-
-(define-public ruby-version-gem
-  (package
-    (name "ruby-version-gem")
-    (version "1.1.3")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://gitlab.com/oauth-xx/version_gem")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1wazx2jr9vx5wm48fy8bccvfwhg7y2s8shfw9q81dhb4yvwk6gbf"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'relax-requirements
-            (lambda _
-              (substitute* "Gemfile"
-                (("^linting = .*")
-                 "linting = false\n")
-                (("^coverage = .*")
-                 "coverage = false\n")
-                (("^debug = .*")
-                 "debug = false\n"))
-              (substitute* "spec/spec_helper.rb"
-                (("^RUN_COVERAGE = .*")
-                 "RUN_COVERAGE = false\n")
-                (("^ALL_FORMATTERS = .*")
-                 "ALL_FORMATTERS = false\n"))))
-          (add-before 'build 'drop-signing-key-requirement
-            (lambda _
-              (substitute* "version_gem.gemspec"
-                (("spec.signing_key =.*")
-                 "spec.signing_key = nil")))))))
-    (native-inputs (list ruby-rspec ruby-rspec-block-is-expected))
-    (synopsis "Improved @code{Version} module for Ruby")
-    (description "VersionGem aims to provide introspection of a @code{Version}
-module based on a @code{Version::VERSION} constant string wile not interfering
-with gemspec parsing where the @code{VERSION} string is traditionally used.")
-    (home-page "https://gitlab.com/oauth-xx/version_gem")
-    (license license:expat)))
-
-;;; Note: Do NOT update to a newer version; this is the last commit that is
-;;; still licensed as free software, the project having switched to the
-;;; Hippocratic license afterward (see:
-;;; https://github.com/vcr/vcr/issues/959).
-(define-public ruby-vcr-expat
-  (let ((revision "0")
-        (commit-dont-touch "842b2bf89099dc91f2c643d0d85d1abd54eb7e85")) ;
-    (package
-      (name "ruby-vcr-expat")
-      (version (git-version "5.0.0" revision commit-dont-touch))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/vcr/vcr")
-                      (commit commit-dont-touch)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "02mzifd2655kjh35bbry01n66jjcjrsw6ncqlybfkjcaqrw2zalv"))))
-      (build-system ruby-build-system)
-      (arguments (list #:tests? #f))    ;avoid all dependencies
-      (home-page "https://github.com/vcr/vcr")
-      (synopsis "HTTP interaction recorder [old version]")
-      (description "Record your test suite's HTTP interactions and replay them
-during future test runs for fast, deterministic, accurate tests.  This is an
-older version of VCR that is free software under the Expat license.  The
-project later switched to the Hippocratic license, which is non-free.
-@emph{Do not use it in new free software projects}.")
-      (license license:expat))))
-
-(define-public ruby-ruby-prof
-  (package
-    (name "ruby-ruby-prof")
-    (version "1.4.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "ruby-prof" version))
-       (sha256
-        (base32
-         "09n13bzm1p956z318xx1v7ikqdp2i971v7p3kwf3170axz368ccy"))))
-    (build-system ruby-build-system)
-    (arguments
-      ;; FIXME: Investigate why the tests fail on i686-linux.
-     `(#:tests? ,(not (or (%current-target-system)
-                          (target-x86-32?)))
-       #:phases
-       (modify-phases %standard-phases
-         ;; The LineNumbersTest test fails non-deterministically (see:
-         ;; https://github.com/ruby-prof/ruby-prof/issues/276).
-         (add-after 'extract-gemspec 'delete-flaky-test
-           (lambda _
-             (delete-file "test/line_number_test.rb")
-             (substitute* "ruby-prof.gemspec"
-               (("\"test/line_number_test\\.rb\"\\.freeze, ") ""))))
-         (add-before 'check 'compile
-          (lambda _
-            (invoke "rake" "compile"))))))
-    (native-inputs (list bundler ruby-minitest ruby-rake-compiler ruby-rdoc))
-    (synopsis "Fast code profiler for Ruby")
-    (description "RubyProf is a fast code profiler for Ruby.  Its features
-include:
-@table @asis
-@item Speed
-Being a C extension, it is many times faster than the standard Ruby profiler.
-@item Measurement Modes
-It can measure program wall time, process time, object allocations and memory
-usage.
-@item Reports
-A variety of text and cross-referenced HTML reports can be generated.
-@item Threads
-Profiling multiple threads simultaneously is supported.
-@end table")
-    (home-page "https://github.com/ruby-prof/ruby-prof")
-    (license license:bsd-2)))
-
-(define-public ruby-ruby-memcheck
-  (package
-    (name "ruby-ruby-memcheck")
-    (version "1.3.2")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/Shopify/ruby_memcheck")
-                    (commit version)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0fj4j4d062sw2kx2qlj877gjbj1xbb691njr8x9nbah6615idlni"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      ;; The tests seem to fail on 32bit x86
-      #:tests? (not (or (target-x86-32?)
-                        (%current-target-system)))
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'patch-valgrind-path
-            (lambda* (#:key inputs #:allow-other-keys)
-              (substitute* "lib/ruby_memcheck/configuration.rb"
-                (("DEFAULT_VALGRIND = \"valgrind\"")
-                 (format #f "DEFAULT_VALGRIND = ~s"
-                         (search-input-file inputs "bin/valgrind"))))))
-          (add-before 'replace-git-ls-files 'standardize-git-ls-files
-            (lambda _
-              (substitute* "ruby_memcheck.gemspec"
-                (("%x\\(git ls-files -z)")
-                 "`git ls-files -z`")))))))
-    (native-inputs (list ruby-rake-compiler ruby-rspec))
-    (inputs (list valgrind/pinned))
-    (propagated-inputs (list ruby-nokogiri))
-    (synopsis "Valgrind memcheck tool for Ruby")
-    (description "The @code{ruby_memcheck} gem provides a sane way to use
-Valgrind's memcheck on your native extension gem, that filters out all the
-false positives caused by Ruby not freeing all of the memory it allocates
-during shutdown.")
-    (home-page "https://github.com/Shopify/ruby_memcheck")
-    (license license:expat)))
-
-(define-public ruby-memory-profiler
-  (package
-    (name "ruby-memory-profiler")
-    (version "1.0.1")
-    (source
-      (origin
-        (method git-fetch)
-        (uri (git-reference
-               (url "https://github.com/SamSaffron/memory_profiler")
-               (commit (string-append "v" version))))
-        (file-name (git-file-name name version))
-        (sha256
-         (base32
-          "1z1x0rymfv45gh1y3s46w5pga5y8cvgn228jiwlnhc8hin3zig84"))))
-    (build-system ruby-build-system)
-    (synopsis "Memory profiling routines for Ruby")
-    (description
-     "This package provides memory profiling routines for Ruby.")
-    (home-page "https://github.com/SamSaffron/memory_profiler")
-    (license license:expat)))
-
-(define-public ruby-cucumber-compatibility-kit
-  (package
-    (name "ruby-cucumber-compatibility-kit")
-    (version "11.2.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "cucumber-compatibility-kit" version))
-              (sha256
-               (base32
-                "17c8zx0yn68rcpfbw4nb1gzvh9fzpwsi1y0qivb99ahdlgzcdp8q"))))
-    (build-system ruby-build-system)
-    (arguments (list #:phases #~(modify-phases %standard-phases
-                                  (replace 'check
-                                    (lambda* (#:key tests? #:allow-other-keys)
-                                      (when tests?
-                                        (invoke "rspec")))))))
-    (propagated-inputs (list ruby-cucumber-messages ruby-rake ruby-rspec))
-    (synopsis "Cucumber compatibility verification utility")
-    (description "The Cucumber Compatibility Kit (CCK) aims to validate a
-Cucumber implementation's support for the Cucumber Messages protocol.")
-    (home-page "https://github.com/cucumber/compatibility-kit")
-    (license license:expat)))
-
-;;; Variant package to break a cycle with ruby-cucumber-messages.
-(define ruby-cucumber-compatibility-kit-bootstrap
-  (package/inherit ruby-cucumber-compatibility-kit
-    (arguments (list #:tests? #f))
-    (propagated-inputs (modify-inputs (package-propagated-inputs
-                                       ruby-cucumber-compatibility-kit)
-                         (delete "ruby-cucumber-messages")))))
-
-(define-public ruby-cucumber-messages
-  (package
-    (name "ruby-cucumber-messages")
-    (version "21.0.1")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "cucumber-messages" version))
-              (sha256
-               (base32
-                "0482a63y7my0arn2bv208g401dq8525f0gwhnwaa11mhv6ph0q5i"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:phases
-           #~(modify-phases %standard-phases
-               ;; The test suite requires the gem to be installed, so move it
-               ;; after the install phase.
-               (delete 'check)
-               (add-after 'install 'check
-                 (lambda* (#:key tests? #:allow-other-keys)
-                   (setenv "GEM_PATH" (string-append
-                                       (getenv "GEM_PATH") ":"
-                                       #$output "/lib/ruby/vendor_ruby"))
-                   (when tests?
-                     (invoke "rspec")))))))
-    (native-inputs
-     (list ruby-cucumber-compatibility-kit-bootstrap ruby-rspec))
-    (home-page "https://github.com/cucumber/messages/")
-    (synopsis "Cucumber Messages for Ruby (Protocol Buffers)")
-    (description "Cucumber Messages for Ruby is a library which allows
-serialization and deserialization of the protocol buffer messages used in
-Cucumber.")
-    (license license:expat)))
-
-(define-public ruby-cucumber-gherkin
-  (package
-    (name "ruby-cucumber-gherkin")
-    (version "26.1.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/cucumber/gherkin")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1rsannfcg5rqh5a3d3paw10kf6mmqjrgbq3k235px4swbyqysmgn"))))
-    (build-system ruby-build-system)
-    (arguments (list #:test-target "spec"
-                     #:phases #~(modify-phases %standard-phases
-                                  (add-after 'unpack 'chdir
-                                    (lambda _
-                                      (chdir "ruby"))))))
-    (native-inputs (list ruby-rspec))
-    (propagated-inputs (list ruby-cucumber-messages))
-    (synopsis "Gherkin parser for Ruby")
-    (description "Gherkin is a parser and compiler for the Gherkin language.
-It is intended be used by all Cucumber implementations to parse
-@file{.feature} files.")
-    (home-page "https://github.com/cucumber/gherkin")
-    (license license:expat)))
-
-(define-deprecated ruby-gherkin ruby-cucumber-gherkin)
-
-(define-public ruby-gherkin-ruby
-  (package
-    (name "ruby-gherkin-ruby")
-    (version "0.3.2")
-    (home-page "https://github.com/codegram/gherkin-ruby")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "gherkin-ruby" version))
-              (sha256
-               (base32
-                "18ay7yiibf4sl9n94k7mbi4k5zj2igl4j71qcmkswv69znyx0sn1"))))
-    (build-system ruby-build-system)
-    (synopsis "Pure Ruby Gherkin parser")
-    (description
-     "Gherkin-ruby is a Gherkin parser written in pure Ruby and less than
-200 lines of code.")
-    ;; XXX: No license information anywhere but Readme.md.
-    (license license:expat)))
-
-(define-public ruby-aruba
-  (package
-    (name "ruby-aruba")
-    (version "2.1.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/cucumber/aruba")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1mmlgqhi6yww3z34hmrrnha2rygkv6kx0q962z31dqxjkcv23yfd"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      ;; XXX: Only run the "spec" target and not the "cucumber" one, as it is
-      ;; slow and has multiple unexplained test failures.
-      #:test-target "spec"
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'patch-paths
-            (lambda _
-              ;; This test file relies on a dynamically generated script;
-              ;; patch its #!/bin/bash shebang.
-              (substitute* "spec/aruba/api/commands_spec.rb"
-                (("/bin/bash")
-                 (which "bash")))))
-          (add-before 'check 'relax-requirements
-            ;; Many development requirements are not actually needed.
-            (lambda _
-              (substitute* "aruba.gemspec"
-                (("\\[\">= 0.18.0\", \"< 0.22.0\"]") ;simplecov
-                 "\">= 0.18.0\"")
-                ((".*appraisal.*") "")
-                ((".*pry.*") "")
-                ((".*kramdown.*") "")
-                ((".*rubocop.*") "")
-                ((".*yard-junk.*") ""))
-              (substitute* "Rakefile"
-                ((".*require \"rubocop/rake_task\".*") "")
-                ((".*require \"yard-junk/rake\".*") "")
-                ((".*RuboCop::RakeTask.new.*") "")
-                ((".*YardJunk::Rake.define_task.*") ""))))
-          ;; The tests rely on the Gem being installed, so move the check
-          ;; phase after the install phase.
-          (delete 'check)
-          (add-after 'install 'check
-            (assoc-ref %standard-phases 'check))
-          (add-before 'check 'set-GEM_PATH
-            (lambda _
-              (setenv "GEM_PATH" (string-append
-                                  (getenv "GEM_PATH") ":"
-                                  #$output "/lib/ruby/vendor_ruby"))))
-          (add-before 'check 'set-home
-            (lambda _
-              (setenv "HOME" "/tmp"))))))
-    (native-inputs
-     (list ruby-rake-manifest
-           ruby-rspec
-           ruby-simplecov))
-    (propagated-inputs
-     (list bundler
-           ruby-childprocess
-           ruby-contracts
-           ruby-cucumber
-           ruby-rspec-expectations
-           ruby-thor))
-    (synopsis "Test command-line applications with Cucumber, RSpec or Minitest")
-    (description
-     "Aruba is an extension for Cucumber, RSpec and Minitest for testing
-command-line applications.  It supports applications written in any
-language.")
-    (home-page "https://github.com/cucumber/aruba")
-    (license license:expat)))
-
-(define-public ruby-sys-uname
-  (package
-  (name "ruby-sys-uname")
-  (version "1.2.1")
-  (source
-    (origin
-      (method url-fetch)
-      (uri (rubygems-uri "sys-uname" version))
-      (sha256
-        (base32
-          "00p3wwvkdbg6pl38bchaagncv3i4fq4y0ks470imwykjanpy2ic0"))))
-  (build-system ruby-build-system)
-  (arguments
-   `(#:test-target "spec"))
-  (propagated-inputs (list ruby-ffi))
-  (native-inputs (list ruby-rspec))
-  (synopsis "Ruby interface for gathering system information")
-  (description "The sys-uname library provides an interface for gathering
-information about your current platform.  It allows retrieving information
-such as the OS name, OS version, system name, etc.")
-  (home-page "https://github.com/djberg96/sys-uname")
-  (license license:asl2.0)))
-
-(define-public ruby-cucumber-html-formatter
-  (package
-    (name "ruby-cucumber-html-formatter")
-    (version "20.2.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "cucumber-html-formatter" version))
-       (sha256
-        (base32
-         "0c7r9mfmph4c6yzc7y3dkr92rhwvpyksr0mdhpqp67xmmr8z1br4"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:phases #~(modify-phases %standard-phases
-                        (add-after 'extract-gemspec 'relax-requirements
-                          (lambda _
-                            (substitute* ".gemspec"
-                              (("~> 18.0") "~> 21.0")))) ;cucumber-messages
-                        (replace 'check
-                          (lambda* (#:key tests? #:allow-other-keys)
-                            (when tests?
-                              (invoke "rspec")))))))
-    (native-inputs (list ruby-cucumber-compatibility-kit ruby-rspec))
-    (propagated-inputs (list ruby-cucumber-messages))
-    (synopsis "HTML formatter for Cucumber")
-    (description "Cucumber HTML Formatter produces a HTML report for Cucumber
-runs.  It is built on top of cucumber-react and works with any Cucumber
-implementation with a protocol buffer formatter that outputs Cucumber
-messages.")
-    (home-page "https://github.com/cucumber/html-formatter")
-    (license license:expat)))
-
-(define-public ruby-cucumber-ci-environment
-  (package
-    (name "ruby-cucumber-ci-environment")
-    (version "9.1.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "cucumber-ci-environment" version))
-              (sha256
-               (base32
-                "1nmn2hfrjlbazgcryr3hwvsa5v4csfbjqxb4q7wbjhaxl9xxn0k7"))))
-    (build-system ruby-build-system)
-    (arguments (list #:phases #~(modify-phases %standard-phases
-                                  (replace 'check
-                                    (lambda* (#:key tests? #:allow-other-keys)
-                                      (when tests?
-                                        (invoke "rspec")))))))
-    (native-inputs (list ruby-rspec))
-    (synopsis "Detect CI Environment from environment variables")
-    (description "This is a Ruby utility library for Cucumber that detects a
-CI environment from environment variables.")
-    (home-page "https://github.com/cucumber/ci-environment")
-    (license license:expat)))
-
-(define-public ruby-cucumber
-  (package
-    (name "ruby-cucumber")
-    (version "8.0.0")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/cucumber/cucumber-ruby")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "1dz880fdz6rfbh1nwwcq21v65byik46jnf9gppnrqf3p5k61i55r"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:test-target "spec"
-           #:phases
-           #~(modify-phases %standard-phases
-               (add-after 'unpack 'disable-rubocop
-                 ;; Remove extraneous Lint checks.
-                 (lambda _
-                   (substitute* "Rakefile"
-                     (("require 'rubocop/rake_task'")
-                      "")
-                     (("RuboCop::RakeTask.new")
-                      ""))))
-               (add-after 'extract-gemspec 'strip-version-requirements
-                 (lambda _
-                   (delete-file "Gemfile") ;do not use Bundler
-                   (substitute* "cucumber.gemspec"
-                     ;; The dependency specifications are often trailing
-                     ;; behind and appear stricter than necessary, since the
-                     ;; test suite passes with the newer component versions.
-                     (("(.*add_.*dependency '[_A-Za-z0-9-]+')(.*)"
-                       _ stripped rest)
-                      (string-append stripped "   # " rest "\n")))))
-               (add-before 'check 'set-home
-                 (lambda _
-                   (setenv "HOME" (getcwd)))))))
-    (propagated-inputs
-     (list ruby-builder
-           ruby-cucumber-ci-environment
-           ruby-cucumber-core
-           ruby-cucumber-gherkin
-           ruby-cucumber-html-formatter
-           ruby-cucumber-messages
-           ruby-cucumber-wire
-           ruby-diff-lcs
-           ruby-mime-types
-           ruby-multi-test
-           ruby-sys-uname))
-    (native-inputs
-     (list ruby-cucumber-compatibility-kit
-           ruby-nokogiri
-           ruby-pry
-           ruby-webrick
-           ruby-rspec))
-    (synopsis "Describe automated tests in plain language")
-    (description "Cucumber is a tool for running automated tests written in
-plain language.  It's designed to support a Behaviour Driven Development (BDD)
-software development workflow.")
-    (home-page "https://cucumber.io/")
-    (license license:expat)))
-
-(define ruby-cucumber-without-tests
-  (package (inherit ruby-cucumber)
-    (arguments
-     '(#:tests? #f))
-    (native-inputs
-     '())))
-
-(define-public ruby-covered
-  (package
-    (name "ruby-covered")
-    (version "0.20.2")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "covered" version))
-              (sha256
-               (base32
-                "04fpj493jn23ah5fq93956a5h2xj3z0hrckvc26fxcfsg5pbwypa"))))
-    (build-system ruby-build-system)
-    (arguments
-    ;; XXX: The test suite is disabled to avoid dependency cycles with
-    ;; ruby-samovar, through ruby-bake.
-     (list #:tests? #f
-           #:phases
-           #~(modify-phases %standard-phases
-               (add-after 'extract-gemspec 'relax-requirements
-                 (lambda _
-                   (substitute* ".gemspec"
-                     (("\">= 3.2\"")
-                      "\">= 2.7\"")))))))
-    (propagated-inputs (list ruby-console ruby-msgpack))
-    (synopsis "Modern approach to code coverage in Ruby")
-    (description "Covered uses modern Ruby features to generate comprehensive
-coverage, including support for templates which are compiled into Ruby.  It
-has the following features:
-@itemize
-@item
-Incremental coverage -- if you run your full test suite, and the run a subset,
-it will still report the correct coverage - so you can incrementally work on
-improving coverage.
-@item
-Integration with RSpec, Minitest, Travis & Coveralls - no need to configure
-anything - out of the box support for these platforms.
-@item
-It supports coverage of views -- templates compiled to Ruby code can be
-tracked for coverage reporting.
-@end itemize")
-    (home-page "https://github.com/ioquatix/covered")
-    (license license:expat)))
-
-(define-public ruby-coveralls
-  (package
-    (name "ruby-coveralls")
-    (version "0.8.23")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "coveralls" version))
-       (sha256
-        (base32
-         "1mv4fn5lfxhy7bc2f1lpnc5yp9mvv97az77j4r7jgrxcqwn8fqxc"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:test-target "default"
-           #:phases #~(modify-phases %standard-phases
-                        (add-after 'extract-gemspec 'disable-problematic-tests
-                          (lambda _
-                            (substitute* "spec/coveralls/coveralls_spec.rb"
-                              ;; This test fails for unknown reasons (perhaps
-                              ;; networking); skip it.
-                              (("it \"sends existing test results\"" all)
-                               (string-append "x" all)))
-                            ;; 3 simplecov tests fail, perhaps due to using a
-                            ;; newer simplecov version.
-                            (delete-file "spec/coveralls/simplecov_spec.rb")
-                            (substitute* "coveralls-ruby.gemspec"
-                              (("\"spec/coveralls/simplecov_spec.rb\".freeze, ")
-                               ""))))
-                        (add-after 'extract-gemspec 'relax-requirements
-                          (lambda _
-                            (substitute* "coveralls-ruby.gemspec"
-                              (("%q<simplecov>.freeze, \\[\"~> 0.16.1\"]")
-                               "%q<simplecov>.freeze")))))))
-    (native-inputs
-     (list git-minimal/pinned
-           ruby-pry
-           ruby-rspec
-           ruby-truthy
-           ruby-vcr-expat
-           ruby-webmock))
-    (propagated-inputs
-     (list ruby-json
-           ruby-term-ansicolor
-           ruby-thor
-           ruby-tins
-           ruby-simplecov))
-    (synopsis "Ruby implementation of the Coveralls API")
-    (description "This package provides a Ruby implementation of the Coveralls
-API.")
-    (home-page "https://coveralls.io")
-    (license license:expat)))
-
-(define-public ruby-unindent
-  (package
-  (name "ruby-unindent")
-  (version "1.0")
-  (source
-    (origin
-      (method url-fetch)
-      (uri (rubygems-uri "unindent" version))
-      (sha256
-        (base32
-          "1wqh3rzv8589yzibigminxx3qpmj2nqj28f90xy1sczk1pijmcrd"))))
-  (build-system ruby-build-system)
-  (synopsis "Ruby method to unindent strings")
-  (description "This module provides a @code{String#unindent} Ruby method to
-unindent strings, which can be useful to unindent multiline strings embedded
-in already-indented code.")
-  (home-page "https://github.com/mynyml/unindent")
-  (license license:expat)))
-
-(define-public ruby-cucumber-core
-  (package
-    (name "ruby-cucumber-core")
-    (version "11.1.0")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/cucumber/cucumber-ruby-core")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "0lf2inlam0951djc2qz81x0nkffmw2dpj44iadw1fw31m7r8wqvh"))))
-    (build-system ruby-build-system)
-    (arguments (list #:test-target "spec"
-                     #:phases
-                     #~(modify-phases %standard-phases
-                         (add-after 'extract-gemspec 'relax-version-requirements
-                           (lambda _
-                             (substitute* "cucumber-core.gemspec"
-                               (("'cucumber-tag-expressions',.*")
-                                "'cucumber-tag-expressions', '>=4.1.0'\n")))))))
-    (native-inputs
-     (list ruby-rspec
-           ruby-coveralls
-           ruby-rubocop
-           ruby-simplecov
-           ruby-unindent))
-    (propagated-inputs
-     (list ruby-cucumber-gherkin
-           ruby-cucumber-messages
-           ruby-cucumber-tag-expressions))
-    (synopsis "Core library for the Cucumber BDD app")
-    (description "Cucumber is a tool for running automated tests
-written in plain language.  Because they're written in plain language,
-they can be read by anyone on your team.  Because they can be read by
-anyone, you can use them to help improve communication, collaboration
-and trust on your team.")
-    (home-page "https://cucumber.io/")
-    (license license:expat)))
-
-(define-public ruby-cucumber-expressions
-  (package
-    (name "ruby-cucumber-expressions")
-    (version "16.1.2")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/cucumber/cucumber-expressions")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "1dhq88k9x2x8svam5bc7rrcd166fqymda8wxryqkbkffhnzla0id"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:test-target "spec"
-           #:phases #~(modify-phases %standard-phases
-                        (add-after 'unpack 'chdir
-                          (lambda _
-                            (chdir "ruby"))))))
-    (native-inputs (list ruby-rspec ruby-simplecov))
-    (synopsis "Simpler alternative to Regular Expressions")
-    (description "Cucumber Expressions offer similar functionality to Regular
-Expressions, with a syntax that is easier to read and write.  Cucumber
-Expressions are extensible with parameter types.")
-    (home-page "https://github.com/cucumber/cucumber-expressions/")
-    (license license:expat)))
-
-(define-public ruby-cucumber-wire
-  (package
-    (name "ruby-cucumber-wire")
-    (version "6.2.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "cucumber-wire" version))
-       (sha256
-        (base32
-         "1pmydrh9lcckj7p0cn67jw7msxdkgr9zir86cs19h3mf2zlcv7b9"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:tests? #f))                ;tests use cucumber, causing a cycle
-    (propagated-inputs
-     (list ruby-cucumber-core ruby-cucumber-expressions
-           ruby-cucumber-messages))
-    (synopsis "Cucumber wire protocol plugin")
-    (description "Cucumber's wire protocol allows step definitions to be
-implemented and invoked on any platform.")
-    (home-page "https://github.com/cucumber/cucumber-ruby-wire")
-    (license license:expat)))
-
-(define-public ruby-cucumber-tag-expressions
-  (package
-    (name "ruby-cucumber-tag-expressions")
-    (version "5.0.1")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/cucumber/tag-expressions")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "1ziq30szn8m5y29hsdpx4dn1a8sy29h01nvcldm8nr1mx4b7dj1w"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:test-target "spec"
-           #:phases #~(modify-phases %standard-phases
-                        (add-after 'unpack 'chdir
-                          (lambda _
-                            (chdir "ruby"))))))
-    (native-inputs (list ruby-rspec))
-    (synopsis "Cucumber tag expressions for Ruby")
-    (description "Cucumber tag expression parser for Ruby.  A tag expression
-is an infix boolean expression used by Cucumber.")
-    (home-page "https://github.com/cucumber/tag-expressions")
-    (license license:expat)))
-
-(define-public ruby-skiptrace
-  (package
-    (name "ruby-skiptrace")
-    (version "0.8.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "skiptrace" version))
-       (sha256
-        (base32
-         "1qpjy6pqd8hx4w7bai64jsr10mwbpnnb65wcbssyqcnalimi1s12"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'remove-git-from-gemspec
-            (lambda _
-              (substitute* "skiptrace.gemspec"
-                (("`git ls-files -z`") "`find . -type f -print0 |sort -z`"))))
-          (replace 'check
-            (lambda* (#:key tests? #:allow-other-keys)
-              (when tests?
-                (invoke "bundle" "exec" "rake" "default")))))))
-    (native-inputs
-     (list bundler ruby-rake-compiler))
-    (synopsis "Provides access for bindings relating to Ruby exceptions")
-    (description
-     "@code{skiptrace} provides a way to access the bindings that relate to
-exceptions in Ruby, providing more information about the context in which the
-exception occurred.")
-    (home-page "https://github.com/gsamokovarov/skiptrace")
-    (license license:expat)))
-
-(define-public ruby-bio-logger
-  (package
-    (name "ruby-bio-logger")
-    (version "1.0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "bio-logger" version))
-       (sha256
-        (base32
-         "02pylfy8nkdqzyzplvnhn1crzmfkj1zmi3qjhrj2f2imlxvycd28"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:tests? #f)) ; rake errors, missing shoulda
-    (propagated-inputs
-     (list ruby-log4r))
-    (synopsis "Log4r wrapper for Ruby")
-    (description "Bio-logger is a wrapper around Log4r adding extra logging
-features such as filtering and fine grained logging.")
-    (home-page "https://github.com/pjotrp/bioruby-logger-plugin")
-    (license license:expat)))
-
-(define-public ruby-yajl-ruby
-  (package
-    (name "ruby-yajl-ruby")
-    (version "1.4.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "yajl-ruby" version))
-       (sha256
-        (base32
-         "1lni4jbyrlph7sz8y49q84pb0sbj82lgwvnjnsiv01xf26f4v5wc"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:test-target "spec"
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-before 'check 'patch-test-to-update-load-path
-            (lambda _
-              (substitute* "spec/parsing/large_number_spec.rb"
-                (("require \"yajl\"")
-                 "$LOAD_PATH << 'lib'; require 'yajl'")))))))
-     (native-inputs
-      (list ruby-rake-compiler ruby-rspec))
-     (synopsis "Streaming JSON parsing and encoding library for Ruby")
-     (description
-      "Ruby C bindings to the Yajl JSON stream-based parser library.  The API
-is compatible with the JSON gem, so yajl-ruby can act as a drop in
-replacement.
-
-A modified copy of yajl is used, and included in the package.")
-     (home-page "https://github.com/brianmario/yajl-ruby")
-     (license (list license:expat     ; Ruby code, yajl_ext.c and yajl_ext.h
-                    license:bsd-3)))) ; Included, modified copy of yajl
-
-(define-public ruby-yard
-  (package
-    (name "ruby-yard")
-    (version "0.9.34")
-    (source
-     (origin
-       (method git-fetch)
-       ;; Tests do not pass if we build from the distributed gem.
-       (uri (git-reference
-             (url "https://github.com/lsegal/yard")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "10jq0hyzyy0d6l63jxld32g36fhrclkb3rwnyp47igcik73kbagb"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:test-target "default"
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'do-not-set-date-in-gemspec
-            ;; Fix a reproducibility issue (see:
-            ;; https://github.com/lsegal/yard/issues/1343).
-            (lambda _
-              (substitute* "yard.gemspec"
-                ((".*s\\.date.*") ""))))
-          (add-before 'check 'prepare-for-tests
-            (lambda* (#:key tests? #:allow-other-keys)
-              (when tests?
-                (substitute* "Rakefile"
-                  ((".*[Ss]amus.*") ""))
-                ;; Delete the Gemfile to avoid errors relating to it.
-                (delete-file "Gemfile")
-                ;; $HOME needs to be set to somewhere writeable for tests to
-                ;; run.
-                (setenv "HOME" "/tmp")
-                ;; This test fails
-                ;; #<File (class)> received :open with unexpected arguments
-                ;; expected: ("gem1.gem", "rb")
-                ;; got: ("/gnu/store/.../lib/ruby/vendor_ruby/specifications/asciidoctor-2.0.18.gemspec", "r:UTF-8:-")
-                (substitute* "spec/cli/diff_spec.rb"
-                  (("it \"searches for .gem file")
-                   "xit \"searches for .gem file"))))))))
-    (native-inputs
-     (list ruby-rspec
-           ruby-rack
-           ruby-redcloth
-           ruby-webrick
-           ruby-asciidoctor/minimal))
-    (synopsis "Documentation generation tool for Ruby")
-    (description "YARD is a documentation generation tool for the Ruby
-programming language.  It enables the user to generate consistent, usable
-documentation that can be exported to a number of formats very easily, and
-also supports extending for custom Ruby constructs such as custom class level
-definitions.")
-    (home-page "https://yardoc.org")
-    (license license:expat)))
-
-(define-public ruby-yard/minimal
-  (hidden-package
-   (package
-     (inherit ruby-yard)
-     (arguments
-      (ensure-keyword-arguments
-       (package-arguments ruby-yard)
-       (list #:tests? #f)))
-     (native-inputs '()))))
-
-(define-public ruby-spectroscope
-  (package
-    (name "ruby-spectroscope")
-    (version "0.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "spectroscope" version))
-       (sha256
-        (base32
-         "0iiid9sm110qhx0i1zkds710cvsnmhd308wbqa7slkzbq2akrb3y"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda _
-             (with-output-to-file ".test"
-               (lambda _
-                 (display
-                  "\
-require 'ae/should'
-require 'rspec'
-
-include RSpec
-
-Test.run :default do |run|
-  run.files << 'spec/*_spec.rb'
-end")))
-             (invoke "ruby" "-Ilib" "-rrubytest" ".test"))))))
-    (native-inputs
-     (list ruby-ae ruby-rspec))
-    (propagated-inputs
-     (list ruby-rubytest))
-    (synopsis "Behavior-Driven Development (BDD) framework built on RubyTest")
-    (description "Spectroscope is a Behavior-Driven Development (BDD)
-framework built on RubyTest, designed to emulate RSpec in most respects.  It
-is assertion framework independent so any number of assertion systems can be
-used, such as Assay or AE.")
-    (home-page "http://rubyworks.github.com/spectroscope/")
-    (license license:bsd-2)))
-
-(define-public ruby-tomparse
-  (package
-    (name "ruby-tomparse")
-    (version "0.4.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "tomparse" version))
-       (sha256
-        (base32
-         "06xakk41f1kgj6j1ahkwn4r6cvidixvm4phhlrvmwb7c3pr8ygc8"))))
-    (build-system ruby-build-system)
-    ;; TODO: Tests require citron and rulebow, not yet packaged.
-    (arguments '(#:tests? #f))
-    (synopsis "TomDoc parser for Ruby")
-    (description "TomParse is a TomDoc parser for Ruby.  It takes a code
-comment as input and parses it into a convenient object-oriented structure in
-accordance with the TomDoc standard.  See
-@url{https://github.com/mojombo/tomdoc, TomDoc} for more information about the
-TomDoc format.")
-    (home-page "http://rubyworks.github.com/tomparse/")
-    (license license:bsd-2)))
-
-(define-public ruby-yard-tomdoc
-  (package
-    (name "ruby-yard-tomdoc")
-    (version "0.7.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "yard-tomdoc" version))
-       (sha256
-        (base32
-         "1725gs8b8klpwhrvnf2wwp7dw3zxs9vz2la983l2d8c4r4fn1j2z"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (replace 'check
-                    (lambda _
-                      (invoke "rubytest" "-Ilib" "-Itest" "test/"))))))
-    (native-inputs
-     (list ruby-rubytest-cli ruby-spectroscope ruby-ae))
-    (propagated-inputs
-     (list ruby-tomparse ruby-yard))
-    (synopsis "TomDoc syntax for YARD")
-    (description "This module adds support for the TomDoc documentation format
-to YARD, a documentation generation tool for Ruby.")
-    (home-page "http://rubyworks.github.com/yard-tomdoc/")
-    (license license:expat)))
-
-(define-public ruby-clap
-  (package
-    (name "ruby-clap")
-    (version "1.0.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "clap" version))
-              (sha256
-               (base32
-                "190m05k3pca72c1h8k0fnvby15m303zi0lpb9c478ad19wqawa5q"))))
-    (build-system ruby-build-system)
-    ;; Clap needs cutest for running tests, but cutest needs clap.
-    (arguments `(#:tests? #f))
-    (synopsis "Command line argument parsing for simple applications")
-    (description
-     "Clap provides command line argument parsing features.  It covers the
-simple case of executing code based on the flags or parameters passed.")
-    (home-page "https://github.com/djanowski/cutest")
-    (license license:expat)))
-
-(define-public ruby-cutest
-  (package
-    (name "ruby-cutest")
-    (version "1.2.2")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "cutest" version))
-              (sha256
-               (base32
-                "1mldhjn62g53vx4gq2qdqg2lgjvyrqxa8d0khf8347bbfgi16d32"))))
-    (build-system ruby-build-system)
-    (propagated-inputs
-     (list ruby-clap))
-    (synopsis "Run tests in separate processes")
-    (description
-     "Cutest runs tests in separate processes to avoid shared state.")
-    (home-page "https://github.com/djanowski/cutest")
-    (license license:expat)))
-
-(define-public ruby-pygmentize
-  (package
-    (name "ruby-pygmentize")
-    (version "0.0.3")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "pygmentize" version))
-              (sha256
-               (base32
-                "1pxryhkiwvsz6xzda3bvqwz5z8ggzl1cdglf8qbcf4bb7akirdpb"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-pygmentize-path
-          (lambda _
-            (substitute* "lib/pygmentize.rb"
-              (("\"/usr/bin/env python.*")
-               (string-append "\"" (which "pygmentize") "\"\n")))))
-         (add-after 'build 'do-not-use-vendor-directory
-          (lambda _
-            ;; Remove bundled pygments sources
-            ;; FIXME: ruby-build-system does not support snippets.
-            (delete-file-recursively "vendor")
-            (substitute* "pygmentize.gemspec"
-              (("\"vendor/\\*\\*/\\*\",") "")))))))
-    (inputs
-     `(("pygments" ,python-pygments)))
-    (native-inputs
-     (list ruby-cutest ruby-nokogiri))
-    (synopsis "Thin Ruby wrapper around pygmentize")
-    (description
-     "Pygmentize provides a simple way to call pygmentize from within a Ruby
-application.")
-    (home-page "https://github.com/djanowski/pygmentize")
-    (license license:expat)))
-
-(define-public ruby-event-emitter
-  (package
-    (name "ruby-event-emitter")
-    (version "0.2.6")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "event_emitter" version))
-              (sha256
-               (base32
-                "148k9qv8102l3m6klc24dwip79f9y4bjr5z19dckd7ffbjyrf9n7"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:phases #~(modify-phases %standard-phases
-                        (add-after 'extract-gemspec 'relax-requirements
-                          (lambda _
-                            (substitute* "event_emitter.gemspec"
-                              (("~> 1.15") ">= 1.15")))))))
-    (synopsis "Ruby port of EventEmitter from Node.js")
-    (description
-     "This package provides a Ruby port of EventEmitter from Node.js.")
-    (home-page "https://shokai.github.io/event_emitter/")
-    (license license:expat)))
-
-(define-public ruby-eventmachine
-  (package
-    (name "ruby-eventmachine")
-    (version "1.2.7")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "eventmachine" version))
-       (sha256
-        (base32
-         "0wh9aqb0skz80fhfn66lbpr4f86ya2z5rx6gm5xlfhd05bj1ch4r"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f))               ; test suite tries to connect to google.com
-    (inputs
-     (list openssl))
-    (native-inputs
-     (list ruby-rake-compiler))
-    (synopsis "Single-threaded network event framework for Ruby")
-    (description
-     "EventMachine implements a single-threaded engine for arbitrary network
-communications.  EventMachine wraps all interactions with sockets, allowing
-programs to concentrate on the implementation of network protocols.  It can be
-used to create both network servers and clients.")
-    ;; The ‘official’ rubyeventmachine.com domain is now registrar-squatted.
-    (home-page "https://github.com/eventmachine/eventmachine")
-    (license (list license:ruby license:gpl3)))) ; GPLv3 only AFAICT
-
-(define-public ruby-ruby-engine
-  (package
-    (name "ruby-ruby-engine")
-    (version "2.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "ruby_engine" version))
-       (sha256
-        (base32
-         "0wqdcv8gxybp1y7kjhh18g3r9dczacs62d4ahcvyhz32bih8c9fm"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'extract-gemspec 'clean-up
-           (lambda _
-             (delete-file "Gemfile.lock")
-             (substitute* "ruby_engine.gemspec"
-               ;; Remove unnecessary imports that would entail further
-               ;; dependencies.
-               ((".*<rdoc.*") "")
-               ((".*<rubygems-tasks.*") "")
-               ;; Remove extraneous .gem file
-               (("\"pkg/ruby_engine-[0-9.]+\\.gem\".freeze, ") "")
-               (("\"Gemfile.lock\".freeze, ") "")
-               ;; Soften rake dependency
-               (("%q<rake>.freeze, \\[\"~> 10.0\"\\]")
-                "%q<rake>.freeze, [\">= 10.0\"]")
-               ;; Soften the rspec dependency
-               (("%q<rspec>.freeze, \\[\"~> 2.4\"\\]")
-                "%q<rspec>.freeze, [\">= 2.4\"]"))
-             (substitute* "Rakefile"
-               (("require 'rubygems/tasks'") "")
-               (("Gem::Tasks.new") ""))
-             ;; Remove extraneous .gem file that otherwise gets installed.
-             (delete-file-recursively "pkg"))))))
-    (native-inputs
-     (list bundler ruby-rake ruby-rspec))
-    (synopsis "Simplifies checking for Ruby implementation")
-    (description
-     "@code{ruby_engine} provides an RubyEngine class that can be used to
-check which implementation of Ruby is in use.  It can provide the interpreter
-name and provides query methods such as @code{RubyEngine.mri?}.")
-    (home-page "https://github.com/janlelis/ruby_engine")
-    (license license:expat)))
-
-(define-public ruby-mimemagic
-  (package
-    (name "ruby-mimemagic")
-    (version "0.3.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "mimemagic" version))
-       (sha256
-        (base32 "04cp5sfbh1qx82yqxn0q75c7hlcx8y1dr5g3kyzwm4mx6wi2gifw"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         ;; This phase breaks the tests, as it patches some of the test data.
-         (delete 'patch-source-shebangs))))
-    (native-inputs
-     (list ruby-bacon))
-    (synopsis "Ruby library for MIME detection by extension or content")
-    (description
-     "@acronym{MIME, Multipurpose Internet Mail Extensions} detection by
-extension or content, using the freedesktop.org.xml shared-mime-info
-database.")
-    (home-page "https://github.com/minad/mimemagic")
-    (license license:expat)))
-
-(define-public ruby-mime-types-data
-  (package
-    (name "ruby-mime-types-data")
-    (version "3.2016.0521")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "mime-types-data" version))
-       (sha256
-        (base32
-         "04my3746hwa4yvbx1ranhfaqkgf6vavi1kyijjnw8w3dy37vqhkm"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list ruby-hoe))
-    (synopsis "Registry for information about MIME media type definitions")
-    (description
-     "@code{mime-types-data} provides a registry for information about
-Multipurpose Internet Mail Extensions (MIME) media type definitions.  It can
-be used with the Ruby mime-types library or other software to determine
-defined filename extensions for MIME types, or to use filename extensions to
-look up the likely MIME type definitions.")
-    (home-page "https://github.com/mime-types/mime-types-data/")
-    (license license:expat)))
-
-(define-public ruby-mime-types
-  (package
-    (name "ruby-mime-types")
-    (version "3.4.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "mime-types" version))
-       (sha256
-        (base32
-         "0ipw892jbksbxxcrlx9g5ljq60qx47pm24ywgfbyjskbcl78pkvb"))))
-    (build-system ruby-build-system)
-    (propagated-inputs
-     (list ruby-mime-types-data))
-    (native-inputs
-     (list ruby-hoe
-           ruby-fivemat
-           ruby-minitest-focus
-           ruby-minitest-bonus-assertions
-           ruby-minitest-hooks))
-    (synopsis "Library and registry for MIME content type definitions")
-    (description "The mime-types library provides a library and registry for
-information about Multipurpose Internet Mail Extensions (MIME) content type
-definitions.  It can be used to determine defined filename extensions for MIME
-types, or to use filename extensions to look up the likely MIME type
-definitions.")
-    (home-page "https://github.com/mime-types/ruby-mime-types")
-    (license license:expat)))
-
-(define-public ruby-mini-mime
-  (package
-    (name "ruby-mini-mime")
-    (version "1.1.2")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "mini_mime" version))
-        (sha256
-         (base32
-          "0lbim375gw2dk6383qirz13hgdmxlan0vc5da2l072j3qw6fqjm5"))))
-    (build-system ruby-build-system)
-    (synopsis "Lightweight mime type lookup toy")
-    (description "This package provides a lightweight mime type lookup toy.")
-    (home-page "https://github.com/discourse/mini_mime")
-    (license license:expat)))
-
-(define-public ruby-fileutils
-  (package
-    (name "ruby-fileutils")
-    (version "1.7.0")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/ruby/fileutils")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0m68gaqclnc2wflilmrnr19kky2gr6fjf6k3yq02sf9scs281kid"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-before 'check 'disable-problematic-tests
-            (lambda _
-              (substitute* "test/fileutils/test_fileutils.rb"
-                ;; The 'test_chown' tests depends on /etc/groups, which
-                ;; doesn't exist in the build environment.
-                (("def test_chown.*" all)
-                 (string-append all "    return true\n"))
-                ;; The 'test_cp_r_dev' expects a RuntimeError to be raised
-                ;; when copying a char device to a directory, but this is not
-                ;; triggered in the build environment, for reasons unknown.
-                (("def test_cp_r_dev.*" all)
-                 (string-append all "    return true\n"))))))))
-    (synopsis "Ruby utility library to manipulate files")
-    (description "The FileUtils Ruby library includes Several file utility
-methods for copying, moving, removing, etc.")
-    (home-page "https://github.com/ruby/fileutils")
-    (license license:bsd-2)))
-
-(define-public ruby-fivemat
-  (package
-    (name "ruby-fivemat")
-    (version "1.3.7")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "fivemat" version))
-       (sha256
-        (base32
-         "0pzlycasvwmg4bbx7plllpqnhd9zlmmff8l2w3yii86nrm2nvf9n"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:tests? #f)) ; no tests
-    (synopsis "Each test file given its own line of dots")
-    (description
-     "Fivemat is a MiniTest/RSpec/Cucumber formatter that gives each test file
-its own line of dots during testing.  It aims to provide test output that is
-neither too verbose nor too minimal.")
-    (home-page "https://github.com/tpope/fivemat")
-    (license license:expat)))
-
-(define-public ruby-sqlite3
-  (package
-    (name "ruby-sqlite3")
-    (version "2.5.0")
-    (source
-     (origin
-       (method git-fetch)        ;for tests
-       (uri (git-reference
-             (url "https://github.com/sparklemotion/sqlite3-ruby")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "1fanv7bv5lszd5g752yy8nmpjhrl9gqwbbkbis2xbh83y96f2zfm"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:gem-flags #~(list "--" "--enable-system-libraries")
-      #:modules '((guix build ruby-build-system)
-                  (guix build utils)
-                  (ice-9 rdelim)
-                  (ice-9 textual-ports))
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'relax-requirements
-            (lambda _
-              ;; Don't try to format C code, remove rubocop-rake.
-              (delete-file "rakelib/format.rake")
-              ;; Don't try to run valgrind-like memory tests.
-              ;; This cuts all lines after Minitest::TestTask.create
-              (with-atomic-file-replacement
-               "rakelib/test.rake"
-               (lambda (in out)
-                 (let loop ()
-                   (let ((line (read-line in)))
-                     (cond
-                      ((eof-object? line) #f)
-                      ((string-prefix? "Minitest::TestTask.create" line) #f)
-                      (else
-                       (format out "~a~%" line)
-                       (loop)))))))))
-          (delete 'check)
-          (add-after 'install 'check
-            (lambda* (#:key tests? #:allow-other-keys)
-              (when tests?
-                (setenv "GEM_PATH"
-                        (string-append (getenv "GEM_PATH") ":"
-                                       #$output "/lib/ruby/vendor_ruby"))
-                (invoke "rake" "test")))))))
-    (propagated-inputs
-     (list ruby-mini-portile-2))
-    (inputs
-     (list sqlite))
-    (native-inputs
-     (list ruby-hoe
-           ruby-rake-compiler
-           ruby-rake-compiler-dock))
-    (synopsis "Interface with SQLite3 databases")
-    (description
-     "This module allows Ruby programs to interface with the SQLite3 database
-engine.")
-    (home-page
-     "https://github.com/sparklemotion/sqlite3-ruby")
-    (license license:bsd-3)))
-
-(define-public ruby-sqlite3-1.4
-  (package/inherit ruby-sqlite3
-    (name "ruby-sqlite3")
-    (version "1.4.4")
-    (source
-     (origin
-       (method git-fetch)        ;for tests
-       (uri (git-reference
-             (url "https://github.com/sparklemotion/sqlite3-ruby")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "0ngirjbai3f5ki2sf6m4gxbbrjpr3b35bz5nrz1cifyw1jk6a6sr"))))
-    (arguments
-     (substitute-keyword-arguments (package-arguments ruby-sqlite3)
-       ((#:tests? #t #t) #f)
-       ((#:phases phases #~%standard-phases)
-        #~(modify-phases #$phases
-            (delete 'relax-requirements)
-            (add-after 'unpack 'fix-version
-              (lambda _
-                (substitute* "sqlite3.gemspec"
-                  (("s\\.version = .*")
-                   (format #f "s.version = ~s~%" #$version)))))))))))
-
-(define-public ruby-shoulda-context
-  (package
-    (name "ruby-shoulda-context")
-    (version "2.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "shoulda-context" version))
-       (sha256
-        (base32
-         "0d1clcp92jv8756h09kbc55qiqncn666alx0s83za06q5hs4bpvs"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               ;; Do not run tests to avoid circular dependence with rails.
-               ;; Instead just import the library to test.
-               (invoke "ruby" "-Ilib" "-r" "shoulda-context")))))))
-    (synopsis "Test::Unit context framework extracted from Shoulda")
-    (description
-     "@code{shoulda-context} is the context framework extracted from Shoulda.
-Instead of writing Ruby methods with lots_of_underscores, shoulda-context adds
-context, setup, and should blocks combine to produce natural test method
-names.")
-    (home-page "https://github.com/thoughtbot/shoulda-context")
-    (license license:expat)))
-
-(define-public ruby-shoulda-matchers
-  (package
-    (name "ruby-shoulda-matchers")
-    (version "5.3.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "shoulda-matchers" version))
-       (sha256
-        (base32
-         "11igjgh16dl5pwqizdmclzlzpv7mbmnh8fx7m9b5kfsjhwxqdfpn"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               ;; Do not run tests to avoid circular dependence with rails.  Instead
-               ;; just import the library to test.
-               (invoke "ruby" "-Ilib" "-r" "shoulda-matchers")))))))
-    (propagated-inputs
-     (list ruby-activesupport))
-    (synopsis "Collection of testing matchers extracted from Shoulda")
-    (description
-     "Shoulda Matchers provides RSpec- and Minitest-compatible one-liners that
-test common Rails functionality.  These tests would otherwise be much longer,
-more complex, and error-prone.")
-    (home-page "https://github.com/thoughtbot/shoulda-matchers")
-    (license license:expat)))
-
-(define-public ruby-shoulda
-  (package
-    (name "ruby-shoulda")
-    (version "4.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "shoulda" version))
-       (sha256
-        (base32
-         "02lww34kn1g6lidp4rx4rs6bqvirrzxlfw1y2wm11aif8f622xz6"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               ;; Don't run tests to avoid circular dependence with rails.
-               ;; Instead just import the library to test.
-               (invoke "ruby" "-Ilib" "-r" "shoulda"))))
-         (add-after 'extract-gemspec 'relax-requirements
-           (lambda _
-             (substitute* "shoulda.gemspec"
-               ;; An older version of shoulda-matchers (4.0) is used, out of
-               ;; little maintenance rather than because of an real
-               ;; incompatibility (see:
-               ;; https://github.com/thoughtbot/shoulda/issues/275).
-               ((", \\[\"~> 4.0\"]") "")))))))
-    (propagated-inputs
-     (list ruby-shoulda-context ruby-shoulda-matchers))
-    (synopsis "Context framework and matchers for testing")
-    (description
-     "@code{shoulda} is a meta-package combining @code{shoulda-context} and
-@code{shoulda-matchers} providing tools for writing tests.")
-    (home-page "https://github.com/thoughtbot/shoulda")
-    (license license:expat)))
-
-(define-public ruby-unf
-  (package
-    (name "ruby-unf")
-    (version "0.1.4")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "unf" version))
-       (sha256
-        (base32
-         "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'check 'add-dependency-to-bundler
-           (lambda _
-             ;; test-unit is required but not provided by the bundler
-             ;; environment.  This is fixed in the upstream repository but fix
-             ;; has not been released.
-             (substitute* "Gemfile"
-               (("^gemspec") "gem 'test-unit'\ngemspec")))))))
-    (propagated-inputs
-     (list ruby-unf-ext))
-    (native-inputs
-     (list ruby-shoulda bundler ruby-test-unit))
-    (synopsis "Unicode Normalization Form support to Ruby and JRuby")
-    (description
-     "@code{ruby-unf} is a wrapper library to bring Unicode Normalization Form
-support to both Ruby and JRuby.  It uses @code{unf_ext} on CRuby and
-@code{java.text.Normalizer} on JRuby.")
-    (home-page "https://github.com/knu/ruby-unf")
-    (license license:bsd-2)))
-
-(define-public ruby-warden
-  (package
-    (name "ruby-warden")
-    (version "1.2.8")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "warden" version))
-       (sha256
-        (base32
-         "1fr9n9i9r82xb6i61fdw4xgc7zjv7fsdrr4k0njchy87iw9fl454"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; No included tests
-    (propagated-inputs
-     (list ruby-rack))
-    (synopsis "Rack middleware providing authentication")
-    (description
-     "Warden is a Rack-based middleware that provides a mechanism for
-authentication in Ruby web applications.")
-    (home-page "https://github.com/wardencommunity/warden")
-    (license license:expat)))
-
-(define-public ruby-warden-oauth2
-  (package
-    (name "ruby-warden-oauth2")
-    (version "0.0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "warden-oauth2" version))
-       (sha256
-        (base32
-         "1z9154lvzrnnfjbjkmirh4n811nygp6pm2fa6ikr7y1ysa4zv3cz"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:test-target "spec"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'remove-unnecessary-dependencies
-           (lambda _
-             (substitute* "Gemfile"
-               ;; All of these gems relate to development, and are unnecessary
-               ;; when running the tests
-               (("gem 'guard-bundler'") "")
-               (("gem 'guard'") "")
-               (("gem 'guard-rspec'") "")
-               (("gem 'rb-fsevent'") "")
-               (("gem 'pry'") "")
-               (("gem 'growl'") ""))))
-         ;; The test suite doesn't work with rspec@2, and this is incompatible
-         ;; with the current version of Rake, so invoke Rspec directly
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (invoke "bundle" "exec" "rspec")))))))
-    (propagated-inputs
-     (list ruby-warden))
-    (native-inputs
-     (list bundler ruby-rspec-2 ruby-rack-test))
-    (synopsis "OAuth 2.0 strategies for Warden")
-    (description
-     "This library extends Warden to support OAuth 2.0 authorized API
-requests.")
-    (home-page "https://github.com/opperator/warden-oauth2")
-    (license license:expat)))
-
-(define-public ruby-webmock
-  (package
-    (name "ruby-webmock")
-    (version "3.11.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "webmock" version))
-       (sha256
-        (base32
-         "1hdlbvfw316lkz251qnfk79drmaay7l51kidvicz41nhvw12xz8v"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list bundler ruby-rspec))
-    (propagated-inputs
-     (list ruby-addressable ruby-crack ruby-hashdiff))
-    (synopsis "Allows stubbing and setting expectations on HTTP requests")
-    (description
-     "WebMock allows stubbing HTTP requests and setting expectations on HTTP
-requests.  This is useful when testing software.")
-    (home-page "https://github.com/bblimke/webmock")
-    (license license:expat)))
-
-(define-public ruby-webmock-2
-  (package
-    (inherit ruby-webmock)
-    (name "ruby-webmock")
-    (version "2.3.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "webmock" version))
-       (sha256
-        (base32
-         "04hkcqsmbfnp8g237pisnc834vpgildklicbjbyikqg0bg1rwcy5"))))))
-
-(define-public ruby-unicode-display-width
-  (package
-    (name "ruby-unicode-display-width")
-    (version "2.4.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "unicode-display_width" version))
-       (sha256
-        (base32
-         "1gi82k102q7bkmfi7ggn9ciypn897ylln1jk9q67kjhr39fj043a"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(;; Test data not included.
-       #:tests? #f))
-    (synopsis "Determine the monospace display width of Ruby strings")
-    (description
-     "@code{Unicode::DisplayWidth} is a Ruby library which can determine the
-display width of strings in Ruby.")
-    (home-page "https://github.com/janlelis/unicode-display_width")
-    (license license:expat)))
-
-;; There is another gem called 'ruby-version' so we use an underscore in this
-;; name
-(define-public ruby_version
-  (package
-    (name "ruby_version")
-    (version "1.0.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "ruby_version" version))
-       (sha256
-        (base32
-         "0lvc7bd5ps3w2vq2wb02i0pi3vfcx2rnckx2ix4rjym1qf52kb2j"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'check 'fix-dependencies
-           (lambda _
-             ;; Remove the Gemfile.lock, as we want to use Guix packages at
-             ;; whatever versions.
-             (delete-file "Gemfile.lock")
-             ;; Remove the included gem files as they unnecessary.
-             (delete-file-recursively "pkg/")
-             ;; Accept any version of rake, rdoc and rspec
-             (substitute* "ruby_version.gemspec"
-               (("%q<rake.*") "%q<rake>)\n")
-               (("%q<rdoc.*") "%q<rdoc>)\n")
-               (("%q<rspec.*") "%q<rspec>)\n"))
-             ;; Do not use bundler.
-             (substitute* "Rakefile"
-               (("Bundler\\.setup.*") "nil\n")))))))
-    (native-inputs
-     (list ruby-rdoc ruby-rspec ruby-rubygems-tasks))
-    (synopsis "Ruby library to help check the Ruby version")
-    (description "@code{ruby_version} provides a @code{RubyVersion} module to simplify
-checking for the right Ruby version in software.")
-    (home-page "https://github.com/janlelis/ruby_version")
-    (license license:expat)))
-
-(define-public ruby-websocket-client-simple
-  (package
-    (name "ruby-websocket-client-simple")
-    (version "0.6.1")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "websocket-client-simple" version))
-              (sha256
-               (base32
-                "1ypl4xvlh5c99zbn20sifv7gv04zi20ly464vsgikfrpn5f37bid"))))
-    (build-system ruby-build-system)
-    (arguments (list #:test-target "default"))
-    (native-inputs (list ruby-eventmachine ruby-websocket-eventmachine-server))
-    (propagated-inputs (list ruby-event-emitter ruby-websocket))
-    (synopsis "Simple WebSocket client for Ruby")
-    (description "This package provides a simple WebSocket client for Ruby.")
-    (home-page "https://github.com/ruby-jp/websocket-client-simple")
-    (license license:expat)))
-
-(define-public ruby-websocket-eventmachine-base
-  (package
-    (name "ruby-websocket-eventmachine-base")
-    (version "1.2.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "websocket-eventmachine-base" version))
-              (sha256
-               (base32
-                "0wiz61mcwgs3k21cdr5l9b4jpg29gl6mflfampww2v525yc3hr1r"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:tests? #f)) ;no test suite
-    (propagated-inputs (list ruby-eventmachine ruby-websocket
-                             ruby-websocket-native))
-    (synopsis "WebSocket base for Ruby client and server")
-    (description "This package provides a WebSocket base for a Ruby client and
-server.")
-    (home-page "https://github.com/imanel/websocket-eventmachine-base")
-    (license license:expat)))
-
-(define-public ruby-websocket-eventmachine-server
-  (package
-    (name "ruby-websocket-eventmachine-server")
-    (version "1.0.1")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "websocket-eventmachine-server" version))
-              (sha256
-               (base32
-                "0iqpzc8s028nck1flqaj784gvyn64wy1h3svpa4y2847wklg8sms"))))
-    (build-system ruby-build-system)
-    ;; TODO: The test suite requires Autobahn, not yet packaged in Guix.
-    (arguments (list #:tests? #f))
-    (propagated-inputs (list ruby-websocket-eventmachine-base))
-    (synopsis "WebSocket server for Ruby")
-    (description "This package provides a WebSocket server for Ruby.")
-    (home-page "https://github.com/imanel/websocket-eventmachine-server")
-    (license license:expat)))
-
-(define-public ruby-websocket-native
-  (package
-    (name "ruby-websocket-native")
-    (version "1.0.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "websocket-native" version))
-              (sha256
-               (base32
-                "1kgvd3gyzh7hk0ddzn85jrs4csxm54qnvla95ldyn6rzgfbjchdn"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:test-target "spec"
-           #:phases #~(modify-phases %standard-phases
-                        (add-before 'check 'disable-problematic-tests
-                          (lambda _
-                            (substitute* "spec/websocket_spec.rb"
-                              (("it \"should have mask_native defined\"" all)
-                               (string-append "x" all)))))
-                        (add-after 'build 'compile
-                          (lambda _
-                            (invoke "rake" "compile"))))))
-    (native-inputs (list ruby-rake-compiler ruby-rspec))
-    (synopsis "Native Ruby extension for the WebSocket gem")
-    (description "This package provides a native extension that can increase
-performance by about 25% compared to the pure Ruby WebSocket implementation.")
-    (home-page "https://github.com/imanel/websocket-ruby-native")
-    (license license:expat)))
-
-(define-public ruby-websocket-driver
-  (package
-   (name "ruby-websocket-driver")
-   (version "0.7.1")
-   (source
-    (origin
-     (method url-fetch)
-     (uri (rubygems-uri "websocket-driver" version))
-     (sha256
-      (base32 "1bxamwqldmy98hxs5pqby3andws14hl36ch78g0s81gaz9b91nj2"))))
-   (build-system ruby-build-system)
-   (arguments
-    '(#:tests? #f))                     ; no included tests
-   (propagated-inputs
-    (list ruby-websocket-extensions))
-   (synopsis "WebSocket protocol handler with pluggable I/O")
-   (description
-    "@code{websocket-driver} provides a complete implementation of the
-WebSocket protocols that can be hooked up to any TCP library")
-   (home-page "https://github.com/faye/websocket-driver-ruby")
-   (license license:expat)))
-
-(define-public ruby-websocket-extensions
-  (package
-    (name "ruby-websocket-extensions")
-    (version "0.1.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "websocket-extensions" version))
-       (sha256
-        (base32
-         "034sdr7fd34yag5l6y156rkbhiqgmy395m231dwhlpcswhs6d270"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(;; No included tests
-       #:tests? #f))
-    (synopsis "Generic extension manager for WebSocket connections")
-    (description
-     "@code{websocket-extensions} provides a container for registering
-extension plugins.")
-    (home-page "https://github.com/faye/websocket-extensions-ruby")
-    (license license:expat)))
-
-(define-public ruby-domain-name
-  (package
-    (name "ruby-domain-name")
-    (version "0.5.20190701")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "domain_name" version))
-       (sha256
-        (base32 "0lcqjsmixjp52bnlgzh4lg9ppsk52x9hpwdjd53k8jnbah2602h0"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'check 'fix-versions
-           (lambda _
-             ;; Fix NameError that appears to already be fixed upstream.
-             (substitute* "Rakefile"
-               (("DomainName::VERSION")
-                "Bundler::GemHelper.gemspec.version"))
-             ;; Loosen unnecessarily strict test-unit version specification.
-             (substitute* "domain_name.gemspec"
-               (("<test-unit>.freeze, \\[\\\"~> 2.5.5") "<test-unit>, [\">0"))
-             #t)))))
-    (propagated-inputs
-     (list ruby-unf))
-    (native-inputs
-     (list ruby-shoulda bundler ruby-test-unit))
-    (synopsis "Domain name manipulation library")
-    (description
-     "@code{domain_name} is a Domain name manipulation library.  It parses a
-domain name ready for extracting the registered domain and TLD (Top Level
-Domain).  It can also be used for cookie domain validation based on the Public
-Suffix List.")
-    (home-page "https://github.com/knu/ruby-domain_name")
-    (license license:bsd-2)))
-
-(define-public ruby-dotenv
-  (package
-    (name "ruby-dotenv")
-    (version "3.1.7")
-    (source (origin
-              (method git-fetch)        ;for the tests
-              (uri (git-reference
-                    (url "https://github.com/bkeepers/dotenv")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "19j0acy12si537hwi4q54q8n5ycmlvfd2ik5y6r7jir6ww06l8yx"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:test-target "spec"
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'do-not-build-dotenv-rails
-            (lambda _
-              ;; The repository includes the definitions of two packages,
-              ;; 'dotenv' and 'dotenv-rails'.  Since we want to package them
-              ;; separately, remove the dotenv-rails and associated Rake
-              ;; tasks.
-              (delete-file "dotenv-rails.gemspec")
-              (delete-file "spec/dotenv/rails_spec.rb")
-              (delete-file "spec/dotenv/log_subscriber_spec.rb")
-              (substitute* "spec/spec_helper.rb"
-                (("require \"dotenv\"" all)
-                 (string-append "require \"pathname\"\n" all)))
-              (substitute* "Rakefile"
-                (("DotenvRailsGemHelper.install_tasks name: \"dotenv-rails\"")
-                 "")
-                ((", \"dotenv-rails:.*\"")
-                 ""))))
-          (replace 'replace-git-ls-files
-            (lambda _
-              (substitute* "dotenv.gemspec"
-                (("`git ls-files (README.md LICENSE lib bin) \\| ([^`]*`)"
-                  all files command)
-                 (string-append
-                  "`find " files " -type f | sort | " command))))))))
-    (native-inputs (list ruby-standard ruby-rspec))
-    (synopsis "Ruby library for setting environment variables")
-    (description "Dotenv is a Ruby library for setting environment variables
-defined in a @file{.env} file.")
-    (home-page "https://github.com/bkeepers/dotenv")
-    (license license:expat)))
-
-(define-public ruby-dotenv-rails
-  (package
-    (inherit ruby-dotenv)
-    (name "ruby-dotenv-rails")
-    (arguments
-     (substitute-keyword-arguments (package-arguments ruby-dotenv)
-       ((#:phases phases '%standard-phases)
-        #~(modify-phases #$phases
-            (delete 'do-not-build-dotenv-rails)
-            (add-after 'unpack 'delete-Gemfile
-              (lambda _
-                ;; It defines extraneous dependencies; remove it.
-                (delete-file "Gemfile")))
-            (add-after 'unpack 'remove-extraneous-gemspec
-              (lambda _
-                (delete-file "dotenv.gemspec")
-                (substitute* "Gemfile"
-                  ((".*\"dotenv\".*") ""))
-                (substitute* "Rakefile"
-                  ;; Remove the dotenv-related Rake tasks.
-                  (("Bundler::GemHelper.install_tasks name: \"dotenv\"")
-                   "")
-                  (("\"dotenv:[^\"]*\", ")
-                   ""))))
-            (replace 'replace-git-ls-files
-              (lambda _
-                (substitute* "dotenv-rails.gemspec"
-                  (("`git ls-files lib \\| grep rails`")
-                   "`find lib -type f | sort | grep rails`"))))))))
-    (native-inputs (list ruby-rspec ruby-spring ruby-standard))
-    (propagated-inputs (list ruby-dotenv ruby-railties))
-    (synopsis "Ruby library for setting environment variables in Rails project")
-    (description "Dotenv is a Ruby library for setting environment variables
-defined in a @file{.env} file.  This is the Rails variant, adapted for use
-with Ruby on Rails projects.")))
-
-(define-public ruby-http-accept
-  (package
-    (name "ruby-http-accept")
-    (version "2.2.0")
-    (source (origin
-              (method git-fetch)        ;for the tests
-              (uri (git-reference
-                    (url "https://github.com/socketry/http-accept")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1d69cy12hqbcqrhw4dibvdq5pqklxsa59kih6pzl479nxq79rgs7"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'remove-missing-key-directive
-            ;; This seem to be a common problem in Ruby projects (see:
-            ;; https://github.com/prawnpdf/ttfunk/issues/99).
-            (lambda _
-              (substitute* "http-accept.gemspec"
-                ((".*spec.signing_key.*") ""))))
-          (replace 'check
-            (lambda* (#:key tests? #:allow-other-keys)
-              (when tests?
-                (invoke "rspec")))))))
-    (native-inputs
-     (list ruby-rspec
-           ruby-covered))
-    (synopsis "Parse Accept and Accept-Language HTTP headers")
-    (description
-     "This package provides a set of parsers for Accept and Accept-Language
-HTTP headers.")
-    (home-page "https://github.com/socketry/http-accept")
-    (license license:expat)))
-
-(define-public ruby-http-accept-1
-  (package
-    (inherit ruby-http-accept)
-    (version "1.7.0")
-    (source (origin
-              (method git-fetch)        ;for the tests
-              (uri (git-reference
-                    (url "https://github.com/ioquatix/http-accept")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name "ruby-http-accept" version))
-              (sha256
-               (base32
-                "1hnqmqpa135s3xgcvv30qzqm8zp88my1aj05m72d2q9cvc31g92z"))))))
-
-(define-public ruby-http-cookie
-  (package
-    (name "ruby-http-cookie")
-    (version "1.0.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "http-cookie" version))
-       (sha256
-        (base32
-         "13rilvlv8kwbzqfb644qp6hrbsj82cbqmnzcvqip1p6vqx36sxbk"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-before 'check 'add-dependency-to-bundler
-            (lambda _
-              ;; Fix NameError
-              (substitute* "Rakefile"
-                (("HTTP::Cookie::VERSION")
-                 "Bundler::GemHelper.gemspec.version")))))))
-    (propagated-inputs
-     (list ruby-domain-name))
-    (native-inputs
-     (list ruby-simplecov
-           bundler
-           ruby-sqlite3
-           ruby-test-unit))
-    (synopsis "Handle HTTP Cookies based on RFC 6265")
-    (description
-     "@code{HTTP::Cookie} is a Ruby library to handle HTTP Cookies based on
-RFC 6265.  It has been designed with security, standards compliance and
-compatibility in mind, to behave just the same as today's major web browsers.
-It has built-in support for the legacy @code{cookies.txt} and
-@code{cookies.sqlite} formats of Mozilla Firefox.")
-    (home-page "https://github.com/sparklemotion/http-cookie")
-    (license license:expat)))
-
-(define-public ruby-httpclient
-  (package
-    (name "ruby-httpclient")
-    (version "2.8.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "httpclient" version))
-       (sha256
-        (base32
-         "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(;; TODO: Some tests currently fail
-       ;; ------
-       ;; 211 tests, 729 assertions, 13 failures, 4 errors, 0 pendings,
-       ;; 2 omissions, 0 notifications
-       ;; 91.866% passed
-       ;; ------
-       ;; 6.49 tests/s, 22.41 assertions/s
-       #:tests? #f
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (if tests?
-                 (invoke "ruby"
-                         "-Ilib"
-                         "test/runner.rb")))))))
-    (native-inputs
-     (list ruby-rack))
-    (synopsis
-     "Make HTTP requests with support for HTTPS, Cookies, authentication and more")
-    (description
-     "The @code{httpclient} ruby library provides functionality related to
-HTTP.  Compared to the @code{net/http} library, @code{httpclient} also provides
-Cookie, multithreading and authentication (digest, NTLM) support.
-
-Also provided is a @command{httpclient} command, which can perform HTTP
-requests either using arguments or with an interactive prompt.")
-    (home-page "https://github.com/nahi/httpclient")
-    (license license:ruby)))
-
-(define-public ruby-ansi
-  (package
-    (name "ruby-ansi")
-    (version "1.5.0")
-    (source
-     (origin
-       (method git-fetch)
-       ;; Fetch from GitHub as the gem does not contain testing code.
-       (uri (git-reference
-              (url "https://github.com/rubyworks/ansi")
-              (commit version)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "1wsz7xxwl3vkh277jb7fd7akqnqqgbvalxzpjwniiqk8ghfprbi5"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         ;; Disable testing to break the cycle ansi, ae, ansi, as well as the
-         ;; cycle ansi, qed, ansi.  Instead simply test that the library can
-         ;; be require'd.
-         (replace 'check
-           (lambda _
-             (invoke "ruby" "-Ilib" "-r" "ansi")))
-         (add-before 'validate-runpath 'replace-broken-symlink
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (file (string-append
-                           out "/lib/ruby/vendor_ruby/gems/ansi-"
-                           ,version "/lib/ansi.yml")))
-               ;; XXX: This symlink is broken since ruby 2.4.
-               ;; https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00034.html
-               (delete-file file)
-               (symlink "../.index" file)))))))
-    (synopsis "ANSI escape code related libraries")
-    (description
-     "This package is a collection of ANSI escape code related libraries
-enabling ANSI colorization and stylization of console output.  Included in the
-library are the @code{Code} module, which defines ANSI codes as constants and
-methods, a @code{Mixin} module for including color methods, a @code{Logger}, a
-@code{ProgressBar}, and a @code{String} subclass.  The library also includes a
-@code{Terminal} module which provides information about the current output
-device.")
-    (home-page "https://rubyworks.github.io/ansi/")
-    (license license:bsd-2)))
-
-(define-public ruby-systemu
-  (package
-    (name "ruby-systemu")
-    (version "2.6.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "systemu" version))
-       (sha256
-        (base32
-         "0gmkbakhfci5wnmbfx5i54f25j9zsvbw858yg3jjhfs5n4ad1xq1"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'check 'set-version
-           (lambda _
-             (setenv "VERSION" ,version))))))
-    (synopsis "Capture of stdout/stderr and handling of child processes")
-    (description
-     "Systemu can be used on any platform to return status, stdout, and stderr
-of any command.  Unlike other methods like @code{open3} and @code{popen4}
-there is no danger of full pipes or threading issues hanging your process or
-subprocess.")
-    (home-page "https://github.com/ahoward/systemu")
-    (license license:ruby)))
-
-(define-public ruby-bcrypt
-  (package
-    (name "ruby-bcrypt")
-    (version "3.1.20")
-    ;; FIXME: Unbundle the bcrypt library used.
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/bcrypt-ruby/bcrypt-ruby")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "0q6h8kmjb34hg6qjv31v374n3cavv00drsfyzv6nybdwipgyg62i"))))
-    (build-system ruby-build-system)
-    (arguments (list #:test-target "default")) ;compile + spec
-    (native-inputs (list ruby-rake-compiler ruby-rspec))
-    (synopsis  "Ruby bcrypt wrapper")
-    (description "This Ruby library provides a simple wrapper to bcrypt, a
-secure hash algorithm for hashing passwords.")
-    (home-page "https://github.com/bcrypt-ruby/bcrypt-ruby")
-    (license license:expat)))
-
-(define-public ruby-bcrypt-pbkdf
-  (package
-    (name "ruby-bcrypt-pbkdf")
-    (version "1.1.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "bcrypt_pbkdf" version))
-              (sha256
-               (base32
-                "0ndamfaivnkhc6hy0yqyk2gkwr6f3bz6216lh74hsiiyk3axz445"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:phases #~(modify-phases %standard-phases
-                        (add-before 'build 'compile
-                          (lambda _
-                            (invoke "rake" "compile"))))))
-    (native-inputs (list ruby-minitest ruby-rake-compiler
-                         ruby-rake-compiler-dock ruby-rdoc))
-    (synopsis "Reading password encrypted Ed25519 keys in Ruby")
-    (description
-     "This gem implements @samp{bcrypt_pbkdf}, which is a variant of
-PBKDF2 (Password-Based Key Derivation Function 2) with bcrypt-based
-pseudorandom function.  This is currently used by @samp{net-ssh} to
-read password encrypted Ed25519 keys.")
-    (home-page "https://github.com/net-ssh/bcrypt_pbkdf-ruby")
-    (license license:expat)))
-
-(define-public ruby-bio-commandeer
-  (package
-    (name "ruby-bio-commandeer")
-    (version "0.4.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "bio-commandeer" version))
-       (sha256
-        (base32
-         "0khpfw1yl5l3d2m8nxpkk32ybc4c3pa5hic3agd160jdfjjjnlni"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           ;; Run test without calling 'rake' so that jeweler is
-           ;; not required as an input.
-           (lambda _
-             (invoke "rspec" "spec/bio-commandeer_spec.rb"))))))
-    (propagated-inputs
-     (list ruby-bio-logger ruby-systemu))
-    (native-inputs
-     (list bundler ruby-rspec))
-    (synopsis "Simplified running of shell commands from within Ruby")
-    (description
-     "Bio-commandeer provides an opinionated method of running shell commands
-from within Ruby.  The advantage of bio-commandeer over other methods of
-running external commands is that when something goes wrong, messages printed
-to the @code{STDOUT} and @code{STDERR} streams are reported, giving extra
-detail to ease debugging.")
-    (home-page "https://github.com/wwood/bioruby-commandeer")
-    (license license:expat)))
-
-(define-public ruby-rubytest
-  (package
-    (name "ruby-rubytest")
-    (version "0.8.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "rubytest" version))
-       (sha256
-        (base32
-         "19jydsdnkl81i9dhdcr4dc34j0ilm68ff2ngnka1hi38xiw4p5qz"))))
-    (build-system ruby-build-system)
-    (arguments
-     ;; Disable regular testing to break the cycle rubytest, qed, brass,
-     ;; rubytest, as well as the cycle rubytest, qed, ansi, rubytest.  Instead
-     ;; simply test that the library can be require'd.
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda _
-             (invoke "ruby" "-Ilib" "-r" "rubytest"))))))
-    (propagated-inputs
-     (list ruby-ansi))
-    (synopsis "Universal test harness for Ruby")
-    (description
-     "Rubytest is a testing meta-framework for Ruby.  It can handle any
-compliant test framework and can run tests from multiple frameworks in a
-single pass.")
-    (home-page "https://rubyworks.github.io/rubytest")
-    (license license:bsd-2)))
-
-(define-public ruby-brass
-  (package
-    (name "ruby-brass")
-    (version "1.2.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "brass" version))
-       (sha256
-        (base32
-         "154lp8rp1vmg60ri1j4cb8hqlw37z7bn575h899v8hzxwi11sxka"))))
-    (build-system ruby-build-system)
-    (arguments
-     ;; Disable tests to break the cycle brass, lemon, ae, qed, brass.
-     ;; Instead simply test that the library can be require'd.
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (invoke "ruby" "-Ilib" "-r" "brass")))))))
-    (synopsis "Basic foundational assertions framework")
-    (description
-     "BRASS (Bare-Metal Ruby Assertion System Standard) is a basic
-foundational assertions framework for other assertion and test frameworks to
-make use of.")
-    (home-page "https://rubyworks.github.io/brass")
-    (license license:bsd-2)))
-
-(define-public ruby-qed
-  (package
-    (name "ruby-qed")
-    (version "2.9.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "qed" version))
-       (sha256
-        (base32
-         "03h4lmlxpcya8j7s2cnyscqlx8v3xl1xgsw5y1wk1scxcgz2vbmr"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (invoke "ruby" "-Ilib" "bin/qed")))))))
-    (native-inputs
-     (list ruby-ae-bootstrap))
-    (propagated-inputs
-     (list ruby-ansi ruby-brass))
-    (synopsis "Test framework utilizing literate programming techniques")
-    (description
-     "@dfn{Quality Ensured Demonstrations} (QED) is a test framework for
-@dfn{Test Driven Development} (TDD) and @dfn{Behaviour Driven
-Development} (BDD) utilizing Literate Programming techniques.  QED sits
-somewhere between lower-level testing tools like @code{Test::Unit} and
-requirement specifications systems like Cucumber.")
-    (home-page "https://rubyworks.github.io/qed")
-    (license license:bsd-2)))
-
-(define-public ruby-que
-  (package
-    (name "ruby-que")
-    (version "1.0.0.beta3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "que" version))
-       (sha256
-        (base32
-         "0gr9pb814d4qj3ds98g6cjrdk7wv0yg8aqbm7c1lmgl87jkg8q04"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; No included tests
-    (synopsis "Job queue using PostgreSQL written in Ruby")
-    (description
-     "This package provides a job queue that uses PostgreSQL for storing jobs
-and locking between worker processes.")
-    (home-page "https://github.com/chanks/que")
-    (license license:expat)))
-
-(define-public ruby-queue-classic
-  (package
-    (name "ruby-queue-classic")
-    (version "4.0.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "queue_classic" version))
-              (sha256
-               (base32
-                "0npyhajf2fc80apkw9s2kj0n254w5lcl4xpjidg5d5w1fb19abh6"))))
-    (build-system ruby-build-system)
-    (arguments (list #:tests? #f))      ;tests require a postgresql server
-    (native-inputs (list ruby-activerecord ruby-minitest-reporters))
-    (propagated-inputs (list ruby-pg))
-    (synopsis "Queuing library for Ruby")
-    (description "@code{queue_classic} is a queuing library for Ruby
-applications (Rails, Sinatra, etc.)  @code{queue_classic} features
-asynchronous job polling, database maintained locks and has a single
-dependency, @code{pg}.")
-    (home-page "https://github.com/QueueClassic/queue_classic")
-    (license license:expat)))
-
-(define-public ruby-pairing-heap
-  (package
-    (name "ruby-pairing-heap")
-    (version "3.1.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "pairing_heap" version))
-              (sha256
-               (base32
-                "059kqpw53cancnp0bp7y1s74y1955riw33w3lqfbnms4b4mdh5zj"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'patch
-            (lambda _
-              (substitute* "Rakefile"
-                (("require \"standard/rake\"") "")
-                ((":\"standard:fix\",") "")))))))
-    (synopsis "Priority queue in pure Ruby")
-    (description "This package provides a performant priority queue in pure
-ruby with support for changing priority using pairing heap data structure")
-    (home-page "https://github.com/mhib/pairing_heap")
-    (license license:expat)))
-
-(define-public ruby-ae
-  (package
-    (name "ruby-ae")
-    (version "1.8.2")
-    (source
-     (origin
-       (method git-fetch)
-       ;; Fetch from github so tests are included.
-       (uri (git-reference
-             (url "https://github.com/rubyworks/ae")
-             (commit version)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "11299jj5ma8mi7b4majkyjy70y6zlqpgl8aql1c5lvfjavlpwmlp"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (invoke "qed"))))
-         (add-before 'validate-runpath 'replace-broken-symlink
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (file (string-append
-                           out "/lib/ruby/vendor_ruby/gems/ae-"
-                           ,version "/lib/ae.yml")))
-               ;; XXX: This symlink is broken since ruby 2.4.
-               ;; https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00034.html
-               (delete-file file)
-               (symlink "../.index" file)))))))
-    (propagated-inputs
-     (list ruby-ansi))
-    (native-inputs
-     (list ruby-qed))
-    (synopsis "Assertions library")
-    (description
-     "Assertive Expressive (AE) is an assertions library specifically designed
-for reuse by other test frameworks.")
-    (home-page "https://rubyworks.github.io/ae/")
-    (license license:bsd-2)))
-
-(define-public ruby-ae-bootstrap
-  (hidden-package
-   (package/inherit ruby-ae
-     (arguments
-      (substitute-keyword-arguments
-          (package-arguments ruby-ae)
-        ((#:tests? _ #t) #f)))
-     (native-inputs '()))))
-
-(define-public ruby-lemon
-  (package
-    (name "ruby-lemon")
-    (version "0.9.1")
-    (source
-    (origin
-      (method url-fetch)
-      (uri (rubygems-uri "lemon" version))
-      (sha256
-       (base32
-        "0gqhpgjavgpvx23rqpfqcv3d5bs8gc7lr9yvj8kxgp7mfbdc2jcm"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check (lambda _ (invoke "qed"))))))
-    (propagated-inputs
-     (list ruby-ae ruby-ansi ruby-rubytest))
-    (native-inputs
-     (list ruby-qed))
-    (synopsis "Test framework correlating code structure and test unit")
-    (description
-     "Lemon is a unit testing framework that enforces highly formal
-case-to-class and unit-to-method test construction.  This enforcement can help
-focus concern on individual units of behavior.")
-    (home-page "https://rubyworks.github.io/lemon")
-    (license license:bsd-2)))
-
-(define-public ruby-rubytest-cli
-  (package
-    (name "ruby-rubytest-cli")
-    (version "0.2.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "rubytest-cli" version))
-       (sha256
-        (base32
-         "0n7hv4k1ba4fm3i98c6ydbsqhkxgbp52mhi70ba1x3mqzfvk438p"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:tests? #f)) ; no tests
-    (propagated-inputs
-     (list ruby-ansi ruby-rubytest))
-    (synopsis "Command-line interface for rubytest")
-    (description
-     "Rubytest CLI is a command-line interface for running tests for
-Rubytest-based test frameworks.  It provides the @code{rubytest} executable.")
-    (home-page "https://rubyworks.github.io/rubytest-cli")
-    (license license:bsd-2)))
-
-(define-public ruby-hashery
-  (package
-    (name "ruby-hashery")
-    (version "2.1.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "hashery" version))
-       (sha256
-        (base32
-         "0qj8815bf7q6q7llm5rzdz279gzmpqmqqicxnzv066a020iwqffj"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda _
-             (invoke "qed")
-             (invoke "rubytest" "-Ilib" "-Itest" "test/"))))))
-    (native-inputs
-     (list ruby-rubytest-cli ruby-qed ruby-lemon))
-    (synopsis "Hash-like classes with extra features")
-    (description
-     "The Hashery is a tight collection of @code{Hash}-like classes.
-Included are the auto-sorting @code{Dictionary} class, the efficient
-@code{LRUHash}, the flexible @code{OpenHash} and the convenient
-@code{KeyHash}.  Nearly every class is a subclass of the @code{CRUDHash} which
-defines a CRUD (Create, Read, Update and Delete) model on top of Ruby's
-standard @code{Hash} making it possible to subclass and augment to fit any
-specific use case.")
-    (home-page "https://rubyworks.github.io/hashery")
-    (license license:bsd-2)))
-
-(define-public ruby-rc4
-  (package
-    (name "ruby-rc4")
-    (version "0.1.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "ruby-rc4" version))
-       (sha256
-        (base32
-         "00vci475258mmbvsdqkmqadlwn6gj9m01sp7b5a3zd90knil1k00"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda _
-             (invoke "rspec" "spec/rc4_spec.rb"))))))
-    (native-inputs
-     (list ruby-rspec-2))
-    (synopsis "Implementation of the RC4 algorithm")
-    (description
-     "RubyRC4 is a pure Ruby implementation of the RC4 algorithm.")
-    (home-page "https://github.com/caiges/Ruby-RC4")
-    (license license:expat)))
-
-(define-public ruby-afm
-  (package
-    (name "ruby-afm")
-    (version "0.2.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "afm" version))
-       (sha256
-        (base32
-         "06kj9hgd0z8pj27bxp2diwqh6fv7qhwwm17z64rhdc4sfn76jgn8"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list bundler))
-    (synopsis "Read Adobe Font Metrics (afm) files")
-    (description
-     "This library provides methods to read @dfn{Adobe Font Metrics} (afm)
-files and use the data therein.")
-    (home-page "https://github.com/halfbyte/afm")
-    (license license:expat)))
-
-(define-public ruby-ascii85
-  (package
-    (name "ruby-ascii85")
-    (version "1.0.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "Ascii85" version))
-       (sha256
-        (base32
-         "0658m37jjjn6drzqg1gk4p6c205mgp7g1jh2d00n4ngghgmz5qvs"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list bundler))
-    (synopsis "Encode and decode Ascii85 binary-to-text encoding")
-    (description
-     "This library provides methods to encode and decode Ascii85
-binary-to-text encoding.  The main modern use of Ascii85 is in PostScript and
-@dfn{Portable Document Format} (PDF) file formats.")
-    (home-page "https://github.com/datawraith/ascii85gem")
-    (license license:expat)))
-
-(define-public ruby-ttfunk
-  (package
-    (name "ruby-ttfunk")
-    (version "1.7.0")
-    (source
-     (origin
-       (method git-fetch)
-       ;; Fetch from github as the gem does not contain testing code.
-       (uri (git-reference
-             (url "https://github.com/prawnpdf/ttfunk")
-             (commit version)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "1jyxn928mpyb1sikjd93s3v8fmh33232pq41ziaph513j7am6fi5"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:test-target "spec"         ;avoid the rubocop target
-           #:phases
-           #~(modify-phases %standard-phases
-               (add-after 'unpack 'remove-missing-key-directive
-                 ;; This seem to be a common problem in Ruby projects (see:
-                 ;; https://github.com/prawnpdf/ttfunk/issues/99).
-                 (lambda _
-                   (substitute* "ttfunk.gemspec"
-                     ((".*spec.signing_key.*") "")))))))
-    (native-inputs (list ruby-prawn-dev))
-    (synopsis "Font metrics parser for the Prawn PDF generator")
-    (description
-     "TTFunk is a TrueType font parser written in pure Ruby.  It is used as
-part of the Prawn PDF generator.")
-    (home-page "https://github.com/prawnpdf/ttfunk")
-    ;; From the README: "Matz's terms for Ruby, GPLv2, or GPLv3. See LICENSE
-    ;; for details."
-    (license %prawn-project-licenses)))
-
-(define-public ruby-puma
-  (package
-    (name "ruby-puma")
-    (version "6.6.0")
-    (source
-     (origin
-       (method git-fetch)               ;for tests
-       (uri (git-reference
-             (url "https://github.com/puma/puma")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "1pdd7s403pi4y75s1sb4jkghhmm2w9zcqifj7z7yx4z0qfs7lvzv"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'patch-Gemfile
-            (lambda _
-              (substitute* "Gemfile"
-                (("gem \"rake-compiler\".*")
-                 "gem 'rake-compiler'\n"))))
-          (add-after 'unpack 'disable-rubocop
-            (lambda _
-              (setenv "PUMA_NO_RUBOCOP" "1")))
-          (add-after 'unpack 'use-rack-2
-            (lambda _
-              (setenv "PUMA_CI_RACK" "rack2")
-              (setenv "PUMA_CI_RACK_2" "1")))
-          (add-before 'build 'increase-resource-limits
-            (lambda _
-              ;; The test suite requires a higher number of open files.  Try
-              ;; increasing the soft resource limit of max open files to 2048,
-              ;; or equal to the hard limit, whichever is lower.
-              (call-with-values (lambda () (getrlimit 'nofile))
-                (lambda (soft hard)
-                  (when (and soft (< soft 2048))
-                    (if hard
-                        (setrlimit 'nofile (min hard 2048) hard)
-                        (setrlimit 'nofile 2048 #f))
-                    (format
-                     #t "increased maximum number of open files from ~d to ~d~%"
-                     soft (if hard (min hard 2048) 2048)))))))
-          (add-before 'build 'fix-gemspec
-            (lambda _
-              (substitute* "puma.gemspec"
-                (("`git ls-files -- bin docs ext lib tools`")
-                 "`find bin docs ext lib tools -type f |sort`"))))
-          (delete 'check)               ;moved after install
-          (add-after 'install 'check
-            (lambda* (#:key tests? #:allow-other-keys)
-              (when tests?
-                (invoke "bundle" "exec" "rake" "test"))))
-          (add-after 'install 'delete-mkmf.log
-            (lambda _
-              ;; Rubygems installs build log files that embed volatile file
-              ;; names (see:
-              ;; https://github.com/rubygems/rubygems/issues/6259).
-              (for-each delete-file (find-files #$output "^mkmf\\.log$"))))
-          (add-before 'check 'disable-problematic-tests
-            (lambda _
-              (let-syntax ((skip-tests
-                            (syntax-rules ()
-                              ((_ file test ...)
-                               (substitute* file
-                                 (((string-append "def " test ".*") all)
-                                  (string-append
-                                   all "    skip('fails on guix')\n")) ...)))))
-                ;; The test failures were reported at:
-                ;; https://github.com/puma/puma/issues/3093, but appear to be
-                ;; caused by the Guix build container, perhaps the lack of
-                ;; zombie process reaping (see:
-                ;; https://issues.guix.gnu.org/30948).
-                ;;  All the tests in the 'test_worker_gem_independence.rb'
-                ;;  module fail with "Expected false to be truthy.".
-                (delete-file "test/test_worker_gem_independence.rb")
-                (skip-tests "test/test_integration_ssl_session.rb"
-                            ;; The TLS 1.2 test fails for unknown reasons.
-                            "test_off_tls1_2")
-                (skip-tests "test/test_integration_cluster.rb"
-                            "test_fork_worker_on_refork"
-                            "test_hot_restart_does_not_drop_connections"
-                            "test_culling_strategy_oldest_fork_worker"
-                            "test_usr1_fork_worker")
-                (skip-tests "test/test_integration_pumactl.rb"
-                            "test_refork_cluster")
-                ;; The Openssl certificate has expired, causing these tests to fail.
-                (skip-tests "test/test_puma_server_ssl.rb"
-                            "test_verify_fail_if_client_expired_cert"
-                            "test_verify_client_cert"
-                            "test_server_ssl_with_cert_pem_and_key_pem")
-                (skip-tests "test/test_integration_ssl.rb"
-                            "test_ssl_run_with_curl_client")
-                (skip-tests "test/test_web_concurrency_auto.rb" "\
-test_web_concurrency_with_concurrent_ruby_unavailable")
-                (skip-tests "test/helpers/integration.rb"
-                            "test_puma_started_log_writing"))))
-          (add-before 'check 'relax-test-case-timeout
-            (lambda _
-              ;; The default value is 45 s and easily causes timeouts.
-              (setenv "TEST_CASE_TIMEOUT" "600")))
-          (add-before 'check 'set-home
-            (lambda _
-              ;; Some tests fail if the cannot write to HOME.
-              (setenv "HOME" "/tmp")))
-          (add-before 'check 'set-paths
-            (lambda _
-              ;; The test suite requires the 'puma' command to be on PATH.
-              (setenv "PATH" (string-append (getenv "PATH") ":"
-                                            #$output "/bin"))
-              (setenv "GEM_PATH" (string-append
-                                  (getenv "GEM_PATH") ":"
-                                  #$output "/lib/ruby/vendor_ruby")))))))
-    (native-inputs
-     (list bundler
-           curl
-           ruby-json
-           ruby-localhost
-           ruby-m
-           ruby-minitest-proveit
-           ruby-minitest-retry
-           ruby-minitest-stub-const
-           ruby-rack
-           ruby-rackup-1
-           ruby-rake-compiler
-           ruby-webrick))
-    (inputs
-     (list openssl
-           ruby-nio4r))
-    (propagated-inputs
-     (list ruby-concurrent-ruby))
-    (synopsis "Simple, concurrent HTTP server for Ruby/Rack")
-    (description
-     "Puma is a simple, fast, threaded, and highly concurrent HTTP 1.1 server
-for Ruby/Rack applications.  Puma is intended for use in both development and
-production environments.  In order to get the best throughput, it is highly
-recommended that you use a Ruby implementation with real threads like Rubinius
-or JRuby.")
-    (home-page "https://puma.io/")
-    (license license:expat)))
-
-(define-public ruby-hoe-git
-  (package
-    (name "ruby-hoe-git")
-    (version "1.6.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "hoe-git" version))
-       (sha256
-        (base32
-         "10jmmbjm0lkglwxbn4rpqghgg1ipjxrswm117n50adhmy8yij650"))))
-    (build-system ruby-build-system)
-    (propagated-inputs
-     (list ruby-hoe-3))
-    (synopsis "Hoe plugins for tighter Git integration")
-    (description
-     "This package provides a set of Hoe plugins for tighter Git integration.
-It provides tasks to automate release tagging and pushing and changelog
-generation.")
-    (home-page "https://github.com/jbarnette/hoe-git")
-    (license license:expat)))
-
-(define-public ruby-hoe-markdown
-  (package
-    (name "ruby-hoe-markdown")
-    (version "1.4.0")
-    (home-page "https://github.com/flavorjones/hoe-markdown")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url home-page)
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "0wb0yjdx9gx9r0cahpx42pblvglgh1i9pdfxjavq7f40nan2g076"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:test-target "spec"
-       #:phases (modify-phases %standard-phases
-                  (add-before 'check 'disable-bundler-dependency
-                    (lambda _
-                      (substitute* "spec/spec_helper.rb"
-                        (("require.*bundler/setup.*")
-                         "")))))))
-    (native-inputs
-     (list ruby-rspec))
-    (propagated-inputs
-     (list ruby-rake))
-    (synopsis "Hoe plugin with Markdown helpers")
-    (description
-     "This package provides a Hoe plugin with various Markdown helpers, which
-can be used to e.g. hyperlink Markdown documentation between project files.")
-    (license license:expat)))
-
-(define-public ruby-sequel
-  (package
-    (name "ruby-sequel")
-    (version "5.47.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "sequel" version))
-       (sha256
-        (base32
-         "03pmhj4kc3ga75wy397l57bvd18jxxmrk3qsznjw93b993qgvj3z"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; Avoid dependency loop with ruby-minitest-hooks.
-    (synopsis "Database toolkit for Ruby")
-    (description "Sequel provides thread safety, connection pooling and a
-concise DSL for constructing SQL queries and table schemas.  It includes a
-comprehensive ORM layer for mapping records to Ruby objects and handling
-associated records.")
-    (home-page "https://sequel.jeremyevans.net")
-    (license license:expat)))
-
-(define-public ruby-timecop
-  (package
-    (name "ruby-timecop")
-    (version "0.9.6")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "timecop" version))
-       (sha256
-        (base32
-         "0dlx4gx0zh836i7nzna03xdl7fc233s5z6plnr6k3kw46ah8d1fc"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-before 'check 'set-check-rubylib
-            (lambda _
-              ;; Set RUBYLIB so timecop tests finds its own lib.
-              (setenv "RUBYLIB" "lib"))))))
-    (native-inputs
-     (list bundler
-           ruby-minitest-rg
-           ruby-mocha
-           ruby-activesupport
-           ruby-pry))
-    (synopsis "Test mocks for time-dependent functions")
-    (description
-     "Timecop provides \"time travel\" and \"time freezing\" capabilities,
-making it easier to test time-dependent code.  It provides a unified method to
-mock @code{Time.now}, @code{Date.today}, and @code{DateTime.now} in a single
-call.")
-    (home-page "https://github.com/travisjeffery/timecop")
-    (license license:expat)))
-
-(define-public ruby-concurrent-ruby
-  (package
-    (name "ruby-concurrent-ruby")
-    (version "1.3.5")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference       ;for tests
-                    (url "https://github.com/ruby-concurrency/concurrent-ruby")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0f0apna8k9cwnpa4lddwimywxzznrd4rjv4m0lka2i54z49iky73"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:tests? #f  ;the test suite is run in ruby-concurrent-ruby-edge
-      #:phases #~(modify-phases %standard-phases
-                   (add-after 'unpack 'delete-unwanted-gemspecs
-                     (lambda _
-                       (for-each delete-file
-                                 '("concurrent-ruby-ext.gemspec"
-                                   "concurrent-ruby-edge.gemspec"))))
-                   (add-after 'unpack 'do-not-install-concurrent_ruby.jar
-                     (lambda _
-                       ;; This file is only built when building the Java
-                       ;; extension.
-                       (substitute* "concurrent-ruby.gemspec"
-                         (("'lib/concurrent-ruby/concurrent/concurrent_ruby.jar'")
-                          "")))))))
-    (synopsis "Concurrency library for Ruby")
-    (description "Concurrent Ruby includes concurrency tools such as agents,
-futures, promises, thread pools, actors, supervisors, and more.  It is
-inspired by Erlang, Clojure, Go, JavaScript, actors, and classic concurrency
-patterns.")
-    (home-page "https://github.com/ruby-concurrency/concurrent-ruby")
-    (license license:expat)))
-
-;;; The 'gem' is called 'concurrent-ruby'; reversing its name was confusing
-;;; and failed to be picked by the gem importer (which led to this newer
-;;; package).
-(define-public ruby-concurrent
-  (deprecated-package "ruby-concurrent" ruby-concurrent-ruby))
-
-(define-public ruby-concurrent-ruby-ext
-  (package
-    (inherit ruby-concurrent-ruby)
-    (name "ruby-concurrent-ruby-ext")
-    (arguments
-     (list
-      #:tests? #f                      ;tested as part of concurrent-ruby-edge
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'delete-unwanted-gemspecs
-            (lambda _
-              (for-each delete-file
-                        '("concurrent-ruby.gemspec"
-                          "concurrent-ruby-edge.gemspec")))))))
-    (native-inputs (list ruby-rake-compiler))
-    (propagated-inputs (list ruby-concurrent-ruby))
-    (synopsis "C extensions for concurrent-ruby")
-    (description "This package provides C extensions to optimize the
-concurrent-ruby gem when running under the Matz's Ruby Interpreter (MRI, also
-known as CRuby).")))
-
-(define-public ruby-concurrent-ruby-edge
-  (package
-    (inherit ruby-concurrent-ruby)
-    (name "ruby-concurrent-ruby-edge")
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'delete-unwanted-gemspecs
-            (lambda _
-              (for-each delete-file
-                        '("concurrent-ruby.gemspec"
-                          "concurrent-ruby-ext.gemspec"))))
-          ;; The tests rely on the Gem being installed, so move the check
-          ;; phase after the install phase.
-          (delete 'check)
-          (add-after 'install 'check
-            (lambda* (#:key tests? #:allow-other-keys)
-              (setenv "GEM_PATH" (string-append
-                                  (getenv "GEM_PATH") ":"
-                                  #$output "/lib/ruby/vendor_ruby"))
-              (when tests?
-                (invoke "rake" "ci")))))))
-    (native-inputs
-     (list ruby-rake-compiler
-           ruby-rake-compiler-dock
-           ruby-rspec
-           ruby-timecop
-           ruby-yard))
-    (propagated-inputs
-     (list ruby-concurrent-ruby ruby-concurrent-ruby-ext))
-    (synopsis "Edge features and additions to the @code{concurrent-ruby} gem")
-    (description "The @code{concurrent-ruby-edge} gem includes
-@code{concurrent-ruby} features that are under active development and may
-change frequently.  They are expected not to keep backward
-compatibility (there may also lack tests and documentation), although semantic
-versions are obeyed though.  Features developed in @code{concurrent-ruby-edge}
-are expected to move to @code{concurrent-ruby} when final.")))
-
-(define-public ruby-pkg-config
-  (package
-    (name "ruby-pkg-config")
-    (version "1.2.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "pkg-config" version))
-       (sha256
-        (base32
-         "056mzqdh4yjznsg36fi0xiq76f24vxlhzh2n4az919l3x5k318ar"))))
-    (build-system ruby-build-system)
-    (arguments
-     ;; Tests require extra files not included in the gem.
-     `(#:tests? #f))
-    (synopsis "Detect libraries for compiling Ruby native extensions")
-    (description
-     "@code{pkg-config} can be used in your extconf.rb to properly detect need
-libraries for compiling Ruby native extensions.")
-    (home-page "https://github.com/ruby-gnome2/pkg-config")
-    (license license:lgpl2.0+)))
-
-(define-public ruby-net-http-digest-auth
-  (package
-    (name "ruby-net-http-digest-auth")
-    (version "1.4.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "net-http-digest_auth" version))
-       (sha256
-        (base32
-         "1nq859b0gh2vjhvl1qh1zrk09pc7p54r9i6nnn6sb06iv07db2jb"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list ruby-hoe
-           ruby-minitest))
-    (synopsis "RFC 2617 HTTP digest authentication library")
-    (description
-     "This library implements HTTP's digest authentication scheme based on
-RFC 2617.  This enables the use of the digest authentication scheme instead
-of the more insecure basic authentication scheme.")
-    (home-page "https://github.com/drbrain/net-http-digest_auth")
-    (license license:expat)))
-
-(define-public ruby-mail
-  (package
-    (name "ruby-mail")
-    (version "2.8.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "mail" version))
-       (sha256
-        (base32 "1bf9pysw1jfgynv692hhaycfxa8ckay1gjw5hz3madrbrynryfzc"))))
-    (build-system ruby-build-system)
-    (propagated-inputs
-     (list ruby-mini-mime))
-    (arguments
-     '(#:tests? #f)) ; no rakefile
-    (synopsis "Mail library for Ruby")
-    (description
-     "Mail is an internet library for Ruby that is designed to handle email
-generation, parsing and sending.  The purpose of this library is to provide
-a single point of access to handle all email functions, including sending
-and receiving emails.  All network type actions are done through proxy
-methods to @code{Net::SMTP}, @code{Net::POP3} etc.
-
-Mail has been designed with a very simple object oriented system that
-really opens up the email messages you are parsing, if you know what you
-are doing, you can fiddle with every last bit of your email directly.")
-    (home-page "https://github.com/mikel/mail")
-    (license license:expat)))
-
-(define-public ruby-net-protocol
-  (package
-    (name "ruby-net-protocol")
-    (version "0.2.1")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/ruby/net-protocol")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0niivmjx7bc6vsylc1ag17mw6mnvjxw02s7cin1f0422xyr8msq9"))))
-    (build-system ruby-build-system)
-    (propagated-inputs (list ruby-timeout))
-    (synopsis "Abstract interface for Ruby network clients")
-    (description "This Ruby library provides an abstract interface for network
-clients.")
-    (home-page "https://github.com/ruby/net-protocol")
-    (license (list license:bsd-2))))
-
-(define-public ruby-email-reply-trimmer
-  (package
-    (name "ruby-email-reply-trimmer")
-    (version "0.1.13")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "email_reply_trimmer" version))
-        (sha256
-         (base32
-          "1jgcxifm48xq5dz9k47q43pqm5bfnf14l62l3bqhmv8f6z8dw4ki"))))
-    (build-system ruby-build-system)
-    (synopsis "Trim replies from plain text email")
-    (description "EmailReplyTrimmer is a Ruby small library to trim replies
-from plain text email.")
-    (home-page "https://github.com/discourse/email_reply_trimmer")
-    (license license:expat)))
-
-(define-public ruby-mathn
-  (package
-    (name "ruby-mathn")
-    (version "0.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "mathn" version))
-       (sha256
-        (base32
-         "1wn812llln9jzgybz2d7536q39z3gi99i6fi0j1dapcpzvhgrr0p"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list bundler ruby-rake-compiler))
-    (synopsis "Extends math operations for increased precision")
-    (description
-     "This gem makes mathematical operations more precise in Ruby and
-integrates other mathematical standard libraries.  Prior to Ruby 2.5,
-@code{mathn} was part of the Ruby standard library.")
-    (home-page "https://github.com/ruby/mathn")
-    (license license:bsd-2)))
-
-(define-public ruby-code-statistics
-  (package
-    (name "ruby-code-statistics")
-    (version "0.2.13")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "code_statistics" version))
-       (sha256
-        (base32
-         "07rdpsbwbmh4vp8nxyh308cj7am2pbrfhv9v5xr2d5gq8hnnsm93"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:tests? #f)) ; Not all test code is included in gem.
-    (synopsis "Port of the rails 'rake stats' method")
-    (description
-     "This gem is a port of the rails 'rake stats' method so it can be made
-more robust and work for non rails projects.")
-    (home-page "https://github.com/danmayer/code_statistics")
-    (license license:expat)))
-
-(define-public ruby-ruby2-keywords
-  (package
-    (name "ruby-ruby2-keywords")
-    (version "0.0.5")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/ruby/ruby2_keywords")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1jhqb152zfr2yrxj6j8rzakkwdkg5viggwnnqrrfxwwy63msdi97"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'delete-extraneous-rake-files
-            (lambda _
-              (for-each delete-file '("rakelib/changelogs.rake"
-                                      "rakelib/epoch.rake"
-                                      "rakelib/version.rake"))))
-          (add-after 'extract-gemspec 'adjust-files
-            (lambda _
-              (substitute* "ruby2_keywords.gemspec"
-                ;; This file is not present in the git checkout.
-                ((".*\"ChangeLog\",.*") "")))))))
-    (synopsis "Shim library for Module#ruby2_keywords")
-    (description "Provides empty @code{Module#ruby2_keywords} method, for the
-forward source-level compatibility against @command{ruby2.7} and
-@command{ruby3}.")
-    (home-page "https://github.com/ruby/ruby2_keywords")
-    (license license:bsd-2)))
-
-(define-public ruby-rubypants
-  (package
-    (name "ruby-rubypants")
-    (version "0.6.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "rubypants" version))
-              (sha256
-               (base32
-                "0xpqkslan2wkyal2h9qhplkr5d4sdn7q6csigrhnljjpp8j4qfsh"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; need Codecov
-    (synopsis "Port of the smart-quotes library SmartyPants")
-    (description
-     "RubyPants is a Ruby port of the smart-quotes library SmartyPants.  The
-original SmartyPants is a web publishing plug-in for Movable Type, Blosxom,
-and BBEdit that easily translates plain ASCII punctuation characters into
-smart typographic punctuation HTML entities.")
-    (home-page "https://github.com/jmcnevin/rubypants")
-    (license license:bsd-2)))
-
-(define-public ruby-org-ruby
-  (package
-    (name "ruby-org-ruby")
-    (version "0.9.12")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "org-ruby" version))
-              (sha256
-               (base32
-                "0x69s7aysfiwlcpd9hkvksfyld34d8kxr62adb59vjvh8hxfrjwk"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; no rakefile
-    (propagated-inputs
-     (list ruby-rubypants))
-    (synopsis "Org-mode parser written in Ruby")
-    (description
-     "Org-ruby is an org-mode parser written in Ruby.  The most significant
-thing this library does today is convert org-mode files to HTML or Textile or
-Markdown.")
-    (home-page "https://github.com/wallyqs/org-ruby")
-    (license license:expat)))
-
-(define-public ruby-rake
-  (package
-    (name "ruby-rake")
-    (version "13.0.6")
-    (source
-     (origin
-       (method git-fetch)               ;for tests
-       (uri (git-reference
-             (url "https://github.com/ruby/rake")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "0c77xyl677s966f8yvk8yv7l31c1ffa1yl4kcwiram219h0s76in"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list bundler))
-    (synopsis "Rake is a Make-like program implemented in Ruby")
-    (description
-     "Rake is a Make-like program where tasks and dependencies are specified
-in standard Ruby syntax.")
-    (home-page "https://github.com/ruby/rake")
-    (license license:expat)))
-
-(define-public ruby-rake-manifest
-  (package
-    (name "ruby-rake-manifest")
-    (version "0.2.3")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/mvz/rake-manifest")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "16k2yvg773c25kp2vhzhp01rhf53k0nhrcmpv34k1fridw90r2k8"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:test-target "default"
-      #:phases
-      #~(modify-phases %standard-phases
-          (delete 'check)               ;moved after the install phase
-          (add-after 'install 'check
-            (assoc-ref %standard-phases 'check))
-          (add-before 'check 'set-GEM_PATH
-            (lambda _
-              (setenv "GEM_PATH" (string-append
-                                  (getenv "GEM_PATH") ":"
-                                  #$output "/lib/ruby/vendor_ruby")))))))
-    (native-inputs (list ruby-rspec ruby-simplecov))
-    (synopsis "Rake tasks to generate and check a manifest file")
-    (description "This package provides Rake tasks to generate and check a
-manifest file.")
-    (home-page "https://github.com/mvz/rake-manifest")
-    (license license:expat)))
-
-(define-public ruby-sfl
-  (package
-    (name "ruby-sfl")
-    (version "2.3")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "sfl" version))
-              (sha256
-               (base32
-                "1qm4hvhq9pszi9zs1cl9qgwx1n4wxq0af0hq9sbf6qihqd8rwwwr"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:tests? #f  ;; some tests fail, gem is a dummy for ruby >= 1.9 anyway
-       #:test-target "spec"))
-    (synopsis "Spawn for Ruby 1.8")
-    (description "This pure ruby library provides @code{spawn()} which is
-almost perfectly compatible with ruby 1.9's.")
-    (home-page "https://github.com/ujihisa/spawn-for-legacy")
-    (license license:bsd-2)))
-
-(define-public ruby-childprocess
-  (package
-    (name "ruby-childprocess")
-    (version "4.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "childprocess" version))
-       (sha256
-        (base32
-         "1lvcp8bsd35g57f7wz4jigcw2sryzzwrpcgjwwf3chmjrjcww5in"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:tests? #f  ;; one failing test, even with fixes below
-       #:test-target "spec"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch
-           (lambda _
-             (substitute* "spec/spec_helper.rb"
-               (("#!/bin/sh\\\\n") (string-append "#!" (which "sh") "\\n"))))))))
-    (native-inputs
-     (list ruby-coveralls ruby-rspec))
-    (synopsis "Control external programs running in the background, in Ruby")
-    (description "@code{childprocess} provides a gem to control external
-programs running in the background, in Ruby.")
-    (home-page "https://github.com/enkessler/childprocess")
-    (license license:expat)))
-
-(define-public ruby-public-suffix
-  (package
-    (name "ruby-public-suffix")
-    (version "4.0.5")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "public_suffix" version))
-              (sha256
-               (base32
-                "0vywld400fzi17cszwrchrzcqys4qm6sshbv73wy5mwcixmrgg7g"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         ;; Remove the requirement on Rubocop, as it isn't useful to run, and
-         ;; including it as an input can lead to circular dependencies.
-         (add-after 'unpack 'remove-rubocop-from-Rakefile
-           (lambda _
-             (substitute* "Rakefile"
-               (("require \"rubocop/rake\\_task\"") "")
-               (("RuboCop::RakeTask\\.new") "")))))))
-    (native-inputs
-     (list bundler ruby-yard/minimal ruby-mocha ruby-minitest-reporters))
-    (home-page "https://simonecarletti.com/code/publicsuffix-ruby/")
-    (synopsis "Domain name parser")
-    (description "The gem @code{public_suffix} is a domain name parser,
-written in Ruby, and based on the @dfn{Public Suffix List}.  A public suffix
-is one under which Internet users can (or historically could) directly
-register names.  Some examples of public suffixes are @code{.com},
-@code{.co.uk} and @code{pvt.k12.ma.us}.  The Public Suffix List is a list of
-all known public suffixes.")
-    (license license:expat)))
-
-(define-public ruby-addressable
-  (package
-    (name "ruby-addressable")
-    (version "2.8.1")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "addressable" version))
-              (sha256
-               (base32
-                "1ypdmpdn20hxp5vwxz3zc04r5xcwqc25qszdlg41h8ghdqbllwmw"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:test-target "spec"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'disable-bundler
-           (lambda _
-             (substitute* "spec/spec_helper.rb"
-               (("require 'bundler/setup'") ""))))
-         (add-after 'unpack 'remove-unnecessary-dependencies-from-Gemfile
-           (lambda _
-             (substitute* "Gemfile"
-               (("git: 'https://github.com/sporkmonger/rack-mount.git',") "")
-               ((".*launchy.*") "")
-               ((".*rake.*") "gem 'rake'\n")
-               ((".*redcarpet.*") ""))))
-         (add-before 'check 'delete-network-dependent-test
-           (lambda _
-             (delete-file "spec/addressable/net_http_compat_spec.rb"))))))
-    (native-inputs
-     (list bundler
-           ruby-idn-ruby
-           ruby-rspec
-           ruby-rspec-its-minimal
-           ruby-simplecov
-           ruby-sporkmonger-rack-mount
-           ruby-yard/minimal))
-    (propagated-inputs
-     (list ruby-public-suffix))
-    (home-page "https://github.com/sporkmonger/addressable")
-    (synopsis "Alternative URI implementation")
-    (description "Addressable is a replacement for the URI implementation that
-is part of Ruby's standard library.  It more closely conforms to RFC 3986,
-RFC 3987, and RFC 6570 (level 4), providing support for IRIs and URI templates.")
-    (license license:asl2.0)))
-
-(define-public ruby-colorize
-  (package
-    (name "ruby-colorize")
-    (version "0.8.1")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "colorize" version))
-              (sha256
-               (base32
-                "133rqj85n400qk6g3dhf2bmfws34mak1wqihvh3bgy9jhajw580b"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:phases (modify-phases %standard-phases
-                  (add-before 'check 'remove-codeclimate-dependency
-                    (lambda _
-                      (substitute* "test/test_colorize.rb"
-                        ;; Do not hook the tests into the online CodeClimate
-                        ;; service which is unnecessary for these tests.
-                        (("require 'codeclimate-test-reporter'")
-                         "")
-                        (("CodeClimate.*") "")))))))
-    (synopsis "Add color effects to the @code{String} class")
-    (description
-     "This package extends the @code{String} class and adds a
-@code{ColorizedString} with methods to set text color, background color,
-and text effects.")
-    (home-page "https://github.com/fazibear/colorize")
-    (license license:gpl2+)))
-
-(define-public ruby-colorator
-  (package
-    (name "ruby-colorator")
-    (version "1.1.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "colorator" version))
-              (sha256
-               (base32
-                "0f7wvpam948cglrciyqd798gdc6z3cfijciavd0dfixgaypmvy72"))))
-    (build-system ruby-build-system)
-    (arguments
-     ;; No test target
-     `(#:tests? #f))
-    (home-page "http://octopress.org/colorator/")
-    (synopsis "Terminal color library")
-    (description "Colorator is a Ruby gem that helps you colorize your text
-for the terminal.")
-    (license license:expat)))
-
-(define-public ruby-command-line-reporter
-  (package
-    (name "ruby-command-line-reporter")
-    (version "4.0.1")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "command_line_reporter" version))
-              (sha256
-               (base32
-                "1l0zxkh5n9dxfw46lpkg416ljpldlq1bgdhqh0d118dk338nz4ll"))))
-    (build-system ruby-build-system)
-    (arguments
-     ;; No Rakefile
-     `(#:tests? #f
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'build 'fix-dependencies
-           (lambda _
-             (substitute* ".gemspec"
-               ;; colored is unmaintained
-               (("colored") "colorator")
-               ;; colorator version
-               (("= 1.2") "= 1.1")))))))
-    (propagated-inputs (list ruby-colorator))
-    (home-page "https://github.com/wbailey/command_line_reporter")
-    (synopsis "Report production while executing Ruby scripts")
-    (description "This gem provides a DSL that makes it easy to write reports
-of various types in ruby.  It eliminates the need to litter your source with
-puts statements, instead providing a more readable, expressive interface to
-your application.")
-    (license license:asl2.0)))
-
-(define-public ruby-command-line-reporter-3
-  (package
-    (inherit ruby-command-line-reporter)
-    (version "3.3.6")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "command_line_reporter" version))
-              (sha256
-               (base32
-                "1h39zqqxp3k4qk49ajpx0jps1vmvxgkh43mqkb6znk583bl0fv71"))))))
-
-(define-public ruby-kpeg
-  (package
-  (name "ruby-kpeg")
-  (version "1.3.3")
-  (source
-    (origin
-      (method url-fetch)
-      (uri (rubygems-uri "kpeg" version))
-      (sha256
-        (base32
-          "0jxddpyb23digcd8b1b02gn94057a7mw17680c3c8s3bcb5xqfnp"))))
-  (build-system ruby-build-system)
-  (native-inputs
-   (list ruby-hoe))
-  (synopsis "PEG library for Ruby")
-  (description "KPeg is a simple PEG library for Ruby.  It provides an API as
-well as native grammar to build the grammar.  KPeg supports direct left
-recursion of rules via the
-@uref{http://www.vpri.org/pdf/tr2008003_experimenting.pdf,OMeta memoization}
-technique.")
-  (home-page "https://github.com/evanphx/kpeg")
-  (license license:expat)))
-
-(define-public ruby-rdoc
-  (package
-    (name "ruby-rdoc")
-    (version "6.7.0")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/ruby/rdoc")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "0dy997zi7k17c2yjlq1y7zl9yaiym1f4jgfh84qqzhwl1qm6v41j"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'build 'generate
-           ;; 'gem build' doesn't honor Rakefile dependencies (see:
-           ;; https://github.com/ruby/rdoc/issues/432#issuecomment-650808977).
-           (lambda _
-             (invoke "rake" "generate"))))))
-    (native-inputs (list bundler ruby-kpeg ruby-racc ruby-rubocop
-                         ruby-test-unit-ruby-core))
-    (home-page "https://ruby.github.io/rdoc/")
-    (synopsis "HTML and command-line documentation utility")
-    (description "RDoc produces HTML and command-line documentation for Ruby
-projects.  RDoc includes the +rdoc+ and +ri+ tools for generating and displaying
-documentation from the command-line.")
-    (license license:gpl2+)))
-
-(define-public ruby-sass-listen
-  (package
-    (name "ruby-sass-listen")
-    (version "4.0.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "sass-listen" version))
-              (sha256
-               (base32
-                "0xw3q46cmahkgyldid5hwyiwacp590zj2vmswlll68ryvmvcp7df"))))
-    (build-system ruby-build-system)
-    (arguments
-     ;; No test target
-     `(#:tests? #f))
-    (propagated-inputs
-     (list ruby-rb-fsevent ruby-rb-inotify))
-    (home-page "https://github.com/sass/listen")
-    (synopsis "File modification notification library")
-    (description "The Listen gem listens to file modifications and notifies you
-about the changes.")
-    (license license:expat)))
-
-(define-public ruby-terminfo
-  (let ((commit "f4a597d92dcc465e7b343f9afb8cd45607c8e969")
-        (revision "0"))
-    (package
-      (name "ruby-terminfo")
-      (version (git-version "0.2" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri
-          (git-reference
-           (url "https://github.com/genki/ruby-terminfo")
-           (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "0b24sqf0jwj8m106nh35hjayw1kiyrpramb6vg7fnz32mqni6hdi"))))
-      (build-system ruby-build-system)
-      (arguments
-       (list
-        #:phases
-        #~(modify-phases %standard-phases
-            (delete 'replace-git-ls-files)
-            (replace 'build
-              (lambda _
-                (invoke "ruby" "extconf.rb")
-                (invoke "make")))
-            (replace 'check
-              (lambda* (#:key tests? #:allow-other-keys)
-                (when tests?
-                  (for-each (lambda (f)
-                              (invoke "ruby" "-Ilib:test" "-Ilib:." f))
-                            (find-files "test" "^test_.*\\.rb$")))))
-            (replace 'install
-              (lambda _
-                (invoke "make" "install" (string-append "prefix=" #$output)))))))
-      (inputs
-       (list ncurses))
-      (native-inputs
-       (list ruby-rubygems-tasks ruby-rdoc))
-      (home-page "http://www.a-k-r.org/ruby-terminfo/")
-      (synopsis "Terminfo binding for Ruby")
-      (description "Ruby-terminfo provides terminfo binding for Ruby.")
-      (license license:bsd-3))))
-
-(define-public ruby-diffy
-  (package
-    (name "ruby-diffy")
-    (version "3.2.1")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "diffy" version))
-        (sha256
-          (base32
-            "119imrkn01agwhx5raxhknsi331y5i4yda7r0ws0an6905ximzjg"))))
-    (build-system ruby-build-system)
-    (arguments
-     ;; No tests
-     `(#:tests? #f))
-    (native-inputs
-     (list ruby-rspec))
-    (home-page "https://github.com/samg/diffy")
-    (synopsis "Convenient diffing in ruby")
-    (description "Diffy provides a convenient way to generate a diff from two
-strings or files.")
-    (license license:expat)))
-
-(define-public ruby-sass-spec
-  (package
-    (name "ruby-sass-spec")
-    (version "3.5.4")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/sass/sass-spec")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "1zsw66830w0xlc7kxz6fm4b5nyb44vdsdgm9mgy06s5aixx83pwr"))))
-    (build-system ruby-build-system)
-    (propagated-inputs
-     (list ruby-command-line-reporter-3
-           ruby-diffy))
-    (arguments
-     (list
-      ;; This package contains tests for a sass implementation, and the to
-      ;; avoid any circular dependencies, the tests are not run here
-      #:tests? #f
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'patch-test
-            (lambda _
-              (delete-file "spec/values/colors/alpha_hex-3.5/error")
-              (substitute* "spec/values/colors/alpha_hex-3.5/expected_output.css"
-                (("string") "color")))))))
-    (home-page "https://github.com/sass/sass-spec")
-    (synopsis "Test suite for Sass")
-    (description "Sass Spec is a test suite for Sass.  Test cases are all in
-the @file{spec} directory.")
-    (license license:expat)))
-
-(define-public ruby-sass
-  (package
-    (name "ruby-sass")
-    (version "3.7.4")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/sass/ruby-sass")
-             (commit version)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "03215h9jkni3l9w6lq28p8adaj3qzb47qgxd20l6kldjnm1a1yky"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:test-target "test:ruby"))
-    (propagated-inputs
-     (list ruby-sass-listen))
-    (native-inputs
-     (list ruby-sass-spec ruby-mathn ruby-cmath))
-    (home-page "https://sass-lang.com/")
-    (synopsis "CSS extension language")
-    (description "Sass is a CSS extension language.  It extends CSS with
-features that don't exist yet like variables, nesting, mixins and inheritance.")
-    (license license:expat)))
-
-(define-public ruby-sassc
-  (package
-    (name "ruby-sassc")
-    (version "2.4.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "sassc" version))
-       (sha256
-        (base32
-         "0gpqv48xhl8mb8qqhcifcp0pixn206a7imc07g48armklfqa4q2c"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:modules ((guix build ruby-build-system)
-                  (guix build utils)
-                  (ice-9 textual-ports))
-       #:phases
-       (modify-phases %standard-phases
-         ;; TODO: This would be better as a snippet, but the ruby-build-system
-         ;; doesn't seem to support that
-         (add-after 'unpack 'remove-libsass
-           (lambda _
-             (delete-file-recursively "ext")
-             (with-atomic-file-replacement "sassc.gemspec"
-               (lambda (in out)
-                 (let* ((gemspec (get-string-all in))
-                        (index (string-contains gemspec "libsass_dir")))
-                   (display (string-append
-                             (string-take gemspec index)
-                             "\nend\n")
-                            out))))))
-         (add-after 'unpack 'dont-check-the-libsass-version
-           (lambda _
-             (substitute* "test/native_test.rb"
-               (("assert_equal.*Native\\.version") ""))))
-         (add-after 'unpack 'remove-git-from-gemspec
-           (lambda _
-             (substitute* "sassc.gemspec"
-               (("`git ls-files -z`") "`find . -type f -print0 |sort -z`"))))
-         (add-after 'unpack 'remove-extensions-from-gemspec
-           (lambda _
-             (substitute* "sassc.gemspec"
-               (("\\[\"ext/extconf.rb\"\\]") "[]"))))
-         (add-after 'unpack 'fix-Rakefile
-           (lambda _
-             (substitute* "Rakefile"
-               (("test: 'compile:libsass'") ":test"))))
-         (add-after 'unpack 'remove-unnecessary-dependencies
-           (lambda _
-             (substitute* "test/test_helper.rb"
-               (("require \"pry\"") ""))))
-         (add-before 'build 'patch-native.rb
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "lib/sassc/native.rb"
-               ((".*gem_root = spec.gem_dir") "")
-               (("ffi_lib .*\n")
-                (string-append
-                 "ffi_lib '" (assoc-ref inputs "libsass") "/lib/libsass.so'")))))
-         ;; The gemspec still references the libsass files, so just keep the
-         ;; one in the gem.
-         (delete 'extract-gemspec))))
-    (propagated-inputs
-     (list ruby-ffi ruby-rake))
-    (inputs
-     (list libsass))
-    (native-inputs
-     (list bundler ruby-rake-compiler ruby-minitest-around
-           ruby-test-construct))
-    (synopsis "Use libsss from Ruby")
-    (description
-     "This library provides Ruby q@acronym{FFI, Foreign Function Interface}
-bindings to the libsass library.  This enables rendering
-@acronym{SASS,Syntactically awesome style sheets} from Ruby code.")
-    (home-page "https://github.com/sass/sassc-ruby")
-    (license license:expat)))
-
-(define-public ruby-jekyll-sass-converter
-  (package
-    (name "ruby-jekyll-sass-converter")
-    (version "2.1.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "jekyll-sass-converter" version))
-              (sha256
-               (base32
-                "04ncr44wrilz26ayqwlg7379yjnkb29mvx4j04i62b7czmdrc9dv"))))
-    (build-system ruby-build-system)
-    (propagated-inputs
-     (list ruby-sass))
-    (arguments
-     ;; No rakefile
-     `(#:tests? #f))
-    (home-page "https://github.com/jekyll/jekyll-sass-converter")
-    (synopsis "Sass converter for Jekyll")
-    (description "This gem provide built-in support for the Sass converter
-in Jekyll.")
-    (license license:expat)))
-
-(define-public ruby-jekyll-watch
-  (package
-    (name "ruby-jekyll-watch")
-    (version "2.1.2")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "jekyll-watch" version))
-              (sha256
-               (base32
-                "1s9ly83sp8albvgdff12xy2h4xd8lm6z2fah4lzmk2yvp85jzdzv"))))
-    (build-system ruby-build-system)
-    (propagated-inputs
-     (list ruby-listen))
-    (arguments
-     ;; No rakefile
-     `(#:tests? #f))
-    (home-page "https://github.com/jekyll/jekyll-watch")
-    (synopsis "Jekyll auto-rebuild support")
-    (description "This gems add the @code{--watch} switch to the jekyll CLI
-interface.  It allows Jekyll to rebuild your site when a file changes.")
-    (license license:expat)))
-
-(define-public ruby-parallel
-  (package
-    (name "ruby-parallel")
-    (version "1.21.0")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/grosser/parallel")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "1xqjcvl3gq3shvrqp8wc3fbqibzh4mf1yczq6np9gd79558dwj3w"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(;; TODO 3 test failures
-       ;; rspec ./spec/parallel_spec.rb:190 # Parallel.in_processes does not
-       ;; open unnecessary pipes
-       ;; rspec './spec/parallel_spec.rb[1:9:7]' # Parallel.each works with
-       ;; SQLite in processes
-       ;; rspec './spec/parallel_spec.rb[1:9:16]' # Parallel.each works with
-       ;; SQLite in threads
-       #:tests? #f
-       #:test-target "rspec-rerun:spec"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-Gemfile
-           (lambda _
-             (substitute* "Gemfile"
-               (("gem 'rspec-legacy_formatters'") "")
-               (("gem 'activerecord.*$") "gem 'activerecord'\n"))))
-         (add-before 'check 'delete-Gemfile.lock
-           (lambda _
-             ;; Bundler isn't being used for fetching dependencies, so
-             ;; delete the Gemfile.lock
-             (delete-file "Gemfile.lock")))
-         (add-before 'build 'patch-gemspec
-           (lambda _
-             (substitute* "parallel.gemspec"
-               (("git ls-files") "find")))))))
-    (native-inputs
-     (list ruby-rspec
-           ruby-rspec-rerun
-           bundler
-           ruby-activerecord
-           ruby-progressbar
-           ruby-bump
-           procps
-           lsof
-           ruby-mysql2
-           ruby-sqlite3
-           ruby-i18n))
-    (home-page "https://github.com/grosser/parallel")
-    (synopsis "Parallel processing in Ruby")
-    (description "Parallel allows you to run any code in parallel Processes
-(to use all CPUs) or Threads(to speedup blocking operations).  It is best
-suited for map-reduce or e.g. parallel downloads/uploads.")
-    (license license:expat)))
-
-(define-public ruby-cabin
-  (package
-    (name "ruby-cabin")
-    (version "0.9.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "cabin" version))
-              (sha256
-               (base32
-                "0b3b8j3iqnagjfn1261b9ncaac9g44zrx1kcg81yg4z9i513kici"))))
-    (build-system ruby-build-system)
-    (arguments (list #:tests? #f))      ;no Rakefile in released gem
-    (synopsis "Structured and contextual logging experiments in Ruby")
-    (description "This Ruby library provides an experimental logging system
-that tries to make logging more flexible and more consumable than plain-text
-logging.")
-    (home-page "https://github.com/jordansissel/ruby-cabin")
-    (license license:asl2.0)))
-
-(define-public ruby-capybara
-  (package
-    (name "ruby-capybara")
-    (version "3.38.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "capybara" version))
-              (sha256
-               (base32
-                "123198zk2ak8mziwa5jc3ckgpmsg08zn064n3aywnqm9s1bwjv3v"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:tests? #f                ;sinatra is currently broken with rack 3
-           #:phases
-           #~(modify-phases %standard-phases
-               (add-after 'extract-gemspec 'remove-extraneous-requirements
-                 (lambda _
-                   (substitute* "spec/spec_helper.rb"
-                     ((".*require 'selenium_statistics'.*") "")
-                     ((".*SeleniumStatistics.print_results.*") ""))))
-               (replace 'check
-                 (lambda* (#:key tests? #:allow-other-keys)
-                   (when tests?
-                     (invoke "rspec" "spec")))))))
-    (native-inputs
-     (list ruby-puma
-           ruby-rspec
-           ruby-selenium-webdriver
-           ruby-sinatra))
-    (propagated-inputs
-     (list ruby-addressable
-           ruby-launchy
-           ruby-matrix
-           ruby-mini-mime
-           ruby-nokogiri
-           ruby-rack
-           ruby-rack-test
-           ruby-regexp-parser
-           ruby-xpath))
-    (synopsis "Integration testing tool for rack-based web applications")
-    (description "Capybara is an integration testing tool for rack based web
-applications.  It simulates how a user would interact with a website.")
-    (home-page "https://github.com/teamcapybara/capybara")
-    (license license:expat)))
-
-(define-public ruby-cane
-  (package
-    (name "ruby-cane")
-    (version "3.0.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "cane" version))
-              (sha256
-               (base32
-                "0yf5za3l7lhrqa3g56sah73wh33lbxy5y3cb7ij0a2bp1b4kwhih"))))
-    (build-system ruby-build-system)
-    (arguments `(#:tests? #f)); No rakefile
-    (home-page "https://github.com/square/cane")
-    (propagated-inputs
-     (list ruby-parallel))
-    (synopsis "Code quality threshold checking")
-    (description "Cane fails your build if code quality thresholds are not met.")
-    (license license:asl2.0)))
-
-(define-public ruby-morecane
-  (package
-    (name "ruby-morecane")
-    (version "0.2.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "morecane" version))
-              (sha256
-               (base32
-                "0w70vb8z5bdhvr21h660aa43m5948pv0bd27z7ngai2iwdvqd771"))))
-    (build-system ruby-build-system)
-    (home-page "https://github.com/yob/morecane")
-    (arguments `(#:tests? #f)); No rakefile
-    (propagated-inputs
-     (list ruby-parallel))
-    (synopsis "Extra checks for cane")
-    (description "The cane gem provides a great framework for running quality
-checks over your ruby project as part of continuous integration build.  It
-comes with a few checks out of the box, but also provides an API for loading
-custom checks.  This gem provides a set of additional checks.")
-    (license license:expat)))
-
-(define-public ruby-pdf-reader
-  (package
-    (name "ruby-pdf-reader")
-    (version "2.4.0")
-    (source (origin
-              (method git-fetch)        ;no test in distributed gem archive
-              (uri (git-reference
-                    (url "https://github.com/yob/pdf-reader")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1yh8yrlssf5ppnkvk4m78vmh5r5vqwdcd0gm3lqipw162llz0rai"))))
-    (build-system ruby-build-system)
-    (arguments `(#:test-target "spec"
-                 #:phases (modify-phases %standard-phases
-                            (add-after 'unpack 'do-not-use-bundler
-                              (lambda _
-                                (substitute* "spec/spec_helper.rb"
-                                  ((".*[Bb]undler.*") "")))))))
-    (native-inputs
-     (list ruby-rspec ruby-cane ruby-morecane))
-    (propagated-inputs
-     (list ruby-afm ruby-ascii85 ruby-hashery ruby-rc4 ruby-ttfunk))
-    (home-page "https://github.com/yob/pdf-reader")
-    (synopsis "PDF parser in Ruby")
-    (description "The PDF::Reader library implements a PDF parser conforming as
-much as possible to the PDF specification from Adobe.  It provides programmatic
-access to the contents of a PDF file with a high degree of flexibility.")
-    (license license:gpl3+)))
-
-(define-public ruby-pdf-inspector
-  (let ((revision "1")
-        (commit "00ee4c92ff917118785ebec188e81effc968abeb"))
-    (package
-      (name "ruby-pdf-inspector")
-      (version (git-version "1.3.0" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/prawnpdf/pdf-inspector")
-                      (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "0h9w81ddd0gvkh5n2cvny9ddb5qiac1si0dhinkk0xxh5382qs0m"))))
-      (build-system ruby-build-system)
-      (arguments
-       `(#:test-target "spec"
-         #:phases (modify-phases %standard-phases
-                    (add-before 'build 'drop-signing-key-requirement
-                      (lambda _
-                        (substitute* "pdf-inspector.gemspec"
-                          (("spec.signing_key =.*")
-                           "spec.signing_key = nil"))))
-                    (replace 'check
-                      (lambda _
-                        (substitute* "pdf-inspector.gemspec"
-                          ((".*rubocop.*") "")
-                          ((".*yard.*") ""))
-                        (invoke "rspec"))))))
-      (native-inputs
-       (list ruby-rspec))
-      (propagated-inputs
-       (list ruby-pdf-reader))
-      (home-page "https://github.com/prawnpdf/pdf-inspector")
-      (synopsis "Analysis classes for inspecting PDF output")
-      (description "This library provides a number of PDF::Reader based tools for
-use in testing PDF output.  Presently, the primary purpose of this tool is to
-support the tests found in Prawn, a pure Ruby PDF generation library.")
-      (license %prawn-project-licenses))))
-
-(define-public ruby-pdf-core
-  (package
-    (name "ruby-pdf-core")
-    (version "0.9.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "pdf-core" version))
-              (sha256
-               (base32
-                "1fz0yj4zrlii2j08kaw11j769s373ayz8jrdhxwwjzmm28pqndjg"))))
-    (build-system ruby-build-system)
-    (arguments
-     ; No test target
-     `(#:tests? #f))
-    (home-page "https://github.com/prawnpdf/pdf-core")
-    (synopsis "Low level PDF features for Prawn")
-    (description "This is an experimental gem that extracts low-level PDF
-functionality from Prawn.")
-    (license license:gpl3+)))
-
-(define-public ruby-prawn-dev
-  (package
-    (name "ruby-prawn-dev")
-    (version "0.3.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "prawn-dev" version))
-              (sha256
-               (base32
-                "1hbzzgm0nwc6h8pyv8h9xx068bf676rispxcz4a0sm8nykz54z4x"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:tests? #f                       ;no test suite
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'extract-gemspec 'drop-rubocop-dependency
-            ;; Rubocop depends on Prawn.  Remove it to avoid the
-            ;; dependency cycle when using this tool to build
-            ;; Prawn components.
-            (lambda _
-              (substitute* "lib/prawn/dev/tasks.rb"
-                (("require 'rubocop/rake_task'")
-                 "")
-                (("RuboCop::RakeTask.new")
-                 ""))
-              (substitute* ".gemspec"
-                ((".*add.*dependency.*(rubocop|simplecov).*")
-                 "")))))))
-    (propagated-inputs (list ruby-rake ruby-rspec ruby-yard))
-    (synopsis "Shared tools for Prawn projects development")
-    (description "Prawn-dev contains tools to aid the development of the
-various Prawn projects.")
-    (home-page "https://prawnpdf.org/")
-    (license license:expat)))
-
-(define-public ruby-prawn
-  ;; There hasn't been a new release since 2017/03/17.
-  (package
-    (name "ruby-prawn")
-    (version "2.4.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/prawnpdf/prawn")
-                    (commit version)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1h1gww12wcdscij0lnd21p9zcbwrwc3miini5ppannc2birmj9ja"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-before 'build 'drop-signing-key-requirement
-            (lambda _
-              (substitute* "prawn.gemspec"
-                (("spec.signing_key =.*")
-                 "spec.signing_key = nil"))))
-          (replace 'check
-            (lambda* (#:key tests? #:allow-other-keys)
-              (when tests?
-                ;; The Prawn manual test fails (see:
-                ;; https://github.com/prawnpdf/prawn/issues/1163), so exclude
-                ;; it.
-                (invoke "rspec"
-                        "--exclude-pattern" "prawn_manual_spec.rb")))))))
-    (propagated-inputs
-     (list ruby-matrix
-           ruby-pdf-core
-           ruby-ttfunk))
-    (native-inputs
-     (list ruby-pdf-inspector
-           ruby-prawn-manual-builder
-           ruby-prawn-dev))
-    (home-page "https://prawnpdf.org/api-docs/2.0/")
-    (synopsis "PDF generation for Ruby")
-    (description "Prawn is a pure Ruby PDF generation library.")
-    (license %prawn-project-licenses)))
-
-(define-public ruby-prawn-table
-  (package
-    (name "ruby-prawn-table")
-    (version "0.2.2")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "prawn-table" version))
-              (sha256
-               (base32
-                "1nxd6qmxqwl850icp18wjh5k0s3amxcajdrkjyzpfgq0kvilcv9k"))))
-    (build-system ruby-build-system)
-    (propagated-inputs
-     (list ruby-prawn ruby-pdf-inspector))
-    (native-inputs
-     `(("bundler" ,bundler)
-       ("ruby-yard" ,ruby-yard)
-       ("ruby-mocha" ,ruby-mocha)
-       ("ruby-coderay" ,ruby-coderay)
-       ("ruby-prawn-manual-builder" ,ruby-prawn-manual-builder)
-       ("ruby-simplecov" ,ruby-simplecov)
-       ("ruby-rspec-2" ,ruby-rspec-2)))
-    (arguments
-     '(;; TODO: 1 test fails
-       ;; Failure/Error: pdf.page_count.should == 1
-       ;;   expected: 1
-       ;;        got: 2 (using ==)
-       ;; # ./spec/table_spec.rb:1308
-       ;;
-       ;; 225 examples, 1 failure
-       #:tests? #f
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'check 'patch-gemspec
-           (lambda _
-             (substitute* "prawn-table.gemspec"
-               ;; Loosen the requirement for pdf-inspector
-               (("~> 1\\.1\\.0") ">= 0")
-               ;; Loosen the requirement for pdf-reader
-               (("~> 1\\.2") ">= 0"))))
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (invoke "rspec")))))))
-    (home-page "https://github.com/prawnpdf/prawn-table")
-    (synopsis "Tables support for Prawn")
-    (description "This gem provides tables support for Prawn.")
-    (license license:gpl3+)))
-
-(define-public ruby-kramdown
-  (package
-    (name "ruby-kramdown")
-    (version "2.3.1")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "kramdown" version))
-              (sha256
-               (base32
-                "0jdbcjv4v7sj888bv3vc6d1dg4ackkh7ywlmn9ln2g9alk7kisar"))))
-    (build-system ruby-build-system)
-    (arguments `(#:tests? #f)); FIXME: some test failures
-    (native-inputs
-     (list ruby-prawn ruby-prawn-table))
-    (home-page "https://kramdown.gettalong.org/")
-    (synopsis "Markdown parsing and converting library")
-    (description "Kramdown is a library for parsing and converting a superset
-of Markdown.  It is completely written in Ruby, supports standard Markdown
-(with some minor modifications) and various extensions that have been made
-popular by the PHP @code{Markdown Extra} package and @code{Maruku}.")
-    (license license:expat)))
-
-(define-public ruby-kramdown-parser-gfm
-  (package
-    (name "ruby-kramdown-parser-gfm")
-    (version "1.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "kramdown-parser-gfm" version))
-       (sha256
-        (base32 "0a8pb3v951f4x7h968rqfsa19c8arz21zw1vaj42jza22rap8fgv"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:tests? #f))                    ;no rakefile
-    (propagated-inputs
-     (list ruby-kramdown))
-    (synopsis "Kramdown parser for the GFM dialect of Markdown")
-    (description
-     "This is a parser for kramdown that converts Markdown documents in the
-GFM dialect to HTML.")
-    (home-page "https://github.com/kramdown/parser-gfm")
-    (license license:expat)))
-
-(define-public ruby-http-parser.rb
-  (package
-    (name "ruby-http-parser.rb")
-    (version "0.6.0")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "http_parser.rb" version))
-        (sha256
-          (base32
-            "15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi"))))
-    (build-system ruby-build-system)
-    (arguments
-     ;; No tests
-     `(#:tests? #f))
-    (native-inputs
-     (list ruby-rake-compiler ruby-rspec))
-    (home-page "https://github.com/tmm1/http_parser.rb")
-    (synopsis "HTTP parser un Ruby")
-    (description "This gem is a simple callback-based HTTP request/response
-parser for writing http servers, clients and proxies.")
-    (license license:expat)))
-
-(define-public ruby-excon
-  (package
-    (name "ruby-excon")
-    (version "0.109.0")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/excon/excon")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "199niqbpzj70k3n6ybg4vbcw3qm76kwic4nl9747l1n0v49aaj24"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:tests? #f  ;; some tests require DNS
-      #:phases
-      #~(modify-phases %standard-phases
-          (replace 'replace-git-ls-files
-            (lambda _
-              (substitute* "excon.gemspec"
-                (("`git ls-files -- data/. lib/.`")
-                 "`find data lib -type f`"))))
-          (add-before 'check 'disable-server-spec-checks
-            (lambda _ ;; TODO: Remove this if ruby-unicorn is available.
-              ;; Some of the tests in this file require ruby-unicorn, which is
-              ;; not yet packaged for guix and would pull in a lot of other
-              ;; dependencies.
-              (delete-file "spec/excon/test/server_spec.rb"))))))
-    (native-inputs
-     (list
-      ruby-activesupport
-      ruby-eventmachine
-      ruby-json
-      ruby-open4
-      ruby-puma
-      ruby-rspec
-      ruby-shindo
-      ruby-sinatra
-      ruby-webrick))
-    (synopsis "Usable, fast, simple Ruby HTTP 1.1")
-    (description "Excon was designed to be simple, fast and performant.  It
-works great as a general HTTP(s) client and is particularly well suited to
-usage in API clients.")
-    (home-page "https://github.com/excon/excon")
-    (license license:expat)))
-
-(define-public ruby-em-websocket
-  (package
-    (name "ruby-em-websocket")
-    (version "0.5.1")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "em-websocket" version))
-        (sha256
-          (base32
-            "1bsw8vjz0z267j40nhbmrvfz7dvacq4p0pagvyp17jif6mj6v7n3"))))
-    (build-system ruby-build-system)
-    (arguments
-     ;; No tests
-     `(#:tests? #f))
-    (propagated-inputs
-      (list ruby-eventmachine ruby-http-parser.rb))
-    (native-inputs
-     (list bundler ruby-rspec))
-    (home-page "https://github.com/igrigorik/em-websocket")
-    (synopsis "EventMachine based WebSocket server")
-    (description "Em-websocket is an EventMachine based WebSocket server
-implementation.")
-    (license license:expat)))
-
-(define-public ruby-rouge
-  (package
-    (name "ruby-rouge")
-    (version "3.26.1")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "rouge" version))
-              (sha256
-               (base32
-                "197k0vskf72wxx0gzwld2jzg27bb7982xlvnzy9adlvkzp7nh8vf"))))
-    (build-system ruby-build-system)
-    (arguments `(#:tests? #f)); No rakefile
-    (home-page "http://rouge.jneen.net/")
-    (synopsis "Code highlighter")
-    (description "Rouge is a code highlighter written in Ruby.  It supports more
-than 100 languages and outputs HTML or ANSI 256-color text.  Its HTML output
-is compatible with stylesheets designed for pygments.")
-    (license (list
-               ;; rouge is licensed under expat
-               license:expat
-               ;; pygments is licensed under bsd-2
-               license:bsd-2))))
-
-(define-public ruby-hashie
-  (let ((commit "73510552ba580867e9882fe092568916cbcd810b")
-        (revision "0"))
-    (package
-      (name "ruby-hashie")
-      (version (git-version "5.0.0" revision commit))
-      (source (origin
-                (method git-fetch)        ;for tests
-                (uri (git-reference
-                      (url "https://github.com/hashie/hashie")
-                      (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "08rpx040h6vgx6ynk6w029f7z7c8aj2p4v135k2l1zxvnw617ddw"))))
-      (build-system ruby-build-system)
-      (arguments
-       (list #:test-target "spec"
-             #:phases #~(modify-phases %standard-phases
-                          (add-after 'unpack 'disable-bundler
-                            (lambda _
-                              (substitute* "Rakefile"
-                                ((".*require 'bundler'.*") "")
-                                ((".*Bundler.setup.*") "")
-                                (("Bundler::GemHelper\\.install_tasks") ""))))
-                          (add-after 'unpack 'disable-rubocop
-                            (lambda _
-                              (substitute* "Rakefile"
-                                (("require 'rubocop/rake_task'") "")
-                                (("RuboCop::RakeTask.new") ""))))
-                          (add-after 'unpack 'relax-requirements
-                            (lambda _
-                              ;; Contains multiple extraneous dependencies.
-                              (delete-file "Gemfile"))))))
-      (native-inputs (list ruby-json ruby-pry ruby-rspec ruby-rspec-pending-for))
-      (home-page "https://github.com/hashie/hashie")
-      (synopsis "Extensions to Ruby Hashes")
-      (description "Hashie is a collection of classes and mixins that make Ruby
-hashes more powerful.")
-      (license license:expat))))
-
-(define-public ruby-heredoc-unindent
-  (package
-    (name "ruby-heredoc-unindent")
-    (version "1.2.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "heredoc_unindent" version))
-              (sha256
-               (base32
-                "14ijr2fsjwhrkjkcaz81d5xnfa4vvgvcflrff83avqw9klm011yw"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list ruby-hoe-3))
-    (home-page "https://github.com/adrianomitre/heredoc_unindent")
-    (synopsis "Heredoc indentation cleaner")
-    (description "This gem removes common margin from indented strings, such
-as the ones produced by indented heredocs.  In other words, it strips out
-leading whitespace chars at the beginning of each line, but only as much as
-the line with the smallest margin.
-
-It is acknowledged that many strings defined by heredocs are just code and
-fact is that most parsers are insensitive to indentation.  If, however, the
-strings are to be used otherwise, be it for printing or testing, the extra
-indentation will probably be an issue and hence this gem.")
-    (license license:expat)))
-
-(define-public ruby-safe-yaml
-  (package
-    (name "ruby-safe-yaml")
-    (version "1.0.5")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/dtao/safe_yaml")
-             (commit version)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "1a0wh7y3va2m7bjza95na2snw0vrdh9syz40mpjvjphbc4ph3pzg"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list ruby-rspec ruby-hashie ruby-heredoc-unindent))
-    (arguments
-     (list
-      ;; Tests are broken since the move to ruby@3.
-      ;; There's ongoing effort on the Jekyll dependent
-      ;; to remove this orphan dependency.
-      #:tests? #f  ; broken since move to ruby@3
-      #:test-target "spec"
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-before 'check 'set-TZ
-            (lambda _
-              ;; This test is dependent on the timezone
-              ;; spec/transform/to_date_spec.rb:35
-              ;; # SafeYAML::Transform::ToDate converts times to the local
-              ;; timezone
-              (setenv "TZ" "UTC-11"))))))
-    (home-page "https://github.com/dtao/safe_yaml")
-    (synopsis "YAML parser")
-    (description "The SafeYAML gem provides an alternative implementation of
-YAML.load suitable for accepting user input in Ruby applications.")
-    (license license:expat)))
-
-(define-public ruby-yaml-lint
-  ;; No tags for releases.
-  (let ((commit "d6a253f7d33234a9c24660d582cf7014e882c0c2")
-        (revision "0"))
-    (package
-      (name "ruby-yaml-lint")
-      (version (git-version "0.1.2" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/Pryz/yaml-lint")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "0zk0jwzmcaaiyixjvkzdb54xhiqcnjkma72nkv0vm5csaphfdjkx"))))
-      (build-system ruby-build-system)
-      (arguments
-       `(#:phases
-         (modify-phases %standard-phases
-           (replace 'check
-             (lambda* (#:key tests? #:allow-other-keys)
-               (when tests?
-                 (invoke "rspec")))))))
-      (native-inputs
-       (list ruby-coveralls ruby-rspec ruby-simplecov))
-      (synopsis "Simple YAML check tool")
-      (description
-       "@code{yaml-lint} will simply try to load the YAML file with the built-in
-Ruby yaml library.")
-      (home-page "https://github.com/Pryz/yaml-lint")
-      (license license:expat))))
-
-(define-public ruby-matrix
-  (package
-    (name "ruby-matrix")
-    (version "0.4.2")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/ruby/matrix")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1asxr0jzh39lk5f8a9wm5avykrcy0v2wgd1bl3cszjczh99xy5k2"))))
-    (build-system ruby-build-system)
-    (synopsis "@code{Matrix} and @code{Vector} classes implementation for Ruby")
-    (description "This Ruby library provides an implementation of the
-@code{Matrix} and @code{Vector} classes.  The @code{Matrix} class represents a
-mathematical matrix.  It provides methods for creating matrices, operating on
-them arithmetically and algebraically, and determining their mathematical
-properties (trace, rank, inverse, determinant, eigensystem, etc.).  The
-@code{Vector} class represents a mathematical vector, which is useful in its
-own right, and also constitutes a row or column of a @code{Matrix}.")
-    (home-page "https://github.com/ruby/matrix")
-    (license license:bsd-2)))
-
-(define-public ruby-m
-  (package
-    (name "ruby-m")
-    (version "1.6.1")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/qrush/m")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1aycfc8l1bsln1y300fv75fknn4amjcvc4rm2kd8hb6cqivjq5rg"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'sanitize-dependencies
-            (lambda _
-              (delete-file "Gemfile")
-              (delete-file "Gemfile.lock")
-              ;; Rocco is unmaintained as of 2023/01/08; avoid depending on
-              ;; it.
-              (substitute* "m.gemspec"
-                ;; The rdiscount and rocco dependencies are used for
-                ;; generating the documentation.
-                ((".*rdiscount.*") "")
-                ((".*rocco.*") "")
-                ((".*appraisal.*") "")
-                ((".*coveralls.*") ""))
-              (substitute* "Rakefile"
-                ;; ruby-appraisal is not packaged, and is used to test against
-                ;; various dependencies; circumvent its use.
-                ((".*require 'appraisal'.*") "")
-                ((".*require 'coveralls'.*") "")
-                (("appraisal [:graphic:]+ rake")
-                 "rake")
-                (("Coveralls.push!") ""))))
-          (add-before 'replace-git-ls-files 'pre-replace-git-ls-files
-            (lambda _
-              (substitute* "m.gemspec"
-                (("git ls-files -- bin/\\*")
-                 "find bin -type f -not -regex '.*\\.gem$' | sort")
-                (("git ls-files -- \\{test,spec,features}/\\*")
-                 "find test -type f -not -regex '.*\\.gem$' | sort"))))
-          (delete 'check)
-          (add-after 'install 'check
-            (lambda* (#:key tests? #:allow-other-keys)
-              (setenv "GEM_PATH" (string-append
-                                  (getenv "GEM_PATH") ":"
-                                  #$output "/lib/ruby/vendor_ruby"))
-              (when tests?
-                (invoke "rake" "test")))))))
-    (native-inputs (list ruby-activesupport))
-    (propagated-inputs (list ruby-method-source ruby-rake))
-    (synopsis "Ruby test runner that can run tests by line number")
-    (description "@code{m} stands for metal, a better test/unit and
-@code{minitest} test runner that can run tests by line number.")
-    (home-page "https://github.com/qrush/m")
-    (license license:expat)))
-
-(define-public ruby-mercenary
-  (package
-    (name "ruby-mercenary")
-    (version "0.4.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "mercenary" version))
-              (sha256
-               (base32
-                "0f2i827w4lmsizrxixsrv2ssa3gk1b7lmqh8brk8ijmdb551wnmj"))))
-    (build-system ruby-build-system)
-    (arguments `(#:test-target "spec"))
-    (native-inputs
-     (list bundler))
-    (home-page "https://github.com/jekyll/mercenary")
-    (synopsis "Command-line apps library in Ruby")
-    (description "Mercenary is a lightweight and flexible library for writing
-command-line apps in Ruby.")
-    (license license:expat)))
-
-(define-public ruby-launchy
-  (package
-    (name "ruby-launchy")
-    (version "2.5.2")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "launchy" version))
-              (sha256
-               (base32
-                "06r43899384das2bkbrpsdxsafyyqa94il7111053idfalb4984a"))))
-    (build-system ruby-build-system)
-    (native-inputs (list curl links ruby-simplecov))
-    (propagated-inputs (list ruby-addressable))
-    (synopsis "Ruby helper class for launching applications")
-    (description
-     "Launchy is helper class for launching applications in a fire and forget
-manner.  The aim of Launchy is to provide a common approach to launching
-external applications from within Ruby programs.")
-    (home-page "https://github.com/copiousfreetime/launchy")
-    (license license:isc)))
-
-(define-public ruby-liquid
-  (package
-    (name "ruby-liquid")
-    (version "5.4.0")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/Shopify/liquid")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1qdnvd1f9zs6wyilcgxyh93wis7ikbpimjxfpbkpk2ngr1m2c8la"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (delete 'check)               ;moved after the install phase
-          (add-after 'install 'check
-            (assoc-ref %standard-phases 'check))
-          (add-before 'check 'set-GEM_PATH
-            (lambda _
-              (setenv "GEM_PATH" (string-append
-                                  (getenv "GEM_PATH") ":"
-                                  #$output "/lib/ruby/vendor_ruby"))))
-          (add-before 'check 'delete-problematic-tests
-            (lambda _
-              ;; The following test fails with 'Unknown tag' errors (see:
-              ;; https://github.com/Shopify/liquid/issues/1699).
-              (delete-file "test/integration/tags/inline_comment_test.rb"))))))
-    (native-inputs (list ruby-liquid-c-bootstrap ruby-rspec ruby-stackprof))
-    (home-page "https://shopify.github.io/liquid/")
-    (synopsis "Template language")
-    (description "Liquid is a template language written in Ruby.  It is used
-to load dynamic content on storefronts.")
-    (license license:expat)))
-
-(define-public ruby-liquid-4
-  (package
-    (inherit ruby-liquid)
-    (name "ruby-liquid")
-    (version "4.0.4")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/Shopify/liquid")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0cr321nd0zkbxirgdfmz37xx7j26zfnicjh585fi20vx60frry83"))))
-    (arguments (list #:tests? #f))))    ;avoid required an older ruby-liquid-c
-
-;;; This variant is purposefully incomplete, lacking ruby-liquid so that it
-;;; can be used for ruby-liquid's test suite.
-(define ruby-liquid-c-bootstrap
-  (package
-    (name "ruby-liquid-c-bootstrap")
-    (version "4.1.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "liquid-c" version))
-              (sha256
-               (base32
-                "0jl37jz9hbfbhknryx4myxqx4n1f5dzyzmf1sapkcbw93xyrmkch"))))
-    (build-system ruby-build-system)
-    (arguments (list #:tests? #f))
-    (native-inputs (list ruby-rake-compiler))
-    (synopsis "Liquid performance extension in C")
-    (description "This package provides a Partial native implementation of the
-liquid ruby gem in C that makes it operate about three times faster.")
-    (home-page "https://github.com/shopify/liquid-c")
-    (license license:expat)))
-
-(define-public ruby-liquid-c
-  (package/inherit ruby-liquid-c-bootstrap
-    (name "ruby-liquid-c")
-    (arguments
-     (list
-      ;; Only run the unit tests, because the test:integration target fails
-      ;; with "File does not exist: test_helper" (see:
-      ;; https://github.com/Shopify/liquid-c/issues/188).
-      #:test-target "test:unit"
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'extract-gemspec 'relax-requirements
-            (lambda _
-              (substitute* "Gemfile"
-                ;; Do not attempt to fetch a gem from git.
-                (("git_source\\(:github) do \\|repo_name\\|")
-                 "if false")
-                ((", github: \"Shopify/liquid\", ref: \"master\"")
-                 "")
-                ;; Remove extraneous dependencies.
-                ((".*byebug.*") "")
-                ((".*rubocop.*") "")
-                ;; Relax spy version specification.
-                (("gem \"spy\", \"0.4.1\"")
-                 "gem \"spy\", \">= 0.4.1\"")))))))
-    (native-inputs
-     (list ruby-benchmark-ips
-           ruby-rake-compiler
-           ruby-ruby-memcheck
-           ruby-spy
-           ruby-stackprof))
-    (propagated-inputs
-     (list ruby-liquid))))
-
-(define-public ruby-localhost
-  (package
-    (name "ruby-localhost")
-    (version "1.1.10")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/socketry/localhost")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1yp70w15wpfk613ap5f4y15yx4n2qqwa67vqc2f4lv7npf3llcz0"))))
-    (build-system ruby-build-system)
-    (arguments
-     ;; XXX: The test suite requires sus-fixtures-async, which requires async,
-     ;; only available for Ruby 3.0.
-     (list #:tests? #f
-           #:phases
-           #~(modify-phases %standard-phases
-               (add-before 'build 'remove-missing-signing-key
-                 (lambda _
-                   ;; Otherwise, the build fails with ENOENT.
-                   (substitute* "localhost.gemspec"
-                     ((".*spec.signing_key.*") "")))))))
-    (synopsis "API for generating per-user self-signed root certificates")
-    (description "This package provides @code{localhost}, a Ruby library for
-Managing a local certificate authority for self-signed, localhost development
-servers.")
-    (home-page "https://github.com/socketry/localhost")
-    (license license:expat)))
-
-(define-public ruby-forwardable-extended
-  (package
-    (name "ruby-forwardable-extended")
-    (version "2.6.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "forwardable-extended" version))
-              (sha256
-               (base32
-                "15zcqfxfvsnprwm8agia85x64vjzr2w0xn9vxfnxzgcv8s699v0v"))))
-    (build-system ruby-build-system)
-    (arguments `(#:tests? #f)); Cyclic dependency on luna-rspec-formatters
-    (home-page "https://github.com/envygeeks/forwardable-extended")
-    (synopsis "Delegation to hashes and instance variables in Forwardable")
-    (description "Forwardable Extended provides more @code{Forwardable}
-methods for your source as @code{Forwardable::Extended}.")
-    (license license:expat)))
-
-(define-public ruby-pathutil
-  (package
-    (name "ruby-pathutil")
-    (version "0.16.2")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "pathutil" version))
-              (sha256
-               (base32
-                "12fm93ljw9fbxmv2krki5k5wkvr7560qy8p4spvb9jiiaqv78fz4"))))
-    (build-system ruby-build-system)
-    (propagated-inputs
-     (list ruby-forwardable-extended))
-    (native-inputs
-     (list bundler ruby-rspec))
-    ;; Fails with: cannot load such file --
-    ;; /tmp/guix-build-ruby-pathutil-0.16.0.drv-0/gem/benchmark/support/task
-    (arguments `(#:tests? #f))
-    (home-page "https://github.com/envygeeks/pathutil")
-    (synopsis "Extended implementation of Pathname")
-    (description "Pathutil tries to be a faster pure Ruby implementation of
-Pathname.")
-    (license license:expat)))
-
-(define-public ruby-terminal-table
-  (package
-    (name "ruby-terminal-table")
-    (version "3.0.2")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/tj/terminal-table")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1c3f7ng3lxq962n8sbmlsvjx6srh5i801wzsyhxmfz2g880f5jps"))))
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-before 'check 'remove-unnecessary-dependencies
-           (lambda _
-             (substitute* "terminal-table.gemspec"
-               (("s.add_runtime_dependency.*") "\n")
-               (("s.add_development_dependency.*") "\n"))
-             (substitute* "Gemfile"
-               ((".*tins.*") "\n"))))
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (invoke "rspec")))))))
-    (build-system ruby-build-system)
-    (propagated-inputs
-     (list ruby-unicode-display-width))
-    (native-inputs
-     (list ruby-rspec ruby-term-ansicolor))
-    (home-page "https://github.com/tj/terminal-table")
-    (synopsis "Simple, feature rich ASCII table generation library")
-    (description
-     "Terminal Table is a fast and simple, yet feature rich
-table generator written in Ruby.  It supports ASCII and
-Unicode formatted tables.")
-    (license license:expat)))
-
-(define-public jekyll
-  (package
-    (name "jekyll")
-    (version "4.3.4")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/jekyll/jekyll")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0sz285x5ppbifrnixi9sdzv28kg4x3qbzds3qniiwh1ip9hi1yk4"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:modules '((guix build ruby-build-system)
-                       (guix build utils)
-                       (ice-9 ftw)
-                       (srfi srfi-26))
-           ;; The cucumber acceptance suite is not run as it depends on an old
-           ;; version (5).
-           #:test-target "spec"
-           #:phases
-           #~(modify-phases %standard-phases
-               (add-before 'check 'disable-problematic-tests
-                 ;; TODO: Package the missing test inputs.
-                 (lambda _
-                   (with-directory-excursion "test"
-                     ;; Requires 'jekyll-coffeescript'.
-                     (delete-file "test_coffeescript.rb")
-                     ;; Requires 'tomlrb'.
-                     (delete-file "test_configuration.rb")
-                     (substitute* "test_filters.rb"
-                       ;; The sassify tests fail due to white space
-                       ;; differences (see:
-                       ;; https://github.com/jekyll/jekyll/issues/9322).
-                       ((".*s?ssify with simple string.*" all)
-                        (string-append all
-                                       "      skip('fails on guix')\n")))
-                     ;; Requires kramdown-syntax-coderay.
-                     (delete-file "test_kramdown.rb")
-                     ;; Requires 'test-theme', usually made available from the
-                     ;; local checkout via Bundler (not used here).
-                     (delete-file "test_layout_reader.rb")
-                     ;; Requires a large amount of un-packaged dependencies.
-                     (delete-file "test_plugin_manager.rb")
-                     ;; Requires 'classifier-reborn'.
-                     (delete-file "test_related_posts.rb")
-                     ;; This one causes a test failure similar to the ones for
-                     ;; sassify above.
-                     (delete-file "test_sass.rb")
-                     ;; This would require running the tests via 'bundle
-                     ;; exec', but the Gemfile contains too many (extraneous)
-                     ;; dependencies.
-                     (delete-file "test_site.rb")
-                     ;; Delete the theme tests, as they require 'test-theme',
-                     ;; usually made available from the local checkout via the
-                     ;; Gemfile/bundler (not used here).
-                     (for-each delete-file
-                               (scandir
-                                "." (cut string-prefix? "test_theme" <>)))
-                     ;; This one also relies on 'test-theme'.
-                     (delete-file "test_liquid_renderer.rb")
-                     ;; This test assumes internet connectivity, negate it, as
-                     ;; there's no Internet in the build container.
-                     (substitute* "test_utils.rb"
-                       (("assert Utils::Internet\\.connected\\?")
-                        "refute Utils::Internet.connected?"))
-                     ;; These tests fail non-deterministically (see:
-                     ;; https://github.com/jekyll/jekyll/issues/9323).
-                     (delete-file "test_new_command.rb")
-                     (delete-file "test_collections.rb"))))
-               (replace 'check
-                 (lambda* (#:key tests? #:allow-other-keys)
-                   (when tests?
-                     ;; Invoke the test scripts manually, as 'rake test'
-                     ;; doesn't show any failure details, making debugging
-                     ;; needlessly difficult.
-                     (for-each (lambda (f)
-                                 (invoke "ruby" "-I" "test" f))
-                               (find-files "test" "^test_.*\\.rb$"))))))))
-    (native-inputs
-     (list bundler
-           ruby-httpclient
-           ruby-minitest-profile
-           ruby-minitest-reporters
-           ruby-nokogiri
-           ruby-rspec
-           ruby-rspec-mocks
-           ruby-shoulda
-           ruby-simplecov))
-    (propagated-inputs
-     (list ruby-addressable
-           ruby-colorator
-           ruby-em-websocket
-           ruby-i18n
-           ruby-jekyll-sass-converter
-           ruby-jekyll-watch
-           ruby-kramdown-parser-gfm
-           ruby-liquid-4
-           ruby-mercenary
-           ruby-pathutil
-           ruby-rouge
-           ruby-safe-yaml
-           ruby-sassc
-           ruby-terminal-table
-           ruby-webrick))
-    (home-page "https://jekyllrb.com/")
-    (synopsis "Static site generator")
-    (description "Jekyll is a simple, blog aware, static site generator.")
-    (license license:expat)))
-
-(define-public ruby-jekyll-paginate-v2
-  (package
-    (name "ruby-jekyll-paginate-v2")
-    (version "3.0.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "jekyll-paginate-v2" version))
-              (sha256
-               (base32
-                "1qzlqhpiqz28624fp0ak76hfy7908w6kpx62v7z43aiwjv0yc6q0"))))
-    (build-system ruby-build-system)
-    (propagated-inputs
-     (list jekyll))
-    (home-page "https://github.com/sverrirs/jekyll-paginate-v2")
-    (synopsis "Pagination Generator for Jekyll 3")
-    (description "The Pagination Generator forms the core of the pagination
-logic in Jekyll.  It calculates and generates the pagination pages.")
-    (license license:expat)))
-
-(define-public ruby-faraday-net-http
-  (package
-    (name "ruby-faraday-net-http")
-    (version "3.0.2")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "faraday-net_http" version))
-              (sha256
-               (base32
-                "13byv3mp1gsjyv8k0ih4612y6vw5kqva6i03wcg4w2fqpsd950k8"))))
-    (build-system ruby-build-system)
-    ;; Do not run the test suite here as it would introduce a dependency cycle
-    ;; with ruby-faraday, which uses it as part of its test suite.
-    (arguments (list #:tests? #f))
-    (synopsis "Faraday adapter for Net::HTTP")
-    (description "This gem is a Faraday adapter for the @code{Net::HTTP}
-library.  Faraday is an HTTP client library that provides a common interface
-over many adapters.")
-    (home-page "https://github.com/lostisland/faraday-net_http")
-    (license license:expat)))
-
-(define-public ruby-faraday
-  (package
-    (name "ruby-faraday")
-    (version "2.7.4")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/lostisland/faraday")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0ya6jqa7ryr4i62mmzjjxzd8i8y0pyw0cbhifd758rs6lvkzmxa3"))))
-    (build-system ruby-build-system)
-    (arguments (list #:test-target "spec"))
-    (native-inputs
-     (list ruby-coveralls
-           ruby-pry
-           ruby-rack
-           ruby-rspec
-           ruby-simplecov
-           ruby-webmock))
-    ;; Propagate faraday-net-http as this is the default adapter used, and
-    ;; many Ruby projects assumes it is available.
-    (propagated-inputs (list ruby-ruby2-keywords ruby-faraday-net-http))
-    (synopsis "Ruby HTTP/REST API client library")
-    (description "Faraday is a HTTP/REST API client library which provides a
-common interface over different adapters.")
-    (home-page "https://github.com/lostisland/faraday")
-    (license license:expat)))
-
-(define-public ruby-nio4r
-  (package
-   (name "ruby-nio4r")
-   (version "2.5.2")
-   (source
-    (origin
-     (method url-fetch)
-     (uri (rubygems-uri "nio4r" version))
-     (sha256
-      (base32
-       "0gnmvbryr521r135yz5bv8354m7xn6miiapfgpg1bnwsvxz8xj6c"))))
-   (build-system ruby-build-system)
-   (arguments
-    '(#:phases
-      (modify-phases %standard-phases
-        (add-after 'unpack 'remove-unnecessary-dependencies
-          (lambda _
-            (substitute* "spec/spec_helper.rb"
-              ;; Coveralls is for uploading test coverage information to an
-              ;; online service, and thus unnecessary for building the Guix
-              ;; package
-              (("require \"coveralls\"") "")
-              (("Coveralls\\.wear!") "")
-              ;; Remove rspec/retry as we are not retrying the tests
-              (("require \"rspec/retry\"") "")
-              (("config\\.display_try_failure_messages = true") "")
-              (("config\\.verbose_retry = true") ""))))
-        (add-before 'check 'compile
-          (lambda _
-            (invoke "rake" "compile")))
-        (replace 'check
-          (lambda* (#:key tests? #:allow-other-keys)
-            (when tests?
-              (invoke "rspec")))))))
-   (native-inputs
-    (list bundler ruby-rake-compiler ruby-rspec ruby-rubocop))
-   (synopsis "New I/O for Ruby")
-   (description
-    "@code{nio} provides cross-platform asynchronous I/O primitives in Ruby
-for scalable network clients and servers.")
-   (home-page "https://github.com/socketry/nio4r")
-   (license license:expat)))
-
-(define-public ruby-language-server-protocol
-  (package
-    (name "ruby-language-server-protocol")
-    (version "3.17.0.3")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/mtsmfm/language_server-protocol-ruby")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0f2g301fz99c6nkca39s9227brlycznv8a9r4b4i99rg25m91lc6"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'remove-unnecessary-dependencies
-            (lambda _
-              (substitute* "Gemfile"
-                (("gem \"pry-byebug\"") ""))))
-          (replace 'replace-git-ls-files
-            (lambda _
-              (substitute* "language_server-protocol.gemspec"
-                (("git ls-files -z([^`]*)" _ files)
-                 (string-append "find " files
-                                " -type f -not -regex '.*\\.gem$'"
-                                " -print0 | sort -z"))))))))
-    (native-inputs
-     (list ruby-activesupport
-           ruby-benchmark-ips
-           ruby-m
-           ruby-minitest
-           ruby-minitest-power-assert))
-    (synopsis "Language Server Protocol (LSP) development kit for Ruby")
-    (description "This package provides a Language Server Protocol (LSP)
-development kit for Ruby.")
-    (home-page "https://github.com/mtsmfm/language_server-protocol-ruby")
-    (license license:expat)))
-
-(define-public ruby-spy
-  (package
-    (name "ruby-spy")
-    (version "1.0.5")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "spy" version))
-              (sha256
-               (base32
-                "0g2mma8q17m26k5s864ndlvvqllhcivwg2wdigjvb7z06iw17gds"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:phases #~(modify-phases %standard-phases
-                        (add-after 'extract-gemspec 'relax-requirements
-                          (lambda _
-                            (substitute* "spy.gemspec"
-                              ((".*pry-byebug.*") ""))
-                            (substitute* "test/test_helper.rb"
-                              ((".*pry-byebug.*") ""))
-                            (substitute* "Gemfile"
-                              ((".*redcarpet.*") "")
-                              ((".*yard.*") "")))))))
-    (native-inputs
-     (list ruby-coveralls
-           ruby-minitest-reporters
-           ruby-pry
-           ruby-rspec-core
-           ruby-rspec-expectations))
-    (synopsis "Mocking library for Ruby")
-    (description "Spy is a mocking library.  By default, it will raise an
-error if you attempt to stub a method that doesn't exist or call the stubbed
-method with the wrong arity.")
-    (home-page "https://github.com/ryanong/spy")
-    (license license:expat)))
-
-(define-public ruby-subprocess
-  (package
-    (name "ruby-subprocess")
-    (version "1.5.6")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "subprocess" version))
-              (sha256
-               (base32
-                "0v49ahfx9b75qg42sl8a3l367g2vihc16g8z5f2raxpxjl1wh2s2"))))
-    (build-system ruby-build-system)
-    ;; Do not run the test suite, as there its test dependency ruby-sord would
-    ;; introduce a cycle with ruby-sorbet-runtime.
-    (arguments (list #:tests? #f))
-    (native-inputs (list ruby-minitest ruby-pry))
-    (synopsis "Ruby library to control and communicate with spawned processes")
-    (description "This Ruby library is controlling and communicating with
-spawned processes.  It is designed after Python's @code{subprocess} module.")
-    (home-page "https://github.com/stripe/subprocess")
-    (license license:expat)))
-
-(define-public ruby-sus
-  (package
-    (name "ruby-sus")
-    (version "0.20.3")
-    (source (origin
-              (method git-fetch)        ;for gems.rb
-              (uri (git-reference
-                    (url "https://github.com/ioquatix/sus")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0j4rkh9li79674h3lfkxlcdygscmb22l77i7hwhxl3gw103gkpdr"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:phases
-           #~(modify-phases %standard-phases
-               (add-before 'build 'prune-gems.rb
-                 (lambda _
-                   (substitute* "gems.rb"
-                     (("gem \"bake-modernize\"") "")
-                     (("gem \"bake-gem\"") "")
-                     (("gem \"utopia-project\"") ""))))
-               (add-before 'build 'remove-missing-signing-key
-                 (lambda _
-                   ;; Otherwise, the build fails with ENOENT.
-                   (substitute* "sus.gemspec"
-                     ((".*spec.signing_key.*") ""))))
-               (delete 'check)          ;moved after install
-               (add-after 'install 'check
-                 (lambda* (#:key tests? #:allow-other-keys)
-                   (when tests?
-                     (setenv "CONSOLE_LEVEL" "debug")
-                     (setenv "HOME" "/tmp")
-                     ;; 'bundle exec' must be used to workaround a problem
-                     ;; when using bake test and GEM_PATH (see:
-                     ;; https://github.com/ioquatix/bake/issues/11).
-                     (invoke "bundle" "exec" "bake" "test"))))
-               (add-before 'check 'set-paths
-                 (lambda _
-                   (setenv "PATH" (string-append (getenv "PATH") ":"
-                                                 #$output "/bin"))
-                   (setenv "GEM_PATH" (string-append
-                                       (getenv "GEM_PATH") ":"
-                                       #$output "/lib/ruby/vendor_ruby")))))))
-    (native-inputs (list ruby-bake-test ruby-bake-test-external ruby-covered))
-    (synopsis "Fast and scalable test runner for Ruby")
-    (description "This package provides a fast and scalable test runner for Ruby.")
-    (home-page "https://github.com/ioquatix/sus")
-    (license license:expat)))
-
-(define-public ruby-syntax-tree
-  (package
-    (name "ruby-syntax-tree")
-    (version "6.1.1")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/ruby-syntax-tree/syntax_tree")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0356lgvqp22nkqlrgszf7myfdg4arclg278awh34zyby1cx6hb2k"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          ;; The tests rely on the Gem being installed, so move the check
-          ;; phase after the install phase.
-          (delete 'check)
-          (add-after 'install 'check
-            (lambda* (#:key tests? #:allow-other-keys)
-              (setenv "GEM_PATH" (string-append
-                                  #$output "/lib/ruby/vendor_ruby:"
-                                  (getenv "GEM_PATH")))
-              (when tests?
-                (invoke "rake" "test")))))))
-    (native-inputs (list ruby-rubocop-ast ruby-simplecov))
-    (propagated-inputs (list ruby-prettier-print))
-    (synopsis "Fast Ruby parser and formatter")
-    (description "Syntax Tree is a suite of tools built on top of the internal
-CRuby parser.  It provides the ability to generate a syntax tree from source,
-as well as the tools necessary to inspect and manipulate that syntax tree.  It
-can be used to build formatters, linters, language servers, and more.")
-    (home-page "https://github.com/ruby-syntax-tree/syntax_tree")
-    (license license:expat)))
-
-(define-public ruby-stringio
-  (package
-    (name "ruby-stringio")
-    (version "3.1.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/ruby/stringio")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1jgi2w5y0z0x9mfapr2pdlag4wvn03fpf5kbai8bscyh8nn79yka"))))
-    (build-system ruby-build-system)
-    (native-inputs (list ruby-rake-compiler ruby-test-unit-ruby-core))
-    (synopsis "Pseudo `IO` class from and to `String`")
-    (description "Pseudo `IO` class from and to `String`.")
-    (home-page "https://github.com/ruby/stringio")
-    (license license:bsd-2)))
-
-(define-public ruby-stream
-  (package
-    (name "ruby-stream")
-    (version "0.5.5")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "stream" version))
-              (sha256
-               (base32
-                "016m9v81vpj14d8g5ins91zc4pzl7vf5f1gxl7jhfsfy601k7cv2"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-before 'check 'remove-version-constraints
-           (lambda _
-             (delete-file "Gemfile.lock"))))))
-    (native-inputs (list bundler ruby-stringio ruby-webrick ruby-yard))
-    (synopsis "Interface for external iterators")
-    (description "Module Stream defines an interface for external iterators.")
-    (home-page "https://github.com/monora/stream")
-    (license license:bsd-2)))
-
-(define sorbet-version "0.5.10610.20230106174520-1fa668010")
-
-(define sorbet-monorepo
-  (origin
-    (method git-fetch)
-    (uri (git-reference
-          (url "https://github.com/sorbet/sorbet")
-          (commit sorbet-version)))
-    (file-name (string-append "sorbet-" sorbet-version "-checkout"))
-    (sha256
-     (base32
-      "0f21dl06alxwn6xgdxyrkd58plmmsv04z2bcls9ld4cfzsrs5537"))))
-
-(define (make-sorbet-gem-source gem)
-  "Return the source of GEM, a sub-directory."
-  (computed-file
-   (string-append "ruby-sorbet-" gem "-" sorbet-version "-checkout")
-   (with-imported-modules (source-module-closure '((guix build utils)))
-     #~(begin
-         (use-modules (guix build utils))
-         (copy-recursively (string-append #$sorbet-monorepo
-                                          "/gems/sorbet-" #$gem)
-                           #$output)))))
-
-(define-public ruby-sorbet-runtime
-  (package
-    (name "ruby-sorbet-runtime")
-    (version sorbet-version)
-    (source (make-sorbet-gem-source "runtime"))
-    (build-system ruby-build-system)
-    ;; 25 out of 841 tests currently fail, seemingly due to invalid
-    ;; assumptions about file names in the build environment (see:
-    ;; https://github.com/sorbet/sorbet/issues/6650).
-    (arguments (list #:tests? #f))
-    (native-inputs
-     (list ruby-minitest
-           ruby-mocha
-           ruby-rubocop
-           ruby-rubocop-performance
-           ruby-concurrent-ruby
-           ruby-pry
-           ruby-parser
-           ruby-subprocess))
-    (synopsis "Runtime type checking component for Sorbet")
-    (description "Sorbet's runtime type checking component.  Sorbet is a
-powerful type checker for Ruby.")
-    (home-page "https://sorbet.org")
-    (license license:asl2.0)))
-
-(define-public ruby-mustache
-  (package
-    (name "ruby-mustache")
-    (version "1.1.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "mustache" version))
-       (sha256
-        (base32 "1l0p4wx15mi3wnamfv92ipkia4nsx8qi132c6g51jfdma3fiz2ch"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     `(("ruby-simplecov" ,ruby-simplecov)
-       ("test-patch"
-        ,(search-patch "ruby-mustache-1.1.1-fix-race-condition-tests.patch"))))
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-tests
-           (lambda* (#:key inputs #:allow-other-keys)
-             (invoke "patch" "-p1" "--batch" "-i"
-                     (assoc-ref inputs "test-patch")))))))
-    (synopsis "Framework-agnostic way to render logic-free views")
-    (description
-     "Mustache is a framework-agnostic way to render logic-free views.
-Think of Mustache as a replacement for your views.  Instead of views
-consisting of ERB or HAML with random helpers and arbitrary logic,
-your views are broken into two parts: a Ruby class and an HTML
-template.")
-    (home-page "https://github.com/mustache/mustache")
-    (license license:expat)))
-
-(define-public ruby-mustermann
-  (package
-    (name "ruby-mustermann")
-    (version "3.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "mustermann" version))
-       (sha256
-        (base32
-         "0rwbq20s2gdh8dljjsgj5s6wqqfmnbclhvv2c2608brv7jm6jdbd"))))
-    (build-system ruby-build-system)
-    (arguments
-     ;; No tests.
-     '(#:tests? #f))
-    (synopsis "Library implementing patterns that behave like regular expressions")
-    (description "Given a string pattern, Mustermann will turn it into an
-object that behaves like a regular expression and has comparable performance
-characteristics.")
-    (home-page "https://github.com/sinatra/mustermann")
-    (license license:expat)))
-
-(define-public ruby-prettier-print
-  (package
-    (name "ruby-prettier-print")
-    (version "1.2.1")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/ruby-syntax-tree/prettier_print")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "00cg40jc0il1hpsrpsrqwhsxmx7day9lxp1ksrm08zxzsrz9ykqz"))))
-    (build-system ruby-build-system)
-    (native-inputs (list ruby-simplecov))
-    (synopsis "Compatible and featureful implementation of @code{prettyprint}")
-    (description "This package provides a drop-in replacement for the
-@code{prettyprint} gem, with more functionality.")
-    (home-page "https://github.com/ruby-syntax-tree/prettier_print")
-    (license license:expat)))
-
-(define-public ruby-html-proofer
-  (package
-    (name "ruby-html-proofer")
-    (version "5.0.3")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/gjtorikian/html-proofer")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "01ksss3ikppc45z2q33bx8bb9785bqlp1rdqascaqg9mhs392adk"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      ;; Tests require vcr, which is under the Hippocratic license, which is
-      ;; not a free software license (see:
-      ;; https://www.gnu.org/licenses/license-list.html#hippocratic).
-      #:tests? #f
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'extract-gemspec 'relax-requirements
-            (lambda _
-              (substitute* "html-proofer.gemspec"
-                (("required_ruby_version = \\[\">= 3.1\"")
-                 "required_ruby_version = [\">= 2.6\""))))
-          (replace 'replace-git-ls-files
-            (lambda _
-              ;; The html-proofer.gemspec file contains 'all_files = %x(git
-              ;; ls-files -z).split("\x0")', but the original phase matches on
-              ;; `git ls-files -z`.
-              ;; TODO: Improve ruby-build-system patterns on core-updates.
-              (substitute* "html-proofer.gemspec"
-                (("git ls-files -z")
-                 "find . -type f -not -regex '.*\\.gem$' -print0 \
-| sort -z | cut -zc3-")))))))
-    (propagated-inputs
-     (list ruby-addressable
-           ruby-mercenary
-           ruby-nokogiri
-           ruby-parallel
-           ruby-rainbow
-           ruby-typhoeus
-           ruby-yell))
-    (synopsis "Test your rendered HTML files to make sure they're accurate")
-    (description
-     "HTMLProofer is a set of tests to validate your HTML output.  These
-tests check if your image references are legitimate, if they have alt tags,
-if your internal links are working, and so on.  It's intended to be an
-all-in-one checker for your output.")
-    (home-page "https://github.com/gjtorikian/html-proofer")
-    (license license:expat)))
-
-(define-public ruby-htmlentities
-  (package
-    (name "ruby-htmlentities")
-    (version "4.3.4")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "htmlentities" version))
-       (sha256
-        (base32
-         "1nkklqsn8ir8wizzlakncfv42i32wc0w9hxp00hvdlgjr7376nhj"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda _
-             (map (lambda (file)
-                    (invoke "ruby" "-Itest" file))
-                  (find-files "./test" ".*_test\\.rb")))))))
-    (synopsis "Encode and decode (X)HTML entities")
-    (description
-     "This package provides a module for encoding and decoding (X)HTML
-entities.")
-    (home-page "https://github.com/threedaymonk/htmlentities")
-    (license license:expat)))
-
-;;; FIXME: Currently broken with rack 3, awaiting the merge for
-;;; https://github.com/sinatra/sinatra/pull/1857 and a new release.
-(define-public ruby-sinatra
-  (package
-    (name "ruby-sinatra")
-    (version "3.0.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "sinatra" version))
-       (sha256
-        (base32
-         "1ryfja9yd3fq8n1p5yi3qnd0pjk7bkycmxxmbb1bj0axlr1pdv20"))))
-    (build-system ruby-build-system)
-    (propagated-inputs
-     (list ruby-mustermann ruby-rack ruby-rack-protection ruby-tilt))
-    (synopsis "DSL for quick web applications creation in Ruby")
-    (description
-     "Sinatra is a DSL for quickly creating web applications in Ruby with
-minimal effort.")
-    (home-page "https://sinatrarb.com/")
-    (license license:expat)))
-
-(define-public ruby-timeout
-  (package
-    (name "ruby-timeout")
-    (version "0.4.3")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/ruby/timeout")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1mw2dwyp2j05fl2gmw8cj132kk145sbxj5i0whpxcnddlc8gw781"))))
-    (build-system ruby-build-system)
-    (native-inputs (list ruby-test-unit-ruby-core))
-    (synopsis "Timeout library for Ruby")
-    (description "Timeout provides a way to auto-terminate a potentially
-long-running operation if it hasn't finished in a fixed amount of time.")
-    (home-page "https://github.com/ruby/timeout")
-    (license (list license:bsd-2))))
-
-(define-public ruby-thin
-  (package
-    (name "ruby-thin")
-    (version "1.7.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "thin" version))
-       (sha256
-        (base32
-         "0nagbf9pwy1vg09k6j4xqhbjjzrg5dwzvkn4ffvlj76fsn6vv61f"))))
-    (build-system ruby-build-system)
-    (arguments
-     ;; No tests.
-     '(#:tests? #f))
-    (propagated-inputs
-     (list ruby-daemons ruby-eventmachine ruby-rack))
-    (synopsis "Thin and fast web server for Ruby")
-    (description "Thin is a Ruby web server that glues together 3 Ruby libraries:
-@itemize
-@item the Mongrel parser,
-@item Event Machine, a network I/O library with high scalability, performance
-and stability,
-@item Rack, a minimal interface between webservers and Ruby frameworks.
-@end itemize\n")
-    (home-page "https://github.com/macournoyer/thin")
-    (license license:ruby)))
-
-(define-public ruby-truthy
-  (package
-    (name "ruby-truthy")
-    (version "1.0.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "truthy" version))
-              (sha256
-               (base32
-                "19silgd65j3qwfk5w891p9wcmzdmi9ddm2kg5zbvvqn2h9lkfzmd"))))
-    (build-system ruby-build-system)
-    (arguments (list #:phases #~(modify-phases %standard-phases
-                                  (replace 'check
-                                    (lambda* (#:key tests? #:allow-other-keys)
-                                      (when tests?
-                                        (substitute* "spec/spec_helper.rb"
-                                          (("require 'spec'")
-                                           "require 'rspec'"))
-                                        (invoke "rspec")))))))
-    (native-inputs (list ruby-rspec))
-    (synopsis "Object truthiness-related Ruby library")
-    (description "This library makes it easier to discover the truth values of
-various Ruby objects.")
-    (home-page "https://github.com/ymendel/truthy")
-    (license license:expat)))
-
-(define-public ruby-skinny
-  (package
-    (name "ruby-skinny")
-    (version "0.2.4")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "skinny" version))
-       (sha256
-        (base32
-         "1y3yvx88ylgz4d2s1wskjk5rkmrcr15q3ibzp1q88qwzr5y493a9"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f ; No included tests
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'build 'patch-gemspec
-           (lambda _
-             (substitute* ".gemspec"
-               (("<eventmachine>.freeze, \\[\\\"~> 1.0.0\"")
-                "<eventmachine>, [\">= 1.0.0\"")
-               (("<thin>.freeze, \\[\\\"< 1.7\", ") "<thin>, [")))))))
-    (propagated-inputs
-     (list ruby-eventmachine ruby-thin))
-    (synopsis "Simple, upgradable WebSockets for Ruby Thin")
-    (description "Skinny is a simple, upgradable WebSockets for Ruby, using
-the Thin library.")
-    (home-page "https://github.com/sj26/skinny")
-    (license license:expat)))
-
-(define-public ruby-sys-filesystem
-  (package
-    (name "ruby-sys-filesystem")
-    (version "1.3.4")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "sys-filesystem" version))
-              (sha256
-               (base32
-                "0mizqnsiagagmracadr16s5na2ks2j3ih1w0f3gp4ssrda6szl01"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:phases (modify-phases %standard-phases
-                  (add-before 'check 'set-HOME
-                    (lambda _
-                      ;; Some tests attempt to stat $HOME.  Let them.
-                      (setenv "HOME" "/tmp"))))))
-    (propagated-inputs
-     (list ruby-ffi))
-    (native-inputs
-     (list ruby-mkmf-lite))
-    (synopsis "Gather file system information")
-    (description
-     "The @code{sys-filesystem} library provides a cross-platform interface
-for gathering file system information, such as disk space and mount points.")
-    (home-page "https://github.com/djberg96/sys-filesystem")
-    (license license:asl2.0)))
-
-(define-public mailcatcher
-  (package
-    (name "mailcatcher")
-    (version "0.7.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "mailcatcher" version))
-       (sha256
-        (base32
-         "02w1ycyfv7x0sh9799lz7xa65p5qvl5z4pa8a7prb68h2zwkfq0n"))))
-    (build-system ruby-build-system)
-    (arguments
-     ;; Tests require web/assets which is not included in the output.  We
-     ;; might be able to fix this by adding the Git repository to the GEM_PATH
-     ;; of the tests.  See ruby-mysql2.
-     '(#:tests? #f
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'build 'patch-gemspec
-           (lambda _
-             (substitute* ".gemspec"
-               (("<eventmachine>.freeze, \\[\\\"= 1.0.9.1")
-                "<eventmachine>, [\">= 1.0.9.1")
-               (("<rack>.freeze, \\[\\\"~> 1.5") "<rack>, [\">= 1.5")
-               (("<thin>.freeze, \\[\\\"~> 1.5.0") "<thin>, [\">= 1.5.0")
-               (("<sinatra>.freeze, \\[\\\"~> 1.2") "<sinatra>, [\">= 1.2"))))
-         (add-before 'build 'loosen-dependency-contraint
-             (lambda _
-               (substitute* "lib/mail_catcher.rb"
-                 (("\"eventmachine\", \"1.0.9.1\"") "\"eventmachine\", \">= 1.0.9.1\"")
-                 (("\"rack\", \"~> 1.5\"") "\"rack\", \">= 1.5\"")
-                 (("\"thin\", \"~> 1.5.0\"") "\"thin\", \">= 1.5.0\"")
-                 (("\"sinatra\", \"~> 1.2\"") "\"sinatra\", \">= 1.2\"")))))))
-    (inputs
-     (list ruby-eventmachine
-           ruby-mail
-           ruby-rack
-           ruby-sinatra
-           ruby-skinny
-           ruby-sqlite3
-           ruby-thin))
-    (synopsis "SMTP server which catches messages to display them a browser")
-    (description
-     "MailCatcher runs a super simple SMTP server which catches any message
-sent to it to display in a web interface.  Run mailcatcher, set your favourite
-app to deliver to smtp://127.0.0.1:1025 instead of your default SMTP server,
-then check out http://127.0.0.1:1080 to see the mail.")
-    (home-page "https://mailcatcher.me")
-    (license license:expat)))
-
-(define-public ruby-backport
-  (package
-    (name "ruby-backport")
-    (version "1.1.2")
-    (source
-     (origin
-       ;; The gem does not include test code, so fetch from the Git repository.
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/castwide/backport")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "18fpg1n7n2z02ykz9v1x1q0cqa2lvivf8ygka768s01q1r9wfwv2"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:test-target "spec"))
-    (native-inputs
-     (list bundler ruby-rspec))
-    (inputs
-     (list ruby-simplecov))
-    (synopsis "Pure Ruby library for event-driven IO")
-    (description
-     "This package provides a pure Ruby library for event-driven IO.")
-    (home-page "https://github.com/castwide/backport")
-    (license license:expat)))
-
-(define-public ruby-json-schema
-  (package
-    (name "ruby-json-schema")
-    (version "2.8.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "json-schema" version))
-       (sha256
-        (base32
-         "1yv5lfmr2nzd14af498xqd5p89f3g080q8wk0klr3vxgypsikkb5"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:tests? #f ; no tests
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'build
-           (lambda _
-             (invoke "gem" "build" ".gemspec"))))))
-    (propagated-inputs
-     (list ruby-addressable))
-    (synopsis "Ruby JSON Schema Validator")
-    (description "This library provides Ruby with an interface for validating
-JSON objects against a JSON schema conforming to JSON Schema Draft 4.  Legacy
-support for JSON Schema Draft 3, JSON Schema Draft 2, and JSON Schema Draft 1
-is also included.")
-    (home-page "https://github.com/ruby-json-schema/json-schema")
-    (license license:expat)))
-
-(define-public swagger-diff
-  (package
-    (name "swagger-diff")
-    (version "2.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "swagger-diff" version))
-       (sha256
-        (base32
-         "18kbrijkafs3vfsbaqz0cqfj7jrz3aj8xr4fgn5if63wlximybv2"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:test-target "spec"
-      #:phases
-      #~(modify-phases %standard-phases
-          ;; Don't run or require rubocop, the code linting tool, as this is a
-          ;; bit unnecessary.
-          (add-after 'unpack 'dont-run-rubocop
-            (lambda _
-              (substitute* "Rakefile"
-                ((".*rubocop.*") "")
-                ((".*RuboCop.*") "")))))))
-    (propagated-inputs
-     (list ruby-json-schema))
-    (native-inputs
-     (list bundler ruby-rspec-core ruby-rspec-expectations))
-    (synopsis
-     "Compare Open API Initiative specification files")
-    (description
-     "Swagger::Diff is a utility for comparing two different Open API
-Initiative (OAI) specifications (formerly known as Swagger specifications).
-It is intended to determine whether a newer API specification is
-backwards-compatible with an older API specification.")
-    (home-page "https://github.com/civisanalytics/swagger-diff")
-    (license license:bsd-3)))
-
-(define-public ruby-reverse-markdown
-  (package
-    (name "ruby-reverse-markdown")
-    (version "1.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "reverse_markdown" version))
-       (sha256
-        (base32
-         "0w7y5n74daajvl9gixr91nh8670d7mkgspkk3ql71m8azq3nffbg"))))
-    (build-system ruby-build-system)
-    (propagated-inputs
-     (list ruby-nokogiri))
-    (native-inputs
-     (list bundler ruby-rspec ruby-kramdown ruby-simplecov))
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (invoke "rspec")))))))
-    (synopsis "Convert HTML into Markdown")
-    (description
-     "This Ruby module allows you to map simple HTML back into
-Markdown---e.g., if you want to import existing HTML data in your
-application.")
-    (home-page "https://github.com/xijo/reverse_markdown")
-    (license license:wtfpl2)))
-
-(define-public ruby-solargraph
-  (package
-    (name "ruby-solargraph")
-    (version "0.40.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "solargraph" version))
-       (sha256
-        (base32
-         "1gf049rm0yvw4r8r5yyi890idbfg8qh0dikqx5prvkh11srl73bz"))))
-    (build-system ruby-build-system)
-    (propagated-inputs
-     (list ruby-backport
-           bundler
-           ruby-benchmark
-           ruby-e2mmap
-           ruby-jaro-winkler
-           ruby-kramdown
-           ruby-kramdown-parser-gfm
-           ruby-maruku
-           ruby-nokogiri
-           ruby-parser
-           ruby-reverse-markdown
-           ruby-rubocop
-           ruby-thor
-           ruby-tilt
-           ruby-yard))
-    (native-inputs
-     (list ruby-rspec ruby-pry ruby-simplecov ruby-webmock))
-    ;; FIXME: can't figure out how to run the tests properly:
-
-    ;; An error occurred while loading spec_helper.
-    ;; Failure/Error: return gem_original_require(path)
-    ;; LoadError:
-    ;; cannot load such file -- spec_helper
-    (arguments
-     '(#:tests? #f
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (invoke "rspec")))))))
-    (synopsis
-     "IDE tools for code completion, inline documentation, and static analysis")
-    (description
-     "Solargraph provides a comprehensive suite of tools for Ruby
-programming: intellisense, diagnostics, inline documentation, and type
-checking.")
-    (home-page "https://solargraph.org/")
-    (license license:expat)))
-
-(define-public ruby-wayback-machine-downloader
-  (package
-    (name "ruby-wayback-machine-downloader")
-    (version "2.2.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri
-             "wayback_machine_downloader"
-             version))
-       (sha256
-        (base32
-         "12kb1qmvmmsaihqab1prn6cmynkn6cgb4vf41mgv22wkcgv5wgk2"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; no tests
-    (synopsis "Download archived websites from the Wayback Machine")
-    (description
-     "Wayback Machine Downloader is a command line tool for downloading
-websites from the Internet Archive's Wayback Machine (archive.org).
-It allows fine grained control over what to download by specifying
-which snapshots to consider and what files to include.")
-    (home-page
-     "https://github.com/hartator/wayback-machine-downloader")
-    (license license:expat)))
-
-(define-public ruby-zeitwerk
-  (package
-    (name "ruby-zeitwerk")
-    (version "2.7.1")
-    (source
-      (origin
-        (method git-fetch)              ;for tests
-        (uri (git-reference
-               (url "https://github.com/fxn/zeitwerk")
-               (commit (string-append "v" version))))
-        (file-name (git-file-name name version))
-        (sha256
-         (base32
-          "19qmcdpbh4bl878zd1w19064yjkpb8sxaydcasqfa7p8cfg3hnsr"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list ruby-minitest
-           ruby-minitest-focus
-           ruby-minitest-proveit
-           ruby-minitest-reporters
-           ruby-warning))
-    (synopsis "Efficient and thread-safe code loader for Ruby")
-    (description
-     "Zeitwerk implements constant autoloading with Ruby semantics.  Each gem
-and application may have their own independent autoloader, with its own
-configuration, inflector, and logger.  Supports autoloading, reloading, and
-eager loading.")
-    (home-page "https://github.com/fxn/zeitwerk")
-    (license license:expat)))
-
-(define-public ruby-warning
-  (package
-    (name "ruby-warning")
-    (version "1.5.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "warning" version))
-       (sha256
-        (base32 "0lwcf7fsz1sda1fdbqq1i4q9kzg4f5vwrzgfg1vpa1hcxagw84hg"))))
-    (build-system ruby-build-system)
-    (arguments '(#:tests? #f))  ; No tests bundled.
-    (synopsis "Custom processing for warnings")
-    (description
-     "This package adds custom processing for warnings for Ruby, including the
-ability to ignore specific warning messages, ignore warnings in specific
-files/directories, include backtraces with warnings, treat warnings as errors,
-deduplicate warnings, and add custom handling for all warnings in specific
-files/directories.")
-    (home-page "https://github.com/jeremyevans/ruby-warning")
-    (license license:expat)))
-
-(define-public ruby-wwtd
-  (package
-    (name "ruby-wwtd")
-    (version "1.4.1")
-    (home-page "https://github.com/grosser/wwtd")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url home-page)
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0gw7vfnbb41cy67yw82zji3jkhfsgmzcgzaszm99ax77y18wclf2"))
-              (modules '((guix build utils)))
-              (snippet
-               '(begin
-                  ;; Remove bundled library.
-                  (delete-file "spec/rake-12.3.0.gem")))))
-    (build-system ruby-build-system)
-    (arguments
-     '(;; XXX: Tests need multiple versions of ruby, wants to run
-       ;; `bundle install`, etc.
-       #:tests? #f
-       #:phases (modify-phases %standard-phases
-                  (replace 'replace-git-ls-files
-                    (lambda _
-                      (substitute* "wwtd.gemspec"
-                        (("git ls-files lib/ bin/`")
-                         "find lib/ bin/ -type f |sort`"))))
-                  (add-before 'check 'remove-version-constraints
-                    (lambda _
-                      (delete-file "Gemfile.lock")))
-                  (replace 'check
-                    (lambda* (#:key tests? #:allow-other-keys)
-                      (if tests?
-                          (invoke "rspec" "spec/")
-                          (format #t "test suite not run~%")))))))
-    (native-inputs
-     (list ruby-bump ruby-rspec))
-    (synopsis "Run @file{.travis.yml} files locally")
-    (description
-     "WWTD is a @dfn{Travis Simulator} that lets you run test matrices
-defined in @file{.travis.yml} on your local machine, using @code{rvm},
-@code{rbenv}, or @code{chruby} to test different versions of Ruby.")
-    (license license:expat)))
-
-(define-public ruby-rugged
-  ;; The last release is old and doesn't build anymore (see:
-  ;; https://github.com/libgit2/rugged/issues/951).
-  (let ((commit "6379f23cedd5f527cf6a5c229627e366b590a22d")
-        (revision "0"))
-    (package
-      (name "ruby-rugged")
-      (version (git-version "1.6.2" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/libgit2/rugged")
-                      (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "0yac7vm0l2jsdsxf2k7xbny4iyzsy8fhiy2g5sphhffp7xgynny8"))))
-      (build-system ruby-build-system)
-      (arguments
-       (list #:gem-flags
-             #~(list "--" "--use-system-libraries")
-             #:phases
-             #~(modify-phases %standard-phases
-                 (add-after 'unpack 'adjust-extconf.rb
-                   (lambda _
-                     ;; Neither using --with-git2-dir=$prefix nor providing
-                     ;; pkg-config allows locating the libgit2 prefix (see:
-                     ;; https://github.com/libgit2/rugged/issues/955).
-                     (substitute* "ext/rugged/extconf.rb"
-                       (("LIBGIT2_DIR = File.join.*'vendor', 'libgit2'.*")
-                        (format #f "LIBGIT2_DIR = ~s~%"
-                                #$(this-package-input "libgit2"))))))
-                 (delete 'check)        ;moved after the install phase
-                 (add-after 'install 'check
-                   (assoc-ref %standard-phases 'check))
-                 (add-before 'check 'set-GEM_PATH
-                   (lambda _
-                     (setenv "GEM_PATH" (string-append
-                                         (getenv "GEM_PATH") ":"
-                                         #$output "/lib/ruby/vendor_ruby"))))
-                 (add-before 'check 'disable-problematic-tests
-                   (lambda _
-                     (with-directory-excursion "test"
-                       (for-each delete-file
-                                 ;; These tests require an actual libgit2 git
-                                 ;; repository checkout.
-                                 '("blame_test.rb"
-                                   "blob_test.rb"
-                                   "cherrypick_test.rb"
-                                   "config_test.rb"
-                                   "commit_test.rb"
-                                   "diff_test.rb"
-                                   "index_test.rb"
-                                   "merge_test.rb"
-                                   "note_test.rb"
-                                   "object_test.rb"
-                                   "patch_test.rb"
-                                   "rebase_test.rb"
-                                   "reference_test.rb"
-                                   "remote_test.rb"
-                                   "repo_apply_test.rb"
-                                   "repo_ignore_test.rb"
-                                   "repo_pack_test.rb"
-                                   "repo_reset_test.rb"
-                                   "repo_test.rb"
-                                   "revert_test.rb"
-                                   "settings_test.rb"
-                                   "status_test.rb"
-                                   "submodule_test.rb"
-                                   "tag_test.rb"
-                                   "tree_test.rb"
-                                   "walker_test.rb"))
-                       (delete-file-recursively "online")))))))
-      (native-inputs (list git-minimal/pinned ruby-rake-compiler))
-      (inputs (list libgit2))
-      (synopsis "Ruby bindings to the libgit2 linkable C Git library")
-      (description "Rugged is a library for accessing libgit2 in Ruby.  It gives
-you the speed and portability of libgit2 with the beauty of the Ruby
-language.")
-      (home-page "https://www.rubydoc.info/gems/rugged")
-      (license license:expat))))
-
-(define-public ruby-yell
-  (package
-    (name "ruby-yell")
-    (version "2.2.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "yell" version))
-       (sha256
-        (base32
-         "1g16kcdhdfvczn7x81jiq6afg3bdxmb73skqjyjlkp5nqcy6y5hx"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda _
-             (invoke "rake" "examples")))))) ; there is no test target.
-    (synopsis
-     "Extensible logging library for Ruby")
-    (description
-     "Yell is a comprehensive logging replacement for Ruby.  It defines
-multiple adapters, various log level combinations and message formatting
-options.")
-    (home-page "https://github.com/rudionrails/yell")
-    (license license:expat)))
-
-(define-public ruby-e2mmap
-  (package
-    (name "ruby-e2mmap")
-    (version "0.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "e2mmap" version))
-       (sha256
-        (base32
-         "0n8gxjb63dck3vrmsdcqqll7xs7f3wk78mw8w0gdk9wp5nx6pvj5"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:tests? #f)) ;; There is a rakefile but no tests
-    (synopsis
-     "Module for defining custom exceptions with specific messages")
-    (description
-     "Exception2MessageMapper (e2mmap) is a helper module for easily defining
-exceptions with predefined messages.")
-    (home-page "https://github.com/ruby/e2mmap")
-    (license license:bsd-2)))
-
-(define-public ruby-benchmark
-  (package
-    (name "ruby-benchmark")
-    (version "0.4.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "benchmark" version))
-       (sha256
-        (base32
-         "0jl71qcgamm96dzyqk695j24qszhcc7liw74qc83fpjljp2gh4hg"))))
-    (build-system ruby-build-system)
-    (synopsis "Performance benchmarking library")
-    (description "This package provides methods for benchmarking Ruby code,
-giving detailed reports on the time taken for each task.")
-    (home-page "https://github.com/ruby/benchmark")
-    (license license:bsd-2)))
-
-(define-public ruby-jekyll-feed
-  (package
-    (name "ruby-jekyll-feed")
-    (version "0.15.1")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "jekyll-feed" version))
-        (sha256
-          (base32
-            "1zxqkrnix0xiw98531h5ga6h69jhzlx2jh9qhvcl67p8nq3sgza9"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:tests? #false))     ;there are none
-    (propagated-inputs
-      (list jekyll))
-    (synopsis
-      "Jekyll plugin to generate an Atom feed of your Jekyll posts")
-    (description
-      "This package provides a Jekyll plugin to generate an Atom feed
-of your Jekyll posts.")
-    (home-page
-      "https://github.com/jekyll/jekyll-feed")
-    (license license:expat)))
-
-(define-public ruby-jekyll-sitemap
-  (package
-    (name "ruby-jekyll-sitemap")
-    (version "1.4.0")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "jekyll-sitemap" version))
-        (sha256
-          (base32
-            "0622rwsn5i0m5xcyzdn86l68wgydqwji03lqixdfm1f1xdfqrq0d"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:tests? #false))     ;there are none
-    (propagated-inputs
-      (list jekyll))
-    (synopsis
-      "Automatically generate a sitemap.xml for your Jekyll site")
-    (description
-      "This package provides a Jekyll plugin to silently generate
-a sitemaps.org compliant sitemap for your Jekyll site.")
-    (home-page
-      "https://github.com/jekyll/jekyll-sitemap")
-    (license license:expat)))
-
-(define-public ruby-jekyll-seo-tag
-  (package
-   (name "ruby-jekyll-seo-tag")
-   (version "2.7.1")
-   (source
-    (origin
-     (method url-fetch)
-     (uri (rubygems-uri "jekyll-seo-tag" version))
-     (sha256
-      (base32
-       "0fsi75hymk2wswy216fs224p5ycrzjw1kshw1bsl5czhv42wr2w3"))))
-   (build-system ruby-build-system)
-   (arguments
-    `(#:tests? #false))
-   (propagated-inputs
-    (list jekyll))
-   (synopsis
-    "Jekyll plugin to add metadata tags for search engines and social networks")
-   (description
-    "This package provides a Jekyll plugin to add metadata tags for search engines
-and social networks to better index and display your site's content.")
-   (home-page
-    "https://github.com/jekyll/jekyll-seo-tag")
-   (license license:expat)))
-
-(define-public ruby-taskjuggler
-  (package
-    (name "ruby-taskjuggler")
-    (version "3.8.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "taskjuggler" version))
-       (sha256
-        (base32
-         "16d5vgz54all8vl3haqy6j69plny3np4kc3wq7wy3xa3i0h7v60z"))))
-    (build-system ruby-build-system)
-    (native-inputs (list ruby-rspec tzdata-for-tests))
-    (propagated-inputs
-     (list ruby-mail ruby-term-ansicolor))
-    (arguments
-     '(#:phases (modify-phases %standard-phases
-                  (replace 'replace-git-ls-files
-                    (lambda _
-                      (substitute* "tasks/rdoc.rake"
-                        (("`git ls-files -- lib`")
-                         "`find lib/ -type f |sort`"))))
-                  (add-before 'check 'tzdir-setup
-                    (lambda* (#:key inputs #:allow-other-keys)
-                      (setenv "TZDIR"
-                              (string-append (assoc-ref inputs "tzdata")
-                                             "/share/zoneinfo"))))
-                  (add-before 'check 'delete-test-BatchProcessor
-                    ;; test_BatchProcessor fails with exception:
-                    ;; run> terminated with exception (report_on_exception is true)
-                    (lambda _
-                      (delete-file "test/test_BatchProcessor.rb"))))))
-    (synopsis
-     "Project management command line tool with a domain specific language")
-    (description
-     "TaskJuggler (tj3) is a project management tool for project planning and
-tracking using a domain specific language; projects are plain text files
-written using your favourite text editor.  It includes reporting in HTML, CSV
-or iCalendar format and an email based status tracking system to send and
-receive time sheets from collaborators.
-
-It covers the complete spectrum of project management tasks from the first
-idea to the completion of the project.  It assists you during project scoping,
-resource assignment, cost and revenue planning, risk and communication
-management, status tracking and reporting.")
-    (home-page "https://taskjuggler.org")
-    (license license:gpl2)))
-
-(define-public ruby-cmath
-  (package
-    (name "ruby-cmath")
-    (version "1.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "cmath" version))
-       (sha256
-        (base32
-         "1xkz6xyhpkjbdvpdib8450w62rls1mjryz0gzbbnadxkxn82nb8m"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:tests? #false))
-    (native-inputs
-     (list bundler ruby-rake-compiler))
-    (synopsis "Trigonometric functions for complex numbers")
-    (description
-     "This gem is a library that provides trigonometric and transcendental
-functions for complex numbers.  The functions in this module accept integers,
-floating-point numbers or complex numbers as arguments.")
-    (home-page "https://github.com/ruby/cmath")
-    (license license:bsd-2)))
-
-(define-public ruby-sucker-punch
-  (package
-    (name "ruby-sucker-punch")
-    (version "3.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "sucker_punch" version))
-       (sha256
-        (base32 "12by9vx8q6l4i56q62k1s1ymaxbpg4rny5zngj5i5h09kyh2yp4p"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'extract-gemspec 'less-strict-dependencies
-           (lambda _
-             (substitute* "sucker_punch.gemspec"
-               (("1.0.0") "1.0")))))))
-    (native-inputs
-     (list
-      ruby-pry))
-    (propagated-inputs
-     (list
-      ruby-concurrent))
-    (home-page "https://github.com/brandonhilkert/sucker_punch")
-    (synopsis "Asynchronous processing library for Ruby")
-    (description "Sucker Punch is a single-process Ruby asynchronous processing
-library.  It is perfect for asynchronous processes like emailing, data crunching
-or social platform manipulation; and generally recommended for jobs that are
-fast and non-mission critical like logs, emails, etc.")
-    (license license:expat)))
-
-(define-public ruby-countdownlatch
-  (package
-    (name "ruby-countdownlatch")
-    (version "1.0.0")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "countdownlatch" version))
-        (sha256
-          (base32 "1v6pbay6z07fp7yvnba1hmyacbicvmjndd8rn2h1b5rmpcb5s0j3"))))
-    (build-system ruby-build-system)
-    (home-page "https://github.com/benlangfeld/countdownlatch")
-    (synopsis "Thread synchronization aid Ruby")
-    (description "CountDownLatch is a synchronization aid that allows one or
-more threads to wait until a set of operations being performed in other threads
-completes.")
-    (license license:expat)))
-
-(define-public ruby-value-semantics
-  (package
-    (name "ruby-value-semantics")
-    (version "3.6.1")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "value_semantics" version))
-        (sha256
-          (base32 "1vdwai8wf6r1fkvdpyz1vzxm89q7ghjvb3pqpg2kvwibwzd99dnx"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (invoke "rspec")))))))
-    (native-inputs
-     (list
-      ruby-rspec))
-    (home-page "https://github.com/tomdalling/value_semantics")
-    (synopsis "Ruby gem for making value classes")
-    (description "ValueSemantics generates modules that provide conventional
-value semantics for a given set of attributes.  The behaviour is similar to an
-immutable Struct class, plus extensible, lightweight validation and coercion.")
-    (license license:expat)))
-
-(define-public ruby-promise
-  (package
-    (name "ruby-promise")
-    (version "0.7.4")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "promise.rb" version))
-        (sha256
-          (base32 "0a819sikcqvhi8hck1y10d1nv2qkjvmmm553626fmrh51h2i089d"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:test-target "spec"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'extract-gemspec 'less-strict-dependencies
-           (lambda _
-             (substitute* "Rakefile"
-               (("if Gem.ruby_version.*") "if false\n"))
-             (substitute* "spec/spec_helper.rb"
-               ((".*devtools/spec_helper.*") "\n")))))))
-    (native-inputs
-     (list
-      ruby-rspec
-      ruby-rspec-its
-      ruby-awesome-print
-      ruby-fuubar))
-    (home-page "https://github.com/lgierth/promise.rb")
-    (synopsis "Asynchronous operation library for Ruby")
-    (description "Promise is a Ruby implementation of the Promises/A+
-specification.  It provides 100% mutation coverage, tested on MRI 1.9, 2.0, 2.1,
-2.2, Rubinius, and JRuby.")
-    (license license:unlicense)))
-
-(define-public ruby-multicodecs
-  (package
-    (name "ruby-multicodecs")
-    (version "0.2.1")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "multicodecs" version))
-        (sha256
-          (base32 "0drq267di57l9zqw6zvqqimilz42rbc8z7392dwkk8wslq30s7v8"))))
-    (build-system ruby-build-system)
-    (home-page "https://github.com/SleeplessByte/ruby-multicodec")
-    (synopsis "Ruby implementation of multiformats/multicodec")
-    (description "Multicodecs is the ruby implementation of
-multiformats/multicodec, a canonical table of of codecs used by various
-multiformats.")
-    (license license:expat)))
-
-(define-public ruby-multihashes
-  (package
-    (name "ruby-multihashes")
-    (version "0.2.0")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "multihashes" version))
-        (sha256
-          (base32 "17wiyy3fiv8rpgdv9ca01yncsmaaf8yg15bg18wc7m9frss1vgqg"))))
-    (build-system ruby-build-system)
-    (propagated-inputs
-     (list
-      ruby-multicodecs))
-    (home-page "https://github.com/multiformats/ruby-multihash")
-    (synopsis "Multihash implementation for Ruby")
-    (description "Multihashes provides a simple, low-level multihash
-implementation for Ruby.  A multihash is a digest with an embedded hash function
-code")
-    (license license:expat)))
-
-(define-public ruby-lazy-object
-  (package
-    (name "ruby-lazy-object")
-    (version "0.0.3")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "lazy_object" version))
-        (sha256
-          (base32 "08px15lahc28ik9smvw1hgamf792gd6gq0s4k94yq1h7jq25wjn8"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:test-target "spec"))
-    (home-page "https://github.com/HornsAndHooves/lazy_object")
-    (synopsis "Object wrapper that forwards all calls to the reference object")
-    (description "LazyObject is an object wrapper that forwards all calls to the
-reference object.  This object is not created until the first method dispatch.")
-    (license license:expat)))
-
-(define-public ruby-citrus
-  (package
-    (name "ruby-citrus")
-    (version "3.0.2")
-    (source
-     (origin
-       (method git-fetch)
-       ;; Download from GitHub because the rubygems version does not contain
-       ;; files needed for tests.
-       (uri (git-reference
-             (url "https://github.com/mjackson/citrus")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "197wrgqrddgm1xs3yvjvd8vkvil4h4mdrcp16jmd4b57rxrrr769"))))
-    (build-system ruby-build-system)
-    (home-page "https://mjackson.github.io/citrus/")
-    (synopsis "Parsing Expressions for Ruby")
-    (description "Citrus is a parsing library for Ruby that combines the
-expressiveness of the language with the parsing expressions.")
-    (license license:expat)))
-
-(define-public ruby-cbor
-  (package
-    (name "ruby-cbor")
-    (version "0.5.9.6")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "cbor" version))
-        (sha256
-          (base32 "0511idr8xps9625nh3kxr68sdy6l3xy2kcz7r57g47fxb1v18jj3"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:test-target "spec"))
-    (native-inputs
-     (list
-      ruby-rspec
-      ruby-rake-compiler
-      ruby-yard))
-    (home-page "https://cbor.io/")
-    (synopsis "Concise Binary Object Representation")
-    (description "CBOR is a library for the
-@acronym{CBOR, Concise Binary Object Representation} format, based on
-Sadayuki Furuhashi's MessagePack library.")
-    (license license:asl2.0)))
-
-(define-public ruby-gem-release
-  (package
-    (name "ruby-gem-release")
-    (version "2.2.2")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "gem-release" version))
-        (sha256
-          (base32 "108rrfaiayi14zrqbb6z0cbwcxh8n15am5ry2a86v7c8c3niysq9"))))
-    (build-system ruby-build-system)
-    (arguments
-     ;; No rakefile
-     `(#:tests? #f))
-    (home-page "https://github.com/svenfuchs/gem-release")
-    (synopsis "Ruby gem plugin for release management")
-    (description "GemRelease is a gem plugin that aims at making gem development
-easier by automating repetitive work based on conventions, configuration, and
-templates.")
-    (license license:expat)))
-
-(define-public ruby-base32
-  (package
-    (name "ruby-base32")
-    (version "0.3.4")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "base32" version))
-        (sha256
-          (base32 "1fjs0l3c5g9qxwp43kcnhc45slx29yjb6m6jxbb2x1krgjmi166b"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list
-      ruby-gem-release))
-    (home-page "https://github.com/stesla/base32")
-    (synopsis "Ruby extension for base32 encoding and decoding")
-    (description "Base32 is a library which provides base32 decoding and
-encoding.")
-    (license license:expat)))
-
-(define-public ruby-dhall
-  (package
-    (name "ruby-dhall")
-    (version "0.5.2")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "dhall" version))
-        (sha256
-          (base32 "09wcq8xc1ynld04r2f332bx8cn7rjc4afaq8hm1dr2fc35jlpn6m"))))
-    (build-system ruby-build-system)
-    (arguments
-     ;; No test in gem archive
-     `(#:tests? #f))
-    (propagated-inputs
-      (list
-       ruby-base32
-       ruby-cbor
-       ruby-citrus
-       ruby-lazy-object
-       ruby-multihashes
-       ruby-promise
-       ruby-value-semantics))
-    (home-page "https://git.sr.ht/~singpolyma/dhall-ruby")
-    (synopsis "Ruby implementation of the Dhall configuration language")
-    (description "Dhall.rb is a Ruby implementation of the Dhall configuration
-language.  Dhall is a memory safe and non-Turing-complete configuration
-language.")
-    (license license:gpl3+)))
-
-(define-public ruby-money
-  (package
-    (name "ruby-money")
-    (version "6.16.0")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "money" version))
-        (sha256
-          (base32 "0jkmsj5ymadik7bvl670bqwmvhsdyv7hjr8gq9z293hq35gnyiyg"))))
-    (build-system ruby-build-system)
-    (arguments
-     ;; No rakefile.
-     `(#:tests? #f))
-    (propagated-inputs
-     (list
-      ruby-i18n))
-    (home-page "https://rubymoney.github.io/money/")
-    (synopsis "Currency conversion library for Ruby")
-    (description "RubyMoney provides a library for dealing with money and
-currency conversion.  Its features are:
-@itemize
-@item
-Provides a Money class which encapsulates all information about a certain
-amount of money, such as its value and its currency.
-@item
-Provides a Money::Currency class which encapsulates all information about a
-monetary unit.
-@item
-Represents monetary values as integers, in cents; so avoids floating point
-rounding errors.
-@item
-Represents currency as Money::Currency instances providing a high level of
-flexibility.
-@item Provides APIs for exchanging money from one currency to another.
-@end itemize")
-    (license license:expat)))
-
-(define-public ruby-monetize
-  (package
-    (name "ruby-monetize")
-    (version "1.11.0")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "monetize" version))
-        (sha256
-          (base32 "0cna2myxdbwfq0gn6k2hgrh368dq7wld3jklm96443ysykd0difn"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:test-target "spec"))
-    (native-inputs
-     (list
-      ruby-rspec))
-    (propagated-inputs
-     (list
-      ruby-money))
-    (home-page "https://github.com/RubyMoney/monetize")
-    (synopsis "Convert various objects into Money objects")
-    (description "Monetize provides a library for converting various objects
-into Money objects.")
-    (license license:expat)))
-
-(define-public ruby-money-open-exchange-rates
-  (package
-    (name "ruby-money-open-exchange-rates")
-    (version "1.4.0")
-    (source
-     (origin
-       (method git-fetch)
-       ;; Download from GitHub because the rubygems version does not contain
-       ;; Rakefile.
-       (uri (git-reference
-             (url "https://github.com/spk/money-open-exchange-rates")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "11xwqli8snr19k48yh8h77sal5vxd4snzq9gxg08v61f0574m3gw"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list
-      ruby-minitest
-      ruby-mocha
-      ruby-monetize
-      ruby-rake
-      ruby-rubocop
-      ruby-timecop
-      ruby-webmock))
-    (propagated-inputs
-     (list
-      ruby-money))
-    (home-page "https://spk.github.io/money-open-exchange-rates/")
-    (synopsis "Money open exchange rates for Ruby")
-    (description "This package provides a gem that calculates the exchange rate
-using published rates from open-exchange-rates.  Compatible with the money gem.")
-    (license license:expat)))
-
-(define-public ruby-roda
-  (package
-    (name "ruby-roda")
-    (version "3.57.0")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "roda" version))
-        (sha256
-          (base32 "0nkfxnbcfnriywvx9kpamp850cwjmqv8ssajc95d0aiyjr4kdrfy"))))
-    (build-system ruby-build-system)
-    (arguments
-     ;; No rakefile
-     `(#:tests? #f))
-    (propagated-inputs (list ruby-rack))
-    (home-page "https://roda.jeremyevans.net")
-    (synopsis "Routing Tree Web Toolkit")
-    (description "Roda is a routing tree web toolkit, designed for building fast
-and maintainable web applications in ruby.")
-    (license license:expat)))
-
-(define-public ruby-nori
-  (package
-    (name "ruby-nori")
-    (version "2.6.0")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "nori" version))
-        (sha256
-          (base32 "066wc774a2zp4vrq3k7k8p0fhv30ymqmxma1jj7yg5735zls8agn"))))
-    (build-system ruby-build-system)
-    (arguments
-     ;; Tests require too old version of rspec
-     `(#:tests? #f))
-    (native-inputs
-     (list ruby-nokogiri
-            ruby-rake
-            ruby-rspec))
-    (home-page "https://github.com/savonrb/nori")
-    (synopsis "XML to Hash translator")
-    (description "Nori is a simple XML parsing ripped from Crack which in-turn
-ripped from Merb.  It supports pluggable parsers and ships with both REXML and
-Nokogiri implementations.")
-    (license license:expat)))
-
-;; This package is deprecated per upstream and should be phased out.
-(define-public ruby-faraday-middleware
-  (package
-    (name "ruby-faraday-middleware")
-    (version "1.2.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "faraday_middleware" version))
-       (sha256
-        (base32 "1bw8mfh4yin2xk7138rg3fhb2p5g2dlmdma88k82psah9mbmvlfy"))))
-    (build-system ruby-build-system)
-    (arguments `(#:tests? #f))
-    (propagated-inputs (list ruby-faraday))
-    (home-page "https://github.com/lostisland/faraday_middleware")
-    (synopsis "Various middleware for Faraday")
-    (description "Faraday_Middleware is a collection of middleware for the
-Faraday-based API wrappers.")
-    (license license:expat)))
-
-(define-public ruby-faraday-multipart
-  (package
-    (name "ruby-faraday-multipart")
-    (version "1.0.4")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/lostisland/faraday-multipart")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0ywxhff40a688n50lxrn4d8y096l8sbrwp1jfz4zd3kdiiygclka"))))
-    (build-system ruby-build-system)
-    (arguments (list #:test-target "spec"))
-    (native-inputs (list ruby-faraday ruby-multipart-parser ruby-rspec))
-    (propagated-inputs (list ruby-multipart-post))
-    (synopsis "Multipart-post requests extension for Faraday")
-    (description "This Ruby gem extends Faraday to perform multipart-post
-requests.")
-    (home-page "https://github.com/lostisland/faraday-multipart")
-    (license license:expat)))
-
-(define-public ruby-bandwidth-iris
-  (package
-    (name "ruby-bandwidth-iris")
-    (version "7.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "ruby-bandwidth-iris" version))
-       (sha256
-        (base32 "131c4jhyvnrwbhizkks17fi9g85cwsq5f1p8zi408zyf63n7230d"))))
-    (build-system ruby-build-system)
-    (arguments
-     ;; XXX: Tests don't require helper for some reason, so all fail.
-     `(#:tests? #f))
-    (native-inputs
-     (list ruby-rspec
-           ruby-yard))
-    (propagated-inputs
-     (list ruby-activesupport
-           ruby-builder
-           ruby-faraday
-           ruby-faraday-middleware
-           ruby-nori))
-    (home-page "https://github.com/Bandwidth/ruby-bandwidth-iris")
-    (synopsis "Gem for integrating to Bandwidth's Iris API")
-    (description "Bandwidth IRIS is a Ruby SDK for Bandwidth Phone Number
-Dashboard.  It is a Ruby Client library for IRIS / BBS API.")
-    (license license:expat)))
-
-(define-public ruby-securerandom
-  (package
-    (name "ruby-securerandom")
-    (version "0.4.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "securerandom" version))
-       (sha256
-        (base32 "1cd0iriqfsf1z91qg271sm88xjnfd92b832z49p1nd542ka96lfc"))))
-    (build-system ruby-build-system)
-    (arguments '(#:tests? #f))  ; No tests found.
-    (synopsis "Interface for secure random number generator")
-    (description "This package provides a Ruby interface for secure random
-number generators.")
-    (home-page "https://github.com/ruby/securerandom")
-    (license (list license:bsd-2))))
-
-(define-public ruby-selenium-webdriver
-  (package
-    (name "ruby-selenium-webdriver")
-    (version "4.22.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "selenium-webdriver" version))
-              (sha256
-               (base32
-                "0rjxlivsh32xvjq78p1m1sr366aa04wms4hwb2r187ygrnmp0hv4"))))
-    (build-system ruby-build-system)
-    ;; FIXME: The gem release lacks test files, and the git checkout lacks
-    ;; JavaScript source that is generated using Bazel, which isn't available
-    ;; in Guix yet, so disable the test suite for now.
-    (arguments (list #:tests? #f))
-    (propagated-inputs (list ruby-base64
-                             ruby-rexml
-                             ruby-rubyzip
-                             ruby-websocket))
-    (synopsis "Selenium browser automation bindings for Ruby")
-    (description "Selenium implements the W3C WebDriver protocol to automate
-popular browsers.  It aims to mimic the behaviour of a real user as it
-interacts with the application's HTML.  It's primarily intended for web
-application testing, but any web-based task can be automated.  This package
-provides the Ruby bindings of Selenium.")
-    (home-page "https://www.selenium.dev/")
-    (license license:asl2.0)))
-
-(define-public ruby-sentry-core
-  (package
-    (name "ruby-sentry-core")
-    (version "5.3.1")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "sentry-ruby-core" version))
-        (sha256
-          (base32 "141mrw8wghhsjvln9m6ld3hap3xc5v901jjiz007xywy25725hyd"))))
-    (build-system ruby-build-system)
-    (arguments
-     ;; No rakefile in gem.
-     `(#:tests? #f))
-    (propagated-inputs
-      (list ruby-concurrent
-             ruby-faraday))
-    (home-page "https://sentry.io/for/ruby/")
-    (synopsis "Client interface for the Sentry error logger")
-    (description "Sentry-Core provides a gem that provides a client
-interface for the Sentry error logger.")
-    (license license:expat)))
-
-(define-public ruby-sentry
-  (package
-    (name "ruby-sentry")
-    (version "5.3.1")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "sentry-ruby" version))
-        (sha256
-          (base32 "0by9mvw8rklzpyx59vfija8h3ssfvxvf5nbqxfmygfy6lm1vdngz"))))
-    (build-system ruby-build-system)
-    (arguments
-     ;; No rakefile in gem
-     `(#:tests? #f))
-    (propagated-inputs
-      (list ruby-concurrent
-             ruby-faraday
-             ruby-sentry-core))
-    (home-page "https://sentry.io/for/ruby/")
-    (synopsis "Client interface for the Sentry error logger")
-    (description "Sentry provides a gem that provides a client
-interface for the Sentry error logger.")
-    (license license:expat)))
-
-(define-public ruby-webrick
-  (package
-    (name "ruby-webrick")
-    (version "1.8.1")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/ruby/webrick")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1xb0mk3cghdir65nmj0mblprbf21blli7267b6yyvxclh307yp6s"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list #:phases
-           #~(modify-phases %standard-phases
-               (add-after 'extract-gemspec 'delete-problematic-tests
-                 (lambda _
-                   ;; The httresponse tests fail for
-                   ;; unknown reasons (see:
-                   ;; https://github.com/ruby/webrick/issues/112).
-                   (delete-file "test/webrick/test_httpresponse.rb"))))))
-    (home-page "https://github.com/ruby/webrick")
-    (synopsis "HTTP server toolkit")
-    (description "WEBrick is an HTTP server toolkit that can be configured as an
-HTTPS server, a proxy server, and a virtual-host server.")
-    (license license:bsd-2)))
-
-(define-public ruby-websocket
-  (let ((commit "950e416a19a76c7e6a673a7e5baa6283476dbec1")
-        (revision "1"))
-    (package
-      (name "ruby-websocket")
-      (version (git-version "1.2.9" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/imanel/websocket-ruby")
-                      (commit commit)))
-                (sha256
-                 (base32
-                  "1i6r0glpxy47zdf76aqgcpjgcgydla0733hfdhp628pmrinnkgwv"))
-                (file-name (git-file-name name version))))
-      (build-system ruby-build-system)
-      (arguments (list #:test-target "spec"
-                       #:phases #~(modify-phases %standard-phases
-                                    (add-after 'unpack 'disable-rubocop
-                                      (lambda _
-                                        (substitute* "Rakefile"
-                                          (("require 'rubocop/rake_task'") "")
-                                          (("RuboCop::RakeTask.new") "")))))))
-      (native-inputs
-       (list ruby-rspec
-             ruby-webrick))
-      (synopsis "WebSocket protocol Ruby library")
-      (description "This package provides a Ruby library to handle the WebSocket
-protocol.")
-      (home-page "https://github.com/imanel/websocket-ruby")
-      (license license:expat))))
-
-(define-public ruby-braintree
-  (package
-    (name "ruby-braintree")
-    (version "4.12.0")
-    (source
-     (origin
-       (method git-fetch)               ;for tests
-       (uri (git-reference
-             (url "https://github.com/braintree/braintree_ruby")
-             (commit version)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "0gfgkymy3655drwgs42bj9ap9qib1l30sajxmypmp6s75m9w3gsh"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:test-target "test:unit"
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'disable-rubocop
-            (lambda _
-              (substitute* "Rakefile"
-                (("sh \"rubocop\"") ""))))
-          (add-after 'unpack 'relax-requirements
-            (lambda _
-              (substitute* "Gemfile"
-                (("gem \"pry\".*") "gem 'pry'\n")
-                (("gem \"rake\".*") "gem 'rake'\n")
-                (("gem \"libxml-ruby\", \"3.2.0\"")
-                 "gem \"libxml-ruby\", \"~> 3.0.0\"")
-                (("gem \"rspec\", \"3.9.0\"")
-                 "gem \"rspec\", \">= 3.9.0\"")
-                (("gem \"webrick\", \"~>1.7.0\"")
-                 "gem \"webrick\", \">=1.7.0\"")
-                ((".*gem \"rubocop\".*") "")
-                ((".*gem \"rspec_junit_formatter\".*") "")))))))
-    (native-inputs
-     (list ruby-libxml
-           ruby-pry
-           ruby-rake
-           ruby-rspec
-           ruby-webrick))
-    (propagated-inputs
-     (list ruby-builder
-           ruby-rexml))
-    (home-page "https://www.braintreepayments.com/")
-    (synopsis "Integration access to the Braintree Gateway")
-    (description "Braintree provides resources and tools for developers to
-integrate Braintree's global payments platform.")
-    (license license:expat)))
-
-(define-public ruby-niceogiri
-  (package
-   (name "ruby-niceogiri")
-   (version "1.1.2")
-   (source
-    (origin
-     (method url-fetch)
-     (uri (rubygems-uri "niceogiri" version))
-     (sha256
-      (base32 "1ha93211bc9cvh23s9w89zz7rq8irpf64ccd9arvg8v1sxg2798a"))))
-   (build-system ruby-build-system)
-   (arguments
-    `(#:test-target "spec"
-      #:phases
-      (modify-phases %standard-phases
-        (add-after 'extract-gemspec 'less-strict-dependencies
-          (lambda _
-            (substitute* "niceogiri.gemspec"
-              (("2\\.7") "3.8")      ;rspec
-              ((".*dependency.*bundler.*") "\n")
-              ((".*dependency.*guard-rspec.*") "\n")))))))
-   (native-inputs
-    (list ruby-rspec
-           ruby-yard))
-   (propagated-inputs (list ruby-nokogiri))
-   (home-page "https://github.com/benlangfeld/Niceogiri")
-   (synopsis "Supplement for Nokogiri")
-   (description "Niceogiri provides wrappers and helpers for XML manipulation
-using Nokogiri.")
-   (license license:expat)))
-
-(define-public ruby-blather
-  (package
-    (name "ruby-blather")
-    (version "2.0.0")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "blather" version))
-        (sha256
-          (base32 "05ry2x835fj4pzk61282pcz86n018cr39zbgwbi213md74i90s7c"))))
-    (build-system ruby-build-system)
-    (arguments
-     ;; XXX: Tests require too old version of rspec.
-     `(#:tests? #f))
-    (native-inputs
-     (list ruby-countdownlatch
-            ruby-mocha
-            ruby-rb-fsevent
-            ruby-rspec
-            ruby-yard))
-    (propagated-inputs
-     (list ruby-activesupport
-            ruby-eventmachine
-            ruby-niceogiri
-            ruby-nokogiri
-            ruby-sucker-punch))
-    (home-page "https://github.com/adhearsion/blather")
-    (synopsis "XMPP Domain Specific Language for Ruby")
-    (description "Blather is a XMPP DSL for Ruby written on top of EventMachine
-and Nokogiri.")
-    (license license:expat)))
-
-(define-public ruby-wapiti
-  (package
-    (name "ruby-wapiti")
-    (version "2.1.0")
-    ;; the gem archive lacks tests
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/inukshuk/wapiti-ruby")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1273dqvn6flq2qv9qbp104rgc7zp1gqx4096s0v0z5f0qnhzc7d6"))))
-    (build-system ruby-build-system)
-    (propagated-inputs
-     (list ruby-builder
-           ruby-rexml))
-    (native-inputs
-     (list ruby-pry
-           ruby-rake-compiler
-           ruby-rspec
-           ruby-simplecov))
-    (arguments
-     (list
-      #:test-target "spec"
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'replace-git-ls-files 'replace-another-git-ls-files
-            (lambda args
-              (substitute* "wapiti.gemspec"
-                (("`git ls-files spec`")
-                 "`find spec -type f | sort`"))))
-          (add-before 'build 'compile
-            (lambda args
-              (invoke "rake" "compile"))))))
-    (home-page "https://github.com/inukshuk/wapiti-ruby")
-    (synopsis "Wicked fast Conditional Random Fields for Ruby")
-    (description
-     "The Wapiti-Ruby gem provides a wicked fast linear-chain @acronym{CRF,
-Conditional Random Fields} API for sequence segmentation and labelling.  It is
-based on the codebase of @url{https://wapiti.limsi.fr, Wapiti}.")
-    (license license:bsd-2)))
-
-(define-public ruby-namae
-  (package
-    (name "ruby-namae")
-    (version "1.1.1")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "namae" version))
-              (sha256
-               (base32
-                "1j3nl1klkx3gymrdxfc1hlq4a8qlvhhl9aj5v1v08b9fz27sky0l"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list ruby-cucumber
-           ruby-rspec
-           ruby-simplecov))
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'extract-gemspec 'allow-newer-cucumber
-            (lambda args
-              (substitute* "Gemfile"
-                (("'cucumber', '[^']*'")
-                 "'cucumber'"))))
-          (replace 'check
-            ;; Avoid 'rake' so we don't need jeweler.
-            (lambda* (#:key tests? #:allow-other-keys)
-              (when tests?
-                (apply invoke
-                       "rspec"
-                       (find-files "spec" "_spec\\.rb$"))))))))
-    (home-page "https://github.com/berkmancenter/namae")
-    (synopsis "Parser for human names")
-    (description
-     "Namae (名前) is a parser for human names.  It recognizes personal names
-of various cultural backgrounds and tries to split them into their component
-parts (e.g., given and family names, honorifics etc.).")
-    (license (list license:bsd-2 license:agpl3+))))
-
-(define-public ruby-latex-decode
-  (package
-    (name "ruby-latex-decode")
-    (version "0.4.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/inukshuk/latex-decode")
-                    (commit (string-append "v" version))))
-              (sha256
-               (base32
-                "1f5j67ayd04pjkmzvn0hk7cr8yqvn0gyg9ns6a0vhzj2gwna9ihy"))
-              (file-name (git-file-name name version))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list ruby-cucumber
-           ruby-rspec))
-    (arguments
-     (list
-      #:test-target "cucumber"
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'extract-gemspec 'avoid-bundler
-            (lambda args
-              (substitute* "Rakefile"
-                (("require 'bundler" orig)
-                 (string-append "# " orig " # patched for Guix"))
-                (("Cucumber::Rake::Task\\.new[(]:cucumber[)]" orig)
-                 (string-append orig " do |c|\n"
-                                "  c.bundler = false # patched for Guix\n"
-                                "end"))
-                (("Bundler\\.setup" orig)
-                 (string-append "true # " orig " # patched for Guix")))
-              (substitute* "cucumber.yml"
-                ;; thanks to avoiding bundler, we can't use this option
-                ((" --publish-quiet")
-                 ""))))
-          (add-after 'replace-git-ls-files 'replace-another-git-ls-files
-            (lambda args
-              (substitute* "latex-decode.gemspec"
-                (("`git ls-files -- [{]test,spec,features[}]/\\*`")
-                 "`find {test,spec,features} -type f | sort`")))))))
-    (home-page "https://github.com/inukshuk/latex-decode")
-    (synopsis "Convert LaTeX to Unicode")
-    (description
-     "This package provides a gem to convert LaTeX input to Unicode.  Its
-original use was as an input filter for BibTeX-Ruby, but it can be used
-independently to decode LaTeX.  Many of the patterns used by this Ruby gem are
-based on François Charette's equivalent Perl module @code{LaTeX::Decode}.")
-    (license license:gpl3+)))
-
-(define-public ruby-link-header
-  (package
-    (name "ruby-link-header")
-    (version "0.0.8")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "link_header" version))
-              (sha256
-               (base32
-                "1yamrdq4rywmnpdhbygnkkl9fdy249fg5r851nrkkxr97gj5rihm"))))
-    (build-system ruby-build-system)
-    (home-page "https://github.com/asplake/link_header")
-    (synopsis "Parse and format HTTP @code{Link} headers")
-    (description
-     "This gem provides the classes @code{LinkHeader} and
-@code{LinkHeader::Link}, which represent HTTP @code{Link} headers conforming
-to RFC 5988.  Objects can be constructed from and converted to text or a
-JSON-friendly @code{Array} representation.  They can also be used to generate
-corresponding HTML @code{link} elements.")
-    (license license:expat)))
-
-(define-public ruby-lint-roller
-  (package
-    (name "ruby-lint-roller")
-    (version "1.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "lint_roller" version))
-       (sha256
-        (base32 "11yc0d84hsnlvx8cpk4cbj6a4dz9pk0r1k29p0n1fz9acddq831c"))))
-    (build-system ruby-build-system)
-    (arguments '(#:tests? #f))  ;Circular dependency on ruby-standard.
-    (native-inputs (list ruby-minitest))
-    (synopsis "Specification for linter and formatter rulesets")
-    (description
-     "This package provides a plugin specification for Ruby linter and
-formatter rulesets.")
-    (home-page "https://github.com/standardrb/lint_roller")
-    (license license:expat)))
-
-(define-public ruby-rdf
-  (package
-    (name "ruby-rdf")
-    (version "3.2.8")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "rdf" version))
-              (sha256
-               (base32
-                "1cj0k8ryd8hgbkgqb5swvy6fiygxny3y5bln0my5gv6dbfv3gm20"))))
-    (build-system ruby-build-system)
-    (propagated-inputs (list ruby-link-header))
-    (arguments
-     (list #:tests? #f)) ;; tests have many cyclic dependencies
-    (home-page "https://ruby-rdf.github.io/")
-    (synopsis "Linked Data for Ruby")
-    (description
-     "This gem contains the core algorithms and classes used for doing basic
-programming with @acronym{RDF, Resource Description Framework} data,
-implemented in pure Ruby.")
-    (license license:unlicense)))
-
-(define-public ruby-rdf-vocab
-  (package
-    (name "ruby-rdf-vocab")
-    (version "3.2.1")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "rdf-vocab" version))
-              (sha256
-               (base32
-                "1bqmp9rfjvd56ajjz68ij6jla1wjf1fqg7bi4dpnjrsmn4pwaq7l"))))
-    (build-system ruby-build-system)
-    (propagated-inputs
-     (list ruby-rdf))
-    (arguments
-     (list #:tests? #f)) ;; tests have many cyclic dependencies
-    (home-page "https://github.com/ruby-rdf/rdf-vocab")
-    (synopsis "Common RDF vocabularies")
-    (description
-     "This gem extends @code{ruby-rdf} with several common @acronym{RDF,
-Resource Description Framework} vocabularies.")
-    (license license:unlicense)))
-
-(define-public ruby-rdiscount
-  (package
-    (name "ruby-rdiscount")
-    (version "2.2.7")
-    (source (origin
-              (method git-fetch)        ;for the full test suite
-              (uri (git-reference
-                    (url "https://github.com/davidfstr/rdiscount")
-                    (commit version)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1lpfxq3gv0dgmnki9jgfnc8n9k4x9vyq9miqdxv6g4kp90qyfifc"))))
-    (build-system ruby-build-system)
-    (native-inputs (list perl))
-    (synopsis "Discount Markdown Processor for Ruby")
-    (description "Discount is an implementation of John Gruber's Markdown
-markup language in C.  It implements all of the language described in the
-markdown syntax document and passes the Markdown 1.0 test suite.")
-    (home-page "https://dafoster.net/projects/rdiscount/")
-    (license license:bsd-3)))
-
-(define-public ruby-bibtex-ruby
-  (package
-    (name "ruby-bibtex-ruby")
-    (version "6.0.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "bibtex-ruby" version))
-              (sha256
-               (base32
-                "0vynqa8q9hwghw6sdljr304b5gh11nqzy5nwqqwxmgy7pqyf7qw5"))))
-    (build-system ruby-build-system)
-    (propagated-inputs
-     (list ruby-latex-decode
-           ruby-rdf
-           ruby-rdf-vocab))
-    (native-inputs
-     (list ruby-cucumber
-           ruby-minitest
-           ruby-yard))
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'extract-gemspec 'avoid-bundler
-            (lambda args
-              (substitute* "Rakefile"
-                (("require 'bundler" orig)
-                 (string-append "# " orig " # patched for Guix"))
-                (("Bundler\\.setup" orig)
-                 (string-append "true # " orig " # patched for Guix"))))))))
-    (home-page "https://github.com/inukshuk/bibtex-ruby")
-    (synopsis "Rubyist's Swiss Army knife for all things BibTeX")
-    (description
-     "BibTeX-Ruby is the Rubyist's Swiss Army knife for all things BibTeX.
-It includes a parser for all common BibTeX objects and a sophisticated name
-parser that tokenizes correctly formatted names.  BibTeX-Ruby recognizes
-BibTeX string replacements, joins values containing multiple strings or
-variables, supports cross-references, and decodes common LaTeX formatting
-instructions to unicode.  If you are in a hurry, it also allows for easy
-export/conversion to formats such as YAML, JSON, CSL, and XML (BibTeXML).")
-    (license license:gpl3+)))
-
-(define-public ruby-unicode-scripts
-  (package
-    (name "ruby-unicode-scripts")
-    (version "1.8.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "unicode-scripts" version))
-              (sha256
-               (base32
-                "0rl6mn908yryhrg8j3mmna54gnrid2nph2kym00lbz6jwdih2a1b"))))
-    (build-system ruby-build-system)
-    (native-inputs (list ruby-minitest))
-    (arguments (list #:test-target "spec"))
-    (home-page "https://github.com/janlelis/unicode-scripts")
-    (synopsis "Unicode script classification library")
-    (description "This gem provides a simple interface for classifying Ruby
-strings using the Unicode @code{Script} and @code{Script_Extensions}
-properties.")
-    (license license:expat)))
-
-(define-public ruby-citeproc
-  (package
-    (name "ruby-citeproc")
-    (version "1.0.10")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "citeproc" version))
-              (sha256
-               (base32
-                "13vl5sjmksk5a8kjcqnjxh7kn9gn1n4f9p1rvqfgsfhs54p0m6l2"))))
-    (build-system ruby-build-system)
-    (propagated-inputs
-     (list ruby-namae))
-    (arguments
-     (list #:tests? #f)) ;; tests have a cyclic dependency
-    (home-page "https://github.com/inukshuk/citeproc")
-    (synopsis "Interface for Ruby citation processors")
-    (description
-     "CiteProc is a citation processor interface and citation data API based
-on the @acronym{CSL, Citation Style Language} specifications.  To actually
-process citations, a dedicated processor engine is required: a pure Ruby
-engine is available in the @code{citeproc-ruby} gem.")
-    (license (list license:agpl3+ license:bsd-2))))
-
-(define-public ruby-ed25519
-  (package
-    (name "ruby-ed25519")
-    (version "1.3.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/RubyCrypto/ed25519")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1jm5w2dyhyrndcx0d02v0gjbzl1abhbx2wkp3gxzwcndghmkz98r"))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:test-target "spec"
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-before 'build 'compile
-            (lambda _
-              (invoke "rake" "compile")))
-          (add-after 'unpack 'remove-unnecessary-dependencies
-            (lambda _
-              ;; Coveralls relates to a network service, and RuboCop to code
-              ;; linting and both are unnecessary to run the tests
-              (substitute* "Gemfile"
-                ((".*coveralls.*")
-                 "\n")
-                ((".*rubocop.*")
-                 "\n"))
-              (substitute* "spec/spec_helper.rb"
-                (("require \"coveralls\"")
-                 "")
-                (("Coveralls.wear!")
-                 ""))
-              (substitute* "Rakefile"
-                (("require \"rubocop/rake_task\"")
-                 "")
-                (("RuboCop::RakeTask.new")
-                 "")))))))
-    (native-inputs (list ruby-rake-compiler ruby-rspec))
-    (synopsis
-     "Ruby binding to the Ed25519 elliptic curve public-key signature system")
-    (description
-     "This package provides a Ruby binding to the Ed25519 elliptic curve
-public-key signature system described in
-@url{https://www.ietf.org/rfc/rfc8032.txt, RFC 8032}.")
-    (home-page "https://github.com/RubyCrypto/ed25519")
-    (license license:expat)))
-
-(define-public ruby-edtf
-  (package
-    (name "ruby-edtf")
-    (version "3.1.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/inukshuk/edtf-ruby")
-                    (commit (string-append "v" version))))
-              (sha256
-               (base32
-                "18j8xq8zmrn41cs2gpd1i87agi9905asvnjqndky2cqb5zg3q14g"))
-              (snippet
-               ;; remove generated file
-               #~(delete-file "lib/edtf/parser.rb"))
-              (file-name (git-file-name name version))))
-    (build-system ruby-build-system)
-    (propagated-inputs
-     (list ruby-activesupport))
-    (native-inputs
-     (list ruby-cucumber
-           ruby-rspec))
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'extract-gemspec 'avoid-bundler
-            (lambda args
-              (substitute* "Rakefile"
-                (("require 'bundler" orig)
-                 (string-append "# " orig " # patched for Guix"))
-                (("bundle exec racc")
-                 "racc")
-                (("Cucumber::Rake::Task\\.new[(]:cucumber[)]" orig)
-                 (string-append orig " do |c|\n"
-                                "  c.bundler = false # patched for Guix\n"
-                                "end"))
-                (("Bundler\\.setup" orig)
-                 (string-append "true # " orig " # patched for Guix")))))
-          (add-after 'avoid-bundler 'patch-cucumber-options
-            (lambda args
-              (substitute* "cucumber.yml"
-                ;; this option is not supported, at least in our configuration
-                ((" --publish-quiet")
-                 ""))))
-          (add-before 'build 'compile
-            (lambda args
-              (invoke "rake" "racc")))
-          (replace 'check
-            (lambda* (#:key tests? #:allow-other-keys)
-              (when tests?
-                (invoke "rake")))))))
-    (home-page "https://github.com/inukshuk/edtf-ruby")
-    (synopsis "Ruby implementation of Extended Date/Time Format")
-    (description
-     "EDTF-Ruby provides a parser and an API for the @acronym{EDTF, Extended
-Date/Time Format} standard, implemented as an extension to Ruby's @code{Date}
-class.")
-    (license license:bsd-2)))
-
-(define-public ruby-gli
-  (package
-    (name "ruby-gli")
-    (version "2.21.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/davetron5000/gli")
-                    (commit (string-append "v" version))))
-              (sha256
-               (base32
-                "09b1r9hlx4dy2yq036nk7hc2nbswhia6q3na9v11z94yibc8mgja"))
-              (file-name (git-file-name name version))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list ruby-minitest
-           ruby-rainbow
-           ruby-rdoc
-           ruby-sdoc))
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'extract-gemspec 'patch-gemspec-version
-            (lambda args
-              (substitute* "gli.gemspec"
-                ;; this trick fails in our build environment
-                (("require File\\.join[(]\\[" orig)
-                 (string-append "# patched for Guix # " orig))
-                (("s\\.version = GLI::VERSION")
-                 #$(string-append "s.version = '"
-                                  (package-version this-package)
-                                  "' # patched for Guix")))))
-          (add-after 'replace-git-ls-files 'replace-another-git-ls-files
-            (lambda args
-              (substitute* "gli.gemspec"
-                (("`git ls-files -- [{]test,spec,features[}]/\\*`")
-                 "`find {test,spec,features} -type f | sort`"))))
-          (add-after 'replace-another-git-ls-files 'fix-rubyopt
-            (lambda args
-              (substitute* "Rakefile"
-                (("ENV\\[\"RUBYOPT\"]")
-                 "(ENV['RUBYOPT'] || '')")))))))
-    (home-page "https://davetron5000.github.io/gli/")
-    (synopsis "Git-Like Interface command-line parser")
-    (description
-     "GLI allows you to create command-line applications in Ruby with Git-Like
-Interfaces: that is, they take subcommands in the style of @command{git} and
-@command{gem}.  GLI uses a simple domain-specific language, but retains all
-the power of the built-in @code{OptionParser}.")
-    (license license:asl2.0)))
-
-(define-public ruby-anystyle-data
-  (package
-    (name "ruby-anystyle-data")
-    (version "1.3.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/inukshuk/anystyle-data")
-                    (commit (string-append "v" version))))
-              (sha256
-               (base32
-                "1jh880310m3gjdrk4m8rwwnsf0824zkf26clpr8p64sac2fyy907"))
-              (snippet
-               ;; remove pre-built file
-               #~(delete-file "lib/anystyle/data/dict.txt.gz"))
-              (patches
-               (search-patches "ruby-anystyle-data-immutable-install.patch"))
-              (file-name (git-file-name name version))))
-    (build-system ruby-build-system)
-    (arguments
-     (list
-      #:tests? #f ;; there are none
-      #:modules
-      `((guix build ruby-build-system)
-        (guix build utils)
-        (srfi srfi-26))
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'replace-git-ls-files 'replace-another-git-ls-files
-            (lambda args
-              (substitute* "anystyle-data.gemspec"
-                (("`git ls-files lib README\\.md LICENSE`\\.split[(][^)]*[)]")
-                 (string-append
-                  "["
-                  (string-join
-                   (map (cut string-append "\"" <> "\"")
-                        `("README.md"
-                          "LICENSE"
-                          "lib/anystyle/data.rb"
-                          "lib/anystyle/data/dict.txt.gz"
-                          "lib/anystyle/data/setup.rb"
-                          "lib/anystyle/data/version.rb"))
-                   ", ")
-                  "]")))))
-          (add-before 'build 'compile-dict
-            (lambda args
-              (invoke "rake" "compile"))))))
-    (home-page "https://anystyle.io")
-    (synopsis "AnyStyle parser dictionary data")
-    (description
-     "This gem provides parser dictionary data for AnyStyle.")
-    (license license:bsd-2)))
-
-(define-public ruby-anystyle
-  (package
-    (name "ruby-anystyle")
-    (version "1.4.2")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/inukshuk/anystyle")
-                    (commit (string-append "v" version))))
-              (sha256
-               (base32
-                "0xhy7wj8v7iahikck6vxbdpncaz5w2gb11b32kmvg5ckgi2kz23p"))
-              (snippet
-               ;; There is an optional dependency on
-               ;; <https://github.com/feedbackmine/language_detector>, which
-               ;; seems like it was intended to be free software, but
-               ;; doesn't have a clear license statement.  Maybe someone can
-               ;; do more sleuthing, or else find a replacement?  See also
-               ;; <https://github.com/inukshuk/anystyle/issues/186>.  For
-               ;; now, patch it out, but leave a pointer to follow up.
-               #~(begin
-                   (use-modules (guix build utils))
-                   (substitute* "Gemfile"
-                     (("gem 'language_detector', github: '[^']*'" orig)
-                      (string-append "# " orig " # unclear license")))
-                   (substitute* "spec/anystyle/parser_spec.rb"
-                     (("language: 'en'," orig)
-                      (string-append "# " orig " # no lanugage_detector")))))
-              (patches
-               (search-patches
-                "ruby-anystyle-fix-dictionary-populate.patch"))
-              (file-name (git-file-name name version))))
-    (build-system ruby-build-system)
-    (propagated-inputs
-     (list ruby-anystyle-data
-           ruby-bibtex-ruby
-           ruby-namae
-           ruby-wapiti))
-    (native-inputs
-     (list ruby-byebug
-           ruby-citeproc
-           ruby-edtf
-           ruby-gdbm
-           ruby-rspec
-           ruby-unicode-scripts))
-    (arguments
-     (list
-      #:test-target "spec"
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'extract-gemspec 'avoid-bundler
-            (lambda args
-              (substitute* "Rakefile"
-                (("require 'bundler" orig)
-                 (string-append "# " orig " # patched for Guix"))
-                (("Bundler\\.setup" orig)
-                 (string-append "true # " orig " # patched for Guix")))))
-          (add-after 'replace-git-ls-files 'replace-another-git-ls-files
-            (lambda args
-              (substitute* "anystyle.gemspec"
-                (("`git ls-files spec`")
-                 "`find spec -type f | sort`"))))
-          (add-after 'wrap 'populate-dictionaries
-            (lambda args
-              ;; We must initialize these files here, or they will never be
-              ;; usable with the default settings. A more flexible approach
-              ;; might use something like `Gem.find_files()` or
-              ;; XDG_DATA_DIRS.
-              (with-output-to-file "initialize-dictionaries.rb"
-                (lambda ()
-                  (display "\
-require 'anystyle/dictionary' # must come before 'anystyle/data'
-require 'anystyle/data'
-[:marshal, :gdbm].each do |adapter|
-  AnyStyle::Dictionary.create({adapter: adapter}).open().close()
-end
-")))
-              (let* ((old-gems (getenv "GEM_PATH"))
-                     (new-gems (string-append #$output
-                                              "/lib/ruby/vendor_ruby:"
-                                              old-gems)))
-                (dynamic-wind
-                  (lambda ()
-                    (setenv "GEM_PATH" new-gems))
-                  (lambda ()
-                    (invoke "ruby" "initialize-dictionaries.rb"))
-                  (lambda ()
-                    (setenv "GEM_PATH" old-gems)))))))))
-    (home-page "https://anystyle.io")
-    (synopsis "Fast and smart citation reference parsing (Ruby library)")
-    (description
-     "AnyStyle is a very fast and smart parser for academic reference lists
-and bibliographies.  AnyStyle uses powerful machine learning heuristics based
-on Conditional Random Fields and aims to make it easy to train the model with
-data that is relevant to your parsing needs.
-
-This package provides the Ruby module @code{AnyStyle}.  AnyStyle can also be
-used via the @command{anystyle} command-line utility or a web application,
-though the later has not yet been packaged for Guix.")
-    (license license:bsd-2)))
-
-(define-public anystyle
-  (package
-    (name "anystyle")
-    (version "1.4.5")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/inukshuk/anystyle-cli")
-                    (commit (string-append "v" version))))
-              (sha256
-               (base32
-                "10jx830mx9vh7rsz87ndvz8w5b5azd9s231vwyb0dqxs921v6qwy"))
-              (file-name (git-file-name name version))))
-    (build-system ruby-build-system)
-    (propagated-inputs
-     (list ruby-anystyle
-           ruby-bibtex-ruby
-           ruby-gli))
-    (native-inputs
-     (list ruby-gdbm
-           txt2man))
-    (arguments
-     (list
-      #:modules
-      `((guix build ruby-build-system)
-        (ice-9 popen)
-        (srfi srfi-1)
-        (guix build utils))
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'extract-gemspec 'less-strict-dependencies
-            (lambda args
-              (substitute* "anystyle-cli.gemspec"
-                (("'bibtex-ruby', '[^']*'")
-                 "'bibtex-ruby'"))))
-          (add-before 'build 'change-default-dictionary-adapter
-            (lambda args
-              ;; Since we always have gdbm available, using it will give a
-              ;; faster startup time, which is particularly worth-while for
-              ;; a command-line tool.
-              (substitute* "bin/anystyle"
-                (("default_value: 'ruby',")
-                 "default_value: 'gdbm', # patched for Guix"))))
-          (replace 'check
-            (lambda* (#:key tests? #:allow-other-keys)
-              ;; There are no tests, but let's use this opportunity to do a
-              ;; basic test of our own that things run ok. It works especially
-              ;; well to test this here since we know the 'ruby-anystile'
-              ;; package is in its final, immutable installed form.
-              (when tests?
-                (let ((common
-                       `("require 'anystyle'"
-                         ,(string-append
-                           "pp AnyStyle.parse 'Derrida, J. (1967). L’écriture"
-                           " et la différence (1 éd.). Paris: Éditions du"
-                           " Seuil.'"))))
-                  (for-each
-                   (lambda (lines)
-                     (apply invoke "ruby"
-                            (fold-right (lambda (line lst)
-                                          (cons* "-e" line lst))
-                                        '()
-                                        lines)))
-                   `(,common
-                     ("require 'anystyle/dictionary'"
-                      "AnyStyle::Dictionary.defaults[:adapter] = :gdbm"
-                      ,@common)))))))
-          (add-after 'wrap 'check-cli
-            (lambda* (#:key tests? outputs #:allow-other-keys)
-              (when tests?
-                (with-output-to-file "check-cli.in"
-                  (lambda ()
-                    (for-each
-                     display
-                     '("Derrida, J. (1967). L’écriture et la différence "
-                       "(1 éd.). Paris: Éditions du Seuil.\n"))))
-                (invoke (search-input-file outputs "/bin/anystyle")
-                        "parse"
-                        "check-cli.in"))))
-          (add-after 'wrap 'generate-man-page
-            ;; generating a man page also tests that the command actually runs
-            (lambda args
-              (define (run-with-output-file file command . args)
-                (format (current-output-port)
-                        "running: ~s\nwith output to: ~s\n"
-                        (cons command args)
-                        file)
-                (unless (zero?
-                         (with-output-to-file file
-                           (lambda ()
-                             (status:exit-val
-                              (close-pipe
-                               (apply open-pipe* OPEN_WRITE command args))))))
-                  (error "command failed")))
-              (let ((anystyle (string-append #$output "/bin/anystyle")))
-                (run-with-output-file "intro.txt"
-                                      anystyle "--help")
-                (for-each (lambda (cmd)
-                            (let ((file (string-append cmd ".txt")))
-                              (run-with-output-file file
-                                                    anystyle cmd "--help")
-                              ;; indent headings to create subsections
-                              (substitute* file
-                                (("^[A-Z]" orig)
-                                 (string-append " " orig)))
-                              ;; generate a section heading
-                              (call-with-output-file
-                                  (string-append "section-" file)
-                                (lambda (out)
-                                  (format out "\n\n~a COMMAND\n\n"
-                                          (string-upcase cmd))))))
-                          '("check" "find" "parse" "train"))
-                (substitute* `("intro.txt"
-                               "check.txt" "find.txt" "parse.txt" "train.txt")
-                  ;; format "tag list" for txt2man"
-                  ((" - ")
-                   "    ")
-                  ;; restore formatting of the "name" sections
-                  (("(anystyle|check|find|parse|train)    ([A-Z])" _ cmd post)
-                   (string-append cmd " - " post)))
-                (run-with-output-file "anystyle.txt"
-                                      "cat"
-                                      "intro.txt"
-                                      "section-check.txt" "check.txt"
-                                      "section-find.txt" "find.txt"
-                                      "section-parse.txt" "parse.txt"
-                                      "section-train.txt" "train.txt")
-                (run-with-output-file
-                 "anystyle.1"
-                 "txt2man"
-                 "-v" "General Commands Manual" "-t" "anystyle" "-s" "1"
-                 "-r" #$(string-append "anystyle-cli "
-                                       (package-version this-package))
-                 "-B" "check" "-B" "find" "-B" "parse" "-B" "train"
-                 "anystyle.txt")
-                (install-file "anystyle.1"
-                              (string-append #$output "/share/man/man1"))))))))
-    (home-page "https://anystyle.io")
-    (synopsis "Fast and smart citation reference parsing")
-    (description
-     "AnyStyle is a very fast and smart parser for academic reference lists
-and bibliographies.  AnyStyle uses powerful machine learning heuristics based
-on Conditional Random Fields and aims to make it easy to train the model with
-data that is relevant to your parsing needs.
-
-This package provides the @command{anystyle} command-line utility.  AnyStyle
-can also be used as a Ruby library or as a web application, though the later
-has not yet been packaged for Guix.")
-    (license license:bsd-2)
-    (properties `((upstream-name . "anystyle-cli")))))
-
-(define-public ruby-google-protobuf
-  (package
-    (name "ruby-google-protobuf")
-    (version "3.25.3")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "google-protobuf" version))
-              (sha256
-               (base32
-                "1mnxzcq8kmyfb9bkzqnp019d1hx1vprip3yzdkkha6b3qz5rgg9r"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:tests? #f))  ;; has no tests
-    (native-inputs (list ruby-rake))
-    (synopsis "Protocol Buffers are Google's data interchange format")
-    (description "This library contains the Ruby extension that implements
-Protocol Buffers functionality in Ruby.
-
-The Ruby extension makes use of generated Ruby code that defines message and
-enum types in a Ruby DSL.  You may write definitions in this DSL directly, but
-we recommend using protoc's Ruby generation support with @code{.proto} files.
-The build process in this directory only installs the extension; you need to
-install @code{protoc} (in package ruby-grpc-tools) as well to have Ruby code
-generation functionality.")
-    (home-page "https://protobuf.dev")
-    (license license:bsd-3)))
-
-(define-public ruby-googleapis-common-protos-types
-  (package
-    (name "ruby-googleapis-common-protos-types")
-    (version "1.13.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "googleapis-common-protos-types" version))
-              (sha256
-               (base32
-                "1zrxnv9s2q39f2nh32x7nbfi8lpwzmmn3ji4adglg8dlfr1xrz16"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:tests? #f))  ;; has no tests
-    (propagated-inputs (list ruby-google-protobuf))
-    (synopsis "Common protocol buffer types used by Google APIs")
-    (description "Common protocol buffer types used by Google APIs")
-    (home-page "https://github.com/googleapis/common-protos-ruby")
-    (license license:asl2.0)))
-
-(define-public ruby-grpc
-  (package
-    (name "ruby-grpc")
-    (version "1.62.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "grpc" version))
-              (sha256
-               (base32
-                "03z8yq0z228g6xxxq6s2mmslpv6psrdmi30dpmhysr4px16d897n"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:tests? #f))  ;; has no tests
-    ;; TODO remove third-party sources (zlib, upb, utf8-range, re2, c-ares,
-    ;; boringssl-with-bazel, address_sorting, abseil-cpp), see Makefile
-    (propagated-inputs (list ruby-google-protobuf
-                             ruby-googleapis-common-protos-types))
-    (synopsis "GRPC system in Ruby")
-    (description "GRPC is a high performance, open-source universal RPC
-framework.  This package provides a ruby interface for it.")
-    (home-page "https://github.com/grpc/grpc/tree/master/src/ruby")
-    (license license:asl2.0)))
-
 ;;;
 ;;; Avoid adding new packages to the end of this file. To reduce the chances
 ;;; of a merge conflict, place them above by existing packages with similar
diff --git a/gnu/packages/shellutils.scm b/gnu/packages/shellutils.scm
index 6c1bd0dc17..e88994ce3d 100644
--- a/gnu/packages/shellutils.scm
+++ b/gnu/packages/shellutils.scm
@@ -74,6 +74,8 @@ (define-module (gnu packages shellutils)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-check)
+  #:use-module (gnu packages ruby-xyz)
   #:use-module (gnu packages shells)
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages tmux)
diff --git a/gnu/packages/statistics.scm b/gnu/packages/statistics.scm
index 0f9f25989c..7a9e915537 100644
--- a/gnu/packages/statistics.scm
+++ b/gnu/packages/statistics.scm
@@ -96,7 +96,8 @@ (define-module (gnu packages statistics)
   #:use-module (gnu packages python-science)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages readline)
-  #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-check)
+  #:use-module (gnu packages ruby-xyz)
   #:use-module (gnu packages shells)
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages ssh)
diff --git a/gnu/packages/syndication.scm b/gnu/packages/syndication.scm
index 61220bb9fe..0a9df7fd25 100644
--- a/gnu/packages/syndication.scm
+++ b/gnu/packages/syndication.scm
@@ -65,7 +65,7 @@ (define-module (gnu packages syndication)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages qt)
-  #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-check)
   #:use-module (gnu packages rust)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages time)
@@ -252,8 +252,8 @@ (define-public newsboat
              openssl
              pkg-config)
        ;; For building documentation.
-       (if (supported-package? ruby-asciidoctor)
-           (list ruby-asciidoctor)
+       (if (supported-package? ruby-asciidoctor/minimal)
+           (list ruby-asciidoctor/minimal)
            '())))
     (inputs
      (list curl
diff --git a/gnu/packages/task-management.scm b/gnu/packages/task-management.scm
index a383dc8c5d..342bffde38 100644
--- a/gnu/packages/task-management.scm
+++ b/gnu/packages/task-management.scm
@@ -59,7 +59,7 @@ (define-module (gnu packages task-management)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages readline)
-  #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-check)
   #:use-module (gnu packages time)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
@@ -280,7 +280,7 @@ (define-public timewarrior
                  "../timew-1.4.3/completion/timew-completion.bash"
                  (string-append bash-completion-install-dir "/timew"))))))))
     (native-inputs
-     (list ruby-asciidoctor))
+     (list ruby-asciidoctor/minimal))
     (inputs
      (list gnutls python `(,util-linux "lib")))
     (home-page "https://timewarrior.net")
diff --git a/gnu/packages/tex.scm b/gnu/packages/tex.scm
index 8ff396c50e..dc353ac678 100644
--- a/gnu/packages/tex.scm
+++ b/gnu/packages/tex.scm
@@ -98,6 +98,7 @@ (define-module (gnu packages tex)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-xyz)
   #:use-module (gnu packages shells)
   #:use-module (gnu packages tcl)
   #:use-module (gnu packages time)
diff --git a/gnu/packages/text-editors.scm b/gnu/packages/text-editors.scm
index c288500f4b..e3fd3f8ffc 100644
--- a/gnu/packages/text-editors.scm
+++ b/gnu/packages/text-editors.scm
@@ -121,7 +121,6 @@ (define-module (gnu packages text-editors)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages regex)
-  #:use-module (gnu packages ruby)
   #:use-module (gnu packages sdl)
   #:use-module (gnu packages slang)
   #:use-module (gnu packages sqlite)
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index f0a0e73eb0..f849ee46ce 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -164,7 +164,7 @@ (define-module (gnu packages version-control)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages rsync)
-  #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-check)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages text-editors)
@@ -4161,8 +4161,8 @@ (define-public git-lfs
                    go-golang-org-x-sync
                    go-golang-org-x-sys)
              ;; make `ronn` available during build for man page generation
-             (if (supported-package? ruby-asciidoctor)
-                 (list ronn-ng ruby-asciidoctor)
+             (if (supported-package? ruby-asciidoctor/minimal)
+                 (list ronn-ng ruby-asciidoctor/minimal)
                  '())))
     (home-page "https://git-lfs.github.com/")
     (synopsis "Git extension for versioning large files")
diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index d538034cf1..66c8c982c4 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -149,6 +149,8 @@ (define-module (gnu packages virtualization)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages ruby)
+  #:use-module (gnu packages ruby-check)
+  #:use-module (gnu packages ruby-xyz)
   #:use-module (gnu packages rsync)
   #:use-module (gnu packages sdl)
   #:use-module (gnu packages selinux)
