byebug is for Ruby 2, so it's good to move away from using it. * gnu/packages/rails.scm (ruby-importmap-rails)[arguments]: Remove byebug from Gemfile. [native-inputs]: Remove ruby-byebug.
		
			
				
	
	
		
			1533 lines
		
	
	
	
		
			62 KiB
		
	
	
	
		
			Scheme
		
	
	
	
	
	
			
		
		
	
	
			1533 lines
		
	
	
	
		
			62 KiB
		
	
	
	
		
			Scheme
		
	
	
	
	
	
| ;;; GNU Guix --- Functional package management for GNU
 | |
| ;;; Copyright © 2016 Matthew Jordan <matthewjordandevops@yandex.com>
 | |
| ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 | |
| ;;; Copyright © 2019, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
 | |
| ;;; Copyright © 2019 Christopher Baines <mail@cbaines.net>
 | |
| ;;; Copyright © 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 | |
| ;;;
 | |
| ;;; 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 rails)
 | |
|   #:use-module ((guix licenses) #:prefix license:)
 | |
|   #:use-module (guix gexp)
 | |
|   #:use-module (guix download)
 | |
|   #:use-module (guix git-download)
 | |
|   #:use-module (guix packages)
 | |
|   #:use-module (guix utils)
 | |
|   #:use-module (gnu packages base)
 | |
|   #:use-module (gnu packages databases)
 | |
|   #:use-module (gnu packages node)
 | |
|   #:use-module (gnu packages ruby)
 | |
|   #:use-module (gnu packages sqlite)
 | |
|   #:use-module (gnu packages version-control)
 | |
|   #:use-module (guix build-system ruby))
 | |
| 
 | |
| (define %ruby-rails-version "7.0.5.1")
 | |
| 
 | |
| (define ruby-rails-monorepo
 | |
|   (origin
 | |
|     (method git-fetch)
 | |
|     (uri (git-reference
 | |
|           (url "https://github.com/rails/rails")
 | |
|           (commit (string-append "v" %ruby-rails-version))))
 | |
|     (file-name (git-file-name "ruby-rails" %ruby-rails-version))
 | |
|     (sha256
 | |
|      (base32
 | |
|       "0s16i73rqzlrx5icn848mf2nmblmgxk06wj9576dkadsb8pspv0l"))))
 | |
| 
 | |
| (define-public ruby-activesupport
 | |
|   (package
 | |
|     (name "ruby-activesupport")
 | |
|     (version %ruby-rails-version)
 | |
|     (source ruby-rails-monorepo)
 | |
|     (build-system ruby-build-system)
 | |
|     (arguments
 | |
|      (list
 | |
|       #:phases
 | |
|       #~(modify-phases %standard-phases
 | |
|           (add-after 'unpack 'delete-gemfiles
 | |
|             (lambda _
 | |
|               (delete-file "Gemfile")
 | |
|               (delete-file "Gemfile.lock")))
 | |
|           (add-after 'delete-gemfiles 'chdir
 | |
|             (lambda _
 | |
|               (chdir "activesupport")))
 | |
|           (add-before 'check 'check-setup
 | |
|             (lambda* (#:key native-inputs inputs #:allow-other-keys)
 | |
|               ;; Multiple tests require to set the timezone.
 | |
|               (setenv "TZDIR" (search-input-directory (or native-inputs inputs)
 | |
|                                                       "share/zoneinfo"))
 | |
|               ;; The test suite requires a memcached and a redis server.
 | |
|               (invoke "memcached" "-d")
 | |
|               (invoke "redis-server" "--daemonize" "yes")))
 | |
|           (add-before 'check 'delete-problematic-tests
 | |
|             (lambda _
 | |
|               ;; These tests fail non-deterministically.
 | |
|               (substitute* "test/cache/behaviors.rb"
 | |
|                 ((".*behaviors/cache_store_behavior.*")
 | |
|                  "")
 | |
|                 ((".*behaviors/encoded_key_cache_behavior.*")
 | |
|                  ""))
 | |
|               (when #$(target-x86-32?)
 | |
|                 ;; This test fails on i686 (see:
 | |
|                 ;; https://github.com/rails/rails/issues/47832).
 | |
|                 (substitute* "test/core_ext/duration_test.rb"
 | |
|                   (("def test_iso8601_output_and_reparsing.*" all)
 | |
|                    (string-append all "    skip('fails on i686')\n"))))
 | |
|               (delete-file "test/evented_file_update_checker_test.rb")
 | |
|               ;; These tests require cache_store_behavior, disabled above.
 | |
|               (delete-file "test/cache/stores/file_store_test.rb")
 | |
|               (delete-file "test/cache/stores/mem_cache_store_test.rb")
 | |
|               (delete-file "test/cache/stores/memory_store_test.rb")
 | |
|               (delete-file "test/cache/stores/redis_cache_store_test.rb"))))))
 | |
|     (native-inputs
 | |
|      (list memcached
 | |
|            redis
 | |
|            ruby-builder
 | |
|            ruby-connection-pool
 | |
|            ruby-dalli
 | |
|            ruby-hiredis
 | |
|            ruby-libxml
 | |
|            ruby-listen
 | |
|            ruby-rack
 | |
|            ruby-redis
 | |
|            ruby-rexml
 | |
|            tzdata-for-tests))
 | |
|     (propagated-inputs
 | |
|      (list ruby-concurrent
 | |
|            ruby-i18n
 | |
|            ruby-minitest
 | |
|            ruby-tzinfo
 | |
|            ruby-tzinfo-data))
 | |
|     (synopsis "Ruby on Rails utility library")
 | |
|     (description "ActiveSupport is a toolkit of support libraries and Ruby
 | |
| core extensions extracted from the Rails framework.  It includes support for
 | |
| multibyte strings, internationalization, time zones, and testing.")
 | |
|     (home-page "https://rubyonrails.org/")
 | |
|     (license license:expat)))
 | |
| 
 | |
| (define-public ruby-globalid
 | |
|   (package
 | |
|     (name "ruby-globalid")
 | |
|     (version "1.1.0")
 | |
|     (source
 | |
|      (origin
 | |
|        (method url-fetch)
 | |
|        (uri (rubygems-uri "globalid" version))
 | |
|        (sha256
 | |
|         (base32
 | |
|          "0kqm5ndzaybpnpxqiqkc41k4ksyxl41ln8qqr6kb130cdxsf2dxk"))))
 | |
|     (build-system ruby-build-system)
 | |
|     (arguments
 | |
|      '(#:tests? #f))                    ;no included tests
 | |
|     (propagated-inputs
 | |
|      (list ruby-activesupport))
 | |
|     (synopsis "Generate URIs idenfitying model instances in Ruby")
 | |
|     (description
 | |
|      "@code{GlobalID} provides a way to generate URIs from a model in Ruby that
 | |
| uniquely identify it.")
 | |
|     (home-page "https://rubyonrails.org/")
 | |
|     (license license:expat)))
 | |
| 
 | |
| (define-public ruby-spring
 | |
|   (package
 | |
|     (name "ruby-spring")
 | |
|     (version "4.1.1")
 | |
|     (source
 | |
|      (origin
 | |
|        (method git-fetch)
 | |
|        (uri (git-reference
 | |
|              (url "https://github.com/rails/spring")
 | |
|              (commit (string-append "v" version))))
 | |
|        (file-name (git-file-name name version))
 | |
|        (sha256
 | |
|         (base32
 | |
|          "0p8hidxqnk8s1gfm1s1xb06gbbahdxjmzy6x3ybi25nkmdp0anb6"))))
 | |
|     (build-system ruby-build-system)
 | |
|     (arguments
 | |
|      (list #:test-target "test:unit"
 | |
|            #:phases
 | |
|            #~(modify-phases %standard-phases
 | |
|                (add-before 'check 'remove-bump
 | |
|                  (lambda _
 | |
|                    (substitute* "spring.gemspec"
 | |
|                      (("gem.add_development_dependency 'bump'") ""))
 | |
|                    (substitute* "Rakefile"
 | |
|                      (("require \\\"bump/tasks\\\"") "")))))))
 | |
|     (native-inputs (list bundler ruby-activesupport))
 | |
|     (synopsis "Ruby on Rails application preloader")
 | |
|     (description
 | |
|      "Spring is a Ruby on Rails application preloader.  It speeds up
 | |
| development by keeping your application running in the background so the
 | |
| application does need to boot it every time you run a test, rake task or
 | |
| migration.")
 | |
|     (home-page "https://github.com/rails/spring")
 | |
|     (license license:expat)))
 | |
| 
 | |
| (define-public ruby-sass-rails
 | |
|   (package
 | |
|     (name "ruby-sass-rails")
 | |
|     (version "5.0.7")
 | |
|     (source
 | |
|      (origin
 | |
|        (method url-fetch)
 | |
|        (uri (rubygems-uri "sass-rails" version))
 | |
|        (sha256
 | |
|         (base32
 | |
|          "1wa63sbsimrsf7nfm8h0m1wbsllkfxvd7naph5d1j6pbc555ma7s"))))
 | |
|     (build-system ruby-build-system)
 | |
|     (arguments
 | |
|      '(#:tests? #f)) ; No included tests
 | |
|     (propagated-inputs
 | |
|      (list ruby-railties ruby-sass ruby-sprockets ruby-sprockets-rails
 | |
|            ruby-tilt))
 | |
|     (synopsis "Sass adapter for the Rails asset pipeline")
 | |
|     (description
 | |
|      "This library integrates the SASS stylesheet language into Ruby on
 | |
| Rails.")
 | |
|     (home-page "https://github.com/rails/sass-rails")
 | |
|     (license license:expat)))
 | |
| 
 | |
| (define-public ruby-debug-inspector
 | |
|   (package
 | |
|     (name "ruby-debug-inspector")
 | |
|     (version "1.1.0")
 | |
|     (source
 | |
|      (origin
 | |
|        (method url-fetch)
 | |
|        (uri (rubygems-uri "debug_inspector" version))
 | |
|        (sha256
 | |
|         (base32
 | |
|          "01l678ng12rby6660pmwagmyg8nccvjfgs3487xna7ay378a59ga"))))
 | |
|     (build-system ruby-build-system)
 | |
|     (arguments
 | |
|      (list
 | |
|       #:phases
 | |
|       #~(modify-phases %standard-phases
 | |
|           (replace 'check
 | |
|             (lambda _
 | |
|               (invoke "rake" "compile")
 | |
|               (invoke "ruby" "-Ilib" "-e"
 | |
|                       (string-append
 | |
|                        "require 'debug_inspector'; RubyVM::DebugInspector."
 | |
|                        "open{|dc| p dc.backtrace_locations}")))))))
 | |
|     (native-inputs
 | |
|      (list ruby-rake-compiler))
 | |
|     (synopsis "Ruby wrapper for the MRI 2.0 debug_inspector API")
 | |
|     (description
 | |
|      "This package provides a Ruby wrapper for the MRI 2.0 debug_inspector
 | |
| API.")
 | |
|     (home-page
 | |
|      "https://github.com/banister/debug_inspector")
 | |
|     (license license:expat)))
 | |
| 
 | |
| (define-public ruby-autoprefixer-rails
 | |
|   (package
 | |
|     (name "ruby-autoprefixer-rails")
 | |
|     (version "10.4.13.0")
 | |
|     (source (origin
 | |
|               (method git-fetch)        ;for tests
 | |
|               (uri (git-reference
 | |
|                     (url "https://github.com/ai/autoprefixer-rails")
 | |
|                     (commit version)))
 | |
|               (file-name (git-file-name name version))
 | |
|               (sha256
 | |
|                (base32
 | |
|                 "1i34apjlav1qz8mdg2fyf0hvs5z32inv1snycdkhmqpkfj2ri2hh"))))
 | |
|     (build-system ruby-build-system)
 | |
|     (arguments
 | |
|      '(#:test-target "spec"
 | |
|        #:phases
 | |
|        (modify-phases %standard-phases
 | |
|          (add-after 'extract-gemspec 'relax-requirements
 | |
|            (lambda _
 | |
|              (substitute* "Gemfile"
 | |
|                ;; Remove overly strict requirement on sprockets
 | |
|                ((", '>= 4\\.0\\.0\\.beta1'") "")
 | |
|                ;; The mini_racer gem isn't packaged yet, and it's not directly
 | |
|                ;; required, as other backends for ruby-execjs can be used.
 | |
|                (("gem \"mini_racer\"") "")
 | |
|                ;; For some reason, this is required for the tzinfo-data gem to
 | |
|                ;; be picked up.
 | |
|                (("gemspec") "gemspec\ngem 'tzinfo-data'\n"))
 | |
|              (substitute* "autoprefixer-rails.gemspec"
 | |
|                ((".*rubocop.*") ""))))))) ;provided by 'standard'
 | |
|     (native-inputs
 | |
|      (list bundler
 | |
|            ruby-rails
 | |
|            ruby-rspec-rails
 | |
|            ruby-sassc-rails
 | |
|            ruby-sprockets
 | |
|            ruby-standard
 | |
|            ;; This is used at runtime by ruby-execjs.
 | |
|            node))
 | |
|     (propagated-inputs
 | |
|      (list ruby-execjs))
 | |
|     (synopsis "Parse CSS and add vendor prefixes to CSS rules")
 | |
|     (description
 | |
|      "This gem provides Ruby and Ruby on Rails integration with Autoprefixer,
 | |
| which can 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-activemodel
 | |
|   (package
 | |
|     (name "ruby-activemodel")
 | |
|     (version %ruby-rails-version)
 | |
|     (source ruby-rails-monorepo)
 | |
|     (build-system ruby-build-system)
 | |
|     (arguments
 | |
|      (list
 | |
|       #:phases
 | |
|       #~(modify-phases %standard-phases
 | |
|           (add-after 'extract-gemspec 'chdir
 | |
|             (lambda _
 | |
|               (chdir "activemodel")))
 | |
|           (add-after 'chdir 'delete-problematic-tests
 | |
|             (lambda _
 | |
|               ;; We do not want to depend on ruby-railties at this stage.
 | |
|               (delete-file "test/cases/railtie_test.rb"))))))
 | |
|     (native-inputs (list ruby-bcrypt))
 | |
|     (propagated-inputs (list ruby-activesupport))
 | |
|     (synopsis "Toolkit for building modeling frameworks like Active Record")
 | |
|     (description
 | |
|      "This package provides a toolkit for building modeling frameworks like
 | |
| Active Record.  ActiveSupport handles attributes, callbacks, validations,
 | |
| serialization, internationalization, and testing.")
 | |
|     (home-page "https://rubyonrails.org/")
 | |
|     (license license:expat)))
 | |
| 
 | |
| (define-public ruby-activerecord
 | |
|   (package
 | |
|     (name "ruby-activerecord")
 | |
|     (version %ruby-rails-version)
 | |
|     (source ruby-rails-monorepo)
 | |
|     (build-system ruby-build-system)
 | |
|     (arguments
 | |
|      (list
 | |
|       #:phases
 | |
|       #~(modify-phases %standard-phases
 | |
|           (add-after 'extract-gemspec 'chdir
 | |
|             (lambda _
 | |
|               (chdir "activerecord")))
 | |
|           (delete 'check)
 | |
|           (add-after 'install 'check
 | |
|             (lambda* (#:key tests? #:allow-other-keys)
 | |
|               (when tests?
 | |
|                 ;; Avoid running the database tests, which require railties
 | |
|                 ;; and/or database servers.
 | |
|                 (invoke "ruby" "-Itest" "test/cases/base_test.rb"))))
 | |
|           (add-before 'check 'set-GEM_PATH
 | |
|             (lambda _
 | |
|               (setenv "GEM_PATH" (string-append
 | |
|                                   (getenv "GEM_PATH") ":"
 | |
|                                   #$output "/lib/ruby/vendor_ruby"))))
 | |
|           (add-before 'check 'check-setup
 | |
|             (lambda* (#:key native-inputs inputs #:allow-other-keys)
 | |
|               ;; A few tests require to set the timezone.
 | |
|               (setenv "TZDIR" (search-input-directory (or native-inputs inputs)
 | |
|                                                       "share/zoneinfo")))))))
 | |
|     (native-inputs
 | |
|      (list tzdata-for-tests
 | |
|            ruby-mini-portile-2))
 | |
|     (propagated-inputs (list ruby-activemodel ruby-activesupport ruby-sqlite3))
 | |
|     (synopsis "Ruby library to connect to relational databases")
 | |
|     (description
 | |
|      "Active Record connects classes to relational database table to establish
 | |
| an almost zero-configuration persistence layer for applications.")
 | |
|     (home-page "https://rubyonrails.org")
 | |
|     (license license:expat)))
 | |
| 
 | |
| (define-public ruby-rspec-rails
 | |
|   (package
 | |
|     (name "ruby-rspec-rails")
 | |
|     (version "6.0.1")
 | |
|     (source (origin
 | |
|               (method git-fetch)
 | |
|               (uri (git-reference
 | |
|                     (url "https://github.com/rspec/rspec-rails")
 | |
|                     (commit (string-append "v" version))))
 | |
|               (file-name (git-file-name name version))
 | |
|               (sha256
 | |
|                (base32
 | |
|                 "0wmrpwv2vgrwmby01pld6r6sdfa265lb6pd3fp2kifs40nn7ff6b"))))
 | |
|     (build-system ruby-build-system)
 | |
|     (arguments
 | |
|      (list
 | |
|       ;; Run the 'spec' instead of the 'default' Rake target to avoid running
 | |
|       ;; the acceptance test suite, which doesn't seem to allow being run
 | |
|       ;; offline (see: https://github.com/rspec/rspec-rails/issues/2660).
 | |
|       #:test-target "spec"
 | |
|       #:phases
 | |
|       #~(modify-phases %standard-phases
 | |
|           (add-after 'extract-gemspec 'relax-requirements
 | |
|             (lambda _
 | |
|               (substitute* "Gemfile"
 | |
|                 ;; Remove a few extraneous requirements.
 | |
|                 ((".*yard.*") "")
 | |
|                 ((".*github-markup.*") "")
 | |
|                 ((".*redcarpet.*") "")
 | |
|                 ((".*relish.*") "")
 | |
|                 ((".*rubocop.*") ""))
 | |
|               (substitute* "Gemfile-rspec-dependencies"
 | |
|                 ((", :git => \"https://github.com/rspec.*")
 | |
|                  "\n"))
 | |
|               (substitute* "Gemfile-rails-dependencies"
 | |
|                 (("gem 'puma', '< 6.0.0'")
 | |
|                  "gem 'puma', '>= 6.0.0'"))
 | |
|               (substitute* "rspec-rails.gemspec"
 | |
|                 (("'aruba',    '~> 0.14.12'")
 | |
|                  "'aruba',    '>= 0.14.12'")
 | |
|                 (("'cucumber', '~> 7.0'")
 | |
|                  "'cucumber', '>= 7.0'"))))
 | |
|           (replace 'replace-git-ls-files
 | |
|             (lambda _
 | |
|               (substitute* "rspec-rails.gemspec"
 | |
|                 (("`git ls-files -- lib/\\*`")
 | |
|                  "`find lib -type f |sort`"))))
 | |
|           (add-before 'check 'patch-tests
 | |
|             (lambda _
 | |
|               (substitute* "spec/rspec/rails_spec.rb"
 | |
|                 (("`git ls-files -z`")
 | |
|                  "`find . -type f -not -regex '.*\\.gem$' -print0 | \
 | |
| sort -z | cut -zc3-`")))))))
 | |
|     (native-inputs
 | |
|      (list ruby-ammeter-bootstrap
 | |
|            ruby-aruba
 | |
|            ruby-capybara
 | |
|            ruby-cucumber
 | |
|            ruby-puma
 | |
|            ruby-rails
 | |
|            ruby-rspec
 | |
|            ruby-selenium-webdriver
 | |
|            ruby-sqlite3))
 | |
|     (propagated-inputs
 | |
|      (list ruby-actionpack
 | |
|            ruby-activesupport
 | |
|            ruby-railties
 | |
|            ruby-rspec-core
 | |
|            ruby-rspec-expectations
 | |
|            ruby-rspec-mocks
 | |
|            ruby-rspec-support))
 | |
|     (synopsis "Use RSpec to test Ruby on Rails applications")
 | |
|     (description
 | |
|      "This package provides support for using RSpec to test Ruby on Rails
 | |
| applications, in pace of the default Minitest testing library.")
 | |
|     (home-page "https://github.com/rspec/rspec-rails")
 | |
|     (license license:expat)))
 | |
| 
 | |
| (define-public ruby-rails-html-sanitizer
 | |
|   (package
 | |
|     (name "ruby-rails-html-sanitizer")
 | |
|     (version "1.3.0")
 | |
|     (source
 | |
|      (origin
 | |
|        (method url-fetch)
 | |
|        (uri (rubygems-uri "rails-html-sanitizer" version))
 | |
|        (sha256
 | |
|         (base32
 | |
|          "1icpqmxbppl4ynzmn6dx7wdil5hhq6fz707m9ya6d86c7ys8sd4f"))))
 | |
|     (build-system ruby-build-system)
 | |
|     (arguments
 | |
|      '(;; No included tests
 | |
|        #:tests? #f))
 | |
|     (propagated-inputs
 | |
|      (list ruby-loofah))
 | |
|     (synopsis "HTML sanitization for Rails applications")
 | |
|     (description
 | |
|      "This gem is used to handle HTML sanitization in Rails applications.  If
 | |
| you need similar functionality in non Rails apps consider using Loofah
 | |
| directly.")
 | |
|     (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.3")
 | |
|    (source
 | |
|     (origin
 | |
|       (method git-fetch)
 | |
|       (uri (git-reference
 | |
|             (url "https://github.com/rails/rails-dom-testing")
 | |
|             (commit (string-append "v" version))))
 | |
|       (file-name (git-file-name name version))
 | |
|       (sha256
 | |
|        (base32
 | |
|         "17vdh273cmmfpzy5m546dd13zqmimv54jjx0f7sl0zi5lwz0gnck"))))
 | |
|    (build-system ruby-build-system)
 | |
|    (arguments
 | |
|     (list
 | |
|       #:phases
 | |
|       #~(modify-phases %standard-phases
 | |
|           (add-after 'unpack 'delete-gemfile.lock
 | |
|             (lambda _
 | |
|               (delete-file "Gemfile.lock"))))))
 | |
|    (native-inputs
 | |
|     (list bundler))
 | |
|    (propagated-inputs
 | |
|     (list ruby-activesupport ruby-nokogiri))
 | |
|    (synopsis "Compare HTML DOMs and assert certain elements exists")
 | |
|    (description
 | |
|     "This gem can compare HTML and assert certain elements exists.  This is
 | |
| useful when writing tests.")
 | |
|    (home-page "https://github.com/rails/rails-dom-testing")
 | |
|    (license license:expat)))
 | |
| 
 | |
| (define-public ruby-actiontext
 | |
|   (package
 | |
|     (name "ruby-actiontext")
 | |
|     (version %ruby-rails-version)
 | |
|     (source ruby-rails-monorepo)
 | |
|     (build-system ruby-build-system)
 | |
|     (arguments
 | |
|      (list
 | |
|       #:tests? #f                       ;avoid a cycle with ruby-rails
 | |
|       #:phases
 | |
|       #~(modify-phases %standard-phases
 | |
|           (add-after 'extract-gemspec 'chdir
 | |
|             (lambda _
 | |
|               (chdir "actiontext"))))))
 | |
|     (propagated-inputs
 | |
|      (list ruby-actionpack
 | |
|            ruby-activerecord
 | |
|            ruby-activestorage
 | |
|            ruby-activesupport
 | |
|            ruby-nokogiri))
 | |
|     (synopsis "Edit and display rich text in Rails applications")
 | |
|     (description
 | |
|      "ActionText edits and displays rich text in Rails applications.")
 | |
|     (home-page "https://rubyonrails.org")
 | |
|     (license license:expat)))
 | |
| 
 | |
| (define-public ruby-actionview
 | |
|   (package
 | |
|    (name "ruby-actionview")
 | |
|     (version %ruby-rails-version)
 | |
|     (source ruby-rails-monorepo)
 | |
|     (build-system ruby-build-system)
 | |
|     (arguments
 | |
|      (list
 | |
|       ;; XXX: This gem appears to load action_controller, provided by
 | |
|       ;; ruby-actionpack, but actionpack propagates ruby-actionview,
 | |
|       ;; introducing a circular dependency.
 | |
|       #:tests? #f
 | |
|       #:test-target "test:template"
 | |
|       #:phases
 | |
|       #~(modify-phases %standard-phases
 | |
|           (add-after 'extract-gemspec 'chdir
 | |
|             (lambda _
 | |
|               (chdir "actionview"))))))
 | |
|    (propagated-inputs
 | |
|     (list ruby-activesupport
 | |
|           ruby-builder
 | |
|           ruby-erubi
 | |
|           ruby-rails-dom-testing
 | |
|           ruby-rails-html-sanitizer))
 | |
|    (synopsis "Conventions and helpers for building web pages")
 | |
|    (description
 | |
|     "ActionView provides conventions and helpers for building web pages in
 | |
| Ruby.")
 | |
|    (home-page "https://rubyonrails.org/")
 | |
|    (license license:expat)))
 | |
| 
 | |
| (define-public ruby-actionpack
 | |
|   (package
 | |
|     (name "ruby-actionpack")
 | |
|     (version %ruby-rails-version)
 | |
|     (source ruby-rails-monorepo)
 | |
|     (build-system ruby-build-system)
 | |
|     (arguments
 | |
|      (list
 | |
|       #:phases
 | |
|       #~(modify-phases %standard-phases
 | |
|           (add-after 'extract-gemspec 'chdir
 | |
|             (lambda _
 | |
|               (chdir "actionpack")))
 | |
|           (add-before 'check 'delete-problematic-tests
 | |
|             (lambda _
 | |
|               (let-syntax ((skip-tests
 | |
|                             (syntax-rules ()
 | |
|                               ((_ file test ...)
 | |
|                                (substitute* file
 | |
|                                  ;; ActiveSupport test case.
 | |
|                                  (((string-append "test \"" test "\".*") all)
 | |
|                                   (string-append
 | |
|                                    all "    skip    'fails on guix'\n")) ...
 | |
|                                  ;; MiniTest test case.
 | |
|                                  (((string-append "def " test ".*") all)
 | |
|                                   (string-append
 | |
|                                    all "    skip('fails on guix')\n")) ...)))))
 | |
| 
 | |
|                 (with-directory-excursion "test"
 | |
|                   (for-each delete-file
 | |
|                             ;; These tests depend on rails, which depends on
 | |
|                             ;; this package.
 | |
|                             '("dispatch/mount_test.rb"
 | |
|                               "dispatch/prefix_generation_test.rb"
 | |
|                               "dispatch/routing_assertions_test.rb"
 | |
|                               "dispatch/routing/inspector_test.rb"
 | |
|                               "controller/live_stream_test.rb"
 | |
|                               "controller/integration_test.rb"
 | |
|                               "controller/test_case_test.rb"))
 | |
| 
 | |
|                   ;; The following test failures have been reported upstream
 | |
|                   ;; (see: https://github.com/rails/rails/issues/47615).
 | |
|                   (skip-tests "controller/new_base/render_streaming_test.rb"
 | |
|                               ;; These tests fail due to white space
 | |
|                               ;; characters in the compared strings.
 | |
|                               "rendering with streaming no layout"
 | |
|                               "rendering with streaming enabled at the \
 | |
| class level"
 | |
|                               "rendering with streaming given to render"
 | |
|                               "rendering with layout exception"
 | |
|                               "rendering with template exception"
 | |
|                               "rendering with streaming do not override \
 | |
| explicit cache control given to render")
 | |
| 
 | |
|                   (skip-tests "dispatch/system_testing/driver_test.rb"
 | |
|                               ;; These tests require Firefox.
 | |
|                               "define extra capabilities using headless_firefox"
 | |
|                               "define extra capabilities using firefox")
 | |
| 
 | |
|                   (skip-tests "dispatch/session/cache_store_test.rb"
 | |
|                               ;; This test fails with: "NoMethodError:
 | |
|                               ;; undefined method `hash_for' for
 | |
|                               ;; #<Rack::Test::CookieJar:0x0000000003572170>".
 | |
|                               "test_getting_session_value_after_session_reset"))))))))
 | |
|     (native-inputs
 | |
|      (list ruby-activemodel
 | |
|            ruby-capybara
 | |
|            ruby-selenium-webdriver
 | |
|            ruby-zeitwerk))
 | |
|     (propagated-inputs
 | |
|      (list ruby-actionview
 | |
|            ruby-activesupport
 | |
|            ruby-rack
 | |
|            ruby-rack-cache
 | |
|            ruby-rack-session
 | |
|            ruby-rack-test
 | |
|            ruby-rails-dom-testing
 | |
|            ruby-rails-html-sanitizer))
 | |
|     (synopsis "Conventions for building and testing MVC web applications")
 | |
|     (description
 | |
|      "ActionPack provides conventions for building and testing MVC web
 | |
| applications.  These work with any Rack-compatible server.")
 | |
|     (home-page "https://rubyonrails.org/")
 | |
|     (license license:expat)))
 | |
| 
 | |
| (define-public ruby-actioncable
 | |
|   (package
 | |
|     (name "ruby-actioncable")
 | |
|     (version %ruby-rails-version)
 | |
|     (source ruby-rails-monorepo)
 | |
|     (build-system ruby-build-system)
 | |
|     (arguments
 | |
|      (list
 | |
|       #:phases
 | |
|       #~(modify-phases %standard-phases
 | |
|           (add-after 'extract-gemspec 'chdir
 | |
|             (lambda _
 | |
|               (chdir "actioncable")))
 | |
|           (delete 'check)               ;moved after install phase
 | |
|           (add-after 'install 'check
 | |
|             (assoc-ref %standard-phases 'check))
 | |
|           (add-before 'check 'set-GEM_PATH
 | |
|             (lambda _
 | |
|               (setenv "GEM_PATH" (string-append
 | |
|                                   (getenv "GEM_PATH") ":"
 | |
|                                   #$output "/lib/ruby/vendor_ruby"))))
 | |
|           (add-before 'check 'disable-problematic-tests
 | |
|             (lambda _
 | |
|               ;; There are multiple client test failures (see:
 | |
|               ;; https://github.com/rails/rails/issues/47617).
 | |
|               (delete-file "test/client_test.rb")))
 | |
|           (add-before 'check 'start-redis
 | |
|             (lambda* (#:key tests? #:allow-other-keys)
 | |
|               (when tests?
 | |
|                 (invoke "redis-server" "--daemonize" "yes")))))))
 | |
|     (native-inputs
 | |
|      (list redis
 | |
|            ruby-activerecord
 | |
|            ruby-pg
 | |
|            ruby-puma
 | |
|            ruby-redis
 | |
|            ruby-websocket-client-simple))
 | |
|     (propagated-inputs
 | |
|      (list ruby-actionpack
 | |
|            ruby-activesupport
 | |
|            ruby-nio4r
 | |
|            ruby-websocket-driver))
 | |
|     (synopsis "Integrate integrates WebSockets with Rails applications")
 | |
|     (description
 | |
|      "Action Cable integrates WebSockets with Rails applications.  Through
 | |
| WebSockets it allows for real-time features in web applications.")
 | |
|     (home-page "https://rubyonrails.org/")
 | |
|     (license license:expat)))
 | |
| 
 | |
| (define-public ruby-activejob
 | |
|   (package
 | |
|     (name "ruby-activejob")
 | |
|     (version %ruby-rails-version)
 | |
|     (source ruby-rails-monorepo)
 | |
|     (build-system ruby-build-system)
 | |
|     (arguments
 | |
|      (list
 | |
|       #:phases
 | |
|       #~(modify-phases %standard-phases
 | |
|           (add-after 'extract-gemspec 'chdir
 | |
|             (lambda _
 | |
|               (chdir "activejob")))
 | |
|           (add-after 'chdir 'delete-problematic-tests
 | |
|             (lambda _
 | |
|               (substitute* "Rakefile"
 | |
|                 ;; Remove the adapters that aren't yet packaged or would
 | |
|                 ;; introduce cyclic dependencies.
 | |
|                 (("backburner ") "")
 | |
|                 (("resque ") "")
 | |
|                 (("sidekiq ") "")
 | |
|                 (("sneakers ") "")
 | |
|                 (("sucker_punch ") ""))
 | |
|               (substitute* "test/cases/exceptions_test.rb"
 | |
|                 (("ActiveJob::QueueAdapters::SneakersAdapter") "")))))))
 | |
|     (native-inputs
 | |
|      (list ruby-queue-classic
 | |
|            ruby-delayed-job
 | |
|            ruby-que
 | |
|            ruby-zeitwerk))
 | |
|     (propagated-inputs
 | |
|      (list ruby-activesupport
 | |
|            ruby-globalid))
 | |
|     (synopsis "Declare job classes for multiple backends")
 | |
|     (description "ActiveJob allows declaring job classes in a common way
 | |
| across Rails applications.")
 | |
|     (home-page "https://rubyonrails.org/")
 | |
|     (license license:expat)))
 | |
| 
 | |
| (define-public ruby-activestorage
 | |
|   (package
 | |
|     (name "ruby-activestorage")
 | |
|     (version %ruby-rails-version)
 | |
|     (source ruby-rails-monorepo)
 | |
|     (build-system ruby-build-system)
 | |
|     (arguments
 | |
|      (list
 | |
|       ;; The test suite is disabled, because it activestorage requires
 | |
|       ;; 'rails', which would introduce a dependency cycle.
 | |
|       #:tests? #f
 | |
|       #:phases
 | |
|       #~(modify-phases %standard-phases
 | |
|           (add-after 'extract-gemspec 'chdir
 | |
|             (lambda _
 | |
|               (chdir "activestorage"))))))
 | |
|     (propagated-inputs
 | |
|      (list ruby-actionpack
 | |
|            ruby-activejob
 | |
|            ruby-activerecord
 | |
|            ruby-activesupport
 | |
|            ruby-marcel
 | |
|            ruby-mini-mime))
 | |
|     (synopsis "Integrate file storage services in to Rails applications")
 | |
|     (description
 | |
|      "ActiveStorage integrates file storage services with Rails applications,
 | |
| allowing files to be attached to ActiveRecord models.")
 | |
|     (home-page "https://rubyonrails.org/")
 | |
|     (license license:expat)))
 | |
| 
 | |
| (define-public ruby-actionmailbox
 | |
|   (package
 | |
|     (name "ruby-actionmailbox")
 | |
|     (version %ruby-rails-version)
 | |
|     (source ruby-rails-monorepo)
 | |
|     (build-system ruby-build-system)
 | |
|     (arguments
 | |
|      (list
 | |
|       #:tests? #f                       ;avoid a cycle with ruby-rails
 | |
|       #:phases
 | |
|       #~(modify-phases %standard-phases
 | |
|           (add-after 'extract-gemspec 'chdir
 | |
|             (lambda _
 | |
|               (chdir "actionmailbox"))))))
 | |
|     (propagated-inputs
 | |
|      (list ruby-actionpack
 | |
|            ruby-activejob
 | |
|            ruby-activerecord
 | |
|            ruby-activestorage
 | |
|            ruby-activesupport
 | |
|            ruby-mail
 | |
|            ruby-net-imap
 | |
|            ruby-net-pop
 | |
|            ruby-net-smtp))
 | |
|     (synopsis "Receive and process incoming emails in Rails applications")
 | |
|     (description
 | |
|      "ActionMailbox receives and processes incoming emails in Rails applications.")
 | |
|     (home-page "https://rubyonrails.org")
 | |
|     (license license:expat)))
 | |
| 
 | |
| (define-public ruby-actionmailer
 | |
|   (package
 | |
|     (name "ruby-actionmailer")
 | |
|     (version %ruby-rails-version)
 | |
|     (source ruby-rails-monorepo)
 | |
|     (build-system ruby-build-system)
 | |
|     (arguments
 | |
|      (list
 | |
|       #:tests? #f                       ;avoid a cycle with ruby-rails
 | |
|       #:phases
 | |
|       #~(modify-phases %standard-phases
 | |
|           (add-after 'extract-gemspec 'chdir
 | |
|             (lambda _
 | |
|               (chdir "actionmailer"))))))
 | |
|     (propagated-inputs
 | |
|      (list ruby-actionpack
 | |
|            ruby-actionview
 | |
|            ruby-activejob
 | |
|            ruby-activesupport
 | |
|            ruby-mail
 | |
|            ruby-net-imap
 | |
|            ruby-net-pop
 | |
|            ruby-net-smtp
 | |
|            ruby-rails-dom-testing))
 | |
|     (synopsis "Work with emails using the controller/view pattern")
 | |
|     (description
 | |
|      "Compose, deliver, receive, and test emails using the controller/view
 | |
| pattern.  Including support for multipart email and attachments.")
 | |
|     (home-page "https://rubyonrails.org/")
 | |
|     (license license:expat)))
 | |
| 
 | |
| ;; A variant where the ruby-rspec-rails dependency purposefully omitted to
 | |
| ;; avoid a dependency cycle with that same package.
 | |
| (define ruby-ammeter-bootstrap
 | |
|   (package
 | |
|     (name "ruby-ammeter-bootstrap")
 | |
|     (version "1.1.5")
 | |
|     (source (origin
 | |
|               (method url-fetch)
 | |
|               (uri (rubygems-uri "ammeter" version))
 | |
|               (sha256
 | |
|                (base32
 | |
|                 "1bcslj6y3lgaknd9fpj32m1r4is7blyxygxzmwidq9cjwkrn4msh"))))
 | |
|     (build-system ruby-build-system)
 | |
|     (arguments
 | |
|      (list #:tests? #f
 | |
|            #:phases
 | |
|            #~(modify-phases %standard-phases
 | |
|                (add-after 'extract-gemspec 'remove-rails-requirement
 | |
|                  (lambda _
 | |
|                    (substitute* "Gemfile"
 | |
|                      (("gem 'rspec-rails', rspec_version")
 | |
|                       "")
 | |
|                      (("gem 'rails', rails_version")
 | |
|                       "")))))))
 | |
|     (propagated-inputs (list ruby-activesupport ruby-railties))
 | |
|     (synopsis "Write specs for your Rails 3+ generators")
 | |
|     (description "The @code{ammeter} gem makes it easy to write specs for
 | |
| Rails generators.  An existing user is @code{rspec-rails}, which uses
 | |
| @code{ammeter} to spec its own generators.")
 | |
|     (home-page "https://github.com/alexrothenberg/ammeter")
 | |
|     (license license:expat)))
 | |
| 
 | |
| (define-public ruby-ammeter
 | |
|   (package/inherit ruby-ammeter-bootstrap
 | |
|     (name "ruby-ammeter")
 | |
|     ;; TODO: The test suite requires multiple packages which are not packaged
 | |
|     ;; yet.
 | |
|     (arguments (list #:tests? #f))
 | |
|     (propagated-inputs
 | |
|      (modify-inputs (package-propagated-inputs ruby-ammeter-bootstrap)
 | |
|        (append ruby-rspec-rails)))))
 | |
| 
 | |
| (define-public ruby-bootsnap
 | |
|   (package
 | |
|     (name "ruby-bootsnap")
 | |
|     (version "1.16.0")
 | |
|     (source (origin
 | |
|               (method git-fetch)        ;for tests
 | |
|               (uri (git-reference
 | |
|                     (url "https://github.com/Shopify/bootsnap")
 | |
|                     (commit (string-append "v" version))))
 | |
|               (file-name (git-file-name name version))
 | |
|               (sha256
 | |
|                (base32
 | |
|                 "1gaih5v4jjndrkn0crrr5mxnwc3cd0f3i955n62ghk29zabvd7wf"))))
 | |
|     (build-system ruby-build-system)
 | |
|     (arguments
 | |
|      (list
 | |
|       #:test-target "default"
 | |
|       #:phases
 | |
|       #~(modify-phases %standard-phases
 | |
|           (add-after 'extract-gemspec 'relax-requirements
 | |
|             (lambda _
 | |
|               (substitute* "Gemfile"
 | |
|                 ;; Rubocop and byebug are not actually needed to run the
 | |
|                 ;; tests.
 | |
|                 ((".*rubocop.*") "")
 | |
|                 ((".*byebug.*") ""))))
 | |
|           (replace 'replace-git-ls-files
 | |
|             (lambda _
 | |
|               (substitute* "bootsnap.gemspec"
 | |
|                 (("`git ls-files -z ext lib`")
 | |
|                  "`find ext lib -type f -print0 | sort -z`")))))))
 | |
|     (native-inputs (list ruby-mocha-1 ruby-rake-compiler))
 | |
|     (propagated-inputs (list ruby-msgpack))
 | |
|     (synopsis "Accelerator for large Ruby/Rails application")
 | |
|     (description "Bootsnap is a library that plugs into Ruby, with optional
 | |
| support for YAML, to optimize and cache expensive computations.")
 | |
|     (home-page "https://github.com/Shopify/bootsnap")
 | |
|     (license license:expat)))
 | |
| 
 | |
| ;;; A private variant used to bootstrap railties.
 | |
| (define ruby-importmap-rails-bootstrap
 | |
|   (package
 | |
|     (name "ruby-importmap-rails-bootstrap")
 | |
|     (version "1.1.5")
 | |
|     (source (origin
 | |
|               (method git-fetch)        ;for tests
 | |
|               (uri (git-reference
 | |
|                     (url "https://github.com/rails/importmap-rails")
 | |
|                     (commit (string-append "v" version))))
 | |
|               (file-name (git-file-name name version))
 | |
|               (sha256
 | |
|                (base32
 | |
|                 "1d8pqqqrvsnm8rpr7qkpcxpscif61xymi509v1c62laadvhcmklg"))))
 | |
|     (build-system ruby-build-system)
 | |
|     (arguments (list #:tests? #f))             ;avoid all extra dependencies
 | |
|     ;; Leave out ruby-railties, for bootstrapping purposes.
 | |
|     (propagated-inputs (list ruby-actionpack))
 | |
|     (synopsis "Tool to manage modern JavaScript in Rails")
 | |
|     (description "Import maps can import JavaScript modules using logical
 | |
| names that map to versioned/digested files -- directly from the browser.  It
 | |
| makes it possible to build modern JavaScript applications using JavaScript
 | |
| libraries made for ES modules (ESM) without the need for transpiling or
 | |
| bundling, which removes the need for Webpack, Yarn, npm, or any other part of
 | |
| the JavaScript toolchain.  All that is needed is the asset pipeline that is
 | |
| already included in Rails.")
 | |
|     (home-page "https://github.com/rails/importmap-rails")
 | |
|     (license license:expat)))
 | |
| 
 | |
| (define-public ruby-importmap-rails
 | |
|   (package/inherit ruby-importmap-rails-bootstrap
 | |
|     (name "ruby-importmap-rails")
 | |
|     (arguments
 | |
|      (list #:phases
 | |
|            #~(modify-phases %standard-phases
 | |
|                (add-after 'extract-gemspec 'relax-requirements
 | |
|                  (lambda _
 | |
|                    (delete-file "gemfiles/rails_7_propshaft.gemfile.lock")
 | |
|                    (substitute* "gemfiles/rails_7_propshaft.gemfile"
 | |
|                      ((".*gem \"byebug\".*") "")
 | |
|                      ;; Remove appraisal, and add tzinfo-data, which needs to
 | |
|                      ;; be in the Gemfile to become available.
 | |
|                      ((".*appraisal.*")
 | |
|                       "gem 'tzinfo-data'\n")
 | |
|                      ;; This gem is for managing *installation* of
 | |
|                      ;; webdrivers... we do not want that.
 | |
|                      ((".*gem \"webdrivers\".*") ""))))
 | |
|                (add-before 'check 'set-BUNDLE_GEMFILE
 | |
|                  (lambda _
 | |
|                    ;; The default Gemfile is for Rails 6.
 | |
|                    (setenv "BUNDLE_GEMFILE"
 | |
|                            "gemfiles/rails_7_propshaft.gemfile")))
 | |
|                (add-before 'check 'disable-problematic-tests
 | |
|                  (lambda _
 | |
|                    ;; The integration tests require networking; disable them.
 | |
|                    (delete-file "test/npm_integration_test.rb")
 | |
|                    (delete-file "test/packager_integration_test.rb"))))))
 | |
|     (native-inputs
 | |
|      (list ruby-capybara
 | |
|            ruby-propshaft
 | |
|            ruby-rails
 | |
|            ruby-rexml
 | |
|            ruby-selenium-webdriver
 | |
|            ruby-sqlite3
 | |
|            ruby-stimulus-rails
 | |
|            ruby-turbo-rails
 | |
|            ruby-tzinfo
 | |
|            ruby-tzinfo-data))
 | |
|     (propagated-inputs
 | |
|      (list ruby-actionpack
 | |
|            ruby-railties))))
 | |
| 
 | |
| (define-public ruby-marcel
 | |
|   (package
 | |
|     (name "ruby-marcel")
 | |
|     (version "1.0.2")
 | |
|     (source (origin
 | |
|               (method git-fetch)
 | |
|               (uri (git-reference
 | |
|                     (url "https://github.com/rails/marcel")
 | |
|                     (commit (string-append "v" version))))
 | |
|               (file-name (git-file-name name version))
 | |
|               (sha256
 | |
|                (base32
 | |
|                 "1i1x24afmn09n48fj4yz2pdm6vlfnq14gism0cgxsyqmlrvsxajn"))))
 | |
|     (build-system ruby-build-system)
 | |
|     (arguments
 | |
|      (list
 | |
|       #:test-target "default"
 | |
|       #:phases
 | |
|       #~(modify-phases %standard-phases
 | |
|           (add-after 'unpack 'patch
 | |
|             (lambda _
 | |
|               ;; Remove byebug dependency
 | |
|               (substitute* "test/test_helper.rb"
 | |
|                 (("require 'byebug'") ""))))
 | |
|           (add-before 'check 'disable-problematic-tests
 | |
|             (lambda _
 | |
|               (substitute* "test/mime_type_test.rb"
 | |
|                 ;; One test fails because of the newer rack
 | |
|                 ;; version used (see:
 | |
|                 ;; https://github.com/rails/marcel/issues/91).
 | |
|                 (("test \"gets content type.*" all)
 | |
|                  (string-append
 | |
|                   all "    skip('fails on guix')\n"))))))))
 | |
|     (native-inputs (list ruby-nokogiri ruby-rack))
 | |
|     (propagated-inputs (list ruby-mimemagic))
 | |
|     (synopsis "MIME type detection using magic numbers, filenames and extensions")
 | |
|     (description
 | |
|      "@code{marcel} provides @acronym{MIME, Multipurpose Internet Mail
 | |
| Extensions} type detection using magic numbers, filenames, and extensions")
 | |
|     (home-page "https://github.com/rails/marcel")
 | |
|     (license license:expat)))
 | |
| 
 | |
| (define-public ruby-propshaft
 | |
|   (package
 | |
|     (name "ruby-propshaft")
 | |
|     (version "0.7.0")
 | |
|     (source (origin
 | |
|               (method url-fetch)
 | |
|               (uri (rubygems-uri "propshaft" version))
 | |
|               (sha256
 | |
|                (base32
 | |
|                 "19s5qvfady49b9b6dcvz6nsna1lvckw509ddh3ihmdz0w4qrjy49"))))
 | |
|     (build-system ruby-build-system)
 | |
|     (propagated-inputs (list ruby-actionpack ruby-activesupport ruby-rack
 | |
|                              ruby-railties))
 | |
|     (synopsis "Asset pipeline library for Rails")
 | |
|     (description "Propshaft is an asset pipeline library for Rails.  It's
 | |
| built for an era where bundling assets to save on HTTP connections is no
 | |
| longer urgent, where JavaScript and CSS are either compiled by dedicated
 | |
| Node.js bundlers or served directly to the browsers, and where increases in
 | |
| bandwidth have made the need for minification less pressing.  These factors
 | |
| allow for a dramatically simpler and faster asset pipeline compared to
 | |
| previous options, like Sprockets.")
 | |
|     (home-page "https://github.com/rails/propshaft")
 | |
|     (license license:expat)))
 | |
| 
 | |
| ;;; Pro-tip: to get a summary of the failures, run
 | |
| ;;; 'M-x occur [1-9][0-9]* \(failures\|errors\)' on the build log.
 | |
| (define-public ruby-railties
 | |
|   (package
 | |
|     (name "ruby-railties")
 | |
|     (version %ruby-rails-version)
 | |
|     (source ruby-rails-monorepo)
 | |
|     (build-system ruby-build-system)
 | |
|     (arguments
 | |
|      (list
 | |
|       #:phases
 | |
|       #~(modify-phases %standard-phases
 | |
|           (add-after 'unpack 'delete-gemfiles
 | |
|             (lambda _
 | |
|               ;; Delete Gemfile and Gemfile.lock, as they contains too many
 | |
|               ;; dependencies not actually useful here.
 | |
|               (delete-file "Gemfile")
 | |
|               (delete-file "Gemfile.lock")))
 | |
|           (add-after 'extract-gemspec 'chdir
 | |
|             (lambda _
 | |
|               (chdir "railties")))
 | |
|           (add-after 'chdir 'disable-bundler
 | |
|             (lambda _
 | |
|               (substitute* (append (list "Rakefile")
 | |
|                                    (find-files "test" "\\.rb$")
 | |
|                                    (find-files "lib" "\\.tt$"))
 | |
|                 ;; Do not use Bundler, which causes errors such as not finding
 | |
|                 ;; the gem of this package (railties), or preferring the other
 | |
|                 ;; in-source gems.
 | |
|                 (("`bundle exec") "`")
 | |
|                 ((".*require \"bundler/setup\".*") "")
 | |
|                 ((".*Bundler.require.*") ""))
 | |
|               ;; Adjust a runtime substitution that uses a removed
 | |
|               ;; Bundler.require in its pattern; instead of matching
 | |
|               ;; "Bundler.require", it now appends to the 'require
 | |
|               ;; "rails/all"' line in the generated 'application.rb' template
 | |
|               ;; generated from
 | |
|               ;; "lib/rails/generators/rails/app/templates/config/application.rb.tt".
 | |
|               (substitute* "test/isolation/abstract_unit.rb"
 | |
|                 (("contents.sub!\\(/\\^Bundler\\\\.require\\.\\*/, \"([^\"]*)"
 | |
|                   _ replacement)
 | |
|                  (format #f "contents.sub!('require \"rails/all\"', \"\\\\0\\n~a"
 | |
|                          replacement)))))
 | |
|           (add-after 'chdir 'do-not-load-other-gems-from-source
 | |
|             (lambda _
 | |
|               ;; The Rakefile adds '-I' Ruby options so that the other Rails
 | |
|               ;; libraries are loaded from source; since they are already
 | |
|               ;; packaged separately, use these instead.
 | |
|               (substitute* "Rakefile"
 | |
|                 ((".*\"\\.\\./activesupport/lib\",.*") "")
 | |
|                 ((".*\"\\.\\./actionpack/lib\",.*") "")
 | |
|                 ((".*\"\\.\\./actionview/lib\",.*") "")
 | |
|                 ((".*\"\\.\\./activemodel/lib\".*") ""))))
 | |
|           (add-after 'chdir 'patch-paths
 | |
|             (lambda _
 | |
|               (substitute* "lib/rails/generators/base.rb"
 | |
|                 (("/usr/bin/env") (which "env")))))
 | |
|           (delete 'check)               ;moved after install phase
 | |
|           (add-after 'install 'check
 | |
|             (assoc-ref %standard-phases 'check))
 | |
|           (add-before 'check 'prepare-for-tests
 | |
|             (lambda _
 | |
|               (define (touch file-name)
 | |
|                 (call-with-output-file file-name (const #t)))
 | |
|               ;; Otherwise, the test suite attempts to use yarn to fetch
 | |
|               ;; NodeJS modules.
 | |
|               (mkdir-p "../actionview/lib/assets/compiled")
 | |
|               (touch "../actionview/lib/assets/compiled/rails-ujs.js")
 | |
|               (mkdir-p "test/isolation/assets/node_modules")
 | |
|               ;; Git requires to be able to write to HOME.
 | |
|               (setenv "HOME" "/tmp")))
 | |
|           (add-before 'check 'disable-problematic-tests
 | |
|             (lambda _
 | |
|               (let-syntax ((skip-tests
 | |
|                             (syntax-rules ()
 | |
|                               ((_ file test ...)
 | |
|                                (substitute* file
 | |
|                                  ;; ActiveSupport test case.
 | |
|                                  (((string-append "test \"" test "\".*") all)
 | |
|                                   (string-append
 | |
|                                    all "    skip    'fails on guix'\n")) ...
 | |
|                                    ;; MiniTest test case.
 | |
|                                  (((string-append "def " test ".*") all)
 | |
|                                   (string-append
 | |
|                                    all "    skip('fails on guix')\n")) ...)))))
 | |
|                 (with-directory-excursion "test"
 | |
|                   ;; This test requires 'rails' and Bundler.
 | |
|                   (delete-file "application/server_test.rb")
 | |
|                   ;; These tests are incompatible with MiniTest 5.17 (see:
 | |
|                   ;; https://github.com/rails/rails/issues/47657).
 | |
|                   (skip-tests "generators_test.rb"
 | |
|                               "test_invoke_with_config_values"
 | |
|                               "test_simple_invoke"
 | |
|                               "test_should_give_higher_preference_to_rails_generators"
 | |
|                               "test_nested_fallbacks_for_generators"
 | |
|                               "test_fallbacks_for_generators_on_invoke"
 | |
|                               "test_invoke_with_default_values"
 | |
|                               "test_invoke_with_nested_namespaces")
 | |
|                   ;; These tests requires the assets which we lack.
 | |
|                   (delete-file "application/assets_test.rb")
 | |
|                   (delete-file "railties/generators_test.rb")
 | |
|                   (skip-tests "generators/shared_generator_tests.rb"
 | |
|                               ;; This test checks that bin/rails has /usr/bin/env has a
 | |
|                               ;; shebang and fails.
 | |
|                               "test_shebang_when_is_the_same_as_default_use_env")
 | |
|                   (skip-tests "generators/app_generator_test.rb"
 | |
|                               ;; This test requires networking.
 | |
|                               "test_template_from_url"
 | |
|                               ;; This test requires Bundler.
 | |
|                               "test_generation_use_original_bundle_environment"
 | |
|                               ;; This test requires assets.
 | |
|                               "test_css_option_with_cssbundling_gem"
 | |
|                               ;; These tests require the rails/command
 | |
|                               ;; namespace provided by the 'ruby-rails'
 | |
|                               ;; package, which depends on this one.
 | |
|                               "test_css_option_with_asset_pipeline_tailwind"
 | |
|                               "test_hotwire")
 | |
|                   (skip-tests
 | |
|                    "generators/plugin_generator_test.rb"
 | |
|                    ;; These tests require assets.
 | |
|                    "test_model_with_existent_application_record_in_mountable_engine"
 | |
|                    "test_dummy_application_loads_plugin"
 | |
|                    "test_generate_application_mailer_when_does_not_exist_in_\
 | |
| mountable_engine"
 | |
|                    "test_generate_mailer_layouts_when_does_not_exist_in_mountable_engine"
 | |
|                    "test_ensure_that_migration_tasks_work_with_mountable_option"
 | |
|                    "test_generating_controller_inside_mountable_engine"
 | |
|                    "test_generate_application_job_when_does_not_exist_in_mountable_engine"
 | |
|                    "test_run_default"
 | |
|                    ;; This test expects a /usr/bin/env shebang.
 | |
|                    "test_shebang")
 | |
|                   ;; The following generator tests require assets.
 | |
|                   (skip-tests "generators/plugin_test_runner_test.rb"
 | |
|                               "test_run_default")
 | |
|                   (skip-tests
 | |
|                    "generators/scaffold_controller_generator_test.rb"
 | |
|                    "test_controller_tests_pass_by_default_inside_full_engine"
 | |
|                    "test_controller_tests_pass_by_default_inside_mountable_engine")
 | |
|                   (skip-tests
 | |
|                    "generators/scaffold_generator_test.rb"
 | |
|                    "test_scaffold_tests_pass_by_default_inside_mountable_engine"
 | |
|                    "test_scaffold_tests_pass_by_default_inside_api_mountable_engine"
 | |
|                    "test_scaffold_tests_pass_by_default_inside_api_full_engine"
 | |
|                    "test_scaffold_on_invoke_inside_mountable_engine"
 | |
|                    "test_scaffold_tests_pass_by_default_inside_full_engine"
 | |
|                    "test_scaffold_tests_pass_by_default_inside_namespaced_\
 | |
| mountable_engine")
 | |
|                   (skip-tests "generators/test_runner_in_engine_test.rb"
 | |
|                               "test_run_default"
 | |
|                               "test_rerun_snippet_is_relative_path")
 | |
|                   ;; The actions_test tests depend on assets or the rails gem.
 | |
|                   (delete-file "generators/actions_test.rb")
 | |
|                   (skip-tests "engine/commands_test.rb"
 | |
|                               "test_server_command_work_inside_engine"
 | |
|                               "test_runner_command_work_inside_engine")
 | |
|                   ;; These tests fails because of cleanup code
 | |
|                   ;; when the environment lacks a PTY device (see:
 | |
|                   ;; https://github.com/rails/rails/issues/47656).
 | |
|                   (delete-file "engine/commands_test.rb")
 | |
|                   ;; The following tests require the 'rails' gem.
 | |
|                   (skip-tests "application/test_runner_test.rb"
 | |
|                               "test_run_app_without_rails_loaded"
 | |
|                               "test_generated_scaffold_works_with_rails_test"
 | |
|                               "test_load_fixtures_when_running_test_suites"
 | |
|                               "test_run_in_parallel_with_unmarshable_exception"
 | |
|                               "test_run_in_parallel_with_unknown_object")
 | |
|                   (skip-tests
 | |
|                    "application/test_test.rb"
 | |
|                    "automatically synchronizes test schema after rollback"
 | |
|                    "hooks for plugins"
 | |
|                    "sql structure migrations when adding column to existing table"
 | |
|                    "sql structure migrations"
 | |
|                    "ruby schema migrations")
 | |
|                   ;; These tests require a PostgreSQL server accepting
 | |
|                   ;; connections under /var/run/postgresql.
 | |
|                   (skip-tests
 | |
|                    "application/rake_test.rb"
 | |
|                    "test_not_protected_when_previous_migration_was_not_production")
 | |
|                   (delete-file "application/rake/dbs_test.rb")
 | |
|                   (delete-file "application/rake/migrations_test.rb")
 | |
|                   (delete-file "application/rake/multi_dbs_test.rb")
 | |
|                   (skip-tests "engine/test_test.rb"
 | |
|                               "automatically synchronize test schema")
 | |
|                   (skip-tests "isolation/abstract_unit.rb" "use_postgresql")
 | |
|                   (skip-tests "railties/engine_test.rb"
 | |
|                               "active_storage:install task works within engine"
 | |
|                               "active_storage:update task works within engine"
 | |
|                               "rake environment can be called in the engine"
 | |
|                               "mountable engine should copy migrations within engine_path"
 | |
|                               ;; This test fails because we do not use the
 | |
|                               ;; in-source active/action gems.
 | |
|                               "i18n files have lower priority than application ones"
 | |
|                               ;; This test fails when not using Bundler.
 | |
|                               "setting priority for engines with config.railties_order")
 | |
|                   ;; This test requires a database server or networking.
 | |
|                   (delete-file "application/bin_setup_test.rb")
 | |
|                   (skip-tests "application/middleware/cache_test.rb"
 | |
|                               ;; This test produces "miss, store" instead of
 | |
|                               ;; "fresh".
 | |
|                               "test_cache_works_with_expires"
 | |
|                               ;; This one produces "miss" instead of "stale,
 | |
|                               ;; valid, store".
 | |
|                               "test_cache_works_with_etags"
 | |
|                               ;; Likewise.
 | |
|                               "test_cache_works_with_last_modified")
 | |
|                   (skip-tests "application/initializers/frameworks_test.rb"
 | |
|                               ;; These tests are either broken, or rely on
 | |
|                               ;; database availability
 | |
|                               "expire schema cache dump if the version can't be checked because the database is unhealthy"
 | |
|                               "does not expire schema cache dump if check_schema_cache_dump_version is false and the database unhealthy"
 | |
|                               "does not expire schema cache dump if check_schema_cache_dump_version is false")))))
 | |
|           (add-before 'check 'set-paths
 | |
|             (lambda _
 | |
|               (setenv "PATH" (string-append (getenv "PATH") ":"
 | |
|                                             #$output "/bin"))
 | |
|               (setenv "GEM_PATH" (string-append
 | |
|                                   (getenv "GEM_PATH") ":"
 | |
|                                   #$output "/lib/ruby/vendor_ruby")))))))
 | |
|     (native-inputs
 | |
|      (list git-minimal/pinned
 | |
|            ruby-actioncable
 | |
|            ruby-actionmailbox
 | |
|            ruby-actionmailer
 | |
|            ruby-actiontext
 | |
|            ruby-actionview
 | |
|            ruby-activejob
 | |
|            ruby-activemodel
 | |
|            ruby-activerecord
 | |
|            ruby-activestorage
 | |
|            ruby-bcrypt
 | |
|            ruby-bootsnap
 | |
|            ruby-capybara
 | |
|            ruby-dalli
 | |
|            ruby-importmap-rails-bootstrap
 | |
|            ruby-listen
 | |
|            ruby-minitest-retry
 | |
|            ruby-mysql2
 | |
|            ruby-pg
 | |
|            ruby-selenium-webdriver
 | |
|            ruby-sprockets-rails
 | |
|            ruby-webrick
 | |
|            sqlite))
 | |
|     (propagated-inputs
 | |
|      (list ruby-actionpack
 | |
|            ruby-activesupport
 | |
|            ruby-method-source
 | |
|            ruby-rake
 | |
|            ruby-thor
 | |
|            ruby-zeitwerk))
 | |
|     (synopsis "Rails internals, including application bootup and generators")
 | |
|     (description "@code{railties} provides the core Rails internals including
 | |
| handling application bootup, plugins, generators, and Rake tasks.")
 | |
|     (home-page "https://rubyonrails.org")
 | |
|     (license license:expat)))
 | |
| 
 | |
| (define-public ruby-sassc-rails
 | |
|   (package
 | |
|     (name "ruby-sassc-rails")
 | |
|     (version "2.1.2")
 | |
|     (source (origin
 | |
|               (method url-fetch)
 | |
|               (uri (rubygems-uri "sassc-rails" version))
 | |
|               (sha256
 | |
|                (base32
 | |
|                 "1d9djmwn36a5m8a83bpycs48g8kh1n2xkyvghn7dr6zwh4wdyksz"))))
 | |
|     (build-system ruby-build-system)
 | |
|     ;; The test suite currently fails with multiple "FrozenError: can't modify
 | |
|     ;; frozen Array: []" errors, apparently caused by Rails 7 (see:
 | |
|     ;; https://github.com/sass/sassc-rails/pull/178/files).
 | |
|     (arguments (list #:tests? #f
 | |
|                      #:phases #~(modify-phases %standard-phases
 | |
|                                   (add-after 'extract-gemspec 'relax-requirements
 | |
|                                     (lambda _
 | |
|                                       (substitute* "sassc-rails.gemspec"
 | |
|                                         (("%q<rake>.freeze, \\[\"~> 10.0\"]")
 | |
|                                          "%q<rake>.freeze, [\">= 10.0\"]")))))))
 | |
|     (native-inputs (list ruby-mocha ruby-pry ruby-tzinfo-data))
 | |
|     (propagated-inputs (list ruby-railties ruby-sassc ruby-sprockets
 | |
|                              ruby-sprockets-rails ruby-tilt))
 | |
|     (synopsis "SassC-Ruby integration with Rails")
 | |
|     (description "This Ruby library integrates SassC-Ruby into Rails.")
 | |
|     (home-page "https://github.com/sass/sassc-rails")
 | |
|     (license license:expat)))
 | |
| 
 | |
| (define-public ruby-sprockets
 | |
|   (package
 | |
|     (name "ruby-sprockets")
 | |
|     (version "4.2.0")
 | |
|     (source
 | |
|      (origin
 | |
|        (method url-fetch)
 | |
|        (uri (rubygems-uri "sprockets" version))
 | |
|        (sha256
 | |
|         (base32
 | |
|          "0k0236g4h3ax7v6vp9k0l2fa0w6f1wqp7dn060zm4isw4n3k89sw"))))
 | |
|     (build-system ruby-build-system)
 | |
|     (arguments
 | |
|      '(;; No included tests
 | |
|        #:tests? #f))
 | |
|     (propagated-inputs
 | |
|      (list ruby-concurrent ruby-rack))
 | |
|     (synopsis "Sprockets is a Rack-based asset packaging system")
 | |
|     (description
 | |
|      "Sprockets is a Rack-based asset packaging system that concatenates and
 | |
| serves JavaScript, CoffeeScript, CSS, LESS, Sass, and SCSS.")
 | |
|     (home-page "https://github.com/rails/sprockets")
 | |
|     (license license:expat)))
 | |
| 
 | |
| (define-public ruby-sprockets-rails
 | |
|   (package
 | |
|    (name "ruby-sprockets-rails")
 | |
|    (version "3.4.2")
 | |
|    (source
 | |
|     (origin
 | |
|      (method url-fetch)
 | |
|      (uri (rubygems-uri "sprockets-rails" version))
 | |
|      (sha256
 | |
|       (base32
 | |
|        "1b9i14qb27zs56hlcc2hf139l0ghbqnjpmfi0054dxycaxvk5min"))))
 | |
|    (build-system ruby-build-system)
 | |
|    (arguments
 | |
|     '(;; No included tests
 | |
|       #:tests? #f))
 | |
|    (propagated-inputs
 | |
|     (list ruby-actionpack ruby-activesupport ruby-sprockets))
 | |
|    (synopsis "Sprockets Rails integration")
 | |
|    (description
 | |
|     "Provides Sprockets implementation for the Rails Asset Pipeline.")
 | |
|    (home-page
 | |
|     "https://github.com/rails/sprockets-rails")
 | |
|    (license license:expat)))
 | |
| 
 | |
| (define-public ruby-stimulus-rails
 | |
|   (package
 | |
|     (name "ruby-stimulus-rails")
 | |
|     (version "1.2.1")
 | |
|     (source (origin
 | |
|               (method url-fetch)
 | |
|               (uri (rubygems-uri "stimulus-rails" version))
 | |
|               (sha256
 | |
|                (base32
 | |
|                 "12hfdzh6cwahbd6p4r0r0d14n3laj3cqasx9w18wga9fq70bq6w3"))))
 | |
|     (build-system ruby-build-system)
 | |
|     (propagated-inputs (list ruby-railties))
 | |
|     (synopsis "Modest JavaScript framework for Rails")
 | |
|     (description "This package provides a modest JavaScript framework for the
 | |
| HTML you already have.")
 | |
|     (home-page "https://stimulus.hotwired.dev")
 | |
|     (license license:expat)))
 | |
| 
 | |
| (define-public ruby-turbo-rails
 | |
|   (package
 | |
|     (name "ruby-turbo-rails")
 | |
|     (version "1.4.0")
 | |
|     (source (origin
 | |
|               (method url-fetch)
 | |
|               (uri (rubygems-uri "turbo-rails" version))
 | |
|               (sha256
 | |
|                (base32
 | |
|                 "0vm3iqgr3kxyyz5i09lhvfszp4pw1gw5j5rhhv1gmasv4kq2p3qh"))))
 | |
|     (build-system ruby-build-system)
 | |
|     ;; The test suite depends on JavaScript modules fetched via 'yarn'.
 | |
|     (arguments (list #:tests? #f))
 | |
|     (propagated-inputs (list ruby-actionpack ruby-activejob ruby-railties))
 | |
|     (synopsis "High performance web application framework")
 | |
|     (description
 | |
|      "Turbo aims to be as fast as single-page web application without having
 | |
| to write any JavaScript.  Turbo accelerates links and form submissions without
 | |
| requiring server-side changes to the generated HTML.  It allows carving up a
 | |
| page into independent frames, which can be lazy-loaded and operated as
 | |
| independent components.  Finally, it helps making partial page updates using
 | |
| just HTML and a set of CRUD-like container tags.  These three techniques
 | |
| reduce the amount of custom JavaScript that many web applications need to
 | |
| write by an order of magnitude.  And for the few dynamic bits that are left,
 | |
| Stimulus can be used.")
 | |
|     (home-page "https://github.com/hotwired/turbo-rails")
 | |
|     (license license:expat)))
 | |
| 
 | |
| (define-public ruby-web-console
 | |
|   (package
 | |
|     (name "ruby-web-console")
 | |
|     (version "4.2.0")
 | |
|     (source
 | |
|      (origin
 | |
|        ;; Download from GitHub as test files are not provided in the gem.
 | |
|        (method git-fetch)
 | |
|        (uri (git-reference
 | |
|              (url "https://github.com/rails/web-console")
 | |
|              (commit (string-append "v" version))))
 | |
|        (file-name (git-file-name name version))
 | |
|        (sha256
 | |
|         (base32
 | |
|          "07mg9nq7h48n01hps1m0g2nk94zknab6mrcxsv8x2vaf2xfgjilg"))))
 | |
|     (build-system ruby-build-system)
 | |
|     (arguments
 | |
|      '(#:phases
 | |
|        (modify-phases %standard-phases
 | |
|          (add-after 'unpack 'patch-Gemfile
 | |
|            (lambda _
 | |
|              (substitute* "Gemfile"
 | |
|                ;; Remove the github bit from the Gemfile, so that the Guix
 | |
|                ;; packages are used.
 | |
|                ((", github: .*") "\n")
 | |
|                ;; The usual methods of not loading this group don't work, so
 | |
|                ;; patch the Gemfile.
 | |
|                (("group :development") "[].each")
 | |
|                ;; tzinfo-data is propagated by ruby-activesupport, but it
 | |
|                ;; needs to be in the Gemfile to become available.
 | |
|                (("group :test do") "group :test do\n  gem 'tzinfo-data'")))))))
 | |
|     (propagated-inputs
 | |
|      (list ruby-actionview ruby-activemodel ruby-arel ruby-skiptrace ruby-railties))
 | |
|     (native-inputs
 | |
|      (list bundler ruby-rails ruby-mocha ruby-simplecov))
 | |
|     (synopsis "Debugging tool for your Ruby on Rails applications")
 | |
|     (description
 | |
|      "This package allows you to create an interactive Ruby session in your
 | |
| browser.  Those sessions are launched automatically in case of an error and
 | |
| can also be launched manually in any page.")
 | |
|     (home-page "https://github.com/rails/web-console")
 | |
|     (license license:expat)))
 | |
| 
 | |
| (define-public ruby-with-advisory-lock
 | |
|   (package
 | |
|     (name "ruby-with-advisory-lock")
 | |
|     (version "4.0.0")
 | |
|     (source
 | |
|      (origin
 | |
|        (method url-fetch)
 | |
|        (uri (rubygems-uri "with_advisory_lock" version))
 | |
|        (sha256
 | |
|         (base32
 | |
|          "1k37hxgmaqgsd54gplm5xim9nw3ghvqsbzaw7q4q64ha1nbd9a41"))))
 | |
|     (build-system ruby-build-system)
 | |
|     (arguments
 | |
|      '(#:tests? #f)) ; TODO Tests require a running MySQL service
 | |
|     (propagated-inputs
 | |
|      (list ruby-activerecord))
 | |
|     (native-inputs
 | |
|      (list bundler ruby-yard ruby-mysql2))
 | |
|     (synopsis "Advisory locking for ActiveRecord")
 | |
|     (description
 | |
|      "The With advisory lock gem adds advisory locking to ActiveRecord for
 | |
| PostgreSQL and MySQL.  SQLite is also supported, but this uses the file system
 | |
| for locks.")
 | |
|     (home-page "https://closuretree.github.io/with_advisory_lock/")
 | |
|     (license license:expat)))
 | |
| 
 | |
| ;;; This is a meta-package which propagates all the individual Rails
 | |
| ;;; components.
 | |
| (define-public ruby-rails
 | |
|   (package
 | |
|     (name "ruby-rails")
 | |
|     (version %ruby-rails-version)
 | |
|     (source ruby-rails-monorepo)
 | |
|     (build-system ruby-build-system)
 | |
|     (arguments
 | |
|      (list
 | |
|       #:phases
 | |
|       #~(modify-phases %standard-phases
 | |
|           (add-after 'unpack 'delete-extraneous-gemspec-files
 | |
|             (lambda _
 | |
|               ;; They would otherwise be picked up instead of rails.gemspec at
 | |
|               ;; the root of the repository.
 | |
|               (for-each (lambda (f)
 | |
|                           (unless (string-suffix? "rails.gemspec" f)
 | |
|                             (delete-file f)))
 | |
|                         (find-files "." "\\.gemspec"))))
 | |
|           ;; This gem acts as glue between the gems that actually make up
 | |
|           ;; Rails. The important thing to check is that the gemspec matches
 | |
|           ;; up with the Guix packages and Rubygems can successfully activate
 | |
|           ;; the Rails gem.
 | |
|           ;;
 | |
|           ;; The following check phase tests this.
 | |
|           (delete 'check)
 | |
|           (add-after 'install 'check
 | |
|             (lambda* (#:key tests? outputs #:allow-other-keys)
 | |
|               (when tests?
 | |
|                 (setenv "GEM_PATH"
 | |
|                         (string-append (getenv "GEM_PATH") ":" #$output
 | |
|                                        "/lib/ruby/vendor_ruby"))
 | |
|                 (invoke "ruby" "-e" "gem 'rails'")))))))
 | |
|     (propagated-inputs
 | |
|      (list bundler
 | |
|            ruby-actioncable
 | |
|            ruby-actionmailbox
 | |
|            ruby-actionmailer
 | |
|            ruby-actionpack
 | |
|            ruby-actiontext
 | |
|            ruby-actionview
 | |
|            ruby-activejob
 | |
|            ruby-activemodel
 | |
|            ruby-activerecord
 | |
|            ruby-activestorage
 | |
|            ruby-activesupport
 | |
|            ruby-railties
 | |
|            ruby-sprockets-rails))
 | |
|     (synopsis "Full-stack web framework optimized for programmer happiness")
 | |
|     (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 "https://rubyonrails.org/")
 | |
|     (license license:expat)))
 |