@@ -2,6 +2,7 @@
   ((guix licenses) #:prefix license:)
   (guix packages)
   (guix download)
+  (guix gexp)
   (guix git-download)
   (guix build-system ruby)
   (guix build-system copy)
@@ -12,6 +13,99 @@
   (ice-9 rdelim)
   (ice-9 popen))
 
+(define-public ruby-multipart-parser
+  (package
+    (name "ruby-multipart-parser")
+    (version "0.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "multipart-parser" version))
+              (sha256
+               (base32
+                "0xb4p475yrfm883h9kn80a021myn17dvs50wpa1djzcmlq7p0882"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases #~(modify-phases %standard-phases
+                   (add-after 'unpack 'skip-failing-test
+                     ;; One test fails for unknown reasons (see:
+                     ;; https://github.com/danabr/multipart-parser/issues/7).
+                     (lambda _
+                       (substitute* "test/multipart_parser/reader_test.rb"
+                         (("def test_long" all)
+                          (string-append all "\n      return true"))))))))
+    (synopsis "Parser for multipart MIME messages")
+    (description "@code{multipart-parser} is a simple parser for multipart
+MIME messages, written in Ruby, based on felixge/node-formidable's parser.  It
+has the following characteristics:
+@itemize
+@item Pure Ruby
+@item Event-driven API
+@item Only supports one level of multipart parsing
+@item Does not perform I/O
+@item Does not depend on any other library.
+@end itemize")
+    (home-page "https://github.com/danabr/multipart-parser")
+    (license license:expat)))
+
+(define-public ruby-ruby2-keywords
+  (package
+    (name "ruby-ruby2-keywords")
+    (version "0.0.5")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/ruby/ruby2_keywords")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1jhqb152zfr2yrxj6j8rzakkwdkg5viggwnnqrrfxwwy63msdi97"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'delete-extraneous-rake-files
+            (lambda _
+              (for-each delete-file '("rakelib/changelogs.rake"
+                                      "rakelib/epoch.rake"
+                                      "rakelib/version.rake"))))
+          (add-after 'extract-gemspec 'adjust-files
+            (lambda _
+              (substitute* "ruby2_keywords.gemspec"
+                ;; This file is not present in the git checkout.
+                ((".*\"ChangeLog\",.*") "")))))))
+    (synopsis "Shim library for Module#ruby2_keywords")
+    (description "Provides empty @code{Module#ruby2_keywords} method, for the
+forward source-level compatibility against @command{ruby2.7} and
+@command{ruby3}.")
+    (home-page "https://github.com/ruby/ruby2_keywords")
+    (license license:bsd-2)))
+
+(define-public ruby-faraday-multipart
+  (package
+    (name "ruby-faraday-multipart")
+    (version "1.0.4")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/lostisland/faraday-multipart")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0ywxhff40a688n50lxrn4d8y096l8sbrwp1jfz4zd3kdiiygclka"))))
+    (build-system ruby-build-system)
+    (arguments (list #:tests? #f #:test-target "spec"))
+    (native-inputs (list ruby-multipart-parser ruby-rspec))
+    (propagated-inputs (list ruby-multipart-post))
+    (synopsis "Multipart-post requests extension for Faraday")
+    (description "This Ruby gem extends Faraday to perform multipart-post
+requests.")
+    (home-page "https://github.com/lostisland/faraday-multipart")
+    (license license:expat)))
+
 (define-public ruby-eventmachine-openssl
   (package
     (inherit ruby-eventmachine)
@@ -74,7 +168,7 @@
        ("ruby-yard" ,ruby-yard)
        ("ruby-countdownlatch" ,ruby-countdownlatch)
        ("ruby-rb-fsevent" ,ruby-rb-fsevent)
-       ("ruby-mocha" ,ruby-mocha-1)))
+       ("ruby-mocha" ,ruby-mocha)))
     (synopsis
       "An XMPP DSL for Ruby written on top of EventMachine and Nokogiri")
     (description
@@ -122,6 +216,7 @@
     (build-system ruby-build-system)
     (arguments
      `(#:test-target "test:unit"
+		 #:tests? #f
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'less-strict-dependencies
@@ -267,14 +362,14 @@
 (define-public ruby-lazy-object
   (package
     (name "ruby-lazy-object")
-    (version "0.1.0")
+    (version "0.0.3") ; move to 0.1.0 for ruby3
     (source
       (origin
         (method url-fetch)
         (uri (rubygems-uri "lazy_object" version))
         (sha256
           (base32
-            "1kwmbdzqyzq2kkmx5gk7z90bz71lr4p1x0iknnjvwyd1z98m1n31"))))
+            "08px15lahc28ik9smvw1hgamf792gd6gq0s4k94yq1h7jq25wjn8"))))
     (build-system ruby-build-system)
     (arguments
      '(#:test-target "spec"))
@@ -475,7 +570,7 @@
     (propagated-inputs `(("ruby-money" ,ruby-money)))
     (native-inputs
      `(("ruby-minitest" ,ruby-minitest)
-       ("ruby-mocha" ,ruby-mocha-1)
+       ("ruby-mocha" ,ruby-mocha)
        ("ruby-timecop" ,ruby-timecop)
        ("ruby-webmock" ,ruby-webmock)
        ("ruby-monetize" ,ruby-monetize)