summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gnu/local.mk8
-rw-r--r--gnu/packages/databases.scm64
-rw-r--r--gnu/packages/javascript.scm37
-rw-r--r--gnu/packages/patches/ruby-coffee-rails-fix-rakefile.patch20
-rw-r--r--gnu/packages/patches/ruby-listen-3.0.8-patch-gemspec.patch16
-rw-r--r--gnu/packages/patches/ruby-listen-patch-gemspec.patch16
-rw-r--r--gnu/packages/patches/ruby-rspec-its-remove-rspec-gemspec.patch22
-rw-r--r--gnu/packages/patches/ruby-therubyracer-fix-gemspec.patch16
-rw-r--r--gnu/packages/python.scm861
-rw-r--r--gnu/packages/rabbitmq.scm93
-rw-r--r--gnu/packages/rails.scm625
-rw-r--r--gnu/packages/ruby.scm3312
-rw-r--r--gnu/packages/terraform.scm160
-rw-r--r--gnu/packages/web.scm32
-rw-r--r--gnu/services/databases.scm119
-rw-r--r--gnu/services/message-broker.scm114
-rw-r--r--gnu/system.scm59
-rw-r--r--gnu/system/linux-container.scm46
-rw-r--r--gnu/tests.scm12
-rw-r--r--gnu/tests/message-broker.scm86
-rw-r--r--guix/build/go-build-system.scm7
-rw-r--r--guix/import/github.scm57
-rw-r--r--guix/scripts/system.scm18
23 files changed, 5657 insertions, 143 deletions
diff --git a/gnu/local.mk b/gnu/local.mk
index 0bb0203354..76b0d7df9a 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -369,6 +369,7 @@ GNU_SYSTEM_MODULES = \
%D%/packages/toys.scm \
%D%/packages/tryton.scm \
%D%/packages/qt.scm \
+ %D%/packages/rabbitmq.scm \
%D%/packages/ragel.scm \
%D%/packages/rails.scm \
%D%/packages/ratpoison.scm \
@@ -489,6 +490,7 @@ GNU_SYSTEM_MODULES = \
%D%/services/virtualization.scm \
%D%/services/mail.scm \
%D%/services/mcron.scm \
+ %D%/services/message-broker.scm \
%D%/services/messaging.scm \
%D%/services/monitoring.scm \
%D%/services/networking.scm \
@@ -544,6 +546,7 @@ GNU_SYSTEM_MODULES = \
%D%/tests/nfs.scm \
%D%/tests/install.scm \
%D%/tests/mail.scm \
+ %D%/tests/message-broker.scm \
%D%/tests/messaging.scm \
%D%/tests/networking.scm \
%D%/tests/rsync.scm \
@@ -1136,10 +1139,15 @@ dist_patch_DATA = \
%D%/packages/patches/rpcbind-CVE-2017-8779.patch \
%D%/packages/patches/rtags-separate-rct.patch \
%D%/packages/patches/racket-store-checksum-override.patch \
+ %D%/packages/patches/ruby-coffee-rails-fix-rakefile.patch \
%D%/packages/patches/ruby-rubygems-276-for-ruby24.patch \
%D%/packages/patches/ruby-concurrent-ignore-broken-test.patch \
%D%/packages/patches/ruby-concurrent-test-arm.patch \
%D%/packages/patches/ruby-rack-ignore-failing-test.patch \
+ %D%/packages/patches/ruby-rspec-its-remove-rspec-gemspec.patch\
+ %D%/packages/patches/ruby-listen-patch-gemspec.patch \
+ %D%/packages/patches/ruby-listen-3.0.8-patch-gemspec.patch \
+ %D%/packages/patches/ruby-therubyracer-fix-gemspec.patch \
%D%/packages/patches/ruby-tzinfo-data-ignore-broken-test.patch\
%D%/packages/patches/rust-1.19-mrustc.patch \
%D%/packages/patches/rust-1.25-accept-more-detailed-gdb-lines.patch \
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index 07c6006c3b..4e4425b729 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -71,6 +71,7 @@
#:use-module (gnu packages guile)
#:use-module (gnu packages time)
#:use-module (gnu packages golang)
+ #:use-module (gnu packages java)
#:use-module (gnu packages jemalloc)
#:use-module (gnu packages language)
#:use-module (gnu packages libevent)
@@ -360,6 +361,69 @@ ElasticSearch server")
(home-page "https://github.com/patientslikeme/es_dump_restore")
(license license:expat)))
+(define-public elasticsearch-2.4.6
+ (package
+ (name "elasticsearch")
+ (version "2.4.6")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-"
+ version ".tar.gz"))
+ (sha256
+ (base32 "0vzw9kpyyyv3f1m5sy9zara6shc7xkgi5xm5qbzvfywijavlnzjz"))))
+ (build-system gnu-build-system)
+ (inputs
+ `(("jre" ,icedtea)
+ ("coreutils" ,coreutils)
+ ("inetutils" ,inetutils)
+ ("util-linux" ,util-linux)
+ ("grep" ,grep)))
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (delete 'check)
+ (delete 'configure)
+ (delete 'build)
+ (replace 'install
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out")))
+ (for-each
+ (lambda (dir)
+ (copy-recursively dir (string-append out "/" dir)
+ #:log (%make-void-port "w")))
+ '("bin" "config" "lib" "modules"))
+ (for-each
+ (lambda (dir)
+ (mkdir (string-append out "/" dir)))
+ '("plugins"))
+ (for-each
+ delete-file
+ (find-files
+ (string-append out "/lib")
+ (lambda (name stat)
+ (or (string-contains name "freebsd")
+ (string-contains name "solaris")))))
+ (wrap-program
+ (string-append out "/bin/elasticsearch")
+ `("PATH" = (,(string-append (assoc-ref inputs "util-linux")
+ "/bin")
+ ,(string-append (assoc-ref inputs "coreutils")
+ "/bin")
+ ,(string-append (assoc-ref inputs "inetutils")
+ "/bin")
+ ,(string-append (assoc-ref inputs "grep")
+ "/bin")))
+ `("JAVA_HOME" = (,(assoc-ref inputs "jre"))))
+ #t))))))
+ (home-page "")
+ (synopsis "")
+ (description "")
+ (license "")))
+
+(define-public elasticsearch elasticsearch-2.4.6)
+
(define-public leveldb
(package
(name "leveldb")
diff --git a/gnu/packages/javascript.scm b/gnu/packages/javascript.scm
index 8731a44927..c778683e26 100644
--- a/gnu/packages/javascript.scm
+++ b/gnu/packages/javascript.scm
@@ -449,3 +449,40 @@ to use, and is very similar to Lua. There is no need to interact with byzantine
C++ template mechanisms, or worry about marking and unmarking garbage collection
roots, or wrestle with obscure build systems.")
(license license:isc)))
+
+(define-public duktape
+ (package
+ (name "duktape")
+ (version "1.3.1")
+ (source
+ (origin
+ (method url-fetch)
+ ;; Use the GitHub source for ease of updating.
+ (uri (string-append "https://github.com/svaarala/duktape/releases/download/v"
+ version "/duktape-" version ".tar.xz"))
+ (sha256
+ (base32
+ "0rd9wz5716qhzqwwj26i2x5m8dd020rvaf2i08sa4jxrl6nk3cil"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:tests? #f ; Tests require many dependencies including v8.
+ #:phases
+ (modify-phases %standard-phases
+ (delete 'configure)
+ (delete 'build)
+ ;; Installing is simply copying source code files so they can be
+ ;; embedded elsewhere.
+ (replace 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (src (string-append out "/src")))
+ (install-file "src/duktape.c" src)
+ (install-file "src/duktape.h" src)))))))
+ (synopsis "Embeddable JavaScript engine")
+ (description
+ "Duktape is an embeddable Javascript engine, with a focus on portability
+and compact footprint. Duktape is easy to integrate into a C/C++ project: add
+@code{duktape.c}, @code{duktape.h}, and @code{duk_config.h} to your build, and
+use the Duktape API to call Ecmascript functions from C code and vice versa.")
+ (home-page "http://duktape.org")
+ (license license:expat)))
diff --git a/gnu/packages/patches/ruby-coffee-rails-fix-rakefile.patch b/gnu/packages/patches/ruby-coffee-rails-fix-rakefile.patch
new file mode 100644
index 0000000000..bd98812da7
--- /dev/null
+++ b/gnu/packages/patches/ruby-coffee-rails-fix-rakefile.patch
@@ -0,0 +1,20 @@
+diff --git a/Rakefile b/Rakefile
+index ae682dc..fdf146d 100644
+--- a/Rakefile
++++ b/Rakefile
+@@ -13,12 +13,12 @@ end
+ task default: :test
+
+ specname = "coffee-rails.gemspec"
+-deps = `git ls-files`.split("\n") - [specname]
++deps = `find . -type f -print0 |sort`.split("\n") - [specname]
+
+ file specname => deps do
+ files = ["CHANGELOG.md", "MIT-LICENSE", "README.md"] + `git ls-files -- lib`.split("\n")
+- test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
+- executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
++ test_files = `ls test/*`.split("\n")
++ executables = []
+
+ require 'erb'
+
diff --git a/gnu/packages/patches/ruby-listen-3.0.8-patch-gemspec.patch b/gnu/packages/patches/ruby-listen-3.0.8-patch-gemspec.patch
new file mode 100644
index 0000000000..e870c060a5
--- /dev/null
+++ b/gnu/packages/patches/ruby-listen-3.0.8-patch-gemspec.patch
@@ -0,0 +1,16 @@
+diff --git a/listen.gemspec b/listen.gemspec
+index ee1316e..067dca3 100644
+--- a/listen.gemspec
++++ b/listen.gemspec
+@@ -14,9 +14,8 @@ Gem::Specification.new do |s|
+ s.description = 'The Listen gem listens to file modifications and '\
+ 'notifies you about the changes. Works everywhere!'
+
+- s.files = `git ls-files -z`.split("\x0").select do |f|
+- /^(?:bin|lib)\// =~ f
+- end + %w(CHANGELOG.md CONTRIBUTING.md LICENSE.txt README.md)
++ s.files = `find bin lib -type f |sort`.split("\n") +
++ %w(CHANGELOG.md CONTRIBUTING.md LICENSE.txt README.md)
+
+ s.test_files = []
+ s.executable = 'listen'
diff --git a/gnu/packages/patches/ruby-listen-patch-gemspec.patch b/gnu/packages/patches/ruby-listen-patch-gemspec.patch
new file mode 100644
index 0000000000..dd4b190b3e
--- /dev/null
+++ b/gnu/packages/patches/ruby-listen-patch-gemspec.patch
@@ -0,0 +1,16 @@
+diff --git a/listen.gemspec b/listen.gemspec
+index 4e110b0..cda047b 100644
+--- a/listen.gemspec
++++ b/listen.gemspec
+@@ -14,9 +14,8 @@ Gem::Specification.new do |s|
+ s.description = 'The Listen gem listens to file modifications and '\
+ 'notifies you about the changes. Works everywhere!'
+
+- s.files = `git ls-files -z`.split("\x0").select do |f|
+- %r{^(?:bin|lib)\/} =~ f
+- end + %w(CHANGELOG.md CONTRIBUTING.md LICENSE.txt README.md)
++ s.files = `find bin lib -type f |sort`.split("\n") +
++ %w(CHANGELOG.md CONTRIBUTING.md LICENSE.txt README.md)
+
+ s.test_files = []
+ s.executable = 'listen'
diff --git a/gnu/packages/patches/ruby-rspec-its-remove-rspec-gemspec.patch b/gnu/packages/patches/ruby-rspec-its-remove-rspec-gemspec.patch
new file mode 100644
index 0000000000..901eb88d21
--- /dev/null
+++ b/gnu/packages/patches/ruby-rspec-its-remove-rspec-gemspec.patch
@@ -0,0 +1,22 @@
+diff --git a/Gemfile b/Gemfile
+index 9786991..bec005d 100644
+--- a/Gemfile
++++ b/Gemfile
+@@ -3,17 +3,6 @@ source 'https://rubygems.org'
+ # Specify your gem's dependencies in rspec-its.gemspec
+ gemspec
+
+-%w[rspec rspec-core rspec-expectations rspec-mocks rspec-support].each do |lib|
+- branch = ENV.fetch('BRANCH','3-1-maintenance')
+- library_path = File.expand_path("../../#{lib}", __FILE__)
+- if File.exist?(library_path)
+- gem lib, :path => library_path
+- else
+- gem lib, :git => "git://github.com/rspec/#{lib}.git",
+- :branch => branch
+- end
+-end
+-
+ # test coverage
+ # gem 'simplecov', :require => false
+
diff --git a/gnu/packages/patches/ruby-therubyracer-fix-gemspec.patch b/gnu/packages/patches/ruby-therubyracer-fix-gemspec.patch
new file mode 100644
index 0000000000..83787192d2
--- /dev/null
+++ b/gnu/packages/patches/ruby-therubyracer-fix-gemspec.patch
@@ -0,0 +1,16 @@
+diff --git a/therubyracer.gemspec b/therubyracer.gemspec
+index 5a6ace7..95e2a27 100644
+--- a/therubyracer.gemspec
++++ b/therubyracer.gemspec
+@@ -8,9 +8,8 @@ Gem::Specification.new do |gem|
+ gem.description = "Call JavaScript code and manipulate JavaScript objects from Ruby. Call Ruby code and manipulate Ruby objects from JavaScript."
+ gem.homepage = "http://github.com/cowboyd/therubyracer"
+
+- gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
+- gem.files = `git ls-files`.split("\n")
+- gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
++ gem.files = `find . -type f |sort`.split("\n")
++ gem.test_files = `find spec -type f |sort`.split("\n")
+ gem.name = "therubyracer"
+ gem.extensions = ["ext/v8/extconf.rb"]
+ gem.require_paths = ["lib", "ext"]
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index 9ef0654cb8..6972e79081 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -6051,9 +6051,10 @@ PEP8_PLUGIN('break_before_binary_operator'),"))
(string-append (getcwd) "/build/lib:"
(getenv "PYTHONPATH")))
(zero? (system* "py.test" "-v")))))))
+ (propagated-inputs
+ `(("python-flake8" ,python-flake8)))
(native-inputs
- `(("python-flake8" ,python-flake8)
- ("python-mock" ,python-mock)
+ `(("python-mock" ,python-mock)
("python-pep8" ,python-pep8)
("python-pycodestyle" ,python-pycodestyle)
("python-pytest" ,python-pytest)))
@@ -14997,3 +14998,859 @@ RFC 8265 and RFC 8266.")
(description "Simple decorator to set attributes of target function or
class in a @acronym{DRY, Don't Repeat Yourself} way.")
(license license:expat)))
+
+(define-public python-sybil
+ (package
+ (name "python-sybil")
+ (version "1.0.7")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "sybil" version))
+ (sha256
+ (base32
+ "13rdznw3fllmj5sy20bwi3ipzm6rv1dnji1yi01m91ig759jacw6"))))
+ (build-system python-build-system)
+ (arguments
+ '(#:tests? #f))
+ (propagated-inputs
+ `(;("python-coveralls" ,python-coveralls)
+ ("python-nose" ,python-nose)
+ ("python-pytest" ,python-pytest)))
+ (home-page "https://github.com/cjw296/sybil")
+ (synopsis
+ "Automated testing for the examples in your documentation.")
+ (description
+ "Automated testing for the examples in your documentation.")
+ (license license:expat)))
+
+(define-public python-sarge
+ (package
+ (name "python-sarge")
+ (version "0.1.5.post0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "sarge" version))
+ (sha256
+ (base32
+ "1c1ll7pys9vra5cfi8jxlgrgaql6c27l6inpy15aprgqhc4ck36s"))))
+ (build-system python-build-system)
+ (arguments
+ '(#:tests? #f))
+ (home-page "http://sarge.readthedocs.org/")
+ (synopsis
+ "A wrapper for subprocess which provides command pipeline functionality.")
+ (description
+ "A wrapper for subprocess which provides command pipeline functionality.")
+ (license license:bsd-3)))
+
+(define-public python-unidiff
+ (package
+ (name "python-unidiff")
+ (version "0.5.5")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "unidiff" version))
+ (sha256
+ (base32
+ "1g1501w0ac9plqxd6009ax5c0hi495sv5xnysm68p65njvxvb6lw"))))
+ (build-system python-build-system)
+ (home-page
+ "http://github.com/matiasb/python-unidiff")
+ (synopsis
+ "Unified diff parsing/metadata extraction library.")
+ (description
+ "Unified diff parsing/metadata extraction library.")
+ (license license:expat)))
+
+(define-public python-testfixtures
+ (package
+ (name "python-testfixtures")
+ (version "5.4.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "testfixtures" version))
+ (sha256
+ (base32
+ "1w581221qbsmc177n7xijqn7wghyaaxxlwd2p34vfcn4jnbfv2ik"))))
+ (build-system python-build-system)
+ (arguments
+ '(#:tests? #f))
+ (propagated-inputs
+ `(("python-coverage" ,python-coverage)
+ ;("python-coveralls" ,python-coveralls)
+ ("python-mock" ,python-mock)
+ ("python-pytest" ,python-pytest)
+ ;("python-pytest-django" ,python-pytest-django)
+ ("python-sybil" ,python-sybil)
+ ("python-zope-component" ,python-zope-component)))
+ (home-page
+ "https://github.com/Simplistix/testfixtures")
+ (synopsis
+ "A collection of helpers and mock objects for unit tests and doc tests.")
+ (description
+ "A collection of helpers and mock objects for unit tests and doc tests.")
+ (license license:expat)))
+
+(define-public python-pyprint
+ (package
+ (name "python-pyprint")
+ (version "0.2.6")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "PyPrint" version))
+ (sha256
+ (base32
+ "1qmhcz8n9rnxkj2ikcc208900yg4p9qglhw50br7carr1ca1q3ps"))))
+ (build-system python-build-system)
+ (arguments
+ '(#:tests? #f))
+ (propagated-inputs
+ `(("python-colorama" ,python-colorama)
+ ("python-termcolor" ,python-termcolor)))
+ (native-inputs
+ `(("python-pytest" ,python-pytest)))
+ (home-page "")
+ (synopsis
+ "A library providing printing facilities for python applications.")
+ (description
+ "A library providing printing facilities for python applications.")
+ (license #f)))
+
+(define-public python-libclang-py3
+ (package
+ (name "python-libclang-py3")
+ (version "3.9.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "libclang-py3" version))
+ (sha256
+ (base32
+ "0g2zw3mv8i4s9r3l70a5j3k2c09p9igvap0h6lfwf0w32jz8a65b"))))
+ (build-system python-build-system)
+ (home-page
+ "https://bitbucket.org/Anteru/python3-libclang")
+ (synopsis "Python3 bindings for libclang")
+ (description "Python3 bindings for libclang")
+ (license #f)))
+
+(define-public python-coala-utils
+ (package
+ (name "python-coala-utils")
+ (version "0.6.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "coala_utils" version))
+ (sha256
+ (base32
+ "0f2bli6acqjz3i5p6a5ykg9r2hkcaxcpq5q36a2jv30wdjkk31z1"))))
+ (build-system python-build-system)
+ (arguments
+ '(#:tests? #f))
+ (propagated-inputs
+ `(("python-appdirs" ,python-appdirs)
+ ("python-pyprint" ,python-pyprint)
+ ("python-testfixtures" ,python-testfixtures)))
+ (home-page
+ "https://gitlab.com/coala/coala-utils")
+ (synopsis "A collection of coala utilities.")
+ (description "A collection of coala utilities.")
+ (license #f)))
+
+(define-public python-dependency-management
+ (package
+ (name "python-dependency-management")
+ (version "0.4.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "dependency_management" version))
+ (sha256
+ (base32
+ "0q5axi5vzla6vfgs8r5mxczih3w0vipa17mqkx2zcirxvy131i7h"))))
+ (build-system python-build-system)
+ (arguments
+ '(#:tests? #f))
+ (propagated-inputs
+ `(("python-coala-utils" ,python-coala-utils)
+ ("python-sarge" ,python-sarge)))
+ (home-page "https://gitlab.com/coala/package_manager")
+ (synopsis "coala Dependency Management")
+ (description "coala Dependency Management")
+ (license #f)))
+
+(define-public python-colorlog
+ (package
+ (name "python-colorlog")
+ (version "3.1.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "colorlog" version))
+ (sha256
+ (base32
+ "0i21sd6pggr2gqza41vyq2rqyb552wf5iwl4bc16i7kqislbd53z"))))
+ (build-system python-build-system)
+ (arguments
+ '(#:tests? #f))
+ (propagated-inputs
+ `(("python-colorama" ,python-colorama)))
+ (home-page
+ "https://github.com/borntyping/python-colorlog")
+ (synopsis "Log formatting with colors!")
+ (description "Log formatting with colors!")
+ (license #f)))
+
+(define-public coala
+ (package
+ (name "coala")
+ (version "0.11.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "coala" version))
+ (sha256
+ (base32
+ "03mz2alvjf9aki5cpjl9167bd5kw0aqp8yml08lb5170gpsfyjyd"))))
+ (build-system python-build-system)
+ (arguments
+ '(#:tests? #f
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'patch-requires
+ (lambda _
+ (for-each (lambda (requirement)
+ (substitute* "requirements.txt"
+ (((string-append requirement "~="))
+ (string-append requirement ">="))))
+ '("testfixtures"
+ "libclang-py3"
+ "colorlog"))
+ #t)))))
+ (propagated-inputs
+ `(("python-appdirs" ,python-appdirs)
+ ("python-coala-utils" ,python-coala-utils)
+ ("python-colorlog" ,python-colorlog)
+ ("python-dependency-management"
+ ,python-dependency-management)
+ ("python-libclang-py3" ,python-libclang-py3)
+ ("python-packaging" ,python-packaging)
+ ("python-pygments" ,python-pygments)
+ ("python-pyprint" ,python-pyprint)
+ ("python-requests" ,python-requests)
+ ("python-setuptools" ,python-setuptools)
+ ("python-testfixtures" ,python-testfixtures)
+ ("python-unidiff" ,python-unidiff)))
+ (home-page "http://coala.io/")
+ (synopsis
+ "Linting and Fixing Code for All Languages")
+ (description
+ "Linting and Fixing Code for All Languages")
+ (license #f)))
+
+(define-public python-autoflake
+ (package
+ (name "python-autoflake")
+ (version "1.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "autoflake" version))
+ (sha256
+ (base32
+ "0cfidqg3msagg92l1hbc644nih0n615c5p9ab1s4yr82g956hkd7"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-pyflakes" ,python-pyflakes)))
+ (home-page "https://github.com/myint/autoflake")
+ (synopsis
+ "Removes unused imports and unused variables")
+ (description
+ "Removes unused imports and unused variables")
+ (license #f)))
+
+(define-public python-cmakelint
+ (package
+ (name "python-cmakelint")
+ (version "1.3.4.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "cmakelint" version))
+ (sha256
+ (base32
+ "1fb7jlkp6bxx2i80g0z4xl11i927lh74v9bbnkgv9raafqphj9pg"))))
+ (build-system python-build-system)
+ (home-page "https://github.com/richq/cmake-lint")
+ (synopsis "Static code checker for CMake files")
+ (description
+ "Static code checker for CMake files")
+ (license license:asl2.0)))
+
+(define-public python-cppclean
+ (package
+ (name "python-cppclean")
+ (version "0.12")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "cppclean" version))
+ (sha256
+ (base32
+ "05p0qsmrn3zhp33rhdys0ddn8hql6z25sdvbnccqwps8jai5wq2r"))))
+ (build-system python-build-system)
+ (home-page "https://github.com/myint/cppclean")
+ (synopsis
+ "Find problems in C++ source that slow development of large code bases.")
+ (description
+ "Find problems in C++ source that slow development of large code bases.")
+ (license #f)))
+
+(define-public python-cpplint
+ (package
+ (name "python-cpplint")
+ (version "1.3.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "cpplint" version))
+ (sha256
+ (base32
+ "06b7jf9vii2rp8q05h5h6jsrflrwpv2bd5chrj2drij476f16xk8"))))
+ (build-system python-build-system)
+ (home-page
+ "http://en.wikipedia.org/wiki/Cpplint")
+ (synopsis
+ "An automated checker to make sure a C++ file follows Google's C++ style guide")
+ (description
+ "An automated checker to make sure a C++ file follows Google's C++ style guide")
+ (license #f)))
+
+(define-public python-dennis
+ (package
+ (name "python-dennis")
+ (version "0.9")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "dennis" version))
+ (sha256
+ (base32
+ "0116hbz6dakwcafcij5hr553gwf7wmg9q1mwmrfwc0vxvbajv54c"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-click" ,python-click)
+ ("python-polib" ,python-polib)))
+ (native-inputs
+ `(("python-pytest" ,python-pytest)))
+ (home-page "http://github.com/willkg/dennis")
+ (synopsis
+ "Utilities for working with PO and POT files to ease development and improve localization quality")
+ (description
+ "Utilities for working with PO and POT files to ease development and improve localization quality")
+ (license #f)))
+
+(define-public python-eradicate
+ (package
+ (name "python-eradicate")
+ (version "0.2.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "eradicate" version))
+ (sha256
+ (base32
+ "092zmck919bn6sl31ixrzhn88g9nvhwzmwzpq8dzgn6c8k2h3bzr"))))
+ (build-system python-build-system)
+ (home-page "https://github.com/myint/eradicate")
+ (synopsis "Removes commented-out code.")
+ (description "Removes commented-out code.")
+ (license #f)))
+
+(define-public python-guess-language-spirit
+ (package
+ (name "python-guess-language-spirit")
+ (version "0.5.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "guess_language-spirit" version ".tar.bz2"))
+ (sha256
+ (base32
+ "1k4j0xldg741a09lin7iy6sqrah5kr2zcpq5kfvd3gvb4iq09cm9"))))
+ (build-system python-build-system)
+ (home-page
+ "https://bitbucket.org/spirit/guess_language")
+ (synopsis "Guess the natural language of a text")
+ (description
+ "Guess the natural language of a text")
+ (license #f)))
+
+(define-public python-template-remover
+ (package
+ (name "python-template-remover")
+ (version "0.1.9")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "template-remover" version))
+ (sha256
+ (base32
+ "0hgzynfi9z1qjk7qz4nd1620w9m1rjpmd4xjxp0zmbsn7zk1q3s8"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-docopt" ,python-docopt)))
+ (native-inputs
+ `(("python-nose" ,python-nose)))
+ (home-page
+ "http://github.com/deezer/template-remover")
+ (synopsis
+ "Remove the template markup from html files")
+ (description
+ "Remove the template markup from html files")
+ (license #f)))
+
+(define-public python-html-linter
+ (package
+ (name "python-html-linter")
+ (version "0.4.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "html-linter" version))
+ (sha256
+ (base32
+ "148ijk0hisb9b049xgc72gxdil3f0ichkpigasi11j1ggxkssb9l"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-docopt" ,python-docopt)
+ ("python-template-remover" ,python-template-remover)))
+ (native-inputs
+ `(("python-nose" ,python-nose)))
+ (home-page "http://github.com/sk-/html-linter")
+ (synopsis
+ "Lints an HTML5 file using Google's style guide")
+ (description
+ "Lints an HTML5 file using Google's style guide")
+ (license #f)))
+
+(define-public python-mypy-lang
+ (package
+ (name "python-mypy-lang")
+ (version "0.5.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "mypy-lang" version))
+ (sha256
+ (base32
+ "0ibwh1v6f7a0w4hpd3ydw9k7ph74b2lcfwwlli9pzby0vzwg2jq5"))))
+ (build-system python-build-system)
+ (home-page "")
+ (synopsis
+ "Dummy to remind people to switch to 'pip install mypy'")
+ (description
+ "Dummy to remind people to switch to 'pip install mypy'")
+ (license #f)))
+
+(define-public python-proselint
+ (package
+ (name "python-proselint")
+ (version "0.8.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "proselint" version))
+ (sha256
+ (base32
+ "1g8vx04gmv0agmggz1ml5vydfppqvl8dzjvqm6vqw5rzafa89m08"))))
+ (build-system python-build-system)
+ (arguments
+ '(#:tests? #f))
+ (propagated-inputs
+ `(("python-six" ,python-six)
+ ("python-future" ,python-future)
+ ("python-click" ,python-click)))
+ (home-page
+ "http://github.com/amperser/proselint")
+ (synopsis "A linter for prose")
+ (description "A linter for prose")
+ (license license:bsd-3)))
+
+(define-public python-pydocstyle
+ (package
+ (name "python-pydocstyle")
+ (version "2.1.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "pydocstyle" version))
+ (sha256
+ (base32
+ "15ssv8l6cvrmzgwcdzw76rnl4np3qf0dbwr1wsx76y0hc7lwsnsd"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-configparser" ,python-configparser)
+ ("python-six" ,python-six)
+ ("python-snowballstemmer"
+ ,python-snowballstemmer)))
+ (home-page
+ "https://github.com/PyCQA/pydocstyle/")
+ (synopsis "Python docstring style checker")
+ (description "Python docstring style checker")
+ (license license:expat)))
+
+(define-public python-pyroma
+ (package
+ (name "python-pyroma")
+ (version "2.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "pyroma" version))
+ (sha256
+ (base32
+ "0ncnmrqs19jma2q5yz1sh0lcllvg8m96p78bxm50k6bzfc52h07x"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-docutils" ,python-docutils)))
+ (home-page "https://github.com/regebro/pyroma")
+ (synopsis
+ "Test your project's packaging friendliness")
+ (description
+ "Test your project's packaging friendliness")
+ (license license:expat)))
+
+(define-public python-restructuredtext-lint
+ (package
+ (name "python-restructuredtext-lint")
+ (version "1.1.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "restructuredtext_lint" version))
+ (sha256
+ (base32
+ "0ds05cc5qx1gagwy3cvr93pckvgsvi3zwhgh14l2cari9jlak364"))))
+ (build-system python-build-system)
+ (arguments
+ '(#:tests? #f))
+ (propagated-inputs
+ `(("python-docutils"
+ ,python-docutils)))
+ (home-page
+ "https://github.com/twolfson/restructuredtext-lint")
+ (synopsis "reStructuredText linter")
+ (description "reStructuredText linter")
+ (license #f)))
+
+(define-public python-rstcheck
+ (package
+ (name "python-rstcheck")
+ (version "3.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "rstcheck" version))
+ (sha256
+ (base32
+ "1pr1zcd77fj97q6kiz5rfs0nrz1mjwijr4jylcvfk9ca6cyqjnhm"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-docutils"
+ ,python-docutils)))
+ (home-page "https://github.com/myint/rstcheck")
+ (synopsis
+ "Checks syntax of reStructuredText and code blocks nested within it")
+ (description
+ "Checks syntax of reStructuredText and code blocks nested within it")
+ (license #f)))
+
+(define-public python-dparse
+ (package
+ (name "python-dparse")
+ (version "0.2.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "dparse" version))
+ (sha256
+ (base32
+ "10pm9q5r97828rml3pzi428ihf2cpaiw25hssgbax0zxv1sr37vw"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-packaging" ,python-packaging)
+ ("python-pyyaml" ,python-pyyaml)
+ ("python-six" ,python-six)))
+ (native-inputs
+ `(("python-pytest" ,python-pytest)
+ ("python-pytest-runner" ,python-pytest-runner)))
+ (home-page "https://github.com/jayfk/dparse")
+ (synopsis "A parser for Python dependency files")
+ (description
+ "A parser for Python dependency files")
+ (license license:expat)))
+
+(define-public python-safety
+ (package
+ (name "python-safety")
+ (version "1.7.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "safety" version))
+ (sha256
+ (base32
+ "0yipd9bpxs600dckkr91i51hscs5x9qidi1nbs1367brmmv4n37z"))))
+ (build-system python-build-system)
+ (arguments
+ '(#:tests? #f))
+ (propagated-inputs
+ `(("python-click" ,python-click)
+ ("python-dparse" ,python-dparse)
+ ("python-packaging" ,python-packaging)
+ ("python-requests" ,python-requests)))
+ (home-page "https://github.com/pyupio/safety")
+ (synopsis
+ "Safety checks your installed dependencies for known security vulnerabilities.")
+ (description
+ "Safety checks your installed dependencies for known security vulnerabilities.")
+ (license license:expat)))
+
+(define-public python-scspell3k
+ (package
+ (name "python-scspell3k")
+ (version "2.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "scspell3k" version))
+ (sha256
+ (base32
+ "02dp70ikvb2yw839cycjksyi1izvfjlwjps74fh3279asa59m2d9"))))
+ (build-system python-build-system)
+ (home-page "https://github.com/myint/scspell")
+ (synopsis
+ "A conservative interactive spell checker for source code.")
+ (description
+ "A conservative interactive spell checker for source code.")
+ (license #f)))
+
+(define-public python-ansicolor
+ (package
+ (name "python-ansicolor")
+ (version "0.2.6")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "ansicolor" version))
+ (sha256
+ (base32
+ "078zsfx1wchz9l9brp5nz623adydwqxabg4zd4qyszfxp43inzni"))))
+ (build-system python-build-system)
+ (home-page
+ "https://github.com/numerodix/ansicolor")
+ (synopsis
+ "A library to produce ansi color output and colored highlighting and diffing")
+ (description
+ "A library to produce ansi color output and colored highlighting and diffing")
+ (license #f)))
+
+(define-public python-vim-vint
+ (package
+ (name "python-vim-vint")
+ (version "0.3.18")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "vim-vint" version))
+ (sha256
+ (base32
+ "0w038bgic7rdim60rhwrx3gwj33lgmhad8shpvcl2iy6fy8rpp7y"))))
+ (build-system python-build-system)
+ (arguments
+ '(#:tests? #f))
+ (propagated-inputs
+ `(("python-ansicolor" ,python-ansicolor)
+ ("python-chardet" ,python-chardet)
+ ("python-pyyaml" ,python-pyyaml)))
+ (home-page "https://github.com/Kuniwak/vint")
+ (synopsis "Lint tool for Vim script Language")
+ (description "Lint tool for Vim script Language")
+ (license #f)))
+
+(define-public python-vulture
+ (package
+ (name "python-vulture")
+ (version "0.26")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "vulture" version))
+ (sha256
+ (base32
+ "1884vymmlwnpw2naam5xn3cn7w74sn24yvpkf9n567sb3kkzmc49"))))
+ (build-system python-build-system)
+ (arguments
+ '(#:tests? #f))
+ (home-page
+ "https://github.com/jendrikseipp/vulture")
+ (synopsis "Find dead code")
+ (description "Find dead code")
+ (license license:expat)))
+
+(define-public python-pathspec
+ (package
+ (name "python-pathspec")
+ (version "0.5.5")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "pathspec" version))
+ (sha256
+ (base32
+ "1lyhyc6ps4imcj4f99c3njqf3wk2c0f6szrhkqhp8rp7pg8rbi3j"))))
+ (build-system python-build-system)
+ (home-page
+ "https://github.com/cpburnz/python-path-specification")
+ (synopsis
+ "Utility library for gitignore style pattern matching of file paths.")
+ (description
+ "Utility library for gitignore style pattern matching of file paths.")
+ (license #f)))
+
+(define-public python-yamllint
+ (package
+ (name "python-yamllint")
+ (version "1.11.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "yamllint" version))
+ (sha256
+ (base32
+ "114nbzy8s9sr9czxx7g64p8naf46zgk2cab0df00l3sz6bmcmkq5"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-pathspec" ,python-pathspec)
+ ("python-pyyaml" ,python-pyyaml)))
+ (home-page
+ "https://github.com/adrienverge/yamllint")
+ (synopsis "A linter for YAML files.")
+ (description "A linter for YAML files.")
+ (license #f)))
+
+(define-public python-munkres3
+ (package
+ (name "python-munkres3")
+ (version "1.0.5.5")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "munkres3" version))
+ (sha256
+ (base32
+ "1kyc4nqrff1zri6ky96s4msls7263jy8rp7hid2q1dcnjb9i1hgp"))))
+ (build-system python-build-system)
+ (home-page
+ "http://github.com/datapublica/munkres")
+ (synopsis
+ "munkres algorithm for the Assignment Problem. Python 3 port.")
+ (description
+ "munkres algorithm for the Assignment Problem. Python 3 port.")
+ (license #f)))
+
+(define-public coala-bears
+ (package
+ (name "coala-bears")
+ (version "0.11.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "coala-bears" version))
+ (sha256
+ (base32
+ "08jlf9jxch1i27kgfmqhnn8qdxzbi2v2l8fwpnc621s6br5k13wl"))))
+ (build-system python-build-system)
+ (arguments
+ '(#:tests? #f
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'patch-requires
+ (lambda _
+ (for-each (lambda (requirement)
+ (substitute* "bear-requirements.txt"
+ (((string-append requirement "(=|~)="))
+ (string-append requirement ">="))))
+ '("autoflake"
+ "click"
+ "eradicate"
+ "html-linter"
+ "mypy-lang"
+ "proselint"
+ "pydocstyle"
+ "pyflakes"
+ "pyroma"
+ "radon"
+ "restructuredtext-lint"
+ "rstcheck"
+ "safety"
+ "vulture"
+ "yamllint"
+ "yapf"))
+ #t)))))
+ (propagated-inputs
+ `(;;("python-aenum" ,python-aenum)
+ ;; ("python-apertium-lint" ,python-apertium-lint)
+ ("python-autoflake" ,python-autoflake)
+ ("python-autopep8" ,python-autopep8)
+ ("python-bandit" ,python-bandit)
+ ("python-click" ,python-click)
+ ("python-cmakelint" ,python-cmakelint)
+ ("coala" ,coala)
+ ("python-cppclean" ,python-cppclean)
+ ("python-cpplint" ,python-cpplint)
+ ("python-dennis" ,python-dennis)
+ ;; ("python-docutils-ast-writer"
+ ;; ,python-docutils-ast-writer)
+ ("python-eradicate" ,python-eradicate)
+ ("python-guess-language-spirit"
+ ,python-guess-language-spirit)
+ ("python-html-linter" ,python-html-linter)
+ ;; ("python-httpolice" ,python-httpolice)
+ ("python-isort" ,python-isort)
+ ;; ("python-memento-client" ,python-memento-client)
+ ("python-munkres3" ,python-munkres3)
+ ("python-mypy-lang" ,python-mypy-lang)
+ ("python-nbformat" ,python-nbformat)
+ ("python-nltk" ,python-nltk)
+ ("python-proselint" ,python-proselint)
+ ("python-pycodestyle" ,python-pycodestyle)
+ ("python-pydocstyle" ,python-pydocstyle)
+ ("python-pyflakes" ,python-pyflakes)
+ ("python-pylint" ,python-pylint)
+ ("python-pyroma" ,python-pyroma)
+ ("python-pyyaml" ,python-pyyaml)
+ ("python-radon" ,python-radon)
+ ("python-restructuredtext-lint"
+ ,python-restructuredtext-lint)
+ ("python-rstcheck" ,python-rstcheck)
+ ("python-safety" ,python-safety)
+ ("python-scspell3k" ,python-scspell3k)
+ ("python-vim-vint" ,python-vim-vint)
+ ("python-vulture" ,python-vulture)
+ ("python-yamllint" ,python-yamllint)
+ ("python-yapf" ,python-yapf)
+ ))
+ (home-page "http://coala.rtfd.org/")
+ (synopsis
+ "Bears for coala (Code Analysis Application)")
+ (description
+ "Bears for coala (Code Analysis Application)")
+ (license #f)))
diff --git a/gnu/packages/rabbitmq.scm b/gnu/packages/rabbitmq.scm
new file mode 100644
index 0000000000..70d3b5eebd
--- /dev/null
+++ b/gnu/packages/rabbitmq.scm
@@ -0,0 +1,93 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages rabbitmq)
+ #:use-module ((guix licenses) #:prefix license:)
+ #:use-module (guix utils)
+ #:use-module (guix build-system gnu)
+ #:use-module (guix download)
+ #:use-module (guix packages)
+ #:use-module (gnu packages base)
+ #:use-module (gnu packages compression)
+ #:use-module (gnu packages xml)
+ #:use-module (gnu packages rsync)
+ #:use-module (gnu packages erlang)
+ #:use-module (gnu packages elixir)
+ #:use-module (gnu packages python))
+
+(define-public rabbitmq
+ (package
+ (name "rabbitmq")
+ (version "3.7.7")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append
+ "https://github.com/rabbitmq/rabbitmq-server/releases/download/v"
+ version
+ "/rabbitmq-server-" version ".tar.xz"))
+ (file-name (string-append name "-" version ".tar.xz"))
+ (sha256
+ (base32
+ "0cal4ss981i5af7knjkz3jqmz25nd4pfppay163q6xk2llxrcj9m"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'patch-source
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* "deps/rabbit_common/src/vm_memory_monitor.erl"
+ (("getconf") (string-append (assoc-ref inputs "glibc")
+ "/bin/getconf")))
+ (substitute* "deps/rabbit/src/rabbit_disk_monitor.erl"
+ (("os:find_executable\\(\"df\"\\)")
+ (string-append "\"" (which "df") "\"")))
+ #t))
+ (delete 'configure)
+ (delete 'check)
+ (add-after 'install 'patch-scripts
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out")))
+ (substitute* (string-append out "/sbin/rabbitmq-server")
+ (("uname") (which "uname"))
+ (("mkdir") (which "mkdir"))
+ (("cp ") (string-append (which "cp") " "))
+ (("\\$\\{ERL\\_DIR\\}") (string-append (dirname (which "erl"))
+ "/"))
+ (("dirname") (which "dirname")))
+ (substitute* (string-append out "/sbin/rabbitmq-env")
+ (("dirname") (which "dirname"))
+ (("\\$\\{ERL\\_DIR\\}") (string-append (dirname (which "erl"))
+ "/"))
+ (("\\| tr") (string-append "| " (which "tr")))
+ (("basename") (which "basename"))
+ (("sed") (which "sed")))
+ #t))))
+ #:make-flags
+ (list (string-append "RMQ_ERLAPP_DIR=" (assoc-ref %outputs "out")))))
+ (native-inputs
+ `(("erlang" ,erlang)
+ ("elixir" ,elixir)
+ ("python" ,python-wrapper)
+ ("libxslt" ,libxslt)
+ ("rsync" ,rsync)
+ ("glibc",glibc)
+ ("zip" ,zip)))
+ (home-page "http://www.rabbitmq.com/")
+ (synopsis "TODO")
+ (description "TODO")
+ (license "TODO")))
+
diff --git a/gnu/packages/rails.scm b/gnu/packages/rails.scm
index 5348d914cf..84d735c465 100644
--- a/gnu/packages/rails.scm
+++ b/gnu/packages/rails.scm
@@ -21,6 +21,7 @@
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix download)
#:use-module (guix packages)
+ #:use-module (gnu packages)
#:use-module (gnu packages ruby)
#:use-module (guix build-system ruby))
@@ -64,6 +65,41 @@ migration.")
(home-page "https://github.com/rails/spring")
(license license:expat)))
+(define-public ruby-spring-watcher-listen
+ (package
+ (name "ruby-spring-watcher-listen")
+ (version "2.0.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "spring-watcher-listen" version))
+ (sha256
+ (base32
+ "16gjqbhj3bkambafziza4pbw6g4zvh8z17lj87m8r90pgzcp93sj"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f ; circular dependency with rails?
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'check 'fix-gemfile
+ (lambda _
+ (substitute* "Gemfile"
+ (("^gem \\\"spring.*") "gem 'spring'\ngem 'listen'\n"))
+ #t)))))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-activesupport" ,ruby-activesupport)))
+ (propagated-inputs
+ `(("ruby-listen" ,ruby-listen)
+ ("ruby-spring" ,ruby-spring)))
+ (synopsis
+ "Makes spring watch files using the listen gem.")
+ (description
+ "Makes spring watch files using the listen gem.")
+ (home-page
+ "https://github.com/jonleighton/spring-watcher-listen")
+ (license license:expat)))
+
(define-public ruby-debug-inspector
(package
(name "ruby-debug-inspector")
@@ -93,3 +129,592 @@ API.")
(home-page
"https://github.com/banister/debug_inspector")
(license license:expat)))
+
+(define-public ruby-activemodel
+ (package
+ (name "ruby-activemodel")
+ (version "5.2.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "activemodel" version))
+ (sha256
+ (base32
+ "043nnxaf3cfq8jijls0jh1bg3a8v5zd9slc62zc2acp2n2wkjnd4"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f))
+ (propagated-inputs
+ `(("ruby-activesupport" ,ruby-activesupport)))
+ (synopsis
+ "A toolkit for building modeling frameworks like Active Record. Rich support for attributes, callbacks, validations, serialization, internationalization, and testing.")
+ (description
+ "This package provides a toolkit for building modeling frameworks like Active Record. Rich support for attributes, callbacks, validations, serialization, internationalization, and testing.")
+ (home-page "http://www.rubyonrails.org")
+ (license license:expat)))
+
+(define-public ruby-activerecord
+ (package
+ (name "ruby-activerecord")
+ (version "5.2.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "activerecord" version))
+ (sha256
+ (base32
+ "0pc7cycvhzjpw0swil2inka6c0fvcxhln793czp52pidg0654g7g"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f))
+ (propagated-inputs
+ `(("ruby-activemodel" ,ruby-activemodel)
+ ("ruby-activesupport" ,ruby-activesupport)
+ ("ruby-arel" ,ruby-arel)))
+ (synopsis
+ "Databases on Rails. Build a persistent domain model by mapping database tables to Ruby classes. Strong conventions for associations, validations, aggregations, migrations, and testing come baked-in.")
+ (description
+ "Databases on Rails. Build a persistent domain model by mapping database tables to Ruby classes. Strong conventions for associations, validations, aggregations, migrations, and testing come baked-in.")
+ (home-page "http://www.rubyonrails.org")
+ (license license:expat)))
+
+(define-public ruby-rails-html-sanitizer
+ (package
+ (name "ruby-rails-html-sanitizer")
+ (version "1.0.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "rails-html-sanitizer" version))
+ (sha256
+ (base32
+ "138fd86kv073zqfx0xifm646w6bgw2lr8snk16lknrrfrss8xnm7"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; tests not included
+ (propagated-inputs
+ `(("ruby-loofah" ,ruby-loofah)))
+ (synopsis
+ "HTML sanitization for Rails applications")
+ (description
+ "HTML sanitization for Rails applications")
+ (home-page
+ "https://github.com/rails/rails-html-sanitizer")
+ (license license:expat)))
+
+(define-public ruby-rails-dom-testing
+ (package
+ (name "ruby-rails-dom-testing")
+ (version "2.0.2")
+ (source
+ (origin
+ (method url-fetch)
+ ;; The gem does not include a Rakefile, so we fetch the tarball from
+ ;; Github.
+ (uri (string-append "https://github.com/rails/rails-dom-testing/archive/v"
+ version ".tar.gz"))
+ (file-name (string-append name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ "1bjc0mm4hc2xrq0066q7kbgzzmdn1vdnsv08xwy90vf2b6x70lxf"))))
+ (build-system ruby-build-system)
+ (native-inputs
+ `(("bundler" ,bundler)))
+ (propagated-inputs
+ `(("ruby-activesupport" ,ruby-activesupport)
+ ("ruby-nokogiri" ,ruby-nokogiri)))
+ (synopsis
+ " This gem can compare doms and assert certain elements exists in doms using Nokogiri. ")
+ (description
+ " This gem can compare doms and assert certain elements exists in doms using Nokogiri. ")
+ (home-page
+ "https://github.com/rails/rails-dom-testing")
+ (license license:expat)))
+
+(define-public ruby-actionview
+ (package
+ (name "ruby-actionview")
+ (version "5.2.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "actionview" version))
+ (sha256
+ (base32
+ "0dxanjs7ngpny4ig7dg93ywmg9ljswzg8risdlff6ag8fzvsnidf"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; tests not included
+ (propagated-inputs
+ `(("ruby-activesupport" ,ruby-activesupport)
+ ("ruby-builder" ,ruby-builder)
+ ("ruby-erubi" ,ruby-erubi)
+ ("ruby-rails-dom-testing"
+ ,ruby-rails-dom-testing)
+ ("ruby-rails-html-sanitizer"
+ ,ruby-rails-html-sanitizer)))
+ (synopsis
+ "Simple, battle-tested conventions and helpers for building web pages.")
+ (description
+ "Simple, battle-tested conventions and helpers for building web pages.")
+ (home-page "http://www.rubyonrails.org")
+ (license license:expat)))
+
+(define-public ruby-actionpack
+ (package
+ (name "ruby-actionpack")
+ (version "5.2.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "actionpack" version))
+ (sha256
+ (base32
+ "19zv9ix9iwpd8dxi5hyxgwrc1gh0fvx0a2vjhmic8dn8six41f4f"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; tests not included
+ (propagated-inputs
+ `(("ruby-actionview" ,ruby-actionview)
+ ("ruby-activesupport" ,ruby-activesupport)
+ ("ruby-rack" ,ruby-rack)
+ ("ruby-rack-test" ,ruby-rack-test)
+ ("ruby-rails-dom-testing"
+ ,ruby-rails-dom-testing)
+ ("ruby-rails-html-sanitizer"
+ ,ruby-rails-html-sanitizer)))
+ (synopsis
+ "Web apps on Rails. Simple, battle-tested conventions for building and testing MVC web applications. Works with any Rack-compatible server.")
+ (description
+ "Web apps on Rails. Simple, battle-tested conventions for building and testing MVC web applications. Works with any Rack-compatible server.")
+ (home-page "http://www.rubyonrails.org")
+ (license license:expat)))
+
+(define-public ruby-actioncable
+ (package
+ (name "ruby-actioncable")
+ (version "5.2.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "actioncable" version))
+ (sha256
+ (base32
+ "17vdxn0afi5rfnbs09nl0m0cyj7yvpi445bmi8pkmzbaqzqkq3ff"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; tests not included
+ (propagated-inputs
+ `(("ruby-actionpack" ,ruby-actionpack)
+ ("ruby-nio4r" ,ruby-nio4r)
+ ("ruby-websocket-driver" ,ruby-websocket-driver)))
+ (synopsis
+ "Structure many real-time application concerns into channels over a single WebSocket connection.")
+ (description
+ "Structure many real-time application concerns into channels over a single WebSocket connection.")
+ (home-page "http://rubyonrails.org")
+ (license license:expat)))
+
+(define-public ruby-activejob
+ (package
+ (name "ruby-activejob")
+ (version "5.2.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "activejob" version))
+ (sha256
+ (base32
+ "1m4l7z08cx1lybfswfggy7y1rxnwr6gi15h0g9kkkkvmmn6klf3r"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f))
+ (propagated-inputs
+ `(("ruby-activesupport" ,ruby-activesupport)
+ ("ruby-globalid" ,ruby-globalid)))
+ (synopsis
+ "Declare job classes that can be run by a variety of queueing backends.")
+ (description
+ "Declare job classes that can be run by a variety of queueing backends.")
+ (home-page "http://www.rubyonrails.org")
+ (license license:expat)))
+
+(define-public ruby-activestorage
+ (package
+ (name "ruby-activestorage")
+ (version "5.2.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "activestorage" version))
+ (sha256
+ (base32
+ "0wncr3h94jsjmmqqmmips9vgy2kf1zhb96rlv5fbrgqplfhvpyag"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:tests? #f))
+ (propagated-inputs
+ `(("ruby-actionpack" ,ruby-actionpack)
+ ("ruby-activerecord" ,ruby-activerecord)
+ ("ruby-marcel" ,ruby-marcel)))
+ (synopsis
+ "Attach cloud and local files in Rails applications.")
+ (description
+ "Attach cloud and local files in Rails applications.")
+ (home-page "http://rubyonrails.org")
+ (license license:expat)))
+
+(define-public ruby-actionmailer
+ (package
+ (name "ruby-actionmailer")
+ (version "5.2.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "actionmailer" version))
+ (sha256
+ (base32
+ "0h1nqg47jap0wzp0dhlnck4xjijfvdfw49aipjp8y2ihdpvyqrx6"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; tests not included
+ (propagated-inputs
+ `(("ruby-actionpack" ,ruby-actionpack)
+ ("ruby-actionview" ,ruby-actionview)
+ ("ruby-activejob" ,ruby-activejob)
+ ("ruby-mail" ,ruby-mail)
+ ("ruby-rails-dom-testing"
+ ,ruby-rails-dom-testing)))
+ (synopsis
+ "Email on Rails. Compose, deliver, receive, and test emails using the familiar controller/view pattern. First-class support for multipart email and attachments.")
+ (description
+ "Email on Rails. Compose, deliver, receive, and test emails using the familiar controller/view pattern. First-class support for multipart email and attachments.")
+ (home-page "http://www.rubyonrails.org")
+ (license license:expat)))
+
+(define-public ruby-discard
+ (package
+ (name "ruby-discard")
+ (version "1.0.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "discard" version))
+ (sha256
+ (base32
+ "1vyxhy7yz6l6kkys65kd7b5lj79ajvh495qqhvzn60wlz2dpap7r"))))
+ (build-system ruby-build-system)
+ (propagated-inputs
+ `(("ruby-activerecord" ,ruby-activerecord)))
+ (synopsis
+ "Allows marking ActiveRecord objects as discarded, and provides scopes for filtering.")
+ (description
+ "Allows marking ActiveRecord objects as discarded, and provides scopes for filtering.")
+ (home-page
+ "https://github.com/jhawthorn/discard")
+ (license license:expat)))
+
+(define-public ruby-railties
+ (package
+ (name "ruby-railties")
+ (version "5.2.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "railties" version))
+ (sha256
+ (base32
+ "19y343dvb7vih82q2ssyhp1cirmp5sp1vpw4k5zmd1bxxkjix9qv"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; tests not included
+ (propagated-inputs
+ `(("ruby-actionpack" ,ruby-actionpack)
+ ("ruby-activesupport" ,ruby-activesupport)
+ ("ruby-method-source" ,ruby-method-source)
+ ("ruby-thor" ,ruby-thor)))
+ (synopsis
+ "Rails internals: application bootup, plugins, generators, and rake tasks.")
+ (description
+ "Rails internals: application bootup, plugins, generators, and rake tasks.")
+ (home-page "http://www.rubyonrails.org")
+ (license license:expat)))
+
+(define-public ruby-sprockets-rails
+ (package
+ (name "ruby-sprockets-rails")
+ (version "3.1.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "sprockets-rails" version))
+ (sha256
+ (base32
+ "1sak0as7ka964f6zjb1w8hkvfkkbf55kpcyvh7k6nyrb6pqnwmnf"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; tests not included
+ (propagated-inputs
+ `(("ruby-actionpack" ,ruby-actionpack)
+ ("ruby-activesupport" ,ruby-activesupport)
+ ("ruby-sprockets" ,ruby-sprockets)))
+ (synopsis "Sprockets Rails integration")
+ (description "Sprockets Rails integration")
+ (home-page
+ "https://github.com/rails/sprockets-rails")
+ (license license:expat)))
+
+(define-public ruby-sass-rails
+ (package
+ (name "ruby-sass-rails")
+ (version "5.0.6")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "sass-rails" version))
+ (sha256
+ (base32
+ "0iji20hb8crncz14piss1b29bfb6l89sz3ai5fny3iw39vnxkdcb"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; No tests are included in gem.
+ (propagated-inputs
+ `(("ruby-railties" ,ruby-railties)
+ ("ruby-sass" ,ruby-sass)
+ ("ruby-sprockets" ,ruby-sprockets)
+ ("ruby-sprockets-rails" ,ruby-sprockets-rails)
+ ("ruby-tilt" ,ruby-tilt)))
+ (synopsis
+ "Sass adapter for the Rails asset pipeline.")
+ (description
+ "Sass adapter for the Rails asset pipeline.")
+ (home-page "https://github.com/rails/sass-rails")
+ (license license:expat)))
+
+(define-public ruby-coffee-rails
+ (package
+ (name "ruby-coffee-rails")
+ (version "4.2.2")
+ (source
+ (origin
+ (method url-fetch)
+ ;; Tests are not distributed at rubygems.org so download from GitHub
+ ;; instead.
+ (uri (string-append "https://github.com/rails/coffee-rails/archive/v"
+ version ".tar.gz"))
+ (file-name (string-append name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ "1zbcs26dnic3ws1p0chggjrcjwkrgv445l765s4r615y1wqq1nfp"))
+ (patches (search-patches "ruby-coffee-rails-fix-rakefile.patch"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; Tests require rails, disable to precent circular dependency.
+ (propagated-inputs
+ `(("ruby-coffee-script" ,ruby-coffee-script)
+ ("ruby-railties" ,ruby-railties)))
+ (synopsis
+ "CoffeeScript adapter for the Rails asset pipeline.")
+ (description
+ "CoffeeScript adapter for the Rails asset pipeline.")
+ (home-page
+ "https://github.com/rails/coffee-rails")
+ (license license:expat)))
+
+(define-public ruby-jquery-rails
+ (package
+ (name "ruby-jquery-rails")
+ (version "4.3.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "jquery-rails" version))
+ (sha256
+ (base32
+ "02ii77vwxc49f2lrkbdzww2168bp5nihwzakc9mqyrsbw394w7ki"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:tests? #f))
+ (native-inputs
+ `(("bundler" ,bundler)))
+ (propagated-inputs
+ `(("ruby-rails-dom-testing"
+ ,ruby-rails-dom-testing)
+ ("ruby-railties" ,ruby-railties)
+ ("ruby-thor" ,ruby-thor)))
+ (synopsis
+ "This gem provides jQuery and the jQuery-ujs driver for your Rails 4+ application.")
+ (description
+ "This gem provides jQuery and the jQuery-ujs driver for your Rails 4+ application.")
+ (home-page
+ "http://rubygems.org/gems/jquery-rails")
+ (license license:expat)))
+
+(define-public ruby-web-console
+ (package
+ (name "ruby-web-console")
+ (version "3.3.1")
+ (source
+ (origin
+ (method url-fetch)
+ ;; Download from GitHub as test files are not provided in the gem.
+ (uri (string-append "https://github.com/rails/web-console/archive/v"
+ version ".tar.gz"))
+ (file-name (string-append name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ "1gmymwvgwqjv4gmg2vb0abm6flwax9sg73wmh6yb7m818pn2lz3n"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; Do not test to prevent dependency cycle with rails.
+ ;; (arguments
+ ;; `(#:phases
+ ;; (modify-phases %standard-phases
+ ;; (add-before 'check 'setenv
+ ;; (lambda _
+ ;; (setenv "RUBYLIB" "lib")
+ ;; ;; (substitute* "Rakefile"
+ ;; ;; (("require 'web_console") ; This is not required for
+ ;; ;; ; travis, so hmm.
+ ;; ;; "require 'pathname'; require 'uri'; require 'web_console"))
+ ;; #t)))))
+ ;; (native-inputs
+ ;; `(("bundler" ,bundler)))
+ (propagated-inputs
+ `(("ruby-actionview" ,ruby-actionview)
+ ("ruby-activemodel" ,ruby-activemodel)
+ ("ruby-debug-inspector" ,ruby-debug-inspector)
+ ("ruby-railties" ,ruby-railties)))
+ (synopsis
+ "A debugging tool for your Ruby on Rails applications.")
+ (description
+ "This package provides a debugging tool for your Ruby on Rails applications.")
+ (home-page
+ "https://github.com/rails/web-console")
+ (license license:expat)))
+
+(define-public ruby-with-advisory-lock
+ (package
+ (name "ruby-with-advisory-lock")
+ (version "3.2.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "with_advisory_lock" version))
+ (sha256
+ (base32
+ "1gdwy0mmhn199n1sh42j14m47chbhbdym3sah4yz3igpj1l956r7"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:tests? #f))
+ (propagated-inputs
+ `(("ruby-activerecord" ,ruby-activerecord)))
+ (synopsis "Advisory locking for ActiveRecord")
+ (description "Advisory locking for ActiveRecord")
+ (home-page
+ "https://github.com/mceachen/with_advisory_lock")
+ (license license:expat)))
+
+(define-public ruby-rails
+ (package
+ (name "ruby-rails")
+ (version "5.2.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "rails" version))
+ (sha256
+ (base32
+ "1307cv1p6cj350hq2mi00dfgjb77rzvlhrr3h0bjz5s0a6jgwv3p"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; No tests included in gem. TODO: download from GitHub so
+ ; tests can be run.
+ (propagated-inputs
+ `(("ruby-actioncable" ,ruby-actioncable)
+ ("ruby-actionmailer" ,ruby-actionmailer)
+ ("ruby-actionpack" ,ruby-actionpack)
+ ("ruby-actionview" ,ruby-actionview)
+ ("ruby-activejob" ,ruby-activejob)
+ ("ruby-activemodel" ,ruby-activemodel)
+ ("ruby-activerecord" ,ruby-activerecord)
+ ("ruby-activestorage" ,ruby-activestorage)
+ ("ruby-activesupport" ,ruby-activesupport)
+ ("bundler" ,bundler)
+ ("ruby-railties" ,ruby-railties)
+ ("ruby-sprockets-rails" ,ruby-sprockets-rails)
+ ("ruby-spring" ,ruby-spring)
+ ("ruby-sqlite3" ,ruby-sqlite3)
+ ("ruby-puma" ,ruby-puma)
+ ("ruby-sass-rails" ,ruby-sass-rails)
+ ("ruby-uglifier" ,ruby-uglifier)
+ ("ruby-coffee-rails" ,ruby-coffee-rails)
+ ("ruby-jquery-rails" ,ruby-jquery-rails)
+ ("ruby-turbolinks" ,ruby-turbolinks)
+ ("ruby-jbuilder" ,ruby-jbuilder)
+ ("ruby-byebug" ,ruby-byebug)
+ ("ruby-web-console" ,ruby-web-console)
+ ("ruby-listen" ,ruby-listen-3.0)
+ ("ruby-spring-watcher-listen" ,ruby-spring-watcher-listen)))
+ (synopsis
+ "Ruby on Rails is a full-stack web framework optimized for programmer happiness and sustainable productivity. It encourages beautiful code by favoring convention over configuration.")
+ (description
+ "Ruby on Rails is a full-stack web framework optimized for programmer happiness and sustainable productivity. It encourages beautiful code by favoring convention over configuration.")
+ (home-page "http://www.rubyonrails.org")
+ (license license:expat)))
+
+(define-public ruby-squasher
+ (package
+ (name "ruby-squasher")
+ (version "0.6.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "squasher" version))
+ (sha256
+ (base32
+ "1z7s4qllbqa27h4qf52h3hacs6y7zksnw32r2qkgs4spsd4x9s2h"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:test-target "spec"))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-rspec" ,ruby-rspec)))
+ (synopsis "Squash your old migrations")
+ (description "Squash your old migrations")
+ (home-page "https://github.com/jalkoby/squasher")
+ (license license:expat)))
+
+(define-public ruby-annotate
+ (package
+ (name "ruby-annotate")
+ (version "2.7.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "annotate" version))
+ (sha256
+ (base32
+ "079y33iy65nv1cqnh1zmi3v2y9yp1z3zzsf2wdh35m3c80v6kaz4"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:tests? #f
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'build 'patch-annotate
+ (lambda _
+ (substitute* "bin/annotate"
+ (("require 'bundler'")
+ "")
+ (("Bundler.setup")
+ "")))))))
+ (propagated-inputs
+ `(("ruby-activerecord" ,ruby-activerecord)
+ ("ruby-activesupport" ,ruby-activesupport)))
+ (synopsis
+ "Annotates Rails/ActiveRecord Models, routes, fixtures, and others based on the database schema.")
+ (description
+ "Annotates Rails/ActiveRecord Models, routes, fixtures, and others based on the database schema.")
+ (home-page
+ "http://github.com/ctran/annotate_models")
+ (license #f)))
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 52832eeeb8..6db0edaac1 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -30,12 +30,18 @@
#:use-module ((guix licenses) #:prefix license:)
#:use-module (gnu packages)
#:use-module (gnu packages base)
+ #:use-module (gnu packages check)
#:use-module (gnu packages compression)
#:use-module (gnu packages databases)
+ #:use-module (gnu packages rails)
#:use-module (gnu packages readline)
#:use-module (gnu packages autotools)
#:use-module (gnu packages java)
+ #:use-module (gnu packages javascript)
#: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)
@@ -340,6 +346,42 @@ notebook).")
(home-page "https://github.com/SciRuby/iruby")
(license license:expat)))
+(define-public ruby-rspec-spies
+ (package
+ (name "ruby-rspec-spies")
+ (version "2.1.4")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "rspec-spies" version))
+ (sha256
+ (base32
+ "0pyjy35k59gsiv7l8585yx4gkg2vhycjycz9jlmgkx8s62dxnjgv"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; Tests fail, is this completely deprecated?
+ ;; phases
+ ;; (modify-phases %standard-phases
+ ;; (replace 'check
+ ;; (lambda _
+ ;; (zero? (system* "rspec"))))
+ ;; (add-before 'check 'fix-dependencies
+ ;; (lambda _
+ ;; (delete-file "Gemfile.lock")
+ ;; (substitute* "Gemfile"
+ ;; ((".*jeweler.*") "\n"))
+ ;; #t)))))
+ ;; (native-inputs
+ ;; `(("bundler" ,bundler)
+ ;; ("ruby-appraisal" ,ruby-appraisal)))
+ (propagated-inputs
+ `(("ruby-rspec" ,ruby-rspec-2)))
+ (synopsis "test spies, for rspec")
+ (description "test spies, for rspec")
+ (home-page
+ "http://github.com/technicalpickles/rspec-spies")
+ (license #f)))
+
;; 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.
@@ -455,19 +497,51 @@ outcomes of a code example.")
(source
(origin
(method url-fetch)
- (uri (rubygems-uri "rspec-its" version))
+ ;; Use GitHub as a source because otherwise we cannot patch directly
+ (uri (string-append "https://github.com/rspec/rspec-its/archive/v"
+ version ".tar.gz"))
(sha256
(base32
- "1pwphny5jawcm1hda3vs9pjv1cybaxy17dc1s75qd7drrvx697p3"))))
+ "088f3y7vd3c8g2gpi0z76qabaabfg0fb70ly3d0xqzbani0lrf09"))
+ (patches
+ (list
+ (origin (method url-fetch)
+ (uri (string-append
+ "https://github.com/rspec/rspec-its/commit/"
+ "bfaab439c7c879f5ef25552f41827891f6308373.patch"))
+ (file-name "ruby-rspec-its-fix-specs-for-ruby-2.4.patch")
+ (sha256
+ (base32
+ "0lnik0kvrpgkakvdb2fmzg22pdlraf6kiidr9sv6rnfyviiqwxgh")))))))
(build-system ruby-build-system)
(arguments
- `(#:tests? #f)) ; needs cucumber.
+ `(#: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")
+ ""))
+ #t))
+ (add-before 'check 'remove-unnecessary-dependency-versions-from-gemfile
+ (lambda _
+ (substitute* "rspec-its.gemspec"
+ (("rake.*") "rake'\n")
+ (("cucumber.*") "cucumber'\n"))
+ #t)))))
(propagated-inputs
`(("ruby-rspec-core" ,ruby-rspec-core)
("ruby-rspec-expectations" ,ruby-rspec-expectations)))
- (synopsis "RSpec extension gem for attribute matching")
- (description "@code{rspec-its} is an RSpec extension gem for attribute
-matching.")
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-cucumber" ,ruby-cucumber)
+ ("ruby-aruba" ,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)))
@@ -505,6 +579,56 @@ support for stubbing and mocking.")
(propagated-inputs
`(("ruby-diff-lcs" ,ruby-diff-lcs)))))
+(define-public ruby-rspec-pending-for
+ (package
+ (name "ruby-rspec-pending-for")
+ (version "0.1.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "rspec-pending_for" version))
+ (sha256
+ (base32
+ "0f9sj7v3j14fvd631smxr04l53pk8dqwn9ybqkjdqmzvcv73b5n6"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:test-target "spec"))
+ (native-inputs
+ `(("bundler" ,bundler)))
+ (propagated-inputs
+ `(("ruby-rspec-core" ,ruby-rspec-core)
+ ("ruby-ruby-engine" ,ruby-ruby-engine)
+ ("ruby_version" ,ruby_version)))
+ (synopsis
+ "Mark specs pending or skipped for specific Ruby engine (e.g. MRI or JRuby) / version combinations")
+ (description
+ "Mark specs pending or skipped for specific Ruby engine (e.g. MRI or JRuby) / version combinations")
+ (home-page
+ "https://github.com/pboling/rspec-pending_for")
+ (license #f)))
+
+(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 `(("ruby-rspec" ,ruby-rspec)))
+ (synopsis "Re-run failed RSpec tests.")
+ (description "Re-run failed RSpec tests.")
+ (home-page
+ "https://github.com/dblock/rspec-rerun")
+ (license license:expat)))
+
(define-public ruby-rspec
(package
(name "ruby-rspec")
@@ -590,6 +714,26 @@ supported: XML Markup and XML Events.")
(home-page "https://github.com/jimweirich/builder")
(license license:expat)))
+(define-public ruby-bump
+ (package
+ (name "ruby-bump")
+ (version "0.6.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "bump" version))
+ (sha256
+ (base32
+ "1c7ychr61n5xy5np3vj8h4d4jmcn3cwicssvq56mfvg8hph7x2cw"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(;; No included tests
+ #:tests? #f))
+ (synopsis "Bump your gem version file")
+ (description "Bump your gem version file")
+ (home-page "https://github.com/gregorym/bump")
+ (license license:expat)))
+
(define-public ruby-rjb
(package
(name "ruby-rjb")
@@ -641,6 +785,45 @@ configuration, and more.")
(home-page "http://log4r.rubyforge.org/")
(license license:bsd-3)))
+(define-public ruby-appraisal
+ (package
+ (name "ruby-appraisal")
+ (version "2.1.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "appraisal" version))
+ (sha256
+ (base32
+ "10ng010lhswdykjhwic7bgv28qpjj42qwxvprpj1f4cavdimh4vp"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f ; tests require network access
+ #:test-target "spec"
+ #:phases
+ (modify-phases %standard-phases
+ ;; remove bundler from Rakefile to avoid dependency issues
+ (add-before 'check 'remove-dependency-checking
+ (lambda _
+; (substitute* "Rakefile"
+ ; (("^require 'bundler.*") ""))
+ (substitute* "Gemfile"
+ (("thor.*") "thor'\n"))
+ #t)))))
+ (propagated-inputs
+ `(("bundler" ,bundler)
+ ("ruby-thor" ,ruby-thor)))
+ (native-inputs
+ `(("ruby-activesupport" ,ruby-activesupport)
+ ("ruby-rspec" ,ruby-rspec)))
+ (synopsis
+ "Appraisal integrates with bundler and rake to test your library against different versions of dependencies in repeatable scenarios called \"appraisals.\"")
+ (description
+ "Appraisal integrates with bundler and rake to test your library against different versions of dependencies in repeatable scenarios called \"appraisals.\"")
+ (home-page
+ "http://github.com/thoughtbot/appraisal")
+ (license license:expat)))
+
(define-public ruby-atoulme-antwrap
(package
(name "ruby-atoulme-antwrap")
@@ -726,6 +909,31 @@ AsciiDoc content to HTML5, DocBook 5 (or 4.5), PDF, and other formats.")
(home-page "https://asciidoctor.org")
(license license:expat)))
+(define-public ruby-ast
+ (package
+ (name "ruby-ast")
+ (version "2.3.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "ast" version))
+ (sha256
+ (base32
+ "0pp82blr5fakdk27d1d21xq9zchzb6vmyb1zcsl520s3ygvprn8m"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; TODO: run tests
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-bacon" ,ruby-bacon)
+ ("ruby-racc" ,ruby-racc)))
+ (synopsis
+ "A library for working with Abstract Syntax Trees.")
+ (description
+ "This package provides a library for working with Abstract Syntax Trees.")
+ (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.
@@ -784,6 +992,150 @@ format.")
(home-page "https://github.com/nicksieger/ci_reporter")
(license license:expat)))
+(define-public ruby-coffee-script-source
+ (package
+ (name "ruby-coffee-script-source")
+ (version "1.10.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "coffee-script-source" version))
+ (sha256
+ (base32
+ "1k4fg39rrkl3bpgchfj94fbl9s4ysaz16w8dkqncf2vyf79l3qz0"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; no tests
+ (synopsis "Source code for the ruby-coffee-script gem.")
+ (description
+ "This gem contains the JavaScript source code used for converting between
+CoffeeScript to JavaScript. It is updated each time a new version of
+CoffeeScript is released.")
+ ;; homepage listed on rubygems does not exist, so use the rubygems URL instead
+ (home-page
+ "https://rubygems.org/gems/coffee-script-source")
+ (license license:expat)))
+
+;; Seems to work except for 2 rspec errors already fixed upstream
+;; https://github.com/egonSchiele/contracts.ruby/commit/c1f22bfc6b28125b55d42a33ca3e05f15e82d6f2.diff
+;; might need to add that as a patch when adding to guix
+(define-public ruby-contracts
+ (package
+ (name "ruby-contracts")
+ (version "0.12.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "contracts" version))
+ (sha256
+ (base32
+ "0xszv56p58q7da8agc4dsnw8x46gnh6ahbag5gdmvbxjgml03mdl"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f ; enable these when adding TO GUIX!!!!
+ #:test-target "spec"
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'fix-rakefile
+ (lambda _
+ (substitute* "Rakefile"
+ ((".*rubocop.*") "")
+ ((".*RuboCop.*") ""))
+ #t)))))
+ (native-inputs
+ `(("ruby-rspec" ,ruby-rspec)))
+ (synopsis
+ "This library provides contracts for Ruby. Contracts let you clearly express how your code behaves, and free you from writing tons of boilerplate, defensive code.")
+ (description
+ "This library provides contracts for Ruby. Contracts let you clearly express how your code behaves, and free you from writing tons of boilerplate, defensive code.")
+ (home-page
+ "http://github.com/egonSchiele/contracts.ruby")
+ (license #f)))
+
+(define-public ruby-coveralls
+ (package
+ (name "ruby-coveralls")
+ (version "0.8.22")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "coveralls" version))
+ (sha256
+ (base32
+ "022kc16np6w4mv17hq3m9hhw9l8hjl78ld3fzqqx6337vwvwvwcg"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f
+ #:test-target "spec"
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'extract-gemspec 'update-dependency
+ (lambda _
+ ;; Relax dependency to avoid conflicting versions in nio4r
+ ;; for instance.
+ (substitute* "coveralls-ruby.gemspec"
+ (("<simplecov.*") "<simplecov>)\n")
+ (("<tins.*") "<tins>)\n"))
+
+ #t))
+ (add-before 'check 'fix-dependencies
+ (lambda _
+ (substitute* "spec/spec_helper.rb"
+ ((".*pry.*") "\n"))
+ #t)))))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-rspec" ,ruby-rspec)
+ ("ruby-truthy" ,ruby-truthy)
+ ("ruby-webmock" ,ruby-webmock)
+ ("ruby-vcr" ,ruby-vcr)
+ ("git" ,git))) ; git is required for testing
+ (propagated-inputs
+ `(("ruby-json" ,ruby-json)
+ ("ruby-rest-client" ,ruby-rest-client)
+ ("ruby-simplecov" ,ruby-simplecov)
+ ("ruby-term-ansicolor" ,ruby-term-ansicolor)
+ ("ruby-thor" ,ruby-thor)
+ ("ruby-simplecov" ,ruby-simplecov)
+ ("ruby-tins" ,ruby-tins)))
+ (synopsis
+ "A Ruby implementation of the Coveralls API.")
+ (description
+ "A Ruby implementation of the Coveralls API.")
+ (home-page "https://coveralls.io")
+ (license license:expat)))
+
+(define-public ruby-crack
+ (package
+ (name "ruby-crack")
+ (version "0.4.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "crack" version))
+ (sha256
+ (base32
+ "0abb0fvgw00akyik1zxnq7yv391va148151qxdghnzngv66bl62k"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda _
+ (zero? (length
+ (filter (lambda (file)
+ (display file)(display "\n")
+ (not (zero? (system* "ruby" file))))
+ (find-files "spec" ".*rb$")))))))))
+ (propagated-inputs
+ `(("ruby-safe-yaml" ,ruby-safe-yaml)))
+ (synopsis
+ "Really simple JSON and XML parsing, ripped from Merb and Rails.")
+ (description
+ "Really simple JSON and XML parsing, ripped from Merb and Rails.")
+ (home-page "http://github.com/jnunemaker/crack")
+ (license license:expat)))
+
(define-public ruby-czmq-ffi-gen
(package
(name "ruby-czmq-ffi-gen")
@@ -862,6 +1214,28 @@ support for security mechanisms.")
(home-page "https://github.com/paddor/cztop")
(license license:isc)))
+(define-public ruby-descendants-tracker
+ (package
+ (name "ruby-descendants-tracker")
+ (version "0.0.4")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "descendants_tracker" version))
+ (sha256
+ (base32
+ "15q8g3fcqyb41qixn6cky0k3p86291y7xsh1jfd851dvrza1vi79"))))
+ (build-system ruby-build-system)
+ (propagated-inputs
+ `(("ruby-thread-safe" ,ruby-thread-safe)))
+ (synopsis
+ "Module that adds descendant tracking to a class")
+ (description
+ "Module that adds descendant tracking to a class")
+ (home-page
+ "https://github.com/dkubb/descendants_tracker")
+ (license license:expat)))
+
(define-public ruby-saikuro-treemap
(package
(name "ruby-saikuro-treemap")
@@ -940,6 +1314,59 @@ support.")
(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
+ (method url-fetch)
+ ;; fetch from github as the gem does not contain testing code
+ (uri (string-append "https://github.com/rails/execjs/archive/v"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "0h1bi96gks205pz2mn2zwldz8h0ajwggyi85bwfbksmrsn2lwick"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; tests require ruby-therubyracer and thus v8.
+ (native-inputs
+ `(("bundler" ,bundler)))
+ (synopsis
+ "ExecJS lets you run JavaScript code from Ruby.")
+ (description
+ "ExecJS lets you run JavaScript code from Ruby.")
+ (home-page "https://github.com/rails/execjs")
+ (license license:expat)))
+
+(define-public ruby-event-bus
+ (package
+ (name "ruby-event-bus")
+ (version "0.2.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "event-bus" version))
+ (sha256
+ (base32
+ "0bqcznr15q1346avpddnyd9144hqdww86yfpb4jayaj6lm0fqwyq"))))
+ (build-system ruby-build-system)
+ (arguments
+ ;; disable testing to break the cycle with aruba. Instead simply test that
+ ;; the library can be require'd.
+ `(#:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda _
+ (zero? (system* "ruby" "-Ilib" "-r" "event/bus")))))))
+ (synopsis
+ "This gem notifies subscribers about event")
+ (description
+ "This gem notifies subscribers about event")
+ (home-page
+ "https://github.com/cucumber/event-bus")
+ (license license:expat)))
+
(define-public ruby-orderedhash
(package
(name "ruby-orderedhash")
@@ -1007,6 +1434,63 @@ Ruby.")
(home-page "https://github.com/maik/xml-simple")
(license license:ruby)))
+(define-public ruby-therubyracer
+ (package
+ (name "ruby-therubyracer")
+ (version "0.12.2")
+ (source
+ (origin
+ (method url-fetch)
+ ;; Build from GitHub source so that patches can be applied.
+ (uri (string-append "https://github.com/cowboyd/therubyracer/archive/v"
+ version ".tar.gz"))
+ (file-name (string-append name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ "0vyiacgg0hngl3gxh7n5lvskac5ms2rcbjrixj4mc8c2adhmqj1a"))
+ (patches (search-patches "ruby-therubyracer-fix-gemspec.patch"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:test-target "spec"
+ #:phases
+ (modify-phases %standard-phases
+ (delete 'extract-gemspec)
+ (add-before 'build 'fix-gemfile
+ (lambda _
+ (substitute* "Gemfile"
+ (("redjs.*") "redjs'\n")
+ ((".*gem-compiler.*") "\n"))
+ #t))
+ (add-before 'install 'prepare-libv8
+ ;; Since therubyracer requires 'libv8' when compiling native
+ ;; extensions during installation, it must be installed into the same
+ ;; gem directory. We make 'libv8' a native input and copy the entire
+ ;; libv8 gem directory into the the current output and install
+ ;; therubyracer into that.
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (copy-recursively
+ (assoc-ref inputs "ruby-libv8")
+ (assoc-ref outputs "out"))
+ #t))
+ (add-before 'check 'compile
+ (lambda _
+ (zero? (system* "rake" "compile")))))))
+ (propagated-inputs
+ `(("ruby-ref" ,ruby-ref)))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-redjs" ,ruby-redjs)
+ ("ruby-rspec" ,ruby-rspec-2)
+ ("ruby-rake-compiler" ,ruby-rake-compiler)
+ ("ruby-libv8" ,ruby-libv8)))
+ (synopsis
+ "Call JavaScript code and manipulate JavaScript objects from Ruby. Call Ruby code and manipulate Ruby objects from JavaScript.")
+ (description
+ "Call JavaScript code and manipulate JavaScript objects from Ruby. Call Ruby code and manipulate Ruby objects from JavaScript.")
+ (home-page
+ "http://github.com/cowboyd/therubyracer")
+ (license license:expat)))
+
(define-public ruby-thor
(package
(name "ruby-thor")
@@ -1176,6 +1660,98 @@ standard output stream.")
(home-page "https://github.com/geemus/formatador")
(license license:expat)))
+(define-public ruby-fuubar
+ (package
+ (name "ruby-fuubar")
+ (version "2.1.1")
+ (source
+ (origin
+ (method url-fetch)
+ ;; The gem does not include files required for testing.
+ (uri (string-append "https://github.com/thekompanee/fuubar/archive/releases/v"
+ version ".tar.gz"))
+ (file-name (string-append name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ "1363fy7x12srr51cy5x1xkf9z7jlzzlwpsifwgx6bivnp6lar3ny"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f ; some tests fail when running (zero? (system* "rspec"
+ ; "-Ilib" "spec")) inside the container, but seem to work outside.
+ #: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.*") ""))
+ #t)))))
+ (native-inputs
+ `(("bundler" ,bundler)))
+ (propagated-inputs
+ `(("ruby-rspec" ,ruby-rspec)
+ ("ruby-ruby-progressbar" ,ruby-ruby-progressbar)))
+ (synopsis
+ "the instafailing RSpec progress bar formatter")
+ (description
+ "the instafailing RSpec progress bar formatter")
+ (home-page
+ "https://github.com/thekompanee/fuubar")
+ (license license:expat)))
+
+(define-public ruby-hashdiff
+ (package
+ (name "ruby-hashdiff")
+ (version "0.3.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "hashdiff" version))
+ (sha256
+ (base32
+ "1r06gar8zp4hyzyc0ky7n6mybjj542lrfda5y78fm5hyhiplv104"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:tests? #f
+ #:test-target "spec"))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-rspec" ,ruby-rspec-2)))
+ (synopsis
+ " HashDiff is a diff lib to compute the smallest difference between two hashes. ")
+ (description
+ " HashDiff is a diff lib to compute the smallest difference between two hashes. ")
+ (home-page
+ "https://github.com/liufengyun/hashdiff")
+ (license license:expat)))
+
+(define-public ruby-httparty
+ (package
+ (name "ruby-httparty")
+ (version "0.16.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "httparty" version))
+ (sha256
+ (base32
+ "1zsc40nrg5fbaabbjcklnrgwgg6qdqycvg5sq8iahp1v8jxfarzw"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:test-target "spec"))
+ (propagated-inputs
+ `(("ruby-multi-xml" ,ruby-multi-xml)))
+ (native-inputs
+ `(("ruby-cucumber" ,ruby-cucumber)))
+ (synopsis
+ "Makes http fun! Also, makes consuming restful web services dead easy.")
+ (description
+ "Makes http fun! Also, makes consuming restful web services dead easy.")
+ (home-page
+ "http://jnunemaker.github.com/httparty")
+ (license license:expat)))
+
(define-public ruby-shindo
(package
(name "ruby-shindo")
@@ -1430,6 +2006,33 @@ 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.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "powerpack" version))
+ (sha256
+ (base32
+ "1fnn3fli5wkzyjl4ryh0k90316shqjfnhydmc7f8lqpi0q21va43"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f
+ #:test-target "spec"))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-rspec" ,ruby-rspec)
+ ("ruby-yard" ,ruby-yard)))
+ (synopsis
+ "A few useful extensions to core Ruby classes.")
+ (description
+ "This package provides a few useful extensions to core Ruby classes.")
+ (home-page
+ "https://github.com/bbatsov/powerpack")
+ (license license:expat)))
+
(define-public ruby-locale
(package
(name "ruby-locale")
@@ -1502,6 +2105,33 @@ use GNU gettext tools for maintenance.")
(home-page "https://ruby-gettext.github.com/")
(license (list license:lgpl3+ license:ruby))))
+(define-public ruby-github-api
+ (package
+ (name "ruby-github-api")
+ (version "0.18.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "github_api" version))
+ (sha256
+ (base32
+ "04x8mlvinl17wfw6r71c9jbh7g78ziiwvsqv20ylyjzybr7x0w6s"))))
+ (build-system ruby-build-system)
+ (propagated-inputs
+ `(("ruby-addressable" ,ruby-addressable)
+ ("ruby-descendants-tracker"
+ ,ruby-descendants-tracker)
+ ("ruby-faraday" ,ruby-faraday)
+ ("ruby-hashie" ,ruby-hashie)
+ ("ruby-oauth2" ,ruby-oauth2)))
+ (synopsis
+ " Ruby client that supports all of the GitHub API methods. It's build in a modular way, that is, you can either instantiate the whole api wrapper Github.new or use parts of it e.i. Github::Client::Repos.new if working solely with repositories is your main concern. Intuitive query methods allow you easily call API endpoints. ")
+ (description
+ " Ruby client that supports all of the GitHub API methods. It's build in a modular way, that is, you can either instantiate the whole api wrapper Github.new or use parts of it e.i. Github::Client::Repos.new if working solely with repositories is your main concern. Intuitive query methods allow you easily call API endpoints. ")
+ (home-page
+ "http://piotrmurach.github.io/github/")
+ (license license:expat)))
+
(define-public ruby-packnga
(package
(name "ruby-packnga")
@@ -1552,6 +2182,43 @@ 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-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)
+ (if tests?
+ (invoke "rspec")
+ #t))))))
+ (native-inputs
+ `(("ruby-rspec" ,ruby-rspec)
+ ("ruby-simplecov" ,ruby-simplecov)
+ ("ruby-nokogiri-diff" ,ruby-nokogiri-diff)))
+ (synopsis
+ "Maruku is a Markdown interpreter in Ruby.
+ It features native export to HTML and PDF (via Latex). The
+ output is really beautiful!")
+ (description
+ "Maruku is a Markdown interpreter in Ruby.
+ It features native export to HTML and PDF (via Latex). The
+ output is really beautiful!")
+ (home-page "http://github.com/bhollis/maruku")
+ (license license:expat)))
+
(define-public ruby-metaclass
(package
(name "ruby-metaclass")
@@ -1587,6 +2254,49 @@ objects.")
(home-page "https://github.com/floehopper/metaclass")
(license license:expat)))
+(define-public ruby-mysql2
+ (package
+ (name "ruby-mysql2")
+ (version "0.5.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://github.com/brianmario/mysql2/archive/"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "063qm7m43fjnwizbg2avv2byvkpwsxcnhjyvci1q2s1zcmys211s"))))
+ (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") "echo"))))
+ (add-before 'build 'compile
+ (lambda _
+ (invoke "rake" "compile")))
+ (replace 'check
+ (lambda* (#:key tests? #:allow-other-keys)
+ (if tests?
+ (invoke "rspec" "-Ilib" "-Iext")
+ #t))))))
+ (inputs
+ `(("mariadb" ,mariadb)))
+ (native-inputs
+ `(("ruby-rspec" ,ruby-rspec)
+ ("ruby-rake-compiler" ,ruby-rake-compiler)))
+ (synopsis
+ "A simple, fast 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")
@@ -1643,6 +2353,66 @@ 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
+ (add-after 'unpack 'patch-Rakefile
+ (lambda _
+ (substitute* "Rakefile"
+ (("rake/rdoctask")
+ "rdoc/task"))
+ #t))
+ (add-before 'build 'run-extconf.rb
+ (lambda _
+ (with-directory-excursion "ext"
+ (invoke "ruby" "extconf.rb")
+ (invoke "make"))))
+ (replace 'check
+ (lambda _
+ (unless (zero?
+ (system "ruby --verbose -Iext test/*.rb"))
+ (error "test failure"))
+ #t)))))
+ (inputs
+ `(("libidn" ,libidn)))
+ (synopsis
+ "
+ Ruby Bindings for the GNU LibIDN library, an implementation of the
+ Stringprep, Punycode and IDNA specifications defined by the IETF
+ Internationalized Domain Names (IDN) working group.
+
+ 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.
+ ")
+ (description
+ "
+ Ruby Bindings for the GNU LibIDN library, an implementation of the
+ Stringprep, Punycode and IDNA specifications defined by the IETF
+ Internationalized Domain Names (IDN) working group.
+
+ 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
+ "http://github.com/deepfryed/idn-ruby")
+ (license #f)))
+
(define-public ruby-instantiator
(package
(name "ruby-instantiator")
@@ -2095,6 +2865,34 @@ instance, it provides @code{assert_true}, @code{assert_false} and
(home-page "https://github.com/halostatue/minitest-bonus-assertions")
(license license:expat)))
+(define-public ruby-minitest-reporters
+ (package
+ (name "ruby-minitest-reporters")
+ (version "1.3.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "minitest-reporters" version))
+ (sha256
+ (base32
+ "0xc7cs65yjslz9zg8mm0y29wpf7s1h5yzixgyjs5gvlr8c81carn"))))
+ (build-system ruby-build-system)
+ (propagated-inputs
+ `(("ruby-ansi" ,ruby-ansi)
+ ("ruby-builder" ,ruby-builder)
+ ("ruby-minitest" ,ruby-minitest)
+ ("ruby-ruby-progressbar" ,ruby-ruby-progressbar)))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-maruku" ,ruby-maruku)))
+ (synopsis
+ "Death to haphazard monkey-patching! Extend Minitest through simple hooks.")
+ (description
+ "Death to haphazard monkey-patching! Extend Minitest through simple hooks.")
+ (home-page
+ "https://github.com/CapnKernul/minitest-reporters")
+ (license license:expat)))
+
(define-public ruby-minitest-rg
(package
(name "ruby-minitest-rg")
@@ -2186,6 +2984,53 @@ URIs using the normal URI.parse method.")
(home-page "https://github.com/dball/data_uri")
(license license:expat)))
+(define-public ruby-duktape
+ (package
+ (name "ruby-duktape")
+ (version "1.3.0.4")
+ (source
+ (origin
+ (method url-fetch)
+ ;; fetch from github as the gem does not contain testing code
+ (uri (string-append "https://github.com/judofyr/duktape.rb/archive/v"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "1xgs7ll9xwm5p451mh70cm5646wijc2jdvjdb81a17wwvccf7djw"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f
+ #:phases
+ (modify-phases %standard-phases
+ ;; Duktape comes with the duktape .c and .h files. Replace these with
+ ;; those from the duktape Guix package.
+ (add-after 'unpack 'replace-bundled-duktape
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (for-each (lambda (file)
+ (delete-file (string-append "ext/duktape/" file))
+ (copy-file
+ (string-append
+ (assoc-ref inputs "duktape") "/src/" file)
+ (string-append "ext/duktape/" file)))
+ (list "duktape.c" "duktape.h"))))
+ (add-before 'check 'remove-dependency
+ (lambda _
+ ;; Gem is not needed for testing.
+ (substitute* "Gemfile"
+ (("^ gem 'aws-sdk', '~> 2.2.0'") ""))
+ #t)))))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-rake-compiler" ,ruby-rake-compiler)
+ ("ruby-sdoc" ,ruby-sdoc)
+ ("duktape" ,duktape)))
+ (synopsis "Bindings to the Duktape JavaScript interpreter")
+ (description
+ "Bindings to the Duktape JavaScript interpreter")
+ (home-page
+ "https://github.com/judofyr/duktape.rb")
+ (license license:expat)))
+
(define-public ruby-git
(package
(name "ruby-git")
@@ -2338,13 +3183,13 @@ rogue test/unit/autorun requires.")
(define-public ruby-arel
(package
(name "ruby-arel")
- (version "8.0.0")
+ (version "9.0.0")
(source (origin
(method url-fetch)
(uri (rubygems-uri "arel" version))
(sha256
(base32
- "0nw0qbc6ph625p6n3maqq9f527vz3nbl0hk72fbyka8jzsmplxzl"))))
+ "1jk7wlmkr61f6g36w9s2sn46nmdg6wn2jfssrhbhirv5x9n95nk0"))))
(build-system ruby-build-system)
(arguments '(#:tests? #f)) ; no tests
(home-page "https://github.com/rails/arel")
@@ -2354,6 +3199,29 @@ Ruby. It simplifies the generation of complex SQL queries and adapts to
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
+ '(#:tests? #f))
+ (propagated-inputs
+ `(("ruby-mimemagic" ,ruby-mimemagic)))
+ (synopsis
+ "Simple mime type detection using magic numbers, filenames, and extensions")
+ (description
+ "Simple mime 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.
@@ -2505,6 +3373,62 @@ for select languages.")
(home-page "http://coderay.rubychan.de")
(license license:expat)))
+(define-public ruby-parser
+ (package
+ (name "ruby-parser")
+ (version "2.3.1.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "parser" version))
+ (sha256
+ (base32
+ "0fxcs83z28wxn6bphbq5q40c1y5ab8zl8ww17jwkbi032wf6iik6"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; need more
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-racc" ,ruby-racc)))
+ (propagated-inputs `(("ruby-ast" ,ruby-ast)))
+ (synopsis "A 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-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
+ "A 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 "")
+ (license (list #f #f #f))))
+
(define-public ruby-progress_bar
(package
(name "ruby-progress_bar")
@@ -2536,6 +3460,34 @@ rate.")
(home-page "https://github.com/paul/progress_bar")
(license license:wtfpl2)))
+(define-public ruby-ruby-progressbar
+ (package
+ (name "ruby-ruby-progressbar")
+ (version "1.9.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "ruby-progressbar" version))
+ (sha256
+ (base32
+ "1igh1xivf5h5g3y5m9b4i4j2mhz2r43kngh4ww3q1r80ch21nbfk"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; Tests require further dependencies such as 'rspectacular'.
+ (synopsis
+ "Ruby/ProgressBar is an extremely flexible text progress bar library for Ruby.
+The output can be customized with a flexible formatting system including:
+percentage, bars of various formats, elapsed time and estimated time remaining.
+")
+ (description
+ "Ruby/ProgressBar is an extremely flexible text progress bar library for Ruby.
+The output can be customized with a flexible formatting system including:
+percentage, bars of various formats, elapsed time and estimated time remaining.
+")
+ (home-page
+ "https://github.com/jfelchner/ruby-progressbar")
+ (license license:expat)))
+
(define-public ruby-pry
(package
(name "ruby-pry")
@@ -2560,6 +3512,34 @@ invocation, and source and documentation browsing.")
(home-page "https://pryrepl.org")
(license license:expat)))
+(define-public ruby-psych
+ (package
+ (name "ruby-psych")
+ (version "3.0.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "psych" version))
+ (sha256
+ (base32
+ "0g9yrzzfza5yjfnn4pkykr71fhpayahvimvyyv8xi3i34a03v9xg"))))
+ (build-system ruby-build-system)
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-rake-compiler" ,ruby-rake-compiler)))
+ (synopsis
+ "Psych is a YAML parser and emitter. Psych leverages libyaml[http://pyyaml.org/wiki/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.
+")
+ (description
+ "Psych is a YAML parser and emitter. Psych leverages libyaml[http://pyyaml.org/wiki/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-guard
(package
(name "ruby-guard")
@@ -2608,6 +3588,72 @@ file or directories are modified.")
(home-page "http://guardgem.org/")
(license license:expat)))
+(define-public ruby-tilt
+ (package
+ (name "ruby-tilt")
+ (version "2.0.5")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "tilt" version))
+ (sha256
+ (base32
+ "0lgk8bfx24959yq1cn55php3321wddw947mgj07bxfnwyipy9hqf"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; There are a number of unpackaged dependencies e.g. kramdown.
+ ;; (native-inputs
+ ;; `(("bundler" ,bundler)
+ ;; ("ruby-yard" ,ruby-yard)
+ ;; ("ruby-asciidoctor" ,ruby-asciidoctor)
+ ;; ("ruby-builder" ,ruby-builder)
+ ;; ("ruby-coffee-script" ,ruby-coffee-script)
+ ;; ("ruby-contest" ,ruby-contest)
+ ;; ("ruby-creole" ,ruby-creole)
+ ;; ("ruby-erubis" ,ruby-erubis)
+ ;; ("ruby-haml" ,ruby-haml); do we really need haml <4 ?
+ ;; ("ruby-kramdown" ,ruby-kramdown)))
+ (synopsis
+ "Generic interface to multiple Ruby template engines")
+ (description
+ "Generic interface to multiple Ruby template engines")
+ (home-page "http://github.com/rtomayko/tilt/")
+ (license license:expat)))
+
+(define-public ruby-thread-order
+ (package
+ (name "ruby-thread-order")
+ (version "1.1.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "thread_order" version))
+ (sha256
+ (base32
+ "1n8zs3m7na5jmpf0pw0z79vg0x0lfzajpynp28zb43l89l00qcfi"))))
+ (build-system ruby-build-system)
+ (native-inputs
+ `(("ruby-rspec" ,ruby-rspec)))
+ (arguments
+ '(;; TODO: 1 test fails
+ ;; 1) ThreadOrder is implemented without depending on the stdlib
+ ;; Failure/Error: expect(loaded_filenames).to_not include 'monitor.rb'
+ #:tests? #f
+ #:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda* (#:key tests? #:allow-other-keys)
+ (if tests?
+ (invoke "rspec")
+ #t))))))
+ (synopsis
+ "Test helper for ordering threaded code (does not depend on gems or stdlib, tested on 1.8.7 - 2.2, rbx, jruby).")
+ (description
+ "Test helper for ordering threaded code (does not depend on gems or stdlib, tested on 1.8.7 - 2.2, rbx, jruby).")
+ (home-page
+ "https://github.com/JoshCheek/thread_order")
+ (license license:expat)))
+
(define-public ruby-thread-safe
(package
(name "ruby-thread-safe")
@@ -2628,6 +3674,29 @@ utilities for Ruby.")
(home-page "https://github.com/ruby-concurrency/thread_safe")
(license license:asl2.0)))
+(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
+ `(#:tests? #f)) ; Files required for testing are not in gem, and homepage
+ ; has disappeared.
+ (propagated-inputs `(("ruby-hoe" ,ruby-hoe)))
+ (synopsis
+ "Easily get truthiness values of Ruby objects")
+ (description
+ "Easily get truthiness values of Ruby objects")
+ (home-page "https://rubygems.org/gems/truthy")
+ (license #f)))
+
(define-public ruby-tzinfo
(package
(name "ruby-tzinfo")
@@ -2965,6 +4034,47 @@ when working with Ruby code.")
;; There is no mention of the "or later" clause.
(license license:gpl2)))
+(define-public ruby-jeweler
+ (package
+ (name "ruby-jeweler")
+ (version "2.3.9")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "jeweler" version))
+ (sha256
+ (base32
+ "0jbivh9vf9wm91kwjnlcvswqyk2g24bnxj9gavinx9jh4bphagi5"))))
+ (build-system ruby-build-system)
+ (propagated-inputs
+ `(("ruby-builder" ,ruby-builder)
+ ("bundler" ,bundler)
+ ("ruby-git" ,ruby-git)
+ ("ruby-github-api" ,ruby-github-api)
+ ("ruby-highline" ,ruby-highline)
+ ("ruby-nokogiri" ,ruby-nokogiri)
+ ("ruby-psych" ,ruby-psych)
+ ("ruby-rake" ,ruby-rake)
+ ("ruby-rdoc" ,ruby-rdoc)
+ ("ruby-semver2" ,ruby-semver2)))
+ (arguments
+ '(#:phases
+ (modify-phases %standard-phases
+ (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
+ )))))
+ (synopsis
+ "Simple and opinionated helper for creating Rubygem projects on GitHub")
+ (description
+ "Simple and opinionated helper for creating Rubygem projects on GitHub")
+ (home-page
+ "http://github.com/technicalpickles/jeweler")
+ (license license:expat)))
+
(define-public ruby-json
(package
(name "ruby-json")
@@ -3052,6 +4162,71 @@ a native C extension.")
(home-page "https://rubygems.org/gems/rb-fsevent")
(license license:expat)))
+(define-public ruby-libv8
+ (package
+ (name "ruby-libv8")
+ (version "6.7.288.46.0") ; Package an even-numbered release so only source
+ ; code it included and not binaries.
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "libv8" version))
+ (sha256
+ (base32
+ "1f1gd8n8yrnd2d2bmlbcm1qgfpw050087y8gq4z72cj8mal60k3f"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:test-target "spec"
+ ;#:gem-flags (list "--" "--with-system-v8")
+ #:phases
+ (modify-phases %standard-phases
+ ;; Non-printing characters trip up this build phase and it isn't used
+ ;; anyway.
+ ;(delete 'extract-gemspec)
+ ;; (replace 'replace-git-ls-files
+ ;; (lambda _
+ ;; (substitute* "libv8.gemspec"
+ ;; (("git ls-files") "find . -type f |sort"))
+ ;; #t))
+ (add-after 'extract-gemspec 'fix-dependencies
+ (lambda _
+ ;; Remove non-printing character that trips up substitute*
+ (system* "sed" "s/ stub.*//" "-i" "libv8.gemspec")
+ ;;(delete-file-recursively "vendor")
+ (substitute* "libv8.gemspec"
+ ;; (("<rake>.*") "<rake>)\n")
+ (("<rake-compiler>.*") "<rake-compiler>)\n")
+ ((", \\\"vendor.*") "]\n")
+ ) ; Do not distribute
+ ; depot_tools as this includes pre-built
+ ; binaries.
+
+ #t))
+ )))
+ ;; (Add-after 'install 'remove-extraneous-files
+ ;; (lambda* (#:key outputs #:allow-other-keys)
+ ;; (delete-file-recursively
+ ;; (string-append
+ ;; (assoc-ref outputs "out")
+ ;; ;; TODO: Generalise this path.
+ ;; "/lib/ruby/gems/2.3.0/gems/libv8-5.2.361.43.1/vendor")))))))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-rake" ,ruby-rake)
+ ("ruby-rake-compiler" ,ruby-rake-compiler)
+ ("ruby-rspec" ,ruby-rspec)
+ ("ruby-rspec-spies" ,ruby-rspec-spies)
+ ("which" ,which)
+ ("python" ,python-2)))
+ (synopsis
+ "Distributes the V8 JavaScript engine in binary and source forms in order
+to support fast builds of The Ruby Racer")
+ (description
+ "Distributes the V8 JavaScript engine in binary and source forms in order
+to support fast builds of The Ruby Racer")
+ (home-page "http://github.com/cowboyd/libv8")
+ (license license:expat)))
+
(define-public ruby-listen
(package
(name "ruby-listen")
@@ -3059,31 +4234,106 @@ a native C extension.")
(source
(origin
(method url-fetch)
- (uri (rubygems-uri "listen" version))
+ ;; The gem does not include a Rakefile, so we fetch the tarball from
+ ;; Github.
+ (uri (string-append "https://github.com/guard/listen/archive/v"
+ version ".tar.gz"))
+ (file-name (string-append name "-" version ".tar.gz"))
(sha256
(base32
- "01v5mrnfqm6sgm8xn2v5swxsn1wlmq7rzh2i48d4jzjsc7qvb6mx"))))
+ "0f0mx4nzpd17svvmkcb2q66w3gdvs1zkrpc0p3wq1s2va5b5cnss"))
+ (patches (search-patches "ruby-listen-patch-gemspec.patch"))))
(build-system ruby-build-system)
- (arguments '(#:tests? #f)) ; no tests
+ (arguments
+ `(#:test-target "spec"
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'check 'fix-dependencies'
+ (lambda _
+ (substitute* "Rakefile"
+ ((".*rubocop.*") ""))
+ #t)))))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-rspec" ,ruby-rspec)
+ ("ruby-coveralls" ,ruby-coveralls)))
(propagated-inputs
- `(("ruby-rb-inotify" ,ruby-rb-inotify)
- ("ruby-rb-fsevent" ,ruby-rb-fsevent)))
- (synopsis "Listen to file modifications")
- (description "The Listen gem listens to file modifications and notifies
-you about the changes.")
+ `(("ruby-rb-fsevent" ,ruby-rb-fsevent)
+ ("ruby-rb-inotify" ,ruby-rb-inotify)
+ ("ruby-ruby-dep" ,ruby-ruby-dep)))
+ (synopsis
+ "The Listen gem listens to file modifications and notifies you about the changes. Works everywhere!")
+ (description
+ "The Listen gem listens to file modifications and notifies you about the changes. Works everywhere!")
(home-page "https://github.com/guard/listen")
(license license:expat)))
(define-public ruby-listen-3.0
(package
(inherit ruby-listen)
+ (name "ruby-listen")
(version "3.0.8")
- (source (origin
- (method url-fetch)
- (uri (rubygems-uri "listen" version))
- (sha256
- (base32
- "1l0y7hbyfiwpvk172r28hsdqsifq1ls39hsfmzi1vy4ll0smd14i"))))))
+ (source
+ (origin
+ (method url-fetch)
+ ;; The gem does not include a Rakefile, so we fetch the tarball from
+ ;; Github.
+ (uri (string-append "https://github.com/guard/listen/archive/v"
+ version ".tar.gz"))
+ (file-name (string-append name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ "06cy038xlbi8hcr9nv0c9wvafi7s3d05sdc7ydkv8qndi9bs68l3"))
+ (patches (search-patches "ruby-listen-3.0.8-patch-gemspec.patch"))))))
+
+(define-public ruby-loofah
+ (package
+ (name "ruby-loofah")
+ (version "2.0.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "loofah" version))
+ (sha256
+ (base32
+ "109ps521p0sr3kgc460d58b4pr1z4mqggan2jbsf0aajy9s6xis8"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; 1 test fails
+ (native-inputs
+ `(("ruby-hoe" ,ruby-hoe)
+ ("ruby-rr" ,ruby-rr)))
+ (propagated-inputs
+ `(("ruby-nokogiri" ,ruby-nokogiri)))
+ (synopsis
+ "Loofah is a general library for manipulating and transforming HTML/XML
+documents and fragments. It's built on top of Nokogiri and libxml2, so
+it's fast and has a nice API.
+
+Loofah excels at HTML sanitization (XSS prevention). It includes some
+nice HTML sanitizers, which are based on HTML5lib's whitelist, so it
+most likely won't make your codes less secure. (These statements have
+not been evaluated by Netexperts.)
+
+ActiveRecord extensions for sanitization are available in the
+`loofah-activerecord` gem (see
+https://github.com/flavorjones/loofah-activerecord).")
+ (description
+ "Loofah is a general library for manipulating and transforming HTML/XML
+documents and fragments. It's built on top of Nokogiri and libxml2, so
+it's fast and has a nice API.
+
+Loofah excels at HTML sanitization (XSS prevention). It includes some
+nice HTML sanitizers, which are based on HTML5lib's whitelist, so it
+most likely won't make your codes less secure. (These statements have
+not been evaluated by Netexperts.)
+
+ActiveRecord extensions for sanitization are available in the
+`loofah-activerecord` gem (see
+https://github.com/flavorjones/loofah-activerecord).")
+ (home-page
+ "https://github.com/flavorjones/loofah")
+ (license license:expat)))
(define-public ruby-activesupport
(package
@@ -3107,7 +4357,7 @@ you about the changes.")
(propagated-inputs
`(("ruby-concurrent" ,ruby-concurrent)
("ruby-i18n" ,ruby-i18n)
- ("ruby-minitest" ,ruby-minitest)
+ ;("ruby-minitest" ,ruby-minitest)
("ruby-tzinfo" ,ruby-tzinfo)
("ruby-tzinfo-data" ,ruby-tzinfo-data)))
(synopsis "Ruby on Rails utility library")
@@ -3486,6 +4736,41 @@ 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.4.14")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "racc" version))
+ (sha256
+ (base32
+ "00yhs2ag7yy5v83mqvkbnhk9bvsh6mx3808k53n61ddzx446v1zl"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; tests fail to compile
+ (native-inputs
+ `(("ruby-hoe" ,ruby-hoe)
+ ("ruby-rake-compiler" ,ruby-rake-compiler)))
+ (synopsis
+ "Racc is a LALR(1) parser generator.
+ It is written in Ruby itself, and generates Ruby program.
+
+ NOTE: Ruby 1.8.x comes with Racc runtime module. You
+ can run your parsers generated by racc 1.4.x out of the
+ box.")
+ (description
+ "Racc is a LALR(1) parser generator.
+ It is written in Ruby itself, and generates Ruby program.
+
+ NOTE: Ruby 1.8.x comes with Racc runtime module. You
+ can run your parsers generated by racc 1.4.x out of the
+ box.")
+ (home-page
+ "http://i.loveruby.net/en/projects/racc/")
+ (license license:expat)))
+
(define-public ruby-rack
(package
(name "ruby-rack")
@@ -3602,6 +4887,200 @@ 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-radius
+ (package
+ (name "ruby-radius")
+ (version "0.7.4")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "radius" version))
+ (sha256
+ (base32
+ "0n0clzgvxpjm2gjlpz98x6gkw5hb84bmd435a1yaqs3m0k896v5s"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:phases
+ (modify-phases %standard-phases
+ ;; TODO: There are two .gem files in the source, and the build system
+ ;; seems to get confused, and attempts to remove the wrong one (I
+ ;; think)...
+ ;;
+ ;; For now, workaround the issue, by creating the file the install
+ ;; phase in the build system tries to remove.
+ (add-before 'install 'workaround-gem-removal
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((directory (string-append
+ (assoc-ref outputs "out")
+ "/lib/ruby/vendor_ruby/cache/pkg")))
+ (mkdir-p directory)
+ (with-output-to-file
+ (string-append directory "/radius-0.7.0.prerelease.gem")
+ (lambda _ (display "")))))))))
+ (native-inputs
+ `(("ruby-simplecov" ,ruby-simplecov)
+ ("ruby-kramdown" ,ruby-kramdown)
+ ("ruby-coveralls" ,ruby-coveralls)))
+ (synopsis
+ "Radius is a powerful tag-based template language for Ruby inspired by the template languages used in MovableType and TextPattern. It uses tags similar to XML, but can be used to generate any form of plain text (HTML, e-mail, etc...).")
+ (description
+ "Radius is a powerful tag-based template language for Ruby inspired by the template languages used in MovableType and TextPattern. It uses tags similar to XML, but can be used to generate any form of plain text (HTML, e-mail, etc...).")
+ (home-page "http://github.com/jlong/radius")
+ (license #f)))
+
+(define-public ruby-rainbow
+ (package
+ (name "ruby-rainbow")
+ (version "2.1.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "rainbow" version))
+ (sha256
+ (base32
+ "11licivacvfqbjx2rwppi8z89qff2cgs67d4wyx42pc5fg7g9f00"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:test-target "spec"))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-rspec" ,ruby-rspec)))
+ (synopsis
+ "Colorize printed text on ANSI terminals")
+ (description
+ "Colorize printed text on ANSI terminals")
+ (home-page "https://github.com/sickill/rainbow")
+ (license license:expat)))
+
+(define-public ruby-redjs
+ ;; There are no releases on rubygems and the last git commit was in 2012, so
+ ;; we package that.
+ (let ((commit "0d844f066666f967a78b20beb164c52d9ac3f5ca"))
+ (package
+ (name "ruby-redjs")
+ (version (string-append "0.4.6-1." (string-take commit 8)))
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/cowboyd/redjs.git")
+ (commit commit)))
+ (file-name (string-append name "-" version "-checkout"))
+ (sha256
+ (base32
+ "0cl3543xnzfn5qvlwjl2g1gg0jm6mfa75ag9qh89pfay7b0mxz7i"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f ; There are no tests.
+ #:phases
+ (modify-phases %standard-phases
+ (replace 'replace-git-ls-files
+ (lambda _
+ (substitute* "redjs.gemspec"
+ (("git ls-files") "find . -type f |sort"))
+ #t)))))
+ (synopsis "")
+ (description
+ "")
+ (home-page "")
+ (license license:expat)))) ;?
+
+(define-public ruby-rr
+ (package
+ (name "ruby-rr")
+ (version "1.2.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "rr" version))
+ (sha256
+ (base32
+ "0b05ycaw17wbxzycv1wvzklpqjnmi0dqy01igcl5jfmy1ydky66r"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; test files not included
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-rspec" ,ruby-rspec)))
+ (synopsis
+ "RR is a test double framework that features a rich selection of double techniques and a terse syntax.")
+ (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-rubocop
+ (package
+ (name "ruby-rubocop")
+ (version "0.41.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "rubocop" version))
+ (sha256
+ (base32
+ "02adr908a9l8nhdfjz137i20w1dv8mbfiamy0m9z9q0fvslfdxly"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; test files not included
+ (propagated-inputs
+ `(("ruby-parser" ,ruby-parser)
+ ("ruby-powerpack" ,ruby-powerpack)
+ ("ruby-rainbow" ,ruby-rainbow)
+ ("ruby-ruby-progressbar" ,ruby-ruby-progressbar)
+ ("ruby-unicode-display-width"
+ ,ruby-unicode-display-width)))
+ (synopsis
+ " Automatic Ruby code style checking tool.
+ Aims to enforce the community-driven Ruby Style Guide.
+")
+ (description
+ " Automatic Ruby code style checking tool.
+ Aims to enforce the community-driven Ruby Style Guide.
+")
+ (home-page "http://github.com/bbatsov/rubocop")
+ (license license:expat)))
+
+(define-public ruby-rest-client
+ (package
+ (name "ruby-rest-client")
+ (version "1.8.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "rest-client" version))
+ (sha256
+ (base32
+ "1m8z0c4yf6w47iqz6j2p7x1ip4qnnzvhdph9d5fgx081cvjly3p7"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'check 'fix-dependencies
+ (lambda _
+ (substitute* "rest-client.gemspec"
+ ((".*pry.*") "\n"))
+ #t))
+ (add-before 'check 'delete-network-tests
+ (lambda _
+ (delete-file "spec/integration/request_spec.rb")
+ #t)))))
+ (propagated-inputs
+ `(("ruby-http-cookie" ,ruby-http-cookie)
+ ("ruby-mime-types" ,ruby-mime-types)
+ ("ruby-netrc" ,ruby-netrc)))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-webmock", ruby-webmock)
+ ("ruby-rspec", ruby-rspec-2)))
+ (synopsis
+ "A simple HTTP and REST client for Ruby, inspired by the Sinatra microframework style of specifying actions: get, put, post, delete.")
+ (description
+ "A simple HTTP and REST client for Ruby, inspired by the Sinatra microframework style of specifying actions: get, put, post, delete.")
+ (home-page
+ "https://github.com/rest-client/rest-client")
+ (license license:expat)))
+
(define-public ruby-contest
(package
(name "ruby-contest")
@@ -3713,6 +5192,43 @@ and trust on your team.")
(home-page "https://cucumber.io/")
(license license:expat)))
+(define-public ruby-cucumber-core-1
+ (package
+ (inherit ruby-cucumber-core)
+ (version "1.5.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "cucumber-core" version))
+ (sha256
+ (base32
+ "0qj2fsqvp94nggnikbnrfvnmzr1pl6ifmdsxj69kdw1kkab30jjr"))))))
+
+(define-public ruby-cucumber-wire
+ (package
+ (name "ruby-cucumber-wire")
+ (version "0.0.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "cucumber-wire" version))
+ (sha256
+ (base32
+ "09ymvqb0sbw2if1nxg8rcj33sf0va88ancq5nmp8g01dfwzwma2f"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(;; This is a small dependency of ruby-cucumber, and requires cucumber
+ ;; in general (e.g. the require 'cucumber/step_argument' in
+ ;; lib/cucumber/wire/protocol/requets.rb), including for the tests.
+ #:tests? #t
+ #:test-target "spec"))
+ (native-inputs
+ `(("bundler" ,bundler)))
+ (synopsis "Wire protocol for Cucumber")
+ (description "Dependency of ruby-cucumber")
+ (home-page "https://github.com/cucumber/cucumber-ruby-wire")
+ (license license:expat)))
+
(define-public ruby-bio-logger
(package
(name "ruby-bio-logger")
@@ -4097,6 +5613,28 @@ neither too verbose nor too minimal.")
(home-page "https://github.com/tpope/fivemat")
(license license:expat)))
+(define-public ruby-semver2
+ (package
+ (name "ruby-semver2")
+ (version "3.4.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "semver2" version))
+ (sha256
+ (base32
+ "1g7w95kckdz00pi3yrvl6ymbnl5dvxcmfb4kkkp888jcq4fawdvg"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(;; No included tests
+ #:tests? #f))
+ (synopsis
+ "maintain versions as per http://semver.org")
+ (description
+ "maintain versions as per http://semver.org")
+ (home-page "https://github.com/haf/semver")
+ (license #f)))
+
(define-public ruby-sqlite3
(package
(name "ruby-sqlite3")
@@ -4272,6 +5810,165 @@ support to both Ruby and JRuby. It uses @code{unf_ext} on CRuby and
(home-page "https://github.com/knu/ruby-unf")
(license license:bsd-2)))
+(define-public ruby-unicode-display-width
+ (package
+ (name "ruby-unicode-display-width")
+ (version "1.1.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "unicode-display_width" version))
+ (sha256
+ (base32
+ "194d70pfxq4d7rrk0vsk1dvj46ns2f350308khi7q5cvnmg3h1xs"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; test data not included in gem.
+ (synopsis
+ "[Unicode 1.1.0] Determines the monospace display width of a string using EastAsianWidth.txt, Unicode general category, and other data.")
+ (description
+ "[Unicode 1.1.0] Determines the monospace display width of a string using EastAsianWidth.txt, Unicode general category, and other data.")
+ (home-page
+ "http://github.com/janlelis/unicode-display_width")
+ (license license:expat)))
+
+(define-public ruby-vcr
+ (package
+ (name "ruby-vcr")
+ (version "3.0.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "vcr" version))
+ (sha256
+ (base32
+ "1y19gb8vz1rbhx1qhim6kpp0fzksqhd7grb50hmrbjx5h4hc3y0y"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; No Rakefile in gem, and there's likely unpackaged
+ ; dependencies anyway.
+ (synopsis
+ "Record your test suite's HTTP interactions and replay them during future test runs for fast, deterministic, accurate tests.")
+ (description
+ "Record your test suite's HTTP interactions and replay them during future test runs for fast, deterministic, accurate tests.")
+ (home-page "http://vcr.github.io/vcr")
+ (license license:expat)))
+
+(define-public ruby_version ; There is another gem called 'ruby-version' so we
+ ; use an underscore in this name
+ (package
+ (name "ruby_version")
+ (version "1.0.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "ruby_version" version))
+ (sha256
+ (base32
+ "0854i1bjy56176anr05l5m0vc81nl53c7fyfg7sljj62m1d64dgj"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'check 'fix-dependencies
+ (lambda _
+ (delete-file "Gemfile.lock")
+ (delete-file "pkg/ruby_version-1.0.0.gem")
+ (substitute* "ruby_version.gemspec"
+ ((".*rdoc.*") "\n")
+ (("rake.*") "rake>)\n")
+ ((".*rubygems-tasks.*") "\n"))
+ (substitute* "Rakefile"
+ (("^require 'rubygems/tasks'") "")
+ (("Gem::Tasks.new") ""))
+ #t)))))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-rspec" ,ruby-rspec-2)
+ ("ruby-rake" ,ruby-rake)))
+ (synopsis
+ "Provides a RubyVersion class to simplify checking for the right Ruby version in your programs.")
+ (description
+ "Provides a RubyVersion class to simplify checking for the right Ruby version in your programs.")
+ (home-page
+ "https://github.com/janlelis/ruby_version")
+ (license license:expat)))
+
+(define-public ruby-webmock
+ (package
+ (name "ruby-webmock")
+ (version "1.22.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "webmock" version))
+ (sha256
+ (base32
+ "0la47vzbikhvnx8qcj8jli87agzzffwh11ggm7rpq43iz2rwp0sl"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:tests? #f))
+ (propagated-inputs
+ `(("bundler" ,bundler)
+ ("ruby-addressable" ,ruby-addressable)
+ ("ruby-crack" ,ruby-crack)
+ ("ruby-rspec" ,ruby-rspec)
+ ("ruby-hashdiff" ,ruby-hashdiff)))
+ (synopsis
+ "WebMock allows stubbing HTTP requests and setting expectations on HTTP requests.")
+ (description
+ "WebMock allows stubbing HTTP requests and setting expectations on HTTP requests.")
+ (home-page "http://github.com/bblimke/webmock")
+ (license license:expat)))
+
+(define-public ruby-websocket-driver
+ (package
+ (name "ruby-websocket-driver")
+ (version "0.6.4")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "websocket-driver" version))
+ (sha256
+ (base32
+ "1m37q24mxykvixcj8sv0jz7y2a88spysxg5rp4zf4p1q7mbblshy"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; tests not included
+ (propagated-inputs
+ `(("ruby-websocket-extensions"
+ ,ruby-websocket-extensions)))
+ (synopsis
+ "WebSocket protocol handler with pluggable I/O")
+ (description
+ "WebSocket protocol handler with pluggable I/O")
+ (home-page
+ "http://github.com/faye/websocket-driver-ruby")
+ (license license:expat)))
+
+(define-public ruby-websocket-extensions
+ (package
+ (name "ruby-websocket-extensions")
+ (version "0.1.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "websocket-extensions" version))
+ (sha256
+ (base32
+ "07qnsafl6203a2zclxl20hy4jq11c471cgvd0bj5r9fx1qqw06br"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; tests not included
+ (synopsis
+ "Generic extension manager for WebSocket connections")
+ (description
+ "Generic extension manager for WebSocket connections")
+ (home-page
+ "http://github.com/faye/websocket-extensions-ruby")
+ (license license:expat)))
+
(define-public ruby-domain-name
(package
(name "ruby-domain-name")
@@ -4442,6 +6139,23 @@ device.")
(home-page "https://rubyworks.github.io/ansi")
(license license:bsd-2)))
+(define-public ruby-ansi-to-html
+ (package
+ (name "ruby-ansi-to-html")
+ (version "0.0.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "ansi-to-html" version))
+ (sha256
+ (base32
+ "0gfvxhdd87kn1ppl8idi7663zqqkwldbbmdhmcimcx7w6hq4nj65"))))
+ (build-system ruby-build-system)
+ (synopsis "ANSI color sequence to HTML")
+ (description "ANSI color sequence to HTML")
+ (home-page "")
+ (license license:expat)))
+
(define-public ruby-systemu
(package
(name "ruby-systemu")
@@ -4850,7 +6564,7 @@ part of the Prawn PDF generator.")
(define-public ruby-puma
(package
(name "ruby-puma")
- (version "3.9.1")
+ (version "3.11.4")
(source
(origin
(method url-fetch)
@@ -4860,7 +6574,7 @@ part of the Prawn PDF generator.")
(file-name (string-append name "-" version ".tar.gz"))
(sha256
(base32
- "03pifga841h17brh4vgia8i2ybh3cmsyg0dbybzdf6dq51wzcxdx"))))
+ "1kv2xsv74v7bf8qwsgz439xp7qcx26ms565h1g6x7fm8xbaxl5dj"))))
(build-system ruby-build-system)
(arguments
`(#:tests? #f ; Tests require an out-dated version of minitest.
@@ -5220,7 +6934,40 @@ in standard Ruby syntax.")
"1p3f43scdzx9zxmy2kw5zsc3az6v46nq4brwcxmnscjy4w4racbv"))))
(build-system ruby-build-system)
(arguments
- `(#:tests? #f))
+ `(#:tests? #f
+ #:test-target "spec"
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'check 'remove-dependency-and-patch-path
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* "spec/spec_helper.rb"
+ ;; cannot require coveralls otherwise there is a dependency cycle
+ ;; childprocess, coveralls, rest-client, webmock, addressable,
+ ;; rspec-its, aruba, childprocess.
+ ((".*coveralls.*") "")
+ ((".*Coveralls.*") "")
+ ;; patch path to /bin/sh
+ (("/bin/sh") (which "sh"))
+ ;; testing
+ (("; sleep") "; puts \"before_sleep\"; sleep; puts \"after_sleep\"")
+ )
+ (substitute* "lib/childprocess/unix/process.rb"
+ (("send_signal 'TERM'") "puts 'terming'; send_signal 'TERM'")
+ (("send_signal 'KILL'") "puts 'killing'; send_signal 'KILL'")
+ (("return true if @exit_code")
+ "puts \"exit_code: #{@exit_code}\"; p self; return true if @exit_code"))
+ ;; sleep POLL_INTERVAL
+ (substitute* "lib/childprocess/abstract_process.rb"
+ (("sleep POLL_INTERVAL")
+ "puts 'sleeping'; sleep POLL_INTERVAL; puts 'awake'")
+ (("unless ok") "puts \"ok was #{ok} and exited? was #{exited?}\"; unless ok"))
+ #t))
+ ;(replace 'check
+ ; ;; for testing for ben only
+ ; (lambda _
+ ; (zero? (system* "rspec" "spec/childprocess_spec.rb" "-e" "kills
+ ; the full process tree"))))
+ )))
(native-inputs
`(("bundler" ,bundler)
("ruby-rspec" ,ruby-rspec)))
@@ -5256,9 +7003,12 @@ programs running in the background, in Ruby.")
(base32
"08q64b5br692dd3v0a9wq9q5dvycc6kmiqmjbdxkxbfizggsvx6l"))))
(build-system ruby-build-system)
- (arguments
- ;; Tests require network
- `(#:tests? #f))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-yard" ,ruby-yard)
+ ("ruby-rubocop" ,ruby-rubocop)
+ ("ruby-mocha" ,ruby-mocha)
+ ("ruby-minitest-reporters" ,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,
@@ -5273,23 +7023,46 @@ all known public suffixes.")
(package
(name "ruby-addressable")
(version "2.5.2")
- (source (origin
- (method url-fetch)
- (uri (rubygems-uri "addressable" version))
- (sha256
- (base32
- "0viqszpkggqi8hq87pqp0xykhvz60g99nwmkwsb0v45kc2liwxvk"))))
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "addressable" version))
+ (sha256
+ (base32
+ "0viqszpkggqi8hq87pqp0xykhvz60g99nwmkwsb0v45kc2liwxvk"))))
(build-system ruby-build-system)
- (propagated-inputs
- `(("ruby-public-suffix" ,ruby-public-suffix)))
(arguments
- ;; No test target
- `(#:tests? #f))
- (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.")
+ '(#:test-target "spec"
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'fix-rakefile
+ (lambda _
+ (substitute* "Gemfile"
+ (("git: 'https://github.com/sporkmonger/rack-mount.git',") "")
+ ((".*launchy.*") "")
+ ((".*rake.*") "gem 'rake'\n")
+ ((".*redcarpet.*") ""))
+ #t))
+ (add-before 'check 'delete-network-test
+ (lambda _
+ (delete-file "spec/addressable/net_http_compat_spec.rb")
+ #t)))))
+ (native-inputs
+ `(("ruby-rspec" ,ruby-rspec)
+ ("bundler" ,bundler)
+ ("ruby-idn-ruby" ,ruby-idn-ruby)
+ ("ruby-public-suffix" ,ruby-public-suffix)
+ ("ruby-sporkmonger-rack-mount" ,ruby-sporkmonger-rack-mount)
+ ("ruby-rspec-its", ruby-rspec-its)
+ ("ruby-yard" ,ruby-yard)
+ ("ruby-simplecov" ,ruby-simplecov)))
+ (synopsis "Uniform resource identifier (URI) reimplementation")
+ (description
+ "Addressable is a replacement for the URI implementation that is part of
+Ruby's standard library. It more closely conforms to the relevant RFCs and
+adds support for IRIs and URI templates.")
+ (home-page
+ "https://github.com/sporkmonger/addressable")
(license license:asl2.0)))
(define-public ruby-colorator
@@ -5554,19 +7327,58 @@ interface. It allows Jekyll to rebuild your site when a file changes.")
(package
(name "ruby-parallel")
(version "1.12.1")
- (source (origin
- (method url-fetch)
- (uri (rubygems-uri "parallel" version))
- (sha256
- (base32
- "01hj8v1qnyl5ndrs33g8ld8ibk0rbcqdpkpznr04gkbxd11pqn67"))))
+ (source
+ (origin
+ (method url-fetch)
+ ;; fetch from github as rubygem does not contain tests
+ (uri (string-append "https://github.com/grosser/parallel/archive/v"
+ version ".tar.gz"))
+ (file-name (string-append name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ "0jpibyj9xzihllq02vg48gc7w3xklp5srx52ddcfg165mkx6xpwp"))))
(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-ruby-progressbar" ,ruby-ruby-progressbar)
+ ("ruby-bump" ,ruby-bump)
+ ("procps" ,procps)
+ ("lsof" ,lsof)
+ ("ruby-mysql2" ,ruby-mysql2)
+ ("ruby-sqlite3" ,ruby-sqlite3)
+ ("ruby-i18n" ,ruby-i18n)))
+ (synopsis "Run Ruby code in parallel processes")
+ (description
+ "Run any kind of code in parallel processes")
(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-cane
@@ -5720,20 +7532,57 @@ functionality from Prawn.")
(package
(name "ruby-prawn-table")
(version "0.2.2")
- (source (origin
- (method url-fetch)
- (uri (rubygems-uri "prawn-table" version))
- (sha256
- (base32
- "1nxd6qmxqwl850icp18wjh5k0s3amxcajdrkjyzpfgq0kvilcv9k"))))
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "prawn-table" version))
+ (sha256
+ (base32
+ "1nxd6qmxqwl850icp18wjh5k0s3amxcajdrkjyzpfgq0kvilcv9k"))))
(build-system ruby-build-system)
- (arguments `(#:tests? #f)); No rakefile
(propagated-inputs
- `(("ruby-prawn" ,ruby-prawn)))
- (home-page "https://github.com/prawnpdf/prawn-table")
- (synopsis "Tables support for Prawn")
- (description "This gem provides tables support for Prawn.")
- (license license:gpl3+)))
+ `(("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)
+ (if tests?
+ (invoke "rspec")
+ #t))))))
+ (synopsis
+ " Prawn::Table provides tables for the Prawn PDF toolkit
+")
+ (description
+ " Prawn::Table provides tables for the Prawn PDF toolkit
+")
+ (home-page
+ "https://github.com/prawnpdf/prawn-table")
+ (license (list #f #f #f))))
(define-public ruby-kramdown
(package
@@ -5846,21 +7695,47 @@ is compatible with stylesheets designed for pygments.")
(define-public ruby-hashie
(package
(name "ruby-hashie")
- (version "3.6.0")
- (source (origin
- (method url-fetch)
- (uri (rubygems-uri "hashie" version))
- (sha256
- (base32
- "13bdzfp25c8k51ayzxqkbzag3wj5gc1jd8h7d985nsq6pn57g5xh"))))
+ (version "3.5.7")
+ (source
+ (origin
+ (method url-fetch)
+ ;; The gem does not include Gemfile.
+ (uri (string-append "https://github.com/intridea/hashie/archive/v"
+ version ".tar.gz"))
+ (file-name (string-append name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ "00afsf591jj1q7j44fswwwrki01qgxa6wnqi6a6sq3bfjm1jlxy6"))))
(build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f
+ #:test-target "spec"
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'build 'fix-dependencies
+ (lambda _
+ (substitute* "Gemfile"
+ ((".*pry.*") "")
+ ((".*guard.*") "")
+ ((".*codeclimate.*") "")
+ (("rubocop.*") "rubocop'\n")
+ (("rspec-core.*") "rspec-core'\n"))
+ (substitute* "spec/spec_helper.rb"
+ ((".*pry.*") ""))
+ #t)))))
(native-inputs
- `(("bundler" ,bundler)))
- (arguments `(#:tests? #f)); FIXME: Could not locate Gemfile or .bundle/ directory
+ `(("bundler" ,bundler)
+ ("ruby-rspec" ,ruby-rspec)
+ ("ruby-rspec-pending-for" ,ruby-rspec-pending-for)
+ ;("ruby-guard" ,ruby-guard)
+ ;("ruby-guard-rspec" ,ruby-guard-rspec)
+ ("ruby-activesupport" ,ruby-activesupport)
+ ("ruby-rubocop" ,ruby-rubocop)))
+ (synopsis
+ "Hashie is a collection of classes and mixins that make hashes more powerful.")
+ (description
+ "Hashie is a collection of classes and mixins that make hashes more powerful.")
(home-page "https://github.com/intridea/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
@@ -6050,3 +7925,1282 @@ Pathname.")
(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-aruba
+ (package
+ (name "ruby-aruba")
+ (version "0.14.6")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "aruba" version))
+ (sha256
+ (base32
+ "11v7d4d3q1as3w5md22q3vilnmqw1icp7sg955ylfzmxjc07pdby"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f ; There are 3 test failures to do with running commands, not
+ ; sure what the issue is.
+ #:test-target "spec"
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'check 'fix-gemfile
+ (lambda _
+ (substitute* "Gemfile"
+ ((".*byebug.*") "\n")
+ ((".*pry.*") "\n")
+ ((".*yaml.*") "\n")
+ ((".*bcat.*") "\n")
+ ((".*kramdown.*") "\n")
+ ((".*fuubar.*") "\n")
+ ((".*rubocop.*") "\n")
+ ((".*cucumber-pro.*") "\n")
+ ((".*license_finder.*") "\n")
+ ((".*relish.*") "\n")
+ )
+ (substitute* "spec/spec_helper.rb"
+ ((".*simplecov.*") "")
+ (("^SimpleCov.*") ""))
+ #t))
+ (add-before 'check 'set-home
+ (lambda _ (setenv "HOME" "/tmp") #t)))))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-simplecov" ,ruby-simplecov)
+ ("ruby-rspec" ,ruby-rspec)
+ ("ruby-fuubar" ,ruby-fuubar)))
+ (propagated-inputs
+ `(("ruby-childprocess" ,ruby-childprocess)
+ ("ruby-contracts" ,ruby-contracts)
+ ("ruby-cucumber" ,ruby-cucumber)
+ ("ruby-ffi" ,ruby-ffi)
+ ("ruby-rspec-expectations" ,ruby-rspec-expectations)
+ ("ruby-thor" ,ruby-thor)))
+ (synopsis
+ "Extension for popular TDD and BDD frameworks like \"Cucumber\", \"RSpec\" and \"Minitest\" to make testing commandline applications meaningful, easy and fun.")
+ (description
+ "Extension for popular TDD and BDD frameworks like \"Cucumber\", \"RSpec\" and \"Minitest\" to make testing commandline applications meaningful, easy and fun.")
+ (home-page "http://github.com/cucumber/aruba")
+ (license license:expat)))
+
+;; A version of ruby-aruba without tests run so that circular dependencies can
+;; be avoided.
+(define ruby-aruba-without-tests
+ (package (inherit ruby-aruba)
+ (arguments
+ `(#:tests? #f))
+ (propagated-inputs
+ (map (lambda (input)
+ (if (string=? (car input)
+ "ruby-cucumber")
+ `("ruby-cucumber" ,ruby-cucumber-without-tests)
+ input))
+ (package-propagated-inputs ruby-aruba)))
+ (native-inputs
+ `())))
+
+(define-public ruby-cucumber
+ (package
+ (name "ruby-cucumber")
+ (version "2.4.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "cucumber" version))
+ (sha256
+ (base32
+ "1k4j31a93r0zhvyq2mm2k8irppbvkzbsg44r3mf023959v18fzih"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:test-target "spec"
+ ;; TODO: Test failure as documented at
+ ;; https://github.com/cucumber/cucumber/issues/58
+ ;;
+ ;; Cucumber::Formatter::Html when writing the report to a file with a
+ ;; step that embeds a snapshot converts the snapshot path to a relative
+ ;; path
+ ;;
+ ;; Failure/Error: expect(@out).to
+ ;; receive(:respond_to?).with(:path).and_return(true)
+ ;;
+ ;; (#<StringIO:0x00005555570887a0>).respond_to?(:path)
+ ;; expected: 1 time with arguments: (:path)
+ ;; received: 3 times with arguments: (:path)
+ ;; # ./spec/cucumber/formatter/html_spec.rb:35
+ #:tests? #f))
+ (propagated-inputs
+ `(("ruby-builder" ,ruby-builder)
+ ("ruby-cucumber-core" ,ruby-cucumber-core-1)
+ ("ruby-cucumber-wire" ,ruby-cucumber-wire)
+ ("ruby-diff-lcs" ,ruby-diff-lcs)
+ ("ruby-gherkin" ,ruby-gherkin)
+ ("ruby-multi-json" ,ruby-multi-json)
+ ("ruby-multi-test" ,ruby-multi-test)))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ;; Use a untested version of aruba, to avoid a circular dependency, as
+ ;; ruby-aruba depends on ruby-cucumber.
+ ("ruby-aruba", ruby-aruba-without-tests)
+ ("ruby-rspec" ,ruby-rspec)
+ ("ruby-pry" ,ruby-pry)
+ ("ruby-nokogiri" ,ruby-nokogiri)))
+ (synopsis
+ "Behaviour Driven Development with elegance and joy")
+ (description
+ "Behaviour Driven Development with elegance and joy")
+ (home-page "http://cukes.info")
+ (license license:asl2.0)))
+
+(define ruby-cucumber-without-tests
+ (package (inherit ruby-cucumber)
+ (arguments
+ `(#:tests? #f))
+ (native-inputs
+ `())))
+
+(define-public ruby-coffee-script
+ (package
+ (name "ruby-coffee-script")
+ (version "2.4.1")
+ (source
+ (origin
+ (method url-fetch)
+ ;; fetch from github as the gem does not contain testing code
+ (uri (string-append
+ "https://github.com/rails/ruby-coffee-script/archive/v"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "0gbcg40ks4ifm332ljmgq2l44ssld0z6xhjzk48v6mpaxyz8mc92"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-before 'check 'fix-test
+ (lambda _
+ ;; patch submitted upstream at
+ ;; https://github.com/rails/ruby-coffee-script/pull/6
+ (substitute* "test/test_coffee_script.rb"
+ ((" unexpected unless\\\"")
+ " unexpected unless\", '[stdin]:3:11: unexpected unless'"))
+ #t)))))
+ (propagated-inputs
+ `(("ruby-coffee-script-source" ,ruby-coffee-script-source)
+ ("ruby-execjs" ,ruby-execjs)
+ ("ruby-duktape", ruby-duktape))) ; use as the JS interpreter
+ (synopsis "bridge to the javascript CoffeeScript compiler.")
+ (description
+ "Ruby CoffeeScript is a bridge to the javascript CoffeeScript compiler.
+CoffeeScript is an attempt to expose the good parts of JavaScript in a simple
+way.")
+ (home-page
+ "http://github.com/rails/ruby-coffee-script")
+ (license license:expat)))
+
+(define-public ruby-ref
+ (package
+ (name "ruby-ref")
+ (version "2.0.0")
+ (source
+ (origin
+ (method url-fetch)
+ ;; Tests are not distributed at rubygems.org so download from GitHub
+ ;; instead.
+ (uri (string-append "https://github.com/ruby-concurrency/ref/archive/v"
+ version ".tar.gz"))
+ (file-name (string-append name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ "1090z8vzf8bf7gx3akvrn4alcklyanbg6hipjmzlzkx0lr1l5zj4"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:test-target "spec"))
+ (synopsis
+ "Library that implements weak, soft, and strong references in Ruby that work
+across multiple runtimes (MRI, Jruby and Rubinius). Also includes implementation
+of maps/hashes that use references and a reference queue.")
+ (description
+ "Library that implements weak, soft, and strong references in Ruby that work
+across multiple runtimes (MRI, Jruby and Rubinius). Also includes
+implementation of maps/hashes that use references and a reference queue.")
+ (home-page
+ "http://github.com/ruby-concurrency/ref")
+ (license license:expat)))
+
+;; haml 4 cannot currently be packaged because tilt is not yet packaged.
+(define-public ruby-haml
+ (package
+ (name "ruby-haml")
+ (version "4.0.7")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "haml" version))
+ (sha256
+ (base32
+ "0mrzjgkygvfii66bbylj2j93na8i89998yi01fin3whwqbvx0m1p"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; circular dependency with tilt
+; (propagated-inputs `(("ruby-tilt" ,ruby-tilt)))
+ (synopsis "Haml (HTML Abstraction Markup Language) library.")
+ (description
+ "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-faraday
+ (package
+ (name "ruby-faraday")
+ (version "0.9.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "faraday" version))
+ (sha256
+ (base32
+ "1kplqkpn2s2yl3lxdf6h7sfldqvkbkpxwwxhyk7mdhjplb5faqh6"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:tests? #f))
+ (propagated-inputs
+ `(("ruby-multipart-post" ,ruby-multipart-post)))
+ (synopsis "HTTP/REST API client library.")
+ (description "HTTP/REST API client library.")
+ (home-page
+ "https://github.com/lostisland/faraday")
+ (license license:expat)))
+
+(define-public ruby-nio4r
+ (package
+ (name "ruby-nio4r")
+ (version "2.2.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "nio4r" version))
+ (sha256
+ (base32
+ "0jjrj7vs29w6dfgsxq08226jfbi2j0x62lf4p9zmvyp19dj4z00a"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f
+ #:test-target "spec"
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'check 'fix-dependencies
+ (lambda _
+ (substitute* "Gemfile"
+ (("rubocop.*") "rubocop\"\n"))
+ #t))
+ (add-before 'check 'compile
+ (lambda _
+ (zero? (system* "rake" "compile")))))))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-rake-compiler" ,ruby-rake-compiler)
+ ("ruby-rspec" ,ruby-rspec)
+ ("ruby-rubocop" ,ruby-rubocop)
+ ("ruby-coveralls" ,ruby-coveralls)))
+ (synopsis "New IO for Ruby")
+ (description "New IO for Ruby")
+ (home-page "https://github.com/celluloid/nio4r")
+ (license license:expat)))
+
+(define-public ruby-globalid
+ (package
+ (name "ruby-globalid")
+ (version "0.3.6")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "globalid" version))
+ (sha256
+ (base32
+ "145xrpsfx1qqjy33r6qa588wb16dvdhxzj2aysh755vhg6hgm291"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f))
+ (propagated-inputs
+ `(("ruby-activesupport" ,ruby-activesupport)))
+ (synopsis
+ "URIs for your models makes it easy to pass references around.")
+ (description
+ "URIs for your models makes it easy to pass references around.")
+ (home-page "http://www.rubyonrails.org")
+ (license license:expat)))
+
+(define-public ruby-sprockets
+ (package
+ (name "ruby-sprockets")
+ (version "3.7.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "sprockets" version))
+ (sha256
+ (base32
+ "0sv3zk5hwxyjvg7iy9sggjc7k3mfxxif7w8p260rharfyib939ar"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; tests not included
+ (propagated-inputs
+ `(("ruby-concurrent" ,ruby-concurrent)
+ ("ruby-rack" ,ruby-rack)))
+ (synopsis
+ "Sprockets is a Rack-based asset packaging system that concatenates and serves JavaScript, CoffeeScript, CSS, LESS, Sass, and SCSS.")
+ (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-uglifier
+(package
+ (name "ruby-uglifier")
+ (version "3.0.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "uglifier" version))
+ (sha256
+ (base32
+ "05a7xqzzlliqbd32jfkmis08pb0cljns7jx14ybkqb9zbg7ph35h"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; Tests fail, perhaps they require npm? test-target "spec"
+ ;; #:phases
+ ;; (modify-phases %standard-phases
+ ;; (add-before 'check 'list
+ ;; (lambda _
+ ;; (system* "rake" "js")
+ ;; (system* "gem" "list"))))))
+ (propagated-inputs
+ `(("ruby-execjs" ,ruby-execjs)))
+ ;; (native-inputs
+ ;; `(("bundler" ,bundler)
+ ;; ("ruby-rubocop" ,ruby-rubocop)
+ ;; ("ruby-rspec" ,ruby-rspec)
+ ;; ("ruby-sourcemap" ,ruby-sourcemap)
+ ;; ("ruby-duktape" ,ruby-duktape))) ; Use as the JS interpreter
+ (synopsis
+ "Uglifier minifies JavaScript files by wrapping UglifyJS to be accessible in Ruby")
+ (description
+ "Uglifier minifies JavaScript files by wrapping UglifyJS to be accessible in Ruby")
+ (home-page "http://github.com/lautis/uglifier")
+ (license license:expat)))
+
+(define-public ruby-sourcemap
+(package
+ (name "ruby-sourcemap")
+ (version "0.1.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "sourcemap" version))
+ (sha256
+ (base32
+ "0l111zg9qh2g15rpmi2d006m3h27hl462d7zmc4js67ppmkcd7w8"))))
+ (build-system ruby-build-system)
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-minitest" ,ruby-minitest)))
+ (synopsis "Ruby source maps")
+ (description "Ruby source maps")
+ (home-page "http://github.com/maccman/sourcemap")
+ (license license:expat)))
+
+(define-public ruby-turbolinks-source
+ (package
+ (name "ruby-turbolinks-source")
+ (version "5.0.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "turbolinks-source" version))
+ (sha256
+ (base32
+ "1s197pamkac9kkhslj41gxxihx6jp3dh4g394k9zmbxwkfrf36zb"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; There are no tests.
+ (synopsis "Turbolinks JavaScript assets")
+ (description "Turbolinks JavaScript assets")
+ (home-page
+ "https://github.com/turbolinks/turbolinks-source-gem")
+ (license license:expat)))
+
+(define-public ruby-turbolinks
+ (package
+ (name "ruby-turbolinks")
+ (version "5.0.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "turbolinks" version))
+ (sha256
+ (base32
+ "1dpsl17mygsd3hjcb2zq05n9zygbi0qc5130h276lw6py8g7nppc"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; There are no tests.
+ (propagated-inputs
+ `(("ruby-turbolinks-source" ,ruby-turbolinks-source)))
+ (synopsis
+ "Rails engine for Turbolinks 5 support")
+ (description
+ "Rails engine for Turbolinks 5 support")
+ (home-page
+ "https://github.com/turbolinks/turbolinks-rails")
+ (license license:expat)))
+
+(define-public ruby-jbuilder
+ (package
+ (name "ruby-jbuilder")
+ (version "2.7.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "jbuilder" version))
+ (sha256
+ (base32
+ "1n3myqk2hdnidzzbgcdz2r1y4cr5vpz5nkfzs0lz4y9gkjbjyh2j"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-before 'check 'fix-dependencies'
+ (lambda _
+ (substitute* "Gemfile"
+ ((".*pry.*") ""))
+ #t)))))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-mocha" ,ruby-mocha)
+ ("ruby-appraisal" ,ruby-appraisal)))
+ (propagated-inputs
+ `(("ruby-activesupport" ,ruby-activesupport)
+ ("ruby-multi-json" ,ruby-multi-json)))
+ (synopsis
+ "Create JSON structures via a Builder-style DSL")
+ (description
+ "Create JSON structures via a Builder-style DSL")
+ (home-page "https://github.com/rails/jbuilder")
+ (license license:expat)))
+
+(define-public ruby-erubi
+ (package
+ (name "ruby-erubi")
+ (version "1.7.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "erubi" version))
+ (sha256
+ (base32
+ "1zkaqb8zv14azb2fa8w79d3mssdx86k9kg2m1bgc2k428y2zf8g9"))))
+ (build-system ruby-build-system)
+ (synopsis
+ "Erubi is a ERB template engine for ruby. It is a simplified fork of Erubis")
+ (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-rubygems
+ (package
+ (name "ruby-rubygems")
+ (version (string-append "2.6.6"))
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://rubygems.org/rubygems/rubygems-"
+ version ".tgz"))
+ (sha256
+ (base32
+ "0x0ldlwr627d0brw96jdbscib6d2nk19izvnh8lzsasszi1k5rkq"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (replace 'build
+ (lambda* (#:key outputs #:allow-other-keys)
+ (zero? (system*
+ "ruby" "setup.rb"
+ (string-append
+ "--prefix=" (assoc-ref outputs "out"))))))
+ (delete 'check) ; fix
+ (delete 'install) ; done in build
+ )))
+ (synopsis "")
+ (description
+ "")
+ (home-page "")
+ (license license:expat))) ;?
+
+(define-public ruby-ruby-dep
+ (package
+ (name "ruby-ruby-dep")
+ (version "1.4.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "ruby_dep" version))
+ (sha256
+ (base32
+ "12i57gpy0gmkwnd7l6xdjpfw9bygxmgwx4hjwgg4mca2jr7d3g47"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; Do not test to avoid circular dependency with gem_isolator.
+ (synopsis
+ "Creates a version constraint of supported Rubies,suitable for a gemspec file")
+ (description
+ "Creates 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-guard-compat
+ (package
+ (name "ruby-guard-compat")
+ (version "1.2.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "guard-compat" version))
+ (sha256
+ (base32
+ "1zj6sr1k8w59mmi27rsii0v8xyy2rnsi09nqvwpgj1q10yq1mlis"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:test-target "spec"))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-rspec" ,ruby-rspec)
+ ("ruby-rubocop" ,ruby-rubocop)))
+ (synopsis
+ "Helps creating valid Guard plugins and testing them")
+ (description
+ "Helps creating valid Guard plugins and testing them")
+ (home-page "")
+ (license license:expat)))
+
+(define-public ruby-guard-rspec
+ (package
+ (name "ruby-guard-rspec")
+ (version "4.7.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "guard-rspec" version))
+ (sha256
+ (base32
+ "1jkm5xp90gm4c5s51pmf92i9hc10gslwwic6mvk72g0yplya0yx4"))))
+ (build-system ruby-build-system)
+ (arguments
+ `(#:tests? #f)) ; Tests require further dependencies e.g. gem_isolator.
+ (propagated-inputs
+ `(("ruby-guard" ,ruby-guard)
+ ("ruby-guard-compat" ,ruby-guard-compat)
+ ("ruby-rspec" ,ruby-rspec)))
+ (synopsis
+ "Guard::RSpec automatically run your specs (much like autotest).")
+ (description
+ "Guard::RSpec automatically run your specs (much like autotest).")
+ (home-page
+ "https://github.com/guard/guard-rspec")
+ (license license:expat)))
+
+(define-public ruby-backports
+ (package
+ (name "ruby-backports")
+ (version "3.6.7")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "backports" version))
+ (sha256
+ (base32
+ "0m8jkjh4kymgfipd6yb0zcxlas4x5r60k2c94zkklb1ryma33grc"))))
+ (build-system ruby-build-system)
+ (synopsis
+ "Essential backports that enable many of the nice features of Ruby 1.8.7 up to 2.1.0 for earlier versions.")
+ (description
+ "Essential backports that enable many of the nice features of Ruby 1.8.7 up to 2.1.0 for earlier versions.")
+ (home-page
+ "http://github.com/marcandre/backports")
+ (license license:expat)))
+
+(define-public ruby-gh
+ (package
+ (name "ruby-gh")
+ (version "0.14.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "gh" version))
+ (sha256
+ (base32
+ "0j7m6jmxzkxvnqgnhmci33a89qpaxxcrm55kk5vz4bcpply04hx2"))))
+ (build-system ruby-build-system)
+ (propagated-inputs
+ `(("ruby-addressable" ,ruby-addressable)
+ ("ruby-backports" ,ruby-backports)
+ ("ruby-faraday" ,ruby-faraday)
+ ("ruby-multi-json" ,ruby-multi-json)
+ ("ruby-net-http-persistent"
+ ,ruby-net-http-persistent)
+ ;("ruby-net-http-pipeline"
+ ; ,ruby-net-http-pipeline)
+ ))
+ (synopsis
+ "multi-layer client for the github api v3")
+ (description
+ "multi-layer client for the github api v3")
+ (home-page "http://gh.rkh.im/")
+ (license license:expat)))
+
+(define-public ruby-faraday-middleware
+ (package
+ (name "ruby-faraday-middleware")
+ (version "0.10.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "faraday_middleware" version))
+ (sha256
+ (base32
+ "0nxia26xzy8i56qfyz1bg8dg9yb26swpgci8n5jry8mh4bnx5r5h"))))
+ (build-system ruby-build-system)
+ (propagated-inputs
+ `(("ruby-faraday" ,ruby-faraday)))
+ (synopsis "Various middleware for Faraday")
+ (description "Various middleware for Faraday")
+ (home-page
+ "https://github.com/lostisland/faraday_middleware")
+ (license license:expat)))
+
+(define-public ruby-launchy
+ (package
+ (name "ruby-launchy")
+ (version "2.4.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "launchy" version))
+ (sha256
+ (base32
+ "190lfbiy1vwxhbgn4nl4dcbzxvm049jwc158r2x7kq3g5khjrxa2"))))
+ (build-system ruby-build-system)
+ (propagated-inputs
+ `(("ruby-addressable" ,ruby-addressable)))
+ (synopsis
+ "Launchy is helper class for launching cross-platform applications in a fire and forget manner. There are application concepts (browser, email client, etc) that are common across all platforms, and they may be launched differently on each platform. Launchy is here to make a common approach to launching external application from within ruby programs.")
+ (description
+ "Launchy is helper class for launching cross-platform applications in a fire and forget manner. There are application concepts (browser, email client, etc) that are common across all platforms, and they may be launched differently on each platform. Launchy is here to make a common approach to launching external application from within ruby programs.")
+ (home-page
+ "http://github.com/copiousfreetime/launchy")
+ (license #f)))
+
+(define-public ruby-travis
+ (package
+ (name "ruby-travis")
+ (version "1.8.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "travis" version))
+ (sha256
+ (base32
+ "0s88790wlhlsaxs9561w3h6vhj00sc36bw6k7rajj6vi0416s73z"))))
+ (build-system ruby-build-system)
+ (propagated-inputs
+ `(("ruby-addressable" ,ruby-addressable)
+ ("ruby-backports" ,ruby-backports)
+ ("ruby-faraday" ,ruby-faraday)
+ ("ruby-faraday-middleware"
+ ,ruby-faraday-middleware)
+ ("ruby-gh" ,ruby-gh)
+ ("ruby-highline" ,ruby-highline)
+ ("ruby-launchy" ,ruby-launchy)
+ ("ruby-pry" ,ruby-pry)
+ ;("ruby-pusher-client" ,ruby-pusher-client)
+ ;("ruby-typhoeus" ,ruby-typhoeus)
+ ))
+ (synopsis
+ "CLI and Ruby client library for Travis CI")
+ (description
+ "CLI and Ruby client library for Travis CI")
+ (home-page
+ "https://github.com/travis-ci/travis.rb")
+ (license license:expat)))
+
+(define-public ruby-sinatra
+ (package
+ (name "ruby-sinatra")
+ (version "2.0.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "sinatra" version))
+ (sha256
+ (base32
+ "0dbpy8cm06psnk4q1d8map4z81xvlghyi91075xsm56ka2d6kpsi"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:tests? #f))
+ (propagated-inputs
+ `(("ruby-rack" ,ruby-rack)
+ ("ruby-rack-protection" ,ruby-rack-protection)
+ ("ruby-tilt" ,ruby-tilt)))
+ (native-inputs
+ `(("ruby-rack-test" ,ruby-rack-test)))
+ (synopsis
+ "Sinatra is a DSL for quickly creating web applications in Ruby with minimal effort.")
+ (description
+ "Sinatra is a DSL for quickly creating web applications in Ruby with minimal effort.")
+ (home-page "http://www.sinatrarb.com/")
+ (license license:expat)))
+
+(define-public ruby-bzip2-ruby
+ ;; Use git reference because gem is out of date.
+ (let ((revision "1")
+ (commit "e58f154624ff2d770e92a70e0d8fb1a9e6564720"))
+ (package
+ (name "ruby-bzip2-ruby")
+ (version (string-append "0.2.7." revision "." commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/brianmario/bzip2-ruby.git")
+ (commit commit)))
+ (file-name (string-append name "-" version "-checkout"))
+ (sha256
+ (base32
+ "072jzd1fm6z0fnc166q7n4h8h4vrb9jhpcl7swh7d0qm4fx4cxvz"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:test-target "spec"
+ ; #:gem-flags
+ ; (list "--"
+ ; (string-append "--with-bz2-dir="
+ ; (assoc-ref %build-inputs "bzip2")
+ ; "/include/" ))
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'patch-gemspec-and-source
+ (lambda _
+ (substitute* "bzip2-ruby.gemspec"
+ (("s.files = `git ls-files`") "s.files = `find *`")
+ (("s.test_files = `git ls-files spec`")
+ "s.files = `find spec`"))
+ ;; Use part of the patch proposed at
+ ;; https://github.com/brianmario/bzip2-ruby/pull/26
+ (substitute* "ext/bzip2/writer.c"
+ (("RBASIC\\(res\\)->klass = rb_cString;")
+ "RBASIC_SET_CLASS(res, rb_cString);"))
+ #t)))))
+ (native-inputs
+ `(("bundler" ,bundler)
+ ("ruby-rspec" ,ruby-rspec-2)
+ ("ruby-rake-compiler" ,ruby-rake-compiler)))
+ (synopsis "Ruby C bindings to libbzip2.")
+ (description "Ruby C bindings to libbzip2.")
+ (home-page
+ "http://github.com/brianmario/bzip2-ruby")
+ (license #f))))
+
+(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
+ '(#:tests? #f))
+ (synopsis
+ "open child process with handles on pid, stdin, stdout, and stderr: manage child processes and their io handles easily.")
+ (description
+ "open child process with handles on pid, stdin, stdout, and stderr: manage child processes and their io handles easily.")
+ (home-page "https://github.com/ahoward/open4")
+ (license #f)))
+
+(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
+ '(#:tests? #f))
+ (propagated-inputs
+ `(("ruby-concurrent" ,ruby-concurrent)))
+ (synopsis
+ "Efficient, immutable, thread-safe collection classes for Ruby")
+ (description
+ "Efficient, immutable, thread-safe collection classes for Ruby")
+ (home-page
+ "https://github.com/hamstergem/hamster")
+ (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))
+ (propagated-inputs
+ `(("ruby-hamster" ,ruby-hamster)
+ ("ruby-open4" ,ruby-open4)))
+ (synopsis "Command line builders and executors.")
+ (description
+ "Command line builders and executors.")
+ (home-page "https://github.com/tobyclemson/lino")
+ (license license:expat)))
+
+(define-public ruby-terraform
+ (package
+ (name "ruby-terraform")
+ (version "0.12.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "ruby-terraform" version))
+ (sha256
+ (base32
+ "198q2nmfbyn0x7vs81x4gmxymz0z5k7y7x9v48vi8szqlhm9fp7r"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:tests? #f))
+ (propagated-inputs `(("ruby-lino" ,ruby-lino)))
+ (synopsis
+ "Wraps the Terraform CLI so that Terraform can be invoked from a Ruby script or Rakefile.")
+ (description
+ "Wraps the Terraform CLI so that Terraform can be invoked from a Ruby script or Rakefile.")
+ (home-page
+ "https://github.com/tobyclemson/ruby_terraform")
+ (license license:expat)))
+
+(define-public ruby-sucker-punch
+ (package
+ (name "ruby-sucker-punch")
+ (version "2.0.4")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "sucker_punch" version))
+ (sha256
+ (base32
+ "064dgfg3jwna2x1iyhbz3pvh3iryxs4vls77jmmad571hjz0l01p"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:tests? #f))
+ (propagated-inputs
+ `(("ruby-concurrent" ,ruby-concurrent)))
+ (synopsis
+ "Asynchronous processing library for Ruby")
+ (description
+ "Asynchronous processing library for Ruby")
+ (home-page
+ "https://github.com/brandonhilkert/sucker_punch")
+ (license license:expat)))
+
+(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))
+ (synopsis
+ "A job queue that uses PostgreSQL's advisory locks for speed and reliability.")
+ (description
+ "This package provides a job queue that uses PostgreSQL's advisory locks for speed and reliability.")
+ (home-page "https://github.com/chanks/que")
+ (license license:expat)))
+
+(define-public ruby-autoprefixer-rails
+ (package
+ (name "ruby-autoprefixer-rails")
+ (version "7.2.5")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "autoprefixer-rails" version))
+ (sha256
+ (base32
+ "12jiv0nigfcnzn03w8avv6ivr9hwx4hqd28758yvsrfdzq31i05a"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:tests? #f))
+ (native-inputs
+ `(("bundler" ,bundler)))
+ (propagated-inputs
+ `(("ruby-execjs" ,ruby-execjs)))
+ (synopsis
+ "Parse CSS and add vendor prefixes to CSS rules using values from the Can I Use website.")
+ (description
+ "Parse CSS and add vendor prefixes to CSS rules using values from the Can I Use website.")
+ (home-page
+ "https://github.com/ai/autoprefixer-rails")
+ (license license:expat)))
+
+(define-public ruby-bootstrap-sass
+ (package
+ (name "ruby-bootstrap-sass")
+ (version "3.3.7")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "bootstrap-sass" version))
+ (sha256
+ (base32
+ "1bc9bf6caddqn1rv15b5x56yczmbjzaxzl9lk5zbwrg1bfph4bx9"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:tests? #f))
+ (propagated-inputs
+ `(("ruby-autoprefixer-rails"
+ ,ruby-autoprefixer-rails)
+ ("ruby-sass" ,ruby-sass)))
+ (synopsis
+ "bootstrap-sass is a Sass-powered version of Bootstrap 3, ready to drop right into your Sass powered applications.")
+ (description
+ "bootstrap-sass is a Sass-powered version of Bootstrap 3, ready to drop right into your Sass powered applications.")
+ (home-page
+ "https://github.com/twbs/bootstrap-sass")
+ (license license:expat)))
+
+(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
+ '(;; No included tests
+ #:tests? #f))
+ (synopsis
+ "Provides swappable XML backends utilizing LibXML, Nokogiri, Ox, or REXML.")
+ (description
+ "Provides swappable XML backends utilizing LibXML, Nokogiri, Ox, or REXML.")
+ (home-page "https://github.com/sferik/multi_xml")
+ (license license:expat)))
+
+(define-public ruby-omniauth-oauth2
+ (package
+ (name "ruby-omniauth-oauth2")
+ (version "1.3.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "omniauth-oauth2" version))
+ (sha256
+ (base32
+ "0mskwlw5ibx9mz7ywqji6mm56ikf7mglbnfc02qhg6ry527jsxdm"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:tests? #f))
+ (propagated-inputs
+ `(("ruby-oauth2" ,ruby-oauth2)
+ ("ruby-omniauth" ,ruby-omniauth)))
+ (synopsis
+ "An abstract OAuth2 strategy for OmniAuth.")
+ (description
+ "An abstract OAuth2 strategy for OmniAuth.")
+ (home-page
+ "https://github.com/omniauth/omniauth-oauth2")
+ (license license:expat)))
+
+(define-public ruby-jwt
+ (package
+ (name "ruby-jwt")
+ (version "1.5.6")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "jwt" version))
+ (sha256
+ (base32
+ "124zz1142bi2if7hl5pcrcamwchv4icyr5kaal9m2q6wqbdl6aw4"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:tests? #f))
+ (synopsis
+ "A pure ruby implementation of the RFC 7519 OAuth JSON Web Token (JWT) standard.")
+ (description
+ "This package provides a pure ruby implementation of the RFC 7519 OAuth JSON Web Token (JWT) standard.")
+ (home-page "http://github.com/jwt/ruby-jwt")
+ (license license:expat)))
+
+(define-public ruby-oauth2
+ (package
+ (name "ruby-oauth2")
+ (version "1.4.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "oauth2" version))
+ (sha256
+ (base32
+ "094hmmfms8vpm6nwglpl7jmlv85nlfzl0kik4fizgx1rg70a6mr5"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:tests? #f))
+ (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
+ "A Ruby wrapper for the OAuth 2.0 protocol built with a similar style to the original OAuth spec.")
+ (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 "http://github.com/intridea/oauth2")
+ (license license:expat)))
+
+(define-public ruby-omniauth
+ (package
+ (name "ruby-omniauth")
+ (version "1.8.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "omniauth" version))
+ (sha256
+ (base32
+ "1msqr4qq7mfdvl3rg89529isrv595hvjpj2gi0say4b8nwqfggmg"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:tests? #f))
+ (propagated-inputs
+ `(("ruby-hashie" ,ruby-hashie)
+ ("ruby-rack" ,ruby-rack)))
+ (synopsis
+ "A 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-warden
+ (package
+ (name "ruby-warden")
+ (version "1.2.7")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "warden" version))
+ (sha256
+ (base32
+ "0va966lhpylcwbqb9n151kkihx30agh0a57mwjwdxyanll4s1q12"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:tests? #f))
+ (propagated-inputs `(("ruby-rack" ,ruby-rack)))
+ (synopsis
+ "Rack middleware that provides authentication for rack applications")
+ (description
+ "Rack middleware that provides authentication for rack applications")
+ (home-page "http://github.com/hassox/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
+ '(#:tests? #f))
+ (propagated-inputs
+ `(("ruby-warden" ,ruby-warden)))
+ (synopsis "OAuth 2.0 strategies for Warden")
+ (description "OAuth 2.0 strategies for Warden")
+ (home-page
+ "https://github.com/opperator/warden-oauth2")
+ (license #f)))
+
+(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))
+ (propagated-inputs
+ `(("ruby-listen" ,ruby-listen)))
+ (synopsis
+ "Restarts your app when a file changes. A no-frills, command-line alternative to Guard, Shotgun, Autotest, etc.")
+ (description
+ "Restarts your app when a file changes. A no-frills, command-line alternative to Guard, Shotgun, Autotest, etc.")
+ (home-page "http://github.com/alexch/rerun/")
+ (license license:expat)))
+
+(define-public ruby-kgio
+ (package
+ (name "ruby-kgio")
+ (version "2.11.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "kgio" version))
+ (sha256
+ (base32
+ "1528pyj1szzzp3pgj05fzjd36qjrxm9yj2x5radc9p1z7vl67y50"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:tests? #f))
+ (synopsis
+ "This is a legacy project, do not use it for new projects. Ruby
+2.3 and later should make this obsolete. kgio provides
+non-blocking I/O methods for Ruby without raising exceptions on
+EAGAIN and EINPROGRESS.")
+ (description
+ "This is a legacy project, do not use it for new projects. Ruby
+2.3 and later should make this obsolete. kgio provides
+non-blocking I/O methods for Ruby without raising exceptions on
+EAGAIN and EINPROGRESS.")
+ (home-page "https://bogomips.org/kgio/")
+ (license #f)))
+
+(define-public ruby-raindrops
+ (package
+ (name "ruby-raindrops")
+ (version "0.19.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "raindrops" version))
+ (sha256
+ (base32
+ "1qpbd9jif40c53fz2r0l8khfl016y8s8bkx37ibcaafclbl3xygp"))))
+ (build-system ruby-build-system)
+ (arguments
+ '(#:tests? #f))
+ (synopsis
+ "raindrops is a real-time stats toolkit to show statistics for Rack HTTP
+servers. It is designed for preforking servers such as unicorn, but
+should support any Rack HTTP server on platforms supporting POSIX shared
+memory. It may also be used as a generic scoreboard for sharing atomic
+counters across multiple processes.")
+ (description
+ "raindrops is a real-time stats toolkit to show statistics for Rack HTTP
+servers. It is designed for preforking servers such as unicorn, but
+should support any Rack HTTP server on platforms supporting POSIX shared
+memory. It may also be used as a generic scoreboard for sharing atomic
+counters across multiple processes.")
+ (home-page "https://bogomips.org/raindrops/")
+ (license #f)))
+
+(define-public ruby-quantile
+ (package
+ (name "ruby-quantile")
+ (version "0.2.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "quantile" version))
+ (sha256
+ (base32
+ "1jlddrmmvx9qkh29a1narz81fi41qdrbiif9fd8bl6pxxa9awbi3"))))
+ (build-system ruby-build-system)
+ (synopsis
+ "Graham Cormode and S. Muthukrishnan's Effective Computation of Biased Quantiles over Data Streams in ICDEâ\x80\x9905")
+ (description
+ "Graham Cormode and S. Muthukrishnan's Effective Computation of Biased Quantiles over Data Streams in ICDEâ\x80\x9905")
+ (home-page
+ "http://github.com/matttproud/ruby_quantile_estimation")
+ (license license:asl2.0)))
+
+(define-public ruby-prometheus-client
+ (package
+ (name "ruby-prometheus-client")
+ (version "0.8.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "prometheus-client" version))
+ (sha256
+ (base32
+ "0ihbmnll7qkkhy5isd7vl3wrznyxm1havhzxhl8729im5qi6si51"))))
+ (build-system ruby-build-system)
+ (propagated-inputs
+ `(("ruby-quantile" ,ruby-quantile)))
+ (synopsis
+ "A suite of instrumentation metric primitivesthat can be exposed through a web services interface.")
+ (description
+ "This package provides a suite of instrumentation metric primitivesthat can be exposed through a web services interface.")
+ (home-page
+ "https://github.com/prometheus/client_ruby")
+ (license license:asl2.0)))
+
+(define-public ruby-prometheus-exporter
+ (package
+ (name "ruby-prometheus-exporter")
+ (version "0.3.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "prometheus_exporter" version))
+ (sha256
+ (base32
+ "0v8d7km30y0rqspzkmiqajglqyp2hcd3arg94pf7lay382l695s0"))))
+ (build-system ruby-build-system)
+ (synopsis
+ "Prometheus metric collector and exporter for Ruby")
+ (description
+ "Prometheus metric collector and exporter for Ruby")
+ (home-page
+ "https://github.com/discourse/prometheus_exporter")
+ (license license:expat)))
diff --git a/gnu/packages/terraform.scm b/gnu/packages/terraform.scm
index f14b152fdb..d96c5b0dfc 100644
--- a/gnu/packages/terraform.scm
+++ b/gnu/packages/terraform.scm
@@ -22,7 +22,48 @@
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix git-download)
- #:use-module (guix build-system go))
+ #:use-module (guix build-system go)
+ #:use-module (gnu packages golang)
+ #:use-module (gnu packages cdrom)
+ #:use-module (gnu packages pkg-config)
+ #:use-module (gnu packages virtualization))
+
+(define-public terraform
+ (package
+ (name "terraform")
+ (version "0.11.3")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/hashicorp/terraform")
+ (commit (string-append "v" version))))
+ (sha256
+ (base32
+ "0637x7jcm62pdnivmh4rggly6dmlvdh3jpsd1z4vba15gbm203nz"))))
+ (build-system go-build-system)
+ (outputs '("out" "lib"))
+ (arguments
+ '(#:import-path "github.com/hashicorp/terraform"
+ #:phases
+ (modify-phases %standard-phases
+ ;; I'm not sure what purpose they serve, but they are readonly, so
+ ;; they break the reset-gzip-timestamps phase.
+ (add-after 'install 'delete-test-fixtures
+ (lambda* (#:key outputs #:allow-other-keys)
+ (delete-file-recursively
+ (string-append
+ (assoc-ref outputs "lib")
+ "/src/github.com/hashicorp/terraform/config/module/test-fixtures")))))))
+ (synopsis "Tool for building and changing computing infrastructure")
+ (description
+ "Terraform uses descriptions of infrastructure written in @acronym{HCL,
+Hashicorp Configuration Language} which describe graphs of resources,
+including information about dependencies. From this, Terraform can plan and
+apply changes to the described resources.
+
+Terraform uses plugins that provide intergrations to different providers.")
+ (home-page "https://www.terraform.io/")
+ (license license:mpl2.0)))
(define-public terraform-docs
(package
@@ -47,3 +88,120 @@ the inputs and outputs for modules of the Terraform infrastructure management
tool. These can be shown, or written to a file in JSON or Markdown formats.")
(home-page "https://github.com/segmentio/terraform-docs")
(license license:expat)))
+
+(define-public terraform-provider-libvirt
+ (package
+ (name "terraform-provider-libvirt")
+ (version "0.3")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/dmacvicar/terraform-provider-libvirt")
+ (commit (string-append "v" version))))
+ (sha256
+ (base32
+ "004gxy55p5cf39f2zpah0i2zhvs4x6ixnxy8z9v7314604ggpkna"))))
+ (build-system go-build-system)
+ (outputs '("out" "lib"))
+ (native-inputs
+ `(("pkg-config" ,pkg-config)))
+ (inputs
+ `(("libvirt" ,libvirt)
+ ("cdrtools" ,cdrtools)))
+ (arguments
+ '(#:import-path "github.com/dmacvicar/terraform-provider-libvirt"
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'patch-mkisofs
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute*
+ "src/github.com/dmacvicar/terraform-provider-libvirt/libvirt/cloudinit_def.go"
+ (("mkisofs")
+ (string-append (assoc-ref inputs "cdrtools")
+ "/bin/mkisofs")))))
+ ;; This should be redundant once the vendor directory is removed from
+ ;; this package
+ (add-before 'reset-gzip-timestamps 'remove-readonly-gzip-files
+ (lambda* (#:key outputs #:allow-other-keys)
+ (for-each delete-file
+ (find-files
+ (assoc-ref outputs "lib")
+ ".*\\.t?gz")))))))
+ (synopsis "")
+ (description "")
+ (home-page "")
+ (license "")))
+
+(define-public terraform-provider-template
+ (package
+ (name "terraform-provider-template")
+ (version "1.0.0")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/terraform-providers/terraform-provider-template")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0jl6bp6gwg96sdk5j6s13vv1j9gxjpy2yva3barmzv9138i665mz"))))
+ (build-system go-build-system)
+ (outputs '("out" "lib"))
+ (arguments
+ '(#:import-path "github.com/terraform-providers/terraform-provider-template"))
+ (synopsis "")
+ (description "")
+ (home-page "")
+ (license "")))
+
+(define-public terraform-provider-aws
+ (package
+ (name "terraform-provider-aws")
+ (version "1.23.0")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/terraform-providers/terraform-provider-aws")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "156277pbllmglpppnrp6qskiq744mxjjmsw39d0d3qpqs5af4x1y"))))
+ (build-system go-build-system)
+ (outputs '("out" "lib"))
+ (arguments
+ '(#:import-path "github.com/terraform-providers/terraform-provider-aws"
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'reset-gzip-timestamps 'remove-readonly-gzip-files
+ (lambda* (#:key outputs #:allow-other-keys)
+ (for-each delete-file
+ (find-files
+ (assoc-ref outputs "lib")
+ ".*\\.t?gz")))))))
+ (synopsis "")
+ (description "")
+ (home-page "")
+ (license "")))
+
+(define-public terraform-provider-local
+ (package
+ (name "terraform-provider-local")
+ (version "1.1.0")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/terraform-providers/terraform-provider-local")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1qxfyyg8k43rw0gny4dadamc2a9hk3x6ybdivifjc17m7il0janc"))))
+ (build-system go-build-system)
+ (outputs '("out" "lib"))
+ (arguments
+ '(#:import-path "github.com/terraform-providers/terraform-provider-local"))
+ (synopsis "")
+ (description "")
+ (home-page "")
+ (license "")))
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 84bd795a85..c1d29c94ad 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -57,6 +57,7 @@
#:use-module (guix build-system gnu)
#:use-module (guix build-system glib-or-gtk)
#:use-module (guix build-system perl)
+ #:use-module (guix build-system ruby)
#:use-module (guix build-system cmake)
#:use-module (guix build-system r)
#:use-module (guix build-system trivial)
@@ -113,6 +114,7 @@
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages qt)
#:use-module (gnu packages readline)
+ #:use-module (gnu packages ruby)
#:use-module (gnu packages valgrind)
#:use-module (gnu packages xml)
#:use-module (gnu packages curl)
@@ -6878,3 +6880,33 @@ instructions on how to use Guix in a shared HPC environment.")
"This package provides UI widget and layout functions for writing Shiny apps that
work well on small screens.")
(license l:gpl3)))
+
+(define-public ruby-unicorn
+ (package
+ (name "ruby-unicorn")
+ (version "5.4.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (rubygems-uri "unicorn" version))
+ (sha256
+ (base32
+ "09s3mdsrc080h7b70lkl2wnv36iy9ipdqbi1ffm3fxd0498xjb7h"))))
+ (build-system ruby-build-system)
+ (propagated-inputs
+ `(("ruby-kgio" ,ruby-kgio)
+ ("ruby-raindrops" ,ruby-raindrops)))
+ (synopsis
+ "unicorn is an HTTP server for Rack applications designed to only serve
+fast clients on low-latency, high-bandwidth connections and take
+advantage of features in Unix/Unix-like kernels. Slow clients should
+only be served by placing a reverse proxy capable of fully buffering
+both the the request and response in between unicorn and slow clients.")
+ (description
+ "unicorn is an HTTP server for Rack applications designed to only serve
+fast clients on low-latency, high-bandwidth connections and take
+advantage of features in Unix/Unix-like kernels. Slow clients should
+only be served by placing a reverse proxy capable of fully buffering
+both the the request and response in between unicorn and slow clients.")
+ (home-page "https://bogomips.org/unicorn/")
+ (license (list #f #f))))
diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm
index aff78a0566..ab63019f77 100644
--- a/gnu/services/databases.scm
+++ b/gnu/services/databases.scm
@@ -51,6 +51,18 @@
postgresql-service
postgresql-service-type
+ <elasticsearch-configuration>
+ elasticsearch-configuration
+ elasticsearch-configuration?
+ elasticsearch-configuration-elasticsearch
+ elasticsearch-configuration-data-path
+ elasticsearch-configuration-logs-path
+ elasticsearch-configuration-port
+ elasticsearch-configuration-transport-port
+
+ elasticsearch-service
+ elasticsearch-service-type
+
memcached-service-type
<memcached-configuration>
memcached-configuration
@@ -268,6 +280,101 @@ and stores the database cluster in @var{data-directory}."
;;;
+;;; Elasticsearch
+;;;
+
+(define-record-type* <elasticsearch-configuration>
+ elasticsearch-configuration make-elasticsearch-configuration
+ elasticsearch-configuration?
+ (elasticsearch elasticsearch-configuration-elasticsearch
+ (default elasticsearch))
+ (data-path elasticsearch-configuration-data-path
+ (default "/var/lib/"))
+ (logs-path elasticsearch-configuration-logs-path
+ (default "/var/log/elasticsearch"))
+ (http-port elasticsearch-configuration-port
+ (default 9200))
+ (transport-port elasticsearch-configuration-transport-port
+ (default 9300)))
+
+(define (elasticsearch-configuration-directory
+ data-path logs-path http-port transport-port)
+ (computed-file
+ "elasticsearch-config"
+ #~(begin
+ (mkdir #$output)
+ (mkdir (string-append #$output "/scripts"))
+ (call-with-output-file (string-append #$output "/elasticsearch.yml")
+ (lambda (port)
+ (display
+ (string-append
+ "path.data: " #$data-path "\n"
+ "path.logs: " #$logs-path "\n"
+ "http.port: " #$(number->string http-port) "\n"
+ "transport.tcp.port: " #$(number->string transport-port) "\n")
+ port))))))
+
+(define %elasticsearch-accounts
+ (list (user-group (name "elasticsearch") (system? #t))
+ (user-account
+ (name "elasticsearch")
+ (group "elasticsearch")
+ (system? #t)
+ (comment "Elasticsearch server user")
+ (home-directory "/var/empty")
+ (shell (file-append shadow "/sbin/nologin")))))
+
+(define elasticsearch-activation
+ (match-lambda
+ (($ <elasticsearch-configuration> elasticsearch data-path logs-path
+ http-port transport-port)
+ #~(begin
+ (use-modules (guix build utils)
+ (ice-9 match))
+
+ (let ((user (getpwnam "elasticsearch")))
+ ;; Create db state directory.
+ (for-each
+ (lambda (path)
+ (mkdir-p path)
+ (chown path (passwd:uid user) (passwd:gid user)))
+ '(#$data-path #$logs-path "/var/run/elasticsearch")))))))
+
+(define elasticsearch-shepherd-service
+ (match-lambda
+ (($ <elasticsearch-configuration> elasticsearch data-path logs-path
+ http-port transport-port)
+ (list (shepherd-service
+ (provision '(elasticsearch))
+ (documentation "Run the Elasticsearch daemon.")
+ (requirement '(user-processes syslogd))
+ (start #~(make-forkexec-constructor
+ (list
+ (string-append #$elasticsearch "/bin/elasticsearch")
+ "-d"
+ "-p" "/var/run/elasticsearch/pid"
+ (string-append
+ "-Dpath.conf="
+ #$(elasticsearch-configuration-directory
+ data-path logs-path http-port transport-port)))
+ #:user "elasticsearch"
+ #:pid-file "/var/run/elasticsearch/pid"
+ #:log-file "/var/log/elasticsearch.log"))
+ (stop #~(make-kill-destructor)))))))
+
+(define elasticsearch-service-type
+ (service-type (name 'elasticsearch)
+ (extensions
+ (list (service-extension shepherd-root-service-type
+ elasticsearch-shepherd-service)
+ (service-extension activation-service-type
+ elasticsearch-activation)
+ (service-extension account-service-type
+ (const %elasticsearch-accounts))))
+ (default-value (elasticsearch-configuration))))
+
+
+;;;
;;; Memcached
;;;
@@ -449,8 +556,9 @@ storage:
(($ <mysql-configuration> mysql port)
(mixed-text-file "my.cnf" "[mysqld]
datadir=/var/lib/mysql
-socket=/run/mysqld/mysqld.sock
+socket=/var/run/mysql/mysqld.sock
port=" (number->string port) "
+max_allowed_packet=16M
"))))
(define (%mysql-activation config)
@@ -465,7 +573,7 @@ port=" (number->string port) "
(uid (passwd:uid user))
(gid (passwd:gid user))
(datadir "/var/lib/mysql")
- (rundir "/run/mysqld"))
+ (rundir "/var/run/mysql"))
(mkdir-p datadir)
(chown datadir uid gid)
(mkdir-p rundir)
@@ -516,8 +624,11 @@ FLUSH PRIVILEGES;
(my.cnf (mysql-configuration-file config)))
#~(make-forkexec-constructor
(list (string-append #$mysql "/bin/mysqld")
- (string-append "--defaults-file=" #$my.cnf))
- #:user "mysql" #:group "mysql")))
+ (string-append "--defaults-file=" #$my.cnf)
+ "--pid-file=/var/run/mysql/pid")
+ #:user "mysql"
+ #:group "mysql"
+ #:pid-file "/var/run/mysql/pid")))
(stop #~(make-kill-destructor)))))
(define mysql-service-type
diff --git a/gnu/services/message-broker.scm b/gnu/services/message-broker.scm
new file mode 100644
index 0000000000..e711a4cbdc
--- /dev/null
+++ b/gnu/services/message-broker.scm
@@ -0,0 +1,114 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2018 Christopher Baines <mail@cbaines.net>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu services message-broker)
+ #:use-module (gnu services)
+ #:use-module (gnu services shepherd)
+ #:use-module (gnu system shadow)
+ #:use-module (gnu packages admin)
+ #:use-module ((gnu packages base) #:select (glibc-utf8-locales))
+ #:use-module (gnu packages rabbitmq)
+ #:use-module (guix modules)
+ #:use-module (guix records)
+ #:use-module (guix gexp)
+ #:use-module (ice-9 match)
+ #:export (<rabbitmq-configuration>
+ rabbitmq-configuration
+ rabbitmq-configuration?
+ rabbitmq-configuration-rabbitmq
+ rabbitmq-configuration-locale
+ rabbitmq-configuration-interfaces
+ rabbitmq-configuration-tcp-port
+ rabbitmq-configuration-udp-port
+ rabbitmq-configuration-additional-options
+
+ rabbitmq-service-type))
+
+
+;;;
+;;; RabbitMQ
+;;;
+
+(define-record-type* <rabbitmq-configuration>
+ rabbitmq-configuration make-rabbitmq-configuration
+ rabbitmq-configuration?
+ (rabbitmq rabbitmq-configuration-rabbitmq ;<package>
+ (default rabbitmq))
+ (locale rabbitmq-configuration-rabbitmq
+ (default "en_US.UTF-8"))
+ (interfaces rabbitmq-configuration-interfaces
+ (default '("0.0.0.0")))
+ (tcp-port rabbitmq-configuration-tcp-port
+ (default 11211))
+ (udp-port rabbitmq-configuration-udp-port
+ (default 11211))
+ (additional-options rabbitmq-configuration-additional-options
+ (default '())))
+
+(define %rabbitmq-accounts
+ (list (user-group (name "rabbitmq") (system? #t))
+ (user-account
+ (name "rabbitmq")
+ (group "rabbitmq")
+ (system? #t)
+ (comment "Rabbitmq server user")
+ (home-directory "/var/lib/rabbitmq")
+ (shell (file-append shadow "/sbin/nologin")))))
+
+(define rabbitmq-activation
+ #~(begin
+ (use-modules (guix build utils))
+ (let ((user (getpwnam "rabbitmq")))
+ (mkdir-p "/var/run/rabbitmq")
+ (chown "/var/run/rabbitmq"
+ (passwd:uid user) (passwd:gid user)))))
+
+(define rabbitmq-shepherd-service
+ (match-lambda
+ (($ <rabbitmq-configuration> rabbitmq locale interfaces tcp-port udp-port
+ additional-options)
+ (with-imported-modules (source-module-closure
+ '((gnu build shepherd)))
+ (list (shepherd-service
+ (provision '(rabbitmq))
+ (documentation "Run the Rabbitmq daemon.")
+ (requirement '(user-processes loopback))
+ (modules '((gnu build shepherd)))
+ (start #~(make-forkexec-constructor
+ '(#$(file-append rabbitmq "/sbin/rabbitmq-server"))
+ #:pid-file "/var/run/rabbitmq/pid"
+ #:environment-variables
+ `("RABBITMQ_PID_FILE=/var/run/rabbitmq/pid"
+ "HOME=/var/lib/rabbitmq"
+ ;; Elixir, the language used by RabbitMQ requires a
+ ;; UTF8 locale to function properly
+ ,(string-append "GUIX_LOCPATH="
+ #$glibc-utf8-locales "/lib/locale")
+ ,#$(string-append "LC_ALL=" locale))))
+ (stop #~(make-kill-destructor))))))))
+
+(define rabbitmq-service-type
+ (service-type (name 'rabbitmq)
+ (extensions
+ (list (service-extension shepherd-root-service-type
+ rabbitmq-shepherd-service)
+ (service-extension activation-service-type
+ (const rabbitmq-activation))
+ (service-extension account-service-type
+ (const %rabbitmq-accounts))))
+ (default-value (rabbitmq-configuration))))
diff --git a/gnu/system.scm b/gnu/system.scm
index ee48f48266..95dcc14dc5 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -450,7 +450,7 @@ value of the SYSTEM-SERVICE-TYPE service."
("initrd" ,initrd)
("locale" ,locale)))))))) ;used by libc
-(define* (essential-services os #:key container?)
+(define* (essential-services os #:key container? container-shared-network?)
"Return the list of essential services for OS. These are special services
that implement part of what's declared in OS are responsible for low-level
bookkeeping. CONTAINER? determines whether to return the list of services for
@@ -458,6 +458,9 @@ a container or that of a \"bare metal\" system."
(define known-fs
(map file-system-mount-point (operating-system-file-systems os)))
+ (if (and container-shared-network? (not container?))
+ (error "cannot specify container-shared-network? without container? #t"))
+
(let* ((mappings (device-mapping-services os))
(root-fs (root-file-system-service))
(other-fs (non-boot-file-system-service os))
@@ -481,7 +484,8 @@ a container or that of a \"bare metal\" system."
(account-service (append (operating-system-accounts os)
(operating-system-groups os))
(operating-system-skeletons os))
- (operating-system-etc-service os)
+ (operating-system-etc-service
+ os #:container-shared-network? container-shared-network?)
(service fstab-service-type '())
(session-environment-service
(operating-system-environment-variables os))
@@ -501,12 +505,13 @@ a container or that of a \"bare metal\" system."
(service firmware-service-type
(operating-system-firmware os))))))))
-(define* (operating-system-services os #:key container?)
+(define* (operating-system-services os #:key container? container-shared-network?)
"Return all the services of OS, including \"internal\" services that do not
explicitly appear in OS."
(instantiate-missing-services
(append (operating-system-user-services os)
- (essential-services os #:container? container?))))
+ (essential-services os #:container? container?
+ #:container-shared-network? container-shared-network?))))
;;;
@@ -575,7 +580,7 @@ This is the GNU system. Welcome.\n")
"Return the default /etc/hosts file."
(plain-file "hosts" (local-host-aliases host-name)))
-(define* (operating-system-etc-service os)
+(define* (operating-system-etc-service os #:key container-shared-network?)
"Return a <service> that builds containing the static part of the /etc
directory."
(let ((login.defs
@@ -677,16 +682,13 @@ then
source /run/current-system/profile/etc/profile.d/bash_completion.sh
fi\n")))
(etc-service
- `(("services" ,(file-append net-base "/etc/services"))
- ("protocols" ,(file-append net-base "/etc/protocols"))
+ `(("protocols" ,(file-append net-base "/etc/protocols"))
("rpc" ,(file-append net-base "/etc/rpc"))
("login.defs" ,#~#$login.defs)
("issue" ,#~#$issue)
("nsswitch.conf" ,#~#$nsswitch)
("profile" ,#~#$profile)
("bashrc" ,#~#$bashrc)
- ("hosts" ,#~#$(or (operating-system-hosts-file os)
- (default-/etc/hosts (operating-system-host-name os))))
;; Write the operating-system-host-name to /etc/hostname to prevent
;; NetworkManager from changing the system's hostname when connecting
;; to certain networks. Some discussion at
@@ -694,7 +696,13 @@ fi\n")))
("hostname" ,(plain-file "hostname" (operating-system-host-name os)))
("localtime" ,(file-append tzdata "/share/zoneinfo/"
(operating-system-timezone os)))
- ("sudoers" ,(operating-system-sudoers-file os))))))
+ ("sudoers" ,(operating-system-sudoers-file os))
+ ,@(if container-shared-network?
+ '()
+ `(("services" ,(file-append net-base "/etc/services"))
+ ("hosts" ,#~#$(or (operating-system-hosts-file os)
+ (default-/etc/hosts
+ (operating-system-host-name os))))))))))
(define %root-account
;; Default root account.
@@ -803,20 +811,28 @@ use 'plain-file' instead~%")
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL\n"))
-(define* (operating-system-activation-script os #:key container?)
+(define* (operating-system-activation-script os #:key container?
+ container-shared-network?)
"Return the activation script for OS---i.e., the code that \"activates\" the
stateful part of OS, including user accounts and groups, special directories,
etc."
- (let* ((services (operating-system-services os #:container? container?))
+ (let* ((services (operating-system-services
+ os
+ #:container? container?
+ #:container-shared-network? container-shared-network?))
(activation (fold-services services
#:target-type activation-service-type)))
(activation-service->script activation)))
-(define* (operating-system-boot-script os #:key container?)
+(define* (operating-system-boot-script os #:key container?
+ container-shared-network?)
"Return the boot script for OS---i.e., the code started by the initrd once
we're running in the final root. When CONTAINER? is true, skip all
hardware-related operations as necessary when booting a Linux container."
- (let* ((services (operating-system-services os #:container? container?))
+ (let* ((services (operating-system-services
+ os
+ #:container? container?
+ #:container-shared-network? container-shared-network?))
(boot (fold-services services #:target-type boot-service-type)))
(service-value boot)))
@@ -836,17 +852,24 @@ hardware-related operations as necessary when booting a Linux container."
#:target-type
shepherd-root-service-type))))
-(define* (operating-system-derivation os #:key container?)
+(define* (operating-system-derivation os #:key container?
+ container-shared-network?)
"Return a derivation that builds OS."
- (let* ((services (operating-system-services os #:container? container?))
+ (let* ((services (operating-system-services
+ os
+ #:container? container?
+ #:container-shared-network? container-shared-network?))
(system (fold-services services)))
;; SYSTEM contains the derivation as a monadic value.
(service-value system)))
-(define* (operating-system-profile os #:key container?)
+(define* (operating-system-profile os #:key container? container-shared-network?)
"Return a derivation that builds the system profile of OS."
(mlet* %store-monad
- ((services -> (operating-system-services os #:container? container?))
+ ((services -> (operating-system-services
+ os
+ #:container? container?
+ #:container-shared-network? container-shared-network?))
(profile (fold-services services
#:target-type profile-service-type)))
(match profile
diff --git a/gnu/system/linux-container.scm b/gnu/system/linux-container.scm
index bceea41332..d28c39c624 100644
--- a/gnu/system/linux-container.scm
+++ b/gnu/system/linux-container.scm
@@ -60,18 +60,49 @@ containerized OS."
%container-file-systems
user-file-systems))))
-(define* (container-script os #:key (mappings '()))
+
+(define %network-configuration-files
+ '("/etc/resolv.conf"
+ "/etc/services"
+ "/etc/hosts"))
+
+(define* (container-script os #:key (mappings '())
+ container-shared-network?)
"Return a derivation of a script that runs OS as a Linux container.
MAPPINGS is a list of <file-system> objects that specify the files/directories
that will be shared with the host system."
- (let* ((os (containerized-operating-system os mappings))
+ (let* ((os (containerized-operating-system
+ os
+ (append
+ mappings
+ (if
+ container-shared-network?
+ (filter-map (lambda (file)
+ (and (file-exists? file)
+ (file-system-mapping
+ (source file)
+ (target file)
+ ;; XXX: On some GNU/Linux
+ ;; systems, /etc/resolv.conf is a
+ ;; symlink to a file in a tmpfs
+ ;; which, for an unknown reason,
+ ;; cannot be bind mounted
+ ;; read-only within the
+ ;; container.
+ (writable?
+ (string=?
+ file "/etc/resolv.conf")))))
+ %network-configuration-files)
+ '()))))
(file-systems (filter file-system-needed-for-boot?
(operating-system-file-systems os)))
(specs (map file-system->spec file-systems)))
- (mlet* %store-monad ((os-drv (operating-system-derivation
- os
- #:container? #t)))
+ (mlet* %store-monad ((os-drv
+ (operating-system-derivation
+ os
+ #:container? #t
+ #:container-shared-network? container-shared-network?)))
(define script
(with-imported-modules (source-module-closure
@@ -93,6 +124,9 @@ that will be shared with the host system."
;; users and groups, which is sufficient for most cases.
;;
;; See: http://www.freedesktop.org/software/systemd/man/systemd-nspawn.html#--private-users=
- #:host-uids 65536))))
+ #:host-uids 65536
+ #:namespaces (if #$container-shared-network?
+ (delq 'net %namespaces)
+ %namespaces)))))
(gexp->script "run-container" script))))
diff --git a/gnu/tests.scm b/gnu/tests.scm
index 9e8eed7d95..5d7f7442f5 100644
--- a/gnu/tests.scm
+++ b/gnu/tests.scm
@@ -54,6 +54,7 @@
system-test-description
system-test-location
+ test-modules
fold-system-tests
all-system-tests))
@@ -256,11 +257,12 @@ the system under test."
(set-record-type-printer! <system-test> write-system-test)
-(define (test-modules)
- "Return the list of modules that define system tests."
- (scheme-modules (dirname (search-path %load-path "guix.scm"))
- "gnu/tests"
- #:warn warn-about-load-error))
+(define test-modules
+ ;; Return the list of modules that define system tests.
+ (make-parameter
+ (scheme-modules (dirname (search-path %load-path "guix.scm"))
+ "gnu/tests"
+ #:warn warn-about-load-error)))
(define (fold-system-tests proc seed)
"Invoke PROC on each system test, passing it the test and the previous
diff --git a/gnu/tests/message-broker.scm b/gnu/tests/message-broker.scm
new file mode 100644
index 0000000000..f2f5590818
--- /dev/null
+++ b/gnu/tests/message-broker.scm
@@ -0,0 +1,86 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu tests message-broker)
+ #:use-module (gnu tests)
+ #:use-module (gnu system)
+ #:use-module (gnu system file-systems)
+ #:use-module (gnu system shadow)
+ #:use-module (gnu system vm)
+ #:use-module (gnu services)
+ #:use-module (gnu services message-broker)
+ #:use-module (gnu services networking)
+ #:use-module (guix gexp)
+ #:use-module (guix store)
+ #:export (%test-rabbitmq))
+
+(define %rabbitmq-os
+ (simple-operating-system
+ (dhcp-client-service)
+ (service rabbitmq-service-type)))
+
+(define* (run-rabbitmq-test #:optional (port 11211))
+ "Run tests in %RABBITMQ-OS, forwarding PORT."
+ (define os
+ (marionette-operating-system
+ %rabbitmq-os
+ #:imported-modules '((gnu services herd)
+ (guix combinators))))
+
+ (define vm
+ (virtual-machine
+ (operating-system os)
+ (port-forwardings `((11211 . ,port)))))
+
+ (define test
+ (with-imported-modules '((gnu build marionette))
+ #~(begin
+ (use-modules (srfi srfi-11) (srfi srfi-64)
+ (gnu build marionette)
+ (ice-9 rdelim))
+
+ (define marionette
+ (make-marionette (list #$vm)))
+
+ (mkdir #$output)
+ (chdir #$output)
+
+ (test-begin "rabbitmq")
+
+ ;; Wait for rabbitmq to be up and running.
+ (test-assert "service running"
+ (marionette-eval
+ '(begin
+ (use-modules (gnu services herd))
+ (match (start-service 'rabbitmq)
+ (#f #f)
+ (('service response-parts ...)
+ (match (assq-ref response-parts 'running)
+ ((pid) (number? pid))))))
+ marionette))
+
+ (test-end)
+ (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+
+ (gexp->derivation "rabbitmq-test" test))
+
+(define %test-rabbitmq
+ (system-test
+ (name "rabbitmq")
+ (description "Connect to a running RABBITMQ server.")
+ (value (run-rabbitmq-test))))
diff --git a/guix/build/go-build-system.scm b/guix/build/go-build-system.scm
index 022d4fe16b..4b026eebd6 100644
--- a/guix/build/go-build-system.scm
+++ b/guix/build/go-build-system.scm
@@ -130,7 +130,8 @@ unset. When SOURCE is a directory, copy it instead of unpacking."
(define* (install-source #:key install-source? outputs #:allow-other-keys)
"Install the source code to the output directory."
- (let* ((out (assoc-ref outputs "out"))
+ (let* ((out (or (assoc-ref outputs "lib")
+ (assoc-ref outputs "out")))
(source "src")
(dest (string-append out "/" source)))
(when install-source?
@@ -208,7 +209,9 @@ on $GOBIN in the build phase."
;; https://lists.gnu.org/archive/html/guix-devel/2018-11/msg00208.html).
;; Remove it?
(when (file-exists? "pkg")
- (copy-recursively "pkg" (string-append (assoc-ref outputs "out") "/pkg")))
+ (copy-recursively "pkg" (string-append (or (assoc-ref outputs "lib")
+ (assoc-ref outputs "out"))
+ "/pkg")))
#t)
(define* (remove-store-reference file file-name
diff --git a/guix/import/github.scm b/guix/import/github.scm
index af9f56e1dc..ef3b21ad6c 100644
--- a/guix/import/github.scm
+++ b/guix/import/github.scm
@@ -163,7 +163,19 @@ empty list."
"Return a string of the newest released version name given a string URL like
'https://github.com/arq5x/bedtools2/archive/v2.24.0.tar.gz' and the name of
the package e.g. 'bedtools2'. Return #f if there is no releases"
- (let* ((json (fetch-releases-or-tags url)))
+ (let* ((token (%github-token))
+ (releases-api-url (string-append
+ "https://api.github.com/repos/"
+ (github-user-slash-repository url)
+ "/releases"))
+ (tags-api-url (string-append
+ "https://api.github.com/repos/"
+ (github-user-slash-repository url)
+ "/tags"))
+ (json (json-fetch
+ (if token
+ (string-append tags-api-url "?access_token=" token)
+ tags-api-url))))
(if (eq? json #f)
(if (%github-token)
(error "Error downloading release information through the GitHub
@@ -172,21 +184,26 @@ API when using a GitHub token")
API. This may be fixed by using an access token and setting the environment
variable GUIX_GITHUB_TOKEN, for instance one procured from
https://github.com/settings/tokens"))
- (let loop ((releases
- (filter
- (lambda (x)
- ;; example pre-release:
- ;; https://github.com/wwood/OrfM/releases/tag/v0.5.1
- ;; or an all-prerelease set
- ;; https://github.com/powertab/powertabeditor/releases
- (not (hash-ref x "prerelease")))
- json)))
- (match releases
- (() ;empty release list
+
+ (let ((proper-releases
+ (filter
+ (lambda (x)
+ ;; example pre-release:
+ ;; https://github.com/wwood/OrfM/releases/tag/v0.5.1
+ ;; or an all-prerelease set
+ ;; https://github.com/powertab/powertabeditor/releases
+ (and (not (hash-ref x "prerelease"))
+ (string-prefix? "release_"
+ (or (hash-ref x "tag_name")
+ (hash-ref x "name")))))
+ json)))
+ (match proper-releases
+ (() ;empty release list
#f)
- ((release . rest) ;one or more releases
- (let ((tag (or (hash-ref release "tag_name") ;a "release"
- (hash-ref release "name"))) ;a tag
+
+ ((release . rest) ;one or more releases
+ (let ((tag (or (hash-ref release "tag_name")
+ (hash-ref release "name")))
(name-length (string-length package-name)))
;; some tags include the name of the package e.g. "fdupes-1.51"
;; so remove these
@@ -197,15 +214,7 @@ https://github.com/settings/tokens"))
;; some tags start with a "v" e.g. "v0.25.0"
;; where some are just the version number
(if (string-prefix? "v" tag)
- (substring tag 1)
-
- ;; Finally, reject tags that don't start with a digit:
- ;; they may not represent a release.
- (if (and (not (string-null? tag))
- (char-set-contains? char-set:digit
- (string-ref tag 0)))
- tag
- (loop rest)))))))))))
+ (substring tag 1) tag)))))))))
(define (latest-release pkg)
"Return an <upstream-source> for the latest release of PKG."
diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm
index 6cda3ccbd6..2256bd6946 100644
--- a/guix/scripts/system.scm
+++ b/guix/scripts/system.scm
@@ -753,13 +753,15 @@ checking this by themselves in their 'check' procedure."
(define* (system-derivation-for-action os action
#:key image-size file-system-type
- full-boot? mappings)
+ full-boot? mappings
+ container-shared-network?)
"Return as a monadic value the derivation for OS according to ACTION."
(case action
((build init reconfigure)
(operating-system-derivation os))
((container)
- (container-script os #:mappings mappings))
+ (container-script os #:mappings mappings
+ #:container-shared-network? container-shared-network?))
((vm-image)
(system-qemu-image os #:disk-image-size image-size))
((vm)
@@ -814,6 +816,7 @@ and TARGET arguments."
dry-run? derivations-only?
use-substitutes? bootloader-target target
image-size file-system-type full-boot?
+ container-shared-network?
(mappings '())
(gc-root #f))
"Perform ACTION for OS. INSTALL-BOOTLOADER? specifies whether to install
@@ -822,6 +825,8 @@ target root directory; IMAGE-SIZE is the size of the image to be built, for
the 'vm-image' and 'disk-image' actions. The root file system is created as a
FILE-SYSTEM-TYPE file system. FULL-BOOT? is used for the 'vm' action; it
determines whether to boot directly to the kernel or to the bootloader.
+CONTAINER-SHARED_NETWORK? determines if the container will use a use a
+separate network namespace.
When DERIVATIONS-ONLY? is true, print the derivation file name(s) without
building anything.
@@ -871,6 +876,7 @@ static checks."
#:file-system-type file-system-type
#:image-size image-size
#:full-boot? full-boot?
+ #:container-shared-network? container-shared-network?
#:mappings mappings))
;; For 'init' and 'reconfigure', always build BOOTCFG, even if
@@ -1006,6 +1012,8 @@ Some ACTIONS support additional ARGS.\n"))
(display (G_ "
--share=SPEC for 'vm', share host file system according to SPEC"))
(display (G_ "
+ -N, --network for 'container', allow containers to access the network"))
+ (display (G_ "
-r, --root=FILE for 'vm', 'vm-image', 'disk-image', 'container',
and 'build', make FILE a symlink to the result, and
register it as a garbage collector root"))
@@ -1050,6 +1058,9 @@ Some ACTIONS support additional ARGS.\n"))
(lambda (opt name arg result)
(alist-cons 'image-size (size->number arg)
result)))
+ (option '(#\N "network") #f #f
+ (lambda (opt name arg result)
+ (alist-cons 'container-shared-network? #t result)))
(option '("no-bootloader" "no-grub") #f #f
(lambda (opt name arg result)
(alist-cons 'install-bootloader? #f result)))
@@ -1160,6 +1171,9 @@ resulting from command-line parsing."
#:file-system-type (assoc-ref opts 'file-system-type)
#:image-size (assoc-ref opts 'image-size)
#:full-boot? (assoc-ref opts 'full-boot?)
+ #:container-shared-network? (assoc-ref
+ opts
+ 'container-shared-network?)
#:mappings (filter-map (match-lambda
(('file-system-mapping . m)
m)