@@ -48,15 +48,21 @@ def self.replace_require(specs)
48
48
[ ::Kernel . singleton_class , ::Kernel ] . each do |kernel_class |
49
49
kernel_class . send ( :alias_method , :no_warning_require , :require )
50
50
kernel_class . send ( :define_method , :require ) do |name |
51
- if message = ::Gem ::BUNDLED_GEMS . warning? ( name , specs : spec_names )
51
+ warning_info = ::Gem ::BUNDLED_GEMS . warning? ( name , specs : spec_names )
52
+
53
+ result = kernel_class . send ( :no_warning_require , name )
54
+
55
+ if warning_info
52
56
uplevel = ::Gem ::BUNDLED_GEMS . uplevel
57
+ message = ::Gem ::BUNDLED_GEMS . build_message ( warning_info )
53
58
if uplevel > 0
54
59
Kernel . warn message , uplevel : uplevel
55
60
else
56
61
Kernel . warn message
57
62
end
58
63
end
59
- kernel_class . send ( :no_warning_require , name )
64
+
65
+ result
60
66
end
61
67
if kernel_class == ::Kernel
62
68
kernel_class . send ( :private , :require )
@@ -93,7 +99,7 @@ def self.uplevel
93
99
require_found ? 1 : frame_count - 1
94
100
end
95
101
96
- def self . warning? ( name , specs : nil )
102
+ def self . warning? ( name , specs : { } )
97
103
# name can be a feature name or a file path with String or Pathname
98
104
feature = File . path ( name ) . sub ( LIBEXT , "" )
99
105
@@ -122,19 +128,26 @@ def self.warning?(name, specs: nil)
122
128
return if specs . include? ( name )
123
129
124
130
return if WARNED [ name ]
131
+
132
+ { feature : feature , name : name , subfeature : subfeature }
133
+ end
134
+
135
+ def self . build_message ( warning_info )
136
+ feature = warning_info [ :feature ]
137
+ name = warning_info [ :name ]
138
+ subfeature = warning_info [ :subfeature ]
139
+
125
140
WARNED [ name ] = true
126
141
127
142
level = RUBY_VERSION < SINCE [ name ] ? "warning" : "error"
128
143
129
- if subfeature
144
+ msg = if subfeature
130
145
"#{ feature } is found in #{ name } , which"
131
146
else
132
147
"#{ feature } #{ level == "warning" ? "was loaded" : "used to be loaded" } from the standard library, but"
133
- end + build_message ( name , level )
134
- end
148
+ end
135
149
136
- def self . build_message ( name , level )
137
- msg = if level == "warning"
150
+ msg += if level == "warning"
138
151
" will no longer be part of the default gems starting from Ruby #{ SINCE [ name ] } "
139
152
else
140
153
" is not part of the default gems since Ruby #{ SINCE [ name ] } ."
@@ -228,16 +241,14 @@ def self.force_activate(gem)
228
241
end
229
242
end
230
243
231
- # for RubyGems without Bundler environment.
232
244
# If loading library is not part of the default gems and the bundled gems, warn it.
233
245
class LoadError
234
246
def message # :nodoc:
235
247
return super unless path
236
248
237
- name = path . tr ( "/" , "-" )
238
- if !defined? ( Bundler ) && Gem ::BUNDLED_GEMS ::SINCE [ name ] && !Gem ::BUNDLED_GEMS ::WARNED [ name ]
239
- warn name + Gem ::BUNDLED_GEMS . build_message ( name , "error" ) , uplevel : Gem ::BUNDLED_GEMS . uplevel
240
- end
241
- super
249
+ warning_info = ::Gem ::BUNDLED_GEMS . warning? ( path )
250
+ return super unless warning_info
251
+
252
+ ::Gem ::BUNDLED_GEMS . build_message ( warning_info )
242
253
end
243
254
end
0 commit comments