Only warn fiddle as optional dependency
authorHiroshi SHIBATA <[email protected]>
Fri, 27 Sep 2024 08:51:56 +0000 (27 17:51 +0900)
committerHiroshi SHIBATA <[email protected]>
Fri, 27 Sep 2024 09:39:05 +0000 (27 18:39 +0900)
lib/bundled_gems.rb

index f819134..087f94a 100644 (file)
@@ -52,6 +52,10 @@ module Gem::BUNDLED_GEMS
     "syslog" => true,
   }.freeze
 
+  OPTIONAL = {
+    "fiddle" => true,
+  }.freeze
+
   WARNED = {}                   # unfrozen
 
   conf = ::RbConfig::CONFIG
@@ -69,9 +73,15 @@ module Gem::BUNDLED_GEMS
     [::Kernel.singleton_class, ::Kernel].each do |kernel_class|
       kernel_class.send(:alias_method, :no_warning_require, :require)
       kernel_class.send(:define_method, :require) do |name|
-        result = kernel_class.send(:no_warning_require, name)
 
-        if result && message = ::Gem::BUNDLED_GEMS.warning?(name, specs: spec_names)
+        message = ::Gem::BUNDLED_GEMS.warning?(name, specs: spec_names)
+        begin
+          result = kernel_class.send(:no_warning_require, name)
+        rescue LoadError => e
+          result = e
+        end
+
+        if (result || !OPTIONAL[name]) && message
           if ::Gem::BUNDLED_GEMS.uplevel > 0
             Kernel.warn message, uplevel: ::Gem::BUNDLED_GEMS.uplevel
           else
@@ -79,8 +89,13 @@ module Gem::BUNDLED_GEMS
           end
         end
 
-        result
+        if result.is_a?(LoadError)
+          raise result
+        else
+          result
+        end
       end
+
       if kernel_class == ::Kernel
         kernel_class.send(:private, :require)
       else