;;; Copyright © 2014, 2015, 2016, 2017 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 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2019 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2015, 2016, 2017 Ben Woodcroft <donttrustben@gmail.com>
-;;; Copyright © 2017 Nils Gillmann <ng0@n0.is>
+;;; Copyright © 2017 ng0 <ng0@n0.is>
;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
;;; Copyright © 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2017, 2018 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>
;;;
;;; This file is part of GNU Guix.
;;;
#:use-module ((guix licenses) #:prefix license:)
#:use-module (gnu packages)
#:use-module (gnu packages base)
+ #:use-module (gnu packages bison)
#:use-module (gnu packages check)
#:use-module (gnu packages compression)
+ #:use-module (gnu packages crypto)
#:use-module (gnu packages databases)
#:use-module (gnu packages dbm)
+ #:use-module (gnu packages rails)
#:use-module (gnu packages readline)
#:use-module (gnu packages autotools)
#: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 maths)
#:use-module (gnu packages ncurses)
#:use-module (gnu packages networking)
+ #:use-module (gnu packages node)
#: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 version-control)
(delete-file-recursively "ext/fiddle/libffi-3.2.1")
#t))))))
+(define-public mruby
+ (package
+ (name "mruby")
+ (version "2.0.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/mruby/mruby.git")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1r6w1asjshff43ymdwa6xmrkggza99mi2kw88k7ic6ag2j81hcj5"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:test-target "test"
+ #:phases
+ (modify-phases %standard-phases
+ (delete 'configure)
+ (add-after 'unpack 'enable-verbose-tests
+ (lambda _
+ (substitute* "Makefile"
+ (("ruby ./minirake" m)
+ (string-append m " --verbose")))
+ #t))
+ (add-after 'unpack 'disable-broken-tests
+ (lambda _
+ (substitute* "mrbgems/mruby-io/test/io.rb"
+ (("assert\\('IO.popen.+$" m)
+ (string-append m "skip \"Hangs in the Guix build environment\"\n"))
+ (("assert\\('IO#isatty.+$" m)
+ (string-append m "skip \"Disable for Guix; there is no /dev/tty\"\n"))
+ ;; This one is really weird. The *expected* output is all wrong.
+ (("assert\\('`cmd`.*" m)
+ (string-append m "skip \"Disable for Guix\"\n"))
+ (("echo foo")
+ (string-append (which "echo") " foo")))
+ #t))
+ ;; There is no install target
+ (replace 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (bin (string-append out "/bin"))
+ (lib (string-append out "/lib")))
+ (mkdir-p bin)
+ (copy-recursively "build/host/bin" bin)
+ (mkdir-p lib)
+ (copy-recursively "build/host/lib" lib))
+ #t)))))
+ (native-inputs
+ `(("ruby" ,ruby)
+ ("bison" ,bison)))
+ (home-page "https://github.com/mruby/mruby")
+ (synopsis "Lightweight Ruby")
+ (description "mruby is the lightweight implementation of the Ruby
+language. Its syntax is Ruby 1.9 compatible. mruby can be linked and
+embedded within your application.")
+ (license license:expat)))
+
+(define-public ruby-commander
+ (package
+ (name "ruby-commander")
+ (version "4.4.7")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "commander" version))
+ (sha256
+ (base32
+ "1pxakz596fjqak3cdbha6iva1dlqis86i3kjrgg6lf3sp8i5vhwg"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#: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.*") ""))
+ #t)))))
+ (propagated-inputs
+ `(("ruby-highline" ,ruby-highline)))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-rspec-core" ,ruby-rspec-core)
+ ("ruby-rspec-expectations" ,ruby-rspec-expectations)
+ ("ruby-rspec-mocks" ,ruby-rspec-mocks)
+ ("ruby-simplecov" ,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 "1.7.10")
+ (version "2.0.1")
(source
(origin
(method url-fetch)
(uri (rubygems-uri "highline" version))
(sha256
(base32
- "01ib7jp85xjc4gh4jg0wyzllm46hwv8p0w1m4c75pbgi41fps50y"))))
+ "0gr6pckj2jayxw1gdgh9193j5jag5zrrqqlrnl4jvcwpyd3sn2zc"))))
(build-system ruby-build-system)
(arguments
`(#:tests? #f)) ;; TODO: NameError: uninitialized constant SPEC
(home-page "https://github.com/rake-compiler/rake-compiler")
(license license:expat)))
+(define-public ruby-rsync
+ (package
+ (name "ruby-rsync")
+ (version "1.0.9")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "rsync" version))
+ (sha256
+ (base32
+ "0p8b27q1gvxilqfq2528xpwglzcm2myikkjxpqk7mwbwg9r6knxv"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:test-target "spec"
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'remove-coveralls-requirement
+ (lambda _
+ (substitute* "spec/spec_helper.rb"
+ (("require 'coveralls'") "")
+ (("Coveralls.wear!") ""))
+ #t)))))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("rsync" ,rsync)
+ ("ruby-rspec-core" ,ruby-rspec-core)
+ ("ruby-rspec-expectations" ,ruby-rspec-expectations)
+ ("ruby-rspec-mocks" ,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")
;; RSpec is the dominant testing library for Ruby projects. Even RSpec's
;; dependencies use RSpec for their test suites! To avoid these circular
;; dependencies, we disable tests for all of the RSpec-related packages.
-(define ruby-rspec-support
+(define-public ruby-rspec-support
(package
(name "ruby-rspec-support")
- (version "3.5.0")
+ (version "3.8.0")
(source (origin
(method url-fetch)
(uri (rubygems-uri "rspec-support" version))
(sha256
(base32
- "10vf3k3d472y573mag2kzfsfrf6rv355s13kadnpryk8d36yq5r0"))))
+ "0p3m7drixrlhvj2zpc38b11x145bvm311x6f33jjcxmvcm0wq609"))))
(build-system ruby-build-system)
(arguments
'(#:tests? #f)) ; avoid dependency cycles
(define-public ruby-rspec-core
(package
(name "ruby-rspec-core")
- (version "3.5.4")
+ (version "3.8.0")
(source (origin
(method url-fetch)
(uri (rubygems-uri "rspec-core" version))
(sha256
(base32
- "1nacs062qbr98fx6czf1vwppn1js956nv2c8vfwj6i65axdfs46i"))))
+ "1p1s5bnbqp3sxk67y0fh0x884jjym527r0vgmhbm81w7aq6b7l4p"))))
(build-system ruby-build-system)
(arguments
'(#:tests? #f)) ; avoid dependency cycles
(define-public ruby-rspec-expectations
(package
(name "ruby-rspec-expectations")
- (version "3.5.0")
+ (version "3.8.2")
(source (origin
(method url-fetch)
(uri (rubygems-uri "rspec-expectations" version))
(sha256
(base32
- "0bbqfrb1x8gmwf8x2xhhwvvlhwbbafq4isbvlibxi6jk602f09gs"))))
+ "18l21hy1zdc2pgc2yb17k3n2al1khpfr0z6pijlm852iz6vj0dkm"))))
(build-system ruby-build-system)
(arguments
'(#:tests? #f)) ; avoid dependency cycles
(define-public ruby-rspec-mocks
(package
(name "ruby-rspec-mocks")
- (version "3.5.0")
+ (version "3.8.0")
(source (origin
(method url-fetch)
(uri (rubygems-uri "rspec-mocks" version))
(sha256
(base32
- "0nl3ksivh9wwrjjd47z5dggrwx40v6gpb3a0gzbp1gs06a5dmk24"))))
+ "06y508cjqycb4yfhxmb3nxn0v9xqf17qbd46l1dh4xhncinr4fyp"))))
(build-system ruby-build-system)
(arguments
'(#:tests? #f)) ; avoid dependency cycles
(define-public ruby-rspec
(package
(name "ruby-rspec")
- (version "3.5.0")
+ (version "3.8.0")
(source (origin
(method url-fetch)
(uri (rubygems-uri "rspec" version))
(sha256
(base32
- "16g3mmih999f0b6vcz2c3qsc7ks5zy4lj1rzjh8hf6wk531nvc6s"))))
+ "15ppasvb9qrscwlyjz67ppw1lnxiqnkzx5vkx1bd8x5n3dhikxc3"))))
(build-system ruby-build-system)
(arguments
'(#:tests? #f)) ; avoid dependency cycles
(define-public bundler
(package
(name "bundler")
- (version "1.15.4")
+ (version "1.17.3")
(source (origin
(method url-fetch)
(uri (rubygems-uri "bundler" version))
(sha256
(base32
- "0wl4r7wbwdq68xidfv4hhzfb1spb6lmhbspwlzrg4pf1l6ipxlgs"))))
+ "0ln3gnk7cls81gwsbxvrmlidsfd78s6b2hzlm4d4a9wbaidzfjxw"))))
(build-system ruby-build-system)
(arguments
'(#:tests? #f)) ; avoid dependency cycles
(home-page "https://github.com/jnunemaker/crack")
(license license:expat)))
+(define-public ruby-crass
+ (package
+ (name "ruby-crass")
+ (version "1.0.4")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "crass" version))
+ (sha256
+ (base32
+ "0bpxzy6gjw9ggjynlxschbfsgmx8lv3zw1azkjvnb8b9i895dqfi"))))
+ (build-system ruby-build-system)
+ (synopsis "Pure Ruby CSS parser based on CSS Syntax Level 3")
+ (description
+ "Crass is a pure Ruby CSS parser based on the CSS Syntax Level 3 spec.")
+ (home-page "https://github.com/rgrove/crass/")
+ (license license:expat)))
+
(define-public ruby-cliver
(package
(name "ruby-cliver")
(home-page "https://github.com/ThoughtWorksStudios/saikuro_treemap")
(license license:expat)))
+(define-public ruby-oauth2
+ (package
+ (name "ruby-oauth2")
+ (version "1.4.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "oauth2" version))
+ (sha256
+ (base32
+ "0av6nlb5y2sm6m8fx669ywrqa9858yqaqfqzny75nqp3anag89qh"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:tests? #f)) ; No included tests
+ (propagated-inputs
+ `(("ruby-faraday" ,ruby-faraday)
+ ("ruby-jwt" ,ruby-jwt)
+ ("ruby-multi-json" ,ruby-multi-json)
+ ("ruby-multi-xml" ,ruby-multi-xml)
+ ("ruby-rack" ,ruby-rack)))
+ (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 "1.9.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "omniauth" version))
+ (sha256
+ (base32
+ "1p16h1rp8by05k8gfw17xjhgwp60dk8qmj1xalv1n23kmxfsxb1x"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:tests? #f)) ; No included tests
+ (propagated-inputs
+ `(("ruby-hashie" ,ruby-hashie)
+ ("ruby-rack" ,ruby-rack)))
+ (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.6.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "omniauth-oauth2" version))
+ (sha256
+ (base32
+ "11mi36l9d97r77q99jnafdc1yaa0a9wahhpp7dj7ank8q52g7g79"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'remove-unnecessary-dependencies
+ (lambda _
+ ;; The coveralls gem submits coverage information to an online
+ ;; service, and is unnecessary when running the tests
+ (substitute* "Gemfile"
+ ((".*coveralls\"") ""))
+ (substitute* "spec/helper.rb"
+ (("require \"coveralls\"") "")
+ (("Coveralls::SimpleCov::Formatter") ""))
+ #t)))))
+ (propagated-inputs
+ `(("ruby-oauth2" ,ruby-oauth2)
+ ("ruby-omniauth" ,ruby-omniauth)))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-rspec" ,ruby-rspec)
+ ("ruby-simplecov" ,ruby-simplecov)
+ ("ruby-rack-test" ,ruby-rack-test)
+ ("ruby-webmock" ,ruby-webmock-2)))
+ (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"))
+ #t))
+ (add-before 'check 'set-LIB
+ (lambda _
+ ;; This is used in the rakefile when running the tests
+ (setenv "LIB" "open4")
+ #t)))))
+ (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")
(home-page "https://github.com/ahoward/options")
(license license:ruby)))
+(define-public ruby-erubi
+ (package
+ (name "ruby-erubi")
+ (version "1.8.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "erubi" version))
+ (sha256
+ (base32
+ "1kagnf6ziahj0d781s6ryy6fwqwa3ad4xbzzj84p9m4nv4c2jir1"))))
+ (build-system ruby-build-system)
+ (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")
(home-page "http://www.kuwata-lab.com/erubis/")
(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.git")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0c0vd2mmqq3ar4plbwi2wsbr31vn4h45i19r5km66skydnnbp1y6"))))
+ (build-system ruby-build-system)
+ (native-inputs
+ `(("bundler" ,bundler)
+ ;; The test suite tests all the available backends. Currenly, 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" ,node)))
+ (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-orderedhash
(package
(name "ruby-orderedhash")
(home-page "https://xml4r.github.com/libxml-ruby")
(license license:expat)))
+(define-public ruby-lino
+ (package
+ (name "ruby-lino")
+ (version "1.1.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "lino" version))
+ (sha256
+ (base32
+ "11d29g0fk372b9fcpyr0k6hxm2b4j4igpysmi542hgbbgqgp9cd3"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:tests? #f)) ; No included tests
+ (propagated-inputs
+ `(("ruby-hamster" ,ruby-hamster)
+ ("ruby-open4" ,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-xml-simple
(package
(name "ruby-xml-simple")
(home-page "https://github.com/bdurand/lumberjack")
(license license:expat)))
+(define-public ruby-rbnacl
+ (package
+ (name "ruby-rbnacl")
+ (version "6.0.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "rbnacl" version))
+ (sha256
+ (base32
+ "0ajxy5kj2jw09wdsla3jmha8w07vj5l14288xr9djpl327g3lzhn"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#: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!") ""))
+ #t))
+ (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"
+ "\"]")))
+ #t))
+ ;; Run Rspec directly to avoid the Rubocop dependency in the Rakefile
+ (replace 'check
+ (lambda* (#:key tests? #:allow-other-keys)
+ (when tests?
+ (invoke "rspec"))
+ #t)))))
+ (propagated-inputs
+ `(("ruby-ffi" ,ruby-ffi)))
+ (inputs
+ `(("libsodium" ,libsodium)))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-rspec" ,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/crypto-rb/rbnacl")
+ (license license:expat)))
+
(define-public ruby-nenv
(package
(name "ruby-nenv")
(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
+ `(("ruby-tilt" ,ruby-tilt)
+ ("ruby-temple" ,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 "http://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
+ '(#: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") ""))
+ #t))
+ ;; No Rakefile is included, so run rspec directly.
+ (replace 'check
+ (lambda* (#:key tests? #:allow-other-keys)
+ (when tests?
+ (invoke "rspec"))
+ #t)))))
+ (propagated-inputs
+ `(("ruby-concurrent" ,ruby-concurrent)))
+ (native-inputs
+ `(("ruby-rspec" ,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")
(home-page "https://github.com/ruby-gettext/locale")
(license (list license:lgpl3+ license:ruby))))
+(define-public ruby-temple
+ (package
+ (name "ruby-temple")
+ (version "0.8.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "temple" version))
+ (sha256
+ (base32
+ "158d7ygbwcifqnvrph219p7m78yjdjazhykv5darbkms7bxm5y09"))))
+ (build-system ruby-build-system)
+ (native-inputs
+ `(("ruby-tilt" ,ruby-tilt)
+ ("ruby-bacon" ,ruby-bacon)
+ ("ruby-erubis" ,ruby-erubis)))
+ (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")
(home-page "http://ranguba.org/packnga/")
(license license:lgpl2.0+)))
+(define-public ruby-test-construct
+ (package
+ (name "ruby-test-construct")
+ (version "2.0.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "test_construct" version))
+ (sha256
+ (base32
+ "1a2ym3l068d0pxzzr95kvqx87zpdsarxslz9ygd4qfm9frrz0kgj"))))
+ (build-system ruby-build-system)
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-mocha" ,ruby-mocha)
+ ("ruby-rspec" ,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")
(home-page "https://test-unit.github.io/")
(license (list license:psfl license:ruby))))
+(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
+ '(#: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)
+ (when tests?
+ (invoke "rspec"))
+ #t)))))
+ (propagated-inputs
+ `(("ruby-builder" ,ruby-builder)))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-rspec" ,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 "http://markaby.github.io/")
+ (license license:expat)))
+
(define-public ruby-maruku
(package
(name "ruby-maruku")
(home-page "https://github.com/vmg/redcarpet")
(license license:expat)))
+(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
+ `(("ruby-listen" ,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-mocha
(package
(name "ruby-mocha")
(version "1.2.2.rc2")
(source
(origin
- (method url-fetch)
- (uri (string-append "https://github.com/net-ssh/net-scp/archive/v"
- version ".tar.gz"))
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/net-ssh/net-scp.git")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
(sha256
- (base32
- "0xyf17mhgvyz54xjj9ria4wnq3x62bhmkfgzqv8jwiip2bplv1nk"))))
+ (base32 "1nyn17sy71fn7zs3y6wbgcn35318c10flqgc0582409095x4h0sx"))))
(build-system ruby-build-system)
(native-inputs
`(("bundler" ,bundler)
(delete-file "test/minitest/test_minitest_spec.rb")
#t)))))))
+(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"))
+ #t)))))
+ (propagated-inputs
+ `(("ruby-minitest" ,ruby-minitest)))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-cucumber" ,ruby-cucumber)
+ ("ruby-bump" ,ruby-bump)
+ ("ruby-test-construct" ,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-sprint
(package
(name "ruby-minitest-sprint")
(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-post
(package
(name "ruby-multipart-post")
various relational database implementations.")
(license license:expat)))
+(define-public ruby-marcel
+ (package
+ (name "ruby-marcel")
+ (version "0.3.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "marcel" version))
+ (sha256
+ (base32
+ "1nxbjmcyg8vlw6zwagf17l9y2mwkagmmkg95xybpn4bmf3rfnksx"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(;; No included tests
+ #:tests? #f))
+ (propagated-inputs
+ `(("ruby-mimemagic" ,ruby-mimemagic)))
+ (synopsis "MIME type detection using magic numbers, filenames and extensions")
+ (description
+ "@code{marcel} provides @acronym{MIME, Multipurpose Internet Mail
+Extensions} type detection using magic numbers, filenames, and extensions")
+ (home-page "https://github.com/basecamp/marcel")
+ (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.
(home-page "https://github.com/whitequark/parser")
(license license:expat)))
+(define-public ruby-prawn-manual-builder
+ (package
+ (name "ruby-prawn-manual-builder")
+ (version "0.3.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "prawn-manual_builder" version))
+ (sha256
+ (base32
+ "0wbjnkqp55p5wmz85ldypcray223glckd209hmdxhnzk8s5pb3za"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(;; No included tests
+ #:tests? #f
+ #: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
+ `(("ruby-coderay" ,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 (list
+ ;; GPLv2 or GPLv3 or custom license described in LICENSE file
+ license:gpl2
+ license:gpl3))))
+
(define-public ruby-progress_bar
(package
(name "ruby-progress_bar")
(home-page "https://github.com/paul/progress_bar")
(license license:wtfpl2)))
+(define-public ruby-dep
+ (package
+ (name "ruby-dep")
+ (version "1.5.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "ruby_dep" version))
+ (sha256
+ (base32
+ "1c1bkl97i9mkcvkn1jks346ksnvnnp84cs22gwl0vd7radybrgy5"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:tests? #f)) ; No included tests
+ (synopsis "Creates a version constraint of supported Rubies")
+ (description
+ "This package helps create a version constraint of supported Rubies,
+suitable for a gemspec file.")
+ (home-page "https://github.com/e2/ruby_dep")
+ (license license:expat)))
+
(define-public ruby-progressbar
(package
(name "ruby-progressbar")
(home-page "http://guardgem.org/")
(license license:expat)))
+(define-public ruby-tilt
+ (package
+ (name "ruby-tilt")
+ (version "2.0.9")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "tilt" version))
+ (sha256
+ (base32
+ "0ca4k0clwf0rkvy7726x4nxpjxkpv67w043i39saxgldxd97zmwz"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'remove-some-dependencies
+ (lambda _
+ (substitute* "Gemfile"
+ ;; TODO ronn is used for generating the manual
+ (("gem 'ronn'.*") "\n")
+ ;; ruby-haml has a runtime dependency on ruby-tilt, so don't
+ ;; pass it in as a native-input
+ (("gem 'haml'.*") "\n")
+ ;; TODO Not all of these gems are packaged for Guix yet:
+ ;; less, coffee-script, livescript, babel-transpiler,
+ ;; typescript-node
+ (("if can_execjs") "if false")
+ ;; Disable the secondary group to reduce the number of
+ ;; dependencies. None of the normal approaches work, so patch
+ ;; the Gemfile instead.
+ (("group :secondary") "[].each"))
+ #t)))))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-yard" ,ruby-yard)
+ ("ruby-builder" ,ruby-builder)
+ ("ruby-erubis" ,ruby-erubis)
+ ("ruby-markaby" ,ruby-markaby)
+ ("ruby-sassc" ,ruby-sassc)))
+ (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")
;; There is no mention of the "or later" clause.
(license license:gpl2)))
+(define-public ruby-terraform
+ (package
+ (name "ruby-terraform")
+ (version "0.22.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "ruby-terraform" version))
+ (sha256
+ (base32
+ "13zjkp71cd19j2ds2h9rqwcfr1zdg5nsh63p89l6qcsc9z39z324"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:tests? #f)) ; No included tests
+ (propagated-inputs
+ `(("ruby-lino" ,ruby-lino)))
+ (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")
(home-page "https://flori.github.com/json")
(license license:ruby)))
+(define-public ruby-jwt
+ (package
+ (name "ruby-jwt")
+ (version "2.1.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "jwt" version))
+ (sha256
+ (base32
+ "1w0kaqrbl71cq9sbnixc20x5lqah3hs2i93xmhlfdg2y3by7yzky"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:test-target "test"
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'remove-unnecessary-dependencies
+ (lambda _
+ (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") ""))
+ #t)))))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-rspec" ,ruby-rspec)
+ ("ruby-rbnacl" ,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
(version "3.1.5")
(source
(origin
- (method url-fetch)
- (uri (rubygems-uri "listen" version))
+ ;; 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.git")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
(sha256
(base32
- "01v5mrnfqm6sgm8xn2v5swxsn1wlmq7rzh2i48d4jzjsc7qvb6mx"))))
+ "1hqmkfa9f2xb5jlvqbafdxjd5ax75jm8gqj5nh3k22xq0kacsvgg"))))
(build-system ruby-build-system)
- (arguments '(#:tests? #f)) ; no tests
+ (arguments
+ `(#: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`"))
+ #t))
+ (add-before 'check 'remove-unnecessary-dependencies'
+ (lambda _
+ (substitute* "Rakefile"
+ ;; Rubocop is for code linting, and is unnecessary for running
+ ;; the tests.
+ ((".*rubocop.*") ""))
+ #t)))))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-rspec" ,ruby-rspec)))
+ (inputs
+ `(;; 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" ,ruby-thor)))
(propagated-inputs
- `(("ruby-rb-inotify" ,ruby-rb-inotify)
- ("ruby-rb-fsevent" ,ruby-rb-fsevent)))
+ `(("ruby-rb-fsevent" ,ruby-rb-fsevent)
+ ("ruby-rb-inotify" ,ruby-rb-inotify)
+ ("ruby-dep" ,ruby-dep)))
(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-listen-3.0
+(define-public ruby-loofah
(package
- (inherit ruby-listen)
- (version "3.0.8")
- (source (origin
- (method url-fetch)
- (uri (rubygems-uri "listen" version))
- (sha256
- (base32
- "1l0y7hbyfiwpvk172r28hsdqsifq1ls39hsfmzi1vy4ll0smd14i"))))))
+ (name "ruby-loofah")
+ (version "2.2.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "loofah" version))
+ (sha256
+ (base32
+ "1ccsid33xjajd0im2xv941aywi58z7ihwkvaf1w2bv89vn5bhsjg"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'remove-unnecessary-dependencies
+ (lambda _
+ ;; concourse is a development tool which is unused, so remove it
+ ;; so it's not required.
+ (substitute* "Gemfile"
+ ((".*\"concourse\".*") "\n"))
+ (substitute* "Rakefile"
+ (("require 'concourse'") "")
+ (("Concourse\\.new.*") "\n"))
+ #t)))))
+ (native-inputs
+ `(("ruby-hoe" ,ruby-hoe)
+ ("ruby-rr" ,ruby-rr)))
+ (propagated-inputs
+ `(("ruby-nokogiri" ,ruby-nokogiri)
+ ("ruby-crass" ,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.")
+ (home-page "https://github.com/flavorjones/loofah")
+ (license license:expat)))
(define-public ruby-activesupport
(package
(name "ruby-activesupport")
- (version "5.2.2")
+ (version "5.2.2.1")
(source
(origin
(method url-fetch)
(uri (rubygems-uri "activesupport" version))
(sha256
(base32
- "1iya7vxqwxysr74s7b4z1x19gmnx5advimzip3cbmsd5bd43wfgz"))))
+ "161bp4p01v1a1lvszrhd1a02zf9x1p1l1yhw79a3rix1kvzkkdqb"))))
(build-system ruby-build-system)
(arguments
`(#:phases
(define-public ruby-rack-protection
(package
(name "ruby-rack-protection")
- (version "2.0.3")
+ (version "2.0.5")
(source
(origin
(method url-fetch)
(uri (rubygems-uri "rack-protection" version))
(sha256
(base32
- "1z5598qipilmnf45428jnxi63ykrgvnyywa5ckpr52zv2vpd8jdp"))))
+ "15167q25rmxipqwi6hjqj3i1byi9iwl3xq9b7mdar7qiz39pmjsk"))))
(build-system ruby-build-system)
(arguments
'(;; Tests missing from the gem.
(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
+ `(("bundler" ,bundler)
+ ("ruby-rspec" ,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")
("ruby-netrc" ,ruby-netrc)))
(native-inputs
`(("bundler" ,bundler)
- ("ruby-webmock", ruby-webmock-2)
- ("ruby-rspec", ruby-rspec)))
+ ("ruby-webmock" ,ruby-webmock-2)
+ ("ruby-rspec" ,ruby-rspec)))
(synopsis "Simple HTTP and REST client for Ruby")
(description
"@code{rest-client} provides a simple HTTP and REST client for Ruby,
(home-page "https://github.com/cucumber/tag-expressions-ruby")
(license license:expat)))
+(define-public ruby-bindex
+ (package
+ (name "ruby-bindex")
+ (version "0.5.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "bindex" version))
+ (sha256
+ (base32
+ "1wvhf4v8sk5x8li03pcc0v0wglmyv7ikvvg05bnms83dfy7s4k8i"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:test-target "default"))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-rake-compiler" ,ruby-rake-compiler)))
+ (synopsis "Provides access for bindings relating to Ruby exceptions")
+ (description
+ "@code{bindex} 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/bindex")
+ (license license:expat)))
+
(define-public ruby-bio-logger
(package
(name "ruby-bio-logger")
(define-public ruby-fivemat
(package
(name "ruby-fivemat")
- (version "1.3.6")
+ (version "1.3.7")
(source
(origin
(method url-fetch)
(uri (rubygems-uri "fivemat" version))
(sha256
(base32
- "006n7b09vviv5bs5hv2ccmjxw9iw3brcsm3xh3dhzfncsknz4jp7"))))
+ "0pzlycasvwmg4bbx7plllpqnhd9zlmmff8l2w3yii86nrm2nvf9n"))))
(build-system ruby-build-system)
(arguments
`(#:tests? #f)) ; no tests
(arguments
`(#:phases
(modify-phases %standard-phases
- (add-before 'check 'add-dependency-to-bundler
+ (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"))
+ #t)))))
+ (propagated-inputs
+ `(("ruby-unf-ext" ,ruby-unf-ext)))
+ (native-inputs
+ `(("ruby-shoulda" ,ruby-shoulda)
+ ("bundler" ,bundler)
+ ("ruby-test-unit" ,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
+ `(("ruby-rack" ,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 _
- ;; 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"))
+ ;; 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'") ""))
+ #t))
+ ;; 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"))
#t)))))
(propagated-inputs
- `(("ruby-unf-ext" ,ruby-unf-ext)))
+ `(("ruby-warden" ,ruby-warden)))
(native-inputs
- `(("ruby-shoulda" ,ruby-shoulda)
- ("bundler" ,bundler)
- ("ruby-test-unit" ,ruby-test-unit)))
- (synopsis "Unicode Normalization Form support to Ruby and JRuby")
+ `(("bundler" ,bundler)
+ ("ruby-rspec" ,ruby-rspec-2)
+ ("ruby-rack-test" ,ruby-rack-test)))
+ (synopsis "OAuth 2.0 strategies for Warden")
(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)))
+ "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-2
(package
(home-page "https://github.com/janlelis/ruby_version")
(license license:expat)))
+(define-public ruby-websocket-driver
+ (package
+ (name "ruby-websocket-driver")
+ (version "0.7.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "websocket-driver" version))
+ (sha256
+ (base32
+ "1551k3fs3kkb3ghqfj3n5lps0ikb9pyrdnzmvgfdxy8574n4g1dn"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(;; No included tests
+ #:tests? #f))
+ (propagated-inputs
+ `(("ruby-websocket-extensions" ,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")
(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-ae
(package
(name "ruby-ae")
(package
(name "ruby-sass-spec")
(version "3.5.4")
- (source (origin
- (method url-fetch)
- (uri (string-append "https://github.com/sass/sass-spec/archive/v"
- version ".tar.gz"))
- (file-name (string-append name "-" version ".tar.gz"))
- (sha256
- (base32
- "0nx8lp7c9qa58w489crgqa3c489xsyarn1a8h4np9mwwfqm1h3rr"))))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/sass/sass-spec.git")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "1zsw66830w0xlc7kxz6fm4b5nyb44vdsdgm9mgy06s5aixx83pwr"))))
(build-system ruby-build-system)
(propagated-inputs
`(("ruby-command-line-reporter-3" ,ruby-command-line-reporter-3)
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.0.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "sassc" version))
+ (sha256
+ (base32
+ "1sr4825rlwsrl7xrsm0sgalcpf5zgp4i56dbi3qxfa9lhs8r6zh4"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#: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")
+ #t))
+ (add-after 'unpack 'dont-check-the-libsass-version
+ (lambda _
+ (substitute* "test/native_test.rb"
+ (("assert_equal.*Native\\.version") ""))
+ #t))
+ (add-after 'unpack 'remove-git-from-gemspec
+ (lambda _
+ (substitute* "sassc.gemspec"
+ (("`git ls-files -z`") "`find . -type f -print0 |sort -z`")
+ (("`git submodule --quiet foreach pwd`") "''"))
+ #t))
+ (add-after 'unpack 'remove-extensions-from-gemspec
+ (lambda _
+ (substitute* "sassc.gemspec"
+ (("\\[\"ext/Rakefile\"\\]") "[]"))
+ #t))
+ (add-after 'unpack 'fix-Rakefile
+ (lambda _
+ (substitute* "Rakefile"
+ (("test: 'libsass:compile'") ":test"))
+ #t))
+ (add-after 'unpack 'remove-unnecessary-dependencies
+ (lambda _
+ (substitute* "test/test_helper.rb"
+ (("require \"pry\"") ""))
+ #t))
+ (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'")))
+ #t))
+ ;; The gemspec still references the libsass files, so just keep the
+ ;; one in the gem.
+ (delete 'extract-gemspec))))
+ (propagated-inputs
+ `(("ruby-ffi" ,ruby-ffi)
+ ("ruby-rake" ,ruby-rake)))
+ (inputs
+ `(("libsass" ,libsass)))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-minitest-around" ,ruby-minitest-around)
+ ("ruby-test-construct" ,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")
(define-public ruby-jekyll-watch
(package
(name "ruby-jekyll-watch")
- (version "2.0.0")
+ (version "2.1.2")
(source (origin
(method url-fetch)
(uri (rubygems-uri "jekyll-watch" version))
(sha256
(base32
- "0m7scvj3ki8bmyx5v8pzibpg6my10nycnc28lip98dskf8iakprp"))))
+ "1s9ly83sp8albvgdff12xy2h4xd8lm6z2fah4lzmk2yvp85jzdzv"))))
(build-system ruby-build-system)
(propagated-inputs
- `(("ruby-listen-3.0" ,ruby-listen-3.0)))
+ `(("ruby-listen" ,ruby-listen)))
(arguments
;; No rakefile
`(#:tests? #f))
(define-public ruby-parallel
(package
(name "ruby-parallel")
- (version "1.12.1")
- (source (origin
- (method url-fetch)
- (uri (rubygems-uri "parallel" version))
- (sha256
- (base32
- "01hj8v1qnyl5ndrs33g8ld8ibk0rbcqdpkpznr04gkbxd11pqn67"))))
+ (version "1.13.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/grosser/parallel.git")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1isqzbqxz2ndad4i5z3lb9ldrhaijfncj8bmffv04sq44sv87ikv"))))
(build-system ruby-build-system)
- (arguments `(#:tests? #f)); No rakefile
+ (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 dependendencies, so
+ ;; delete the Gemfile.lock
+ (delete-file "Gemfile.lock")
+ #t))
+ (add-before 'build 'patch-gemspec
+ (lambda _
+ (substitute* "parallel.gemspec"
+ (("git ls-files") "find"))
+ #t)))))
+ (native-inputs
+ `(("ruby-rspec" ,ruby-rspec)
+ ("ruby-rspec-rerun" ,ruby-rspec-rerun)
+ ("bundler" ,bundler)
+ ("ruby-activerecord" ,ruby-activerecord)
+ ("ruby-progressbar" ,ruby-progressbar)
+ ("ruby-bump" ,ruby-bump)
+ ("procps" ,procps)
+ ("lsof" ,lsof)
+ ("ruby-mysql2" ,ruby-mysql2)
+ ("ruby-sqlite3" ,ruby-sqlite3)
+ ("ruby-i18n" ,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
(base32
"1nxd6qmxqwl850icp18wjh5k0s3amxcajdrkjyzpfgq0kvilcv9k"))))
(build-system ruby-build-system)
- (arguments `(#:tests? #f)); No rakefile
(propagated-inputs
- `(("ruby-prawn" ,ruby-prawn)))
+ `(("ruby-prawn" ,ruby-prawn)
+ ("ruby-pdf-inspector" ,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"))
+ #t)))))
(home-page "https://github.com/prawnpdf/prawn-table")
(synopsis "Tables support for Prawn")
(description "This gem provides tables support for Prawn.")
(define-public jekyll
(package
(name "jekyll")
- (version "3.8.3")
+ (version "3.8.5")
(source (origin
(method url-fetch)
(uri (rubygems-uri "jekyll" version))
(sha256
(base32
- "1iw90wihk9dscgmppf5v6lysg3kjmnx50mjyl4gghkdb4spw97xk"))))
+ "1nn2sc308l2mz0yiall4r90l6vy67qp4sy9zapi73a948nd4a5k3"))))
(build-system ruby-build-system)
(arguments
;; No rakefile, but a test subdirectory
(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
+ (package
+ (name "ruby-faraday")
+ (version "0.15.4")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "faraday" version))
+ (sha256
+ (base32
+ "0s72m05jvzc1pd6cw1i289chas399q0a14xrwg4rvkdwy7bgzrh0"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:tests? #f))
+ (propagated-inputs
+ `(("ruby-multipart-post" ,ruby-multipart-post)))
+ (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.3.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "nio4r" version))
+ (sha256
+ (base32
+ "1a41ca1kpdmrypjp9xbgvckpy8g26zxphkja9vk7j5wl4n8yvlyr"))))
+ (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") ""))
+ #t))
+ (add-before 'check 'compile
+ (lambda _
+ (invoke "rake" "compile")
+ #t))
+ (replace 'check
+ (lambda* (#:key tests? #:allow-other-keys)
+ (when tests?
+ (invoke "rspec"))
+ #t)))))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-rake-compiler" ,ruby-rake-compiler)
+ ("ruby-rspec" ,ruby-rspec)
+ ("ruby-rubocop" ,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-globalid
+ (package
+ (name "ruby-globalid")
+ (version "0.4.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "globalid" version))
+ (sha256
+ (base32
+ "1zkxndvck72bfw235bd9nl2ii0lvs5z88q14706cmn702ww2mxv1"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(;; No included tests
+ #:tests? #f))
+ (propagated-inputs
+ `(("ruby-activesupport" ,ruby-activesupport)))
+ (synopsis "Generate URIs idenfitying model instances in Ruby")
+ (description
+ "@code{GlobalID} provides a way to generate URIs from a model in Ruby that
+uniquely identify it.")
+ (home-page "https://rubyonrails.org/")
+ (license license:expat)))
+
+(define-public ruby-sprockets
+ (package
+ (name "ruby-sprockets")
+ (version "3.7.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "sprockets" version))
+ (sha256
+ (base32
+ "182jw5a0fbqah5w9jancvfmjbk88h8bxdbwnl4d3q809rpxdg8ay"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(;; No included tests
+ #:tests? #f))
+ (propagated-inputs
+ `(("ruby-concurrent" ,ruby-concurrent)
+ ("ruby-rack" ,ruby-rack)))
+ (synopsis "Sprockets is a Rack-based asset packaging system")
+ (description
+ "Sprockets is a Rack-based asset packaging system that concatenates and
+serves JavaScript, CoffeeScript, CSS, LESS, Sass, and SCSS.")
+ (home-page "https://github.com/rails/sprockets")
+ (license license:expat)))
+
+(define-public ruby-mustermann
+ (package
+ (name "ruby-mustermann")
+ (version "1.0.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "mustermann" version))
+ (sha256
+ (base32
+ "0lycgkmnyy0bf29nnd2zql5a6pcf8sp69g9v4xw0gcfcxgpwp7i1"))))
+ (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-sinatra
+ (package
+ (name "ruby-sinatra")
+ (version "2.0.5")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "sinatra" version))
+ (sha256
+ (base32
+ "1gasgn5f15myv08k10i16p326pchxjsy37pgqfw0xm66kcc5d7ry"))))
+ (build-system ruby-build-system)
+ (propagated-inputs
+ `(("ruby-mustermann" ,ruby-mustermann)
+ ("ruby-rack" ,ruby-rack)
+ ("ruby-rack-protection" ,ruby-rack-protection)
+ ("ruby-tilt" ,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 "http://sinatrarb.com/")
+ (license license:expat)))
+
+(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
+ `(("ruby-daemons" ,ruby-daemons)
+ ("ruby-eventmachine" ,ruby-eventmachine)
+ ("ruby-rack" ,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 "http://code.macournoyer.com/thin/")
+ (license license:ruby)))
+
+(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>, ["))
+ #t)))))
+ (propagated-inputs
+ `(("ruby-eventmachine" ,ruby-eventmachine)
+ ("ruby-thin" ,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 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"))
+ #t))
+ (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\""))
+ #t)))))
+ (inputs
+ `(("ruby-eventmachine" ,ruby-eventmachine)
+ ("ruby-mail" ,ruby-mail)
+ ("ruby-rack" ,ruby-rack)
+ ("ruby-sinatra" ,ruby-sinatra)
+ ("ruby-skinny" ,ruby-skinny)
+ ("ruby-sqlite3" ,ruby-sqlite3)
+ ("ruby-thin" ,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)))