summaryrefslogtreecommitdiff
path: root/gnu/packages/ruby-xyz.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/ruby-xyz.scm')
-rw-r--r--gnu/packages/ruby-xyz.scm16764
1 files changed, 16756 insertions, 8 deletions
diff --git a/gnu/packages/ruby-xyz.scm b/gnu/packages/ruby-xyz.scm
index 688bf33459..fb073cc40b 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,16730 @@
(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
+ (let ((commit "5abfa378743756ae4d9306cc134bcc482f5c9525")
+ (revision "0"))
+ (hidden-package
+ (package
+ (inherit ruby-hydra-minimal)
+ (version (git-version "0.0" revision commit))
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/hyphenation/hydra")
+ (commit commit)))
+ (file-name (git-file-name "ruby-hydra-minimal" version))
+ ;; byebug is a non-essential debugging utility that brings in
+ ;; many dependencies.
+ (patches (search-patches "ruby-hydra-minimal-no-byebug.patch"))
+ (sha256
+ (base32
+ "1cik398l2765y3d9sdhjzki3303hkry58ac6jlkiy7iy62nm529f"))))
+ (arguments
+ (list
+ #:tests? #f
+ #:ruby ruby-2.7))))))
+
+(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.
;;;