summaryrefslogtreecommitdiff
path: root/gnu/packages/ruby.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/ruby.scm')
-rw-r--r--gnu/packages/ruby.scm227
1 files changed, 225 insertions, 2 deletions
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 53df4cf9fc..818553848d 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -13,6 +13,7 @@
;;; 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.
;;;
@@ -33,6 +34,7 @@
#: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)
@@ -159,6 +161,66 @@ a focus on simplicity and productivity.")
(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")
@@ -4982,14 +5044,14 @@ testing libraries to build on.")
(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.
@@ -8379,3 +8441,164 @@ uniquely identify it.")
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)))