gnu: dnsmasq: Update to 2.87.
[jackhill/guix/guix.git] / gnu / packages / rails.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2016 Matthew Jordan <matthewjordandevops@yandex.com>
3 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
4 ;;; Copyright © 2019, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
5 ;;;
6 ;;; This file is part of GNU Guix.
7 ;;;
8 ;;; GNU Guix is free software; you can redistribute it and/or modify it
9 ;;; under the terms of the GNU General Public License as published by
10 ;;; the Free Software Foundation; either version 3 of the License, or (at
11 ;;; your option) any later version.
12 ;;;
13 ;;; GNU Guix is distributed in the hope that it will be useful, but
14 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
15 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 ;;; GNU General Public License for more details.
17 ;;;
18 ;;; You should have received a copy of the GNU General Public License
19 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
20
21 (define-module (gnu packages rails)
22 #:use-module ((guix licenses) #:prefix license:)
23 #:use-module (guix gexp)
24 #:use-module (guix download)
25 #:use-module (guix git-download)
26 #:use-module (guix packages)
27 #:use-module (gnu packages node)
28 #:use-module (gnu packages ruby)
29 #:use-module (guix build-system ruby))
30
31 (define-public ruby-spring
32 (package
33 (name "ruby-spring")
34 (version "1.7.2")
35 (source
36 (origin
37 (method git-fetch)
38 (uri (git-reference
39 (url "https://github.com/rails/spring")
40 (commit (string-append "v" version))))
41 (file-name (git-file-name name version))
42 (sha256
43 (base32
44 "0smwrndjmnr7g7jjskw05zin3gh6kx5db6yrkiqi6i9wl5mrn9n5"))))
45 (build-system ruby-build-system)
46 (arguments
47 `(#:test-target "test:unit"
48 #:phases
49 (modify-phases %standard-phases
50 (add-before 'check 'remove-bump
51 (lambda _
52 (substitute* "spring.gemspec"
53 (("gem.add_development_dependency 'bump'") "")
54 (("gem.add_development_dependency 'activesupport'.*")
55 "gem.add_development_dependency 'activesupport'\n"))
56 (substitute* "Rakefile"
57 (("require \\\"bump/tasks\\\"") ""))
58 #t)))))
59 (native-inputs
60 (list bundler ruby-activesupport))
61 (synopsis "Ruby on Rails application preloader")
62 (description
63 "Spring is a Ruby on Rails application preloader. It speeds up
64 development by keeping your application running in the background so the
65 application does need to boot it every time you run a test, rake task or
66 migration.")
67 (home-page "https://github.com/rails/spring")
68 (license license:expat)))
69
70 (define-public ruby-sass-rails
71 (package
72 (name "ruby-sass-rails")
73 (version "5.0.7")
74 (source
75 (origin
76 (method url-fetch)
77 (uri (rubygems-uri "sass-rails" version))
78 (sha256
79 (base32
80 "1wa63sbsimrsf7nfm8h0m1wbsllkfxvd7naph5d1j6pbc555ma7s"))))
81 (build-system ruby-build-system)
82 (arguments
83 '(#:tests? #f)) ; No included tests
84 (propagated-inputs
85 (list ruby-railties ruby-sass ruby-sprockets ruby-sprockets-rails
86 ruby-tilt))
87 (synopsis "Sass adapter for the Rails asset pipeline")
88 (description
89 "This library integrates the SASS stylesheet language into Ruby on
90 Rails.")
91 (home-page "https://github.com/rails/sass-rails")
92 (license license:expat)))
93
94 (define-public ruby-debug-inspector
95 (package
96 (name "ruby-debug-inspector")
97 (version "0.0.3")
98 (source
99 (origin
100 (method url-fetch)
101 (uri (rubygems-uri "debug_inspector" version))
102 (sha256
103 (base32
104 "0vxr0xa1mfbkfcrn71n7c4f2dj7la5hvphn904vh20j3x4j5lrx0"))))
105 (build-system ruby-build-system)
106 (arguments
107 `(#:phases
108 (modify-phases %standard-phases
109 (replace 'check
110 (lambda _
111 (invoke "rake" "compile")
112 (invoke "ruby" "-Ilib" "-e"
113 (string-append
114 "require 'debug_inspector'; RubyVM::DebugInspector."
115 "open{|dc| p dc.backtrace_locations}")))))))
116 (synopsis "Ruby wrapper for the MRI 2.0 debug_inspector API")
117 (description
118 "This package provides a Ruby wrapper for the MRI 2.0 debug_inspector
119 API.")
120 (home-page
121 "https://github.com/banister/debug_inspector")
122 (license license:expat)))
123
124 (define-public ruby-autoprefixer-rails
125 (package
126 (name "ruby-autoprefixer-rails")
127 (version "9.4.7")
128 (source
129 (origin
130 (method url-fetch)
131 (uri (rubygems-uri "autoprefixer-rails" version))
132 (sha256
133 (base32
134 "0fxbfl3xrrjj84n98x24yzxbz4nvm6c492dxj41kkrl9z97ga13i"))))
135 (build-system ruby-build-system)
136 (arguments
137 '(#:test-target "spec"
138 #:phases
139 (modify-phases %standard-phases
140 (add-after 'extract-gemspec 'remove-unnecessary-dependencies
141 (lambda _
142 ;; Remove the testing of compass, as its use is deprecated, and
143 ;; it's unpackaged for Guix.
144 (substitute* "autoprefixer-rails.gemspec"
145 ((".*%q<compass>.*") "\n")
146 (("\"spec/compass_spec\\.rb\"\\.freeze, ") ""))
147 (delete-file "spec/compass_spec.rb")
148
149 (substitute* "Gemfile"
150 ;; Remove overly strict requirement on sprockets
151 ((", '>= 4\\.0\\.0\\.beta1'") "")
152 ;; The mini_racer gem isn't packaged yet, and it's not directly
153 ;; required, as other backends for ruby-execjs can be used.
154 (("gem 'mini_racer'") "")
155 ;; For some reason, this is required for the gems to be picked
156 ;; up
157 (("gemspec") "gemspec\ngem 'tzinfo-data'\ngem 'sass'"))
158 #t)))))
159 (native-inputs
160 (list bundler
161 ruby-rails
162 ruby-rspec-rails
163 ;; This is needed for a test, but I'm unsure why
164 ruby-sass
165 ;; This is used as the ruby-execjs runtime
166 node))
167 (propagated-inputs
168 (list ruby-execjs))
169 (synopsis "Parse CSS and add vendor prefixes to CSS rules")
170 (description
171 "This gem provides Ruby and Ruby on Rails integration with Autoprefixer,
172 which can parse CSS and add vendor prefixes to CSS rules using values from the
173 Can I Use website.")
174 (home-page "https://github.com/ai/autoprefixer-rails")
175 (license license:expat)))
176
177 (define-public ruby-activemodel
178 (package
179 (name "ruby-activemodel")
180 (version "6.1.3")
181 (source
182 (origin
183 (method url-fetch)
184 (uri (rubygems-uri "activemodel" version))
185 (sha256
186 (base32
187 "07m85r00cd1dzxg65zr9wjrdqppw51b5ka9c5mrz92vnw18kfb70"))))
188 (build-system ruby-build-system)
189 (arguments
190 '(;; No included tests
191 #:tests? #f))
192 (propagated-inputs
193 (list ruby-activesupport))
194 (synopsis "Toolkit for building modeling frameworks like Active Record")
195 (description
196 "This package provides a toolkit for building modeling frameworks like
197 Active Record. ActiveSupport handles attributes, callbacks, validations,
198 serialization, internationalization, and testing.")
199 (home-page "https://rubyonrails.org/")
200 (license license:expat)))
201
202 (define-public ruby-activerecord
203 (package
204 (name "ruby-activerecord")
205 (version "6.1.3")
206 (source
207 (origin
208 (method url-fetch)
209 (uri (rubygems-uri "activerecord" version))
210 (sha256
211 (base32
212 "03kr6vslwd9iw89jidjpjlp7prr2rf7kpsfa4fz03g9by0kliivs"))))
213 (build-system ruby-build-system)
214 (arguments
215 '(;; No included tests
216 #:tests? #f))
217 (propagated-inputs
218 (list ruby-activemodel ruby-activesupport ruby-arel))
219 (synopsis "Ruby library to connect to relational databases")
220 (description
221 "Active Record connects classes to relational database table to establish
222 an almost zero-configuration persistence layer for applications.")
223 (home-page "https://rubyonrails.org")
224 (license license:expat)))
225
226 (define-public ruby-rspec-rails
227 (package
228 (name "ruby-rspec-rails")
229 (version "3.8.2")
230 (source
231 (origin
232 (method url-fetch)
233 (uri (rubygems-uri "rspec-rails" version))
234 (sha256
235 (base32
236 "1pf6n9l4sw1arlax1bdbm1znsvl8cgna2n6k6yk1bi8vz2n73ls1"))))
237 (build-system ruby-build-system)
238 (arguments
239 '(#:tests? #f)) ; No included tests
240 (propagated-inputs
241 (list ruby-actionpack
242 ruby-activesupport
243 ruby-railties
244 ruby-rspec-core
245 ruby-rspec-expectations
246 ruby-rspec-mocks
247 ruby-rspec-support))
248 (synopsis "Use RSpec to test Ruby on Rails applications")
249 (description
250 "This package provides support for using RSpec to test Ruby on Rails
251 applications, in pace of the default Minitest testing library.")
252 (home-page "https://github.com/rspec/rspec-rails")
253 (license license:expat)))
254
255 (define-public ruby-rails-html-sanitizer
256 (package
257 (name "ruby-rails-html-sanitizer")
258 (version "1.3.0")
259 (source
260 (origin
261 (method url-fetch)
262 (uri (rubygems-uri "rails-html-sanitizer" version))
263 (sha256
264 (base32
265 "1icpqmxbppl4ynzmn6dx7wdil5hhq6fz707m9ya6d86c7ys8sd4f"))))
266 (build-system ruby-build-system)
267 (arguments
268 '(;; No included tests
269 #:tests? #f))
270 (propagated-inputs
271 (list ruby-loofah))
272 (synopsis "HTML sanitization for Rails applications")
273 (description
274 "This gem is used to handle HTML sanitization in Rails applications. If
275 you need similar functionality in non Rails apps consider using Loofah
276 directly.")
277 (home-page "https://github.com/rails/rails-html-sanitizer")
278 (license license:expat)))
279
280 (define-public ruby-rails-dom-testing
281 (package
282 (name "ruby-rails-dom-testing")
283 (version "2.0.3")
284 (source
285 (origin
286 (method git-fetch)
287 (uri (git-reference
288 (url "https://github.com/rails/rails-dom-testing")
289 (commit (string-append "v" version))))
290 (file-name (git-file-name name version))
291 (sha256
292 (base32
293 "17vdh273cmmfpzy5m546dd13zqmimv54jjx0f7sl0zi5lwz0gnck"))))
294 (build-system ruby-build-system)
295 (arguments
296 (list
297 #:phases
298 #~(modify-phases %standard-phases
299 (add-after 'unpack 'delete-gemfile.lock
300 (lambda _
301 (delete-file "Gemfile.lock"))))))
302 (native-inputs
303 (list bundler))
304 (propagated-inputs
305 (list ruby-activesupport ruby-nokogiri))
306 (synopsis "Compare HTML DOMs and assert certain elements exists")
307 (description
308 "This gem can compare HTML and assert certain elements exists. This is
309 useful when writing tests.")
310 (home-page "https://github.com/rails/rails-dom-testing")
311 (license license:expat)))
312
313 (define-public ruby-actiontext
314 (package
315 (name "ruby-actiontext")
316 (version "6.1.3")
317 (source
318 (origin
319 (method url-fetch)
320 (uri (rubygems-uri "actiontext" version))
321 (sha256
322 (base32
323 "04k4z4xj40sbzbgx0x9m6i8k0nc22jb6dkrlslj16p2z2dfnwhqg"))))
324 (build-system ruby-build-system)
325 (arguments
326 '(;; No included tests
327 #:tests? #f))
328 (propagated-inputs
329 (list ruby-actionpack ruby-activerecord ruby-activestorage
330 ruby-activesupport ruby-nokogiri))
331 (synopsis "Edit and display rich text in Rails applications")
332 (description
333 "ActionText edits and displays rich text in Rails applications.")
334 (home-page "https://rubyonrails.org")
335 (license license:expat)))
336
337 (define-public ruby-actionview
338 (package
339 (name "ruby-actionview")
340 (version "6.1.3")
341 (source
342 (origin
343 (method url-fetch)
344 (uri (rubygems-uri "actionview" version))
345 (sha256
346 (base32
347 "1s5kc1abi7id1g54lz1npgc42zl7pbz172wp8pi7j3s7qljafzw5"))))
348 (build-system ruby-build-system)
349 (arguments
350 '(;; No included tests
351 #:tests? #f))
352 (propagated-inputs
353 (list ruby-activesupport ruby-builder ruby-erubi
354 ruby-rails-dom-testing ruby-rails-html-sanitizer))
355 (synopsis "Conventions and helpers for building web pages")
356 (description
357 "ActionView provides conventions and helpers for building web pages in
358 Ruby.")
359 (home-page "https://rubyonrails.org/")
360 (license license:expat)))
361
362 (define-public ruby-actionpack
363 (package
364 (name "ruby-actionpack")
365 (version "6.1.3")
366 (source
367 (origin
368 (method url-fetch)
369 (uri (rubygems-uri "actionpack" version))
370 (sha256
371 (base32
372 "030yyaskzlic5cp4d9zbwwr3rhf4k6hsls44a7ihsfd6r8mlivq5"))))
373 (build-system ruby-build-system)
374 (arguments
375 '(;; No included tests
376 #:tests? #f))
377 (propagated-inputs
378 (list ruby-actionview
379 ruby-activesupport
380 ruby-rack
381 ruby-rack-test
382 ruby-rails-dom-testing
383 ruby-rails-html-sanitizer))
384 (synopsis "Conventions for building and testing MVC web applications")
385 (description
386 "ActionPack provides conventions for building and testing MVC web
387 applications. These work with any Rack-compatible server.")
388 (home-page "https://rubyonrails.org/")
389 (license license:expat)))
390
391 (define-public ruby-actioncable
392 (package
393 (name "ruby-actioncable")
394 (version "6.1.3")
395 (source
396 (origin
397 (method url-fetch)
398 (uri (rubygems-uri "actioncable" version))
399 (sha256
400 (base32
401 "1cgb1l0gml1vklxka2djpi5q5b4bgzgm5pahzfjvvgm5vzvrvi9v"))))
402 (build-system ruby-build-system)
403 (arguments
404 '(;; No included tests
405 #:tests? #f))
406 (propagated-inputs
407 (list ruby-actionpack ruby-activesupport ruby-nio4r
408 ruby-websocket-driver))
409 (synopsis "Integrate integrates WebSockets with Rails applications")
410 (description
411 "Action Cable integrates WebSockets with Rails applications. Through
412 WebSockets it allows for real-time features in web applications.")
413 (home-page "https://rubyonrails.org/")
414 (license license:expat)))
415
416 (define-public ruby-activejob
417 (package
418 (name "ruby-activejob")
419 (version "6.1.3")
420 (source
421 (origin
422 (method url-fetch)
423 (uri (rubygems-uri "activejob" version))
424 (sha256
425 (base32
426 "175d8q0achdlsxjsvq0w9znvfqfkgbj75kbmdrvg4fb277wwplmf"))))
427 (build-system ruby-build-system)
428 (arguments
429 '(;; No included tests
430 #:tests? #f))
431 (propagated-inputs
432 (list ruby-activesupport ruby-globalid))
433 (synopsis "Declare job classes for multiple backends")
434 (description
435 "ActiveJob allows declaring job classes in a common way across Rails
436 applications.")
437 (home-page "https://rubyonrails.org/")
438 (license license:expat)))
439
440 (define-public ruby-activestorage
441 (package
442 (name "ruby-activestorage")
443 (version "6.1.3")
444 (source
445 (origin
446 (method url-fetch)
447 (uri (rubygems-uri "activestorage" version))
448 (sha256
449 (base32
450 "0gkxvbi5w8zmdxpiyz3b10kzz8cxqqh9bj81sjl3fp8wa3v2ld4i"))))
451 (build-system ruby-build-system)
452 (arguments
453 '(;; No included tests
454 #:tests? #f))
455 (propagated-inputs
456 (list ruby-actionpack
457 ruby-activejob
458 ruby-activerecord
459 ruby-activesupport
460 ruby-marcel
461 ruby-mimemagic))
462 (synopsis "Integrate file storage services in to Rails applications")
463 (description
464 "ActiveStorage integrates file storage services with Rails applications,
465 allowing files to be attached to ActiveRecord models.")
466 (home-page "https://rubyonrails.org/")
467 (license license:expat)))
468
469 (define-public ruby-actionmailbox
470 (package
471 (name "ruby-actionmailbox")
472 (version "6.1.3")
473 (source
474 (origin
475 (method url-fetch)
476 (uri (rubygems-uri "actionmailbox" version))
477 (sha256
478 (base32
479 "0wv2p24xn4f0kj8kiyagkn934hzrcp98vzjqxwd4r75qq0cijadp"))))
480 (build-system ruby-build-system)
481 (arguments
482 '(;; No included tests
483 #:tests? #f))
484 (propagated-inputs
485 (list ruby-actionpack
486 ruby-activejob
487 ruby-activerecord
488 ruby-activestorage
489 ruby-activesupport
490 ruby-mail))
491 (synopsis "Receive and process incoming emails in Rails applications")
492 (description
493 "ActionMailbox receives and processes incoming emails in Rails applications.")
494 (home-page "https://rubyonrails.org")
495 (license license:expat)))
496
497 (define-public ruby-actionmailer
498 (package
499 (name "ruby-actionmailer")
500 (version "6.1.3")
501 (source
502 (origin
503 (method url-fetch)
504 (uri (rubygems-uri "actionmailer" version))
505 (sha256
506 (base32
507 "0lic4mc6wqi3p9ipdqljl64vd9ndabm0k8hww0m07sfdhwsl5ba9"))))
508 (build-system ruby-build-system)
509 (arguments
510 '(;; No included tests
511 #:tests? #f))
512 (propagated-inputs
513 (list ruby-actionpack
514 ruby-actionview
515 ruby-activejob
516 ruby-activesupport
517 ruby-mail
518 ruby-rails-dom-testing))
519 (synopsis "Work with emails using the controller/view pattern")
520 (description
521 "Compose, deliver, receive, and test emails using the controller/view
522 pattern. Including support for multipart email and attachments.")
523 (home-page "https://rubyonrails.org/")
524 (license license:expat)))
525
526 (define-public ruby-railties
527 (package
528 (name "ruby-railties")
529 (version "6.1.3")
530 (source
531 (origin
532 (method url-fetch)
533 (uri (rubygems-uri "railties" version))
534 (sha256
535 (base32
536 "1685y5dcfgcq0b38j13vrpkhiiblmrl64wa9w065669bkgmkw4ra"))))
537 (build-system ruby-build-system)
538 (arguments
539 '(;; No included tests
540 #:tests? #f))
541 (propagated-inputs
542 (list ruby-actionpack ruby-activesupport ruby-method-source ruby-rake
543 ruby-thor))
544 (synopsis "Rails internals, including application bootup and generators")
545 (description
546 "@code{railties} provides the core Rails internals including handling
547 application bootup, plugins, generators, and Rake tasks.")
548 (home-page "https://rubyonrails.org/")
549 (license license:expat)))
550
551 (define-public ruby-sprockets-rails
552 (package
553 (name "ruby-sprockets-rails")
554 (version "3.2.1")
555 (source
556 (origin
557 (method url-fetch)
558 (uri (rubygems-uri "sprockets-rails" version))
559 (sha256
560 (base32
561 "0ab42pm8p5zxpv3sfraq45b9lj39cz9mrpdirm30vywzrwwkm5p1"))))
562 (build-system ruby-build-system)
563 (arguments
564 '(;; No included tests
565 #:tests? #f))
566 (propagated-inputs
567 (list ruby-actionpack ruby-activesupport ruby-sprockets))
568 (synopsis "Sprockets Rails integration")
569 (description
570 "Provides Sprockets implementation for the Rails Asset Pipeline.")
571 (home-page
572 "https://github.com/rails/sprockets-rails")
573 (license license:expat)))
574
575 (define-public ruby-web-console
576 (package
577 (name "ruby-web-console")
578 (version "4.1.0")
579 (source
580 (origin
581 ;; Download from GitHub as test files are not provided in the gem.
582 (method git-fetch)
583 (uri (git-reference
584 (url "https://github.com/rails/web-console")
585 (commit (string-append "v" version))))
586 (file-name (git-file-name name version))
587 (sha256
588 (base32
589 "0azk8nmimnjbh74vxgwcj9jr588rj7kb5rrlclcjfjsw9jqjzckc"))))
590 (build-system ruby-build-system)
591 (arguments
592 '(#:phases
593 (modify-phases %standard-phases
594 (add-after 'unpack 'patch-Gemfile
595 (lambda _
596 (substitute* "Gemfile"
597 ;; Remove the github bit from the Gemfile, so that the Guix
598 ;; packages are used.
599 ((", github: .*") "\n")
600 ;; The usual methods of not loading this group don't work, so
601 ;; patch the Gemfile.
602 (("group :development") "[].each")
603 ;; tzinfo-data is propagated by ruby-activesupport, but it
604 ;; needs to be in the Gemfile to become available.
605 (("group :test do") "group :test do\n gem 'tzinfo-data'"))
606 #t)))))
607 (propagated-inputs
608 (list ruby-actionview ruby-activemodel ruby-bindex ruby-railties))
609 (native-inputs
610 (list bundler ruby-rails ruby-mocha ruby-simplecov))
611 (synopsis "Debugging tool for your Ruby on Rails applications")
612 (description
613 "This package allows you to create an interactive Ruby session in your
614 browser. Those sessions are launched automatically in case of an error and
615 can also be launched manually in any page.")
616 (home-page "https://github.com/rails/web-console")
617 (license license:expat)))
618
619 (define-public ruby-with-advisory-lock
620 (package
621 (name "ruby-with-advisory-lock")
622 (version "4.0.0")
623 (source
624 (origin
625 (method url-fetch)
626 (uri (rubygems-uri "with_advisory_lock" version))
627 (sha256
628 (base32
629 "1k37hxgmaqgsd54gplm5xim9nw3ghvqsbzaw7q4q64ha1nbd9a41"))))
630 (build-system ruby-build-system)
631 (arguments
632 '(#:tests? #f)) ; TODO Tests require a running MySQL service
633 (propagated-inputs
634 (list ruby-activerecord))
635 (native-inputs
636 (list bundler ruby-yard ruby-mysql2))
637 (synopsis "Advisory locking for ActiveRecord")
638 (description
639 "The With advisory lock gem adds advisory locking to ActiveRecord for
640 PostgreSQL and MySQL. SQLite is also supported, but this uses the file system
641 for locks.")
642 (home-page "https://closuretree.github.io/with_advisory_lock/")
643 (license license:expat)))
644
645 (define-public ruby-rails
646 (package
647 (name "ruby-rails")
648 (version "6.1.3")
649 (source
650 (origin
651 (method url-fetch)
652 (uri (rubygems-uri "rails" version))
653 (sha256
654 (base32
655 "0hdancysa617lzyy5gmrcmnpgyb1mz1lawy0l34ycz2wary7y2bz"))))
656 (build-system ruby-build-system)
657 (arguments
658 '(#:phases
659 (modify-phases %standard-phases
660 ;; This gem acts as glue between the gems that actually make up
661 ;; Rails. The important thing to check is that the gemspec matches up
662 ;; with the Guix packages and Rubygems can successfully activate the
663 ;; Rails gem.
664 ;;
665 ;; The following check phase tests this.
666 (delete 'check)
667 (add-after 'install 'check
668 (lambda* (#:key tests? outputs #:allow-other-keys)
669 (setenv "GEM_PATH"
670 (string-append
671 (getenv "GEM_PATH")
672 ":"
673 (assoc-ref outputs "out") "/lib/ruby/vendor_ruby"))
674 (when tests?
675 (invoke "ruby" "-e" "gem 'rails'"))
676 #t)))))
677 (propagated-inputs
678 (list ruby-actioncable
679 ruby-actionmailbox
680 ruby-actionmailer
681 ruby-actionpack
682 ruby-actiontext
683 ruby-actionview
684 ruby-activejob
685 ruby-activemodel
686 ruby-activerecord
687 ruby-activestorage
688 ruby-activesupport
689 bundler
690 ruby-railties
691 ruby-sprockets-rails))
692 (synopsis "Full-stack web framework optimized for programmer happiness")
693 (description
694 "Ruby on Rails is a full-stack web framework optimized for programmer
695 happiness and sustainable productivity. It encourages beautiful code by
696 favoring convention over configuration.")
697 (home-page "https://rubyonrails.org/")
698 (license license:expat)))