Skip to content

Commit b959da2

Browse files
committed
Revert "Fix to support Ruby 3.0 Ractor"
* This reverts commit 1faa4fd. * It has too many problems, see #22 for discussion.
1 parent 5ea2356 commit b959da2

File tree

12 files changed

+24
-45
lines changed

12 files changed

+24
-45
lines changed

lib/uri.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@
2929
# module URI
3030
# class RSYNC < Generic
3131
# DEFAULT_PORT = 873
32-
# URI.refresh_scheme_list
3332
# end
33+
# @@schemes['RSYNC'] = RSYNC
3434
# end
3535
# #=> URI::RSYNC
3636
#

lib/uri/common.rb

Lines changed: 7 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ module URI
1616
REGEXP = RFC2396_REGEXP
1717
Parser = RFC2396_Parser
1818
RFC3986_PARSER = RFC3986_Parser.new
19-
Ractor.make_shareable(RFC3986_PARSER) if defined?(Ractor)
2019

2120
# URI::Parser.new
2221
DEFAULT_PARSER = Parser.new
@@ -28,7 +27,6 @@ module URI
2827
DEFAULT_PARSER.regexp.each_pair do |sym, str|
2928
const_set(sym, str)
3029
end
31-
Ractor.make_shareable(DEFAULT_PARSER) if defined?(Ractor)
3230

3331
module Util # :nodoc:
3432
def make_components_hash(klass, array_hash)
@@ -64,38 +62,22 @@ def make_components_hash(klass, array_hash)
6462

6563
include REGEXP
6664

67-
SCHEME_LIST_MUTEX = Mutex.new
68-
private_constant :SCHEME_LIST_MUTEX
69-
65+
@@schemes = {}
7066
# Returns a Hash of the defined schemes.
71-
# The list is lazily calculated.
7267
def self.scheme_list
73-
return const_get(:SCHEMES) if defined?(SCHEMES)
74-
75-
SCHEME_LIST_MUTEX.synchronize do
76-
const_set(:SCHEMES, ObjectSpace.
77-
each_object(Class).
78-
select { |klass| klass < URI::Generic }.
79-
each_with_object({}) { |klass, acc| acc[klass.name.split('::').last.upcase] = klass }.
80-
freeze)
81-
end
82-
end
83-
84-
# Re-calculate scheme list
85-
def self.refresh_scheme_list
86-
SCHEME_LIST_MUTEX.synchronize do
87-
remove_const(:SCHEMES) if defined?(SCHEMES)
88-
end
89-
90-
scheme_list
68+
@@schemes
9169
end
9270

9371
#
9472
# Construct a URI instance, using the scheme to detect the appropriate class
9573
# from +URI.scheme_list+.
9674
#
9775
def self.for(scheme, *arguments, default: Generic)
98-
uri_class = scheme_list[scheme.to_s.upcase] || default
76+
if scheme
77+
uri_class = @@schemes[scheme.upcase] || default
78+
else
79+
uri_class = default
80+
end
9981

10082
return uri_class.new(scheme, *arguments)
10183
end

lib/uri/file.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,4 +89,6 @@ def set_user(v)
8989
def set_password(v)
9090
end
9191
end
92+
93+
@@schemes['FILE'] = File
9294
end

lib/uri/ftp.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,4 +262,5 @@ def to_s
262262
return str
263263
end
264264
end
265+
@@schemes['FTP'] = FTP
265266
end

lib/uri/http.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,4 +81,7 @@ def request_uri
8181
url.start_with?(?/.freeze) ? url : ?/ + url
8282
end
8383
end
84+
85+
@@schemes['HTTP'] = HTTP
86+
8487
end

lib/uri/https.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@ class HTTPS < HTTP
1818
# A Default port of 443 for URI::HTTPS
1919
DEFAULT_PORT = 443
2020
end
21+
@@schemes['HTTPS'] = HTTPS
2122
end

lib/uri/ldap.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,4 +256,6 @@ def hierarchical?
256256
false
257257
end
258258
end
259+
260+
@@schemes['LDAP'] = LDAP
259261
end

lib/uri/ldaps.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,5 @@ class LDAPS < LDAP
1717
# A Default port of 636 for URI::LDAPS
1818
DEFAULT_PORT = 636
1919
end
20+
@@schemes['LDAPS'] = LDAPS
2021
end

lib/uri/mailto.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,4 +288,6 @@ def to_mailtext
288288
end
289289
alias to_rfc822text to_mailtext
290290
end
291+
292+
@@schemes['MAILTO'] = MailTo
291293
end

lib/uri/ws.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,7 @@ def request_uri
7878
url.start_with?(?/.freeze) ? url : ?/ + url
7979
end
8080
end
81+
82+
@@schemes['WS'] = WS
83+
8184
end

lib/uri/wss.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@ class WSS < WS
1818
# A Default port of 443 for URI::WSS
1919
DEFAULT_PORT = 443
2020
end
21+
@@schemes['WSS'] = WSS
2122
end

test/uri/test_common.rb

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -33,25 +33,6 @@ def test_extract
3333
end
3434
end
3535

36-
def test_ractor
37-
return unless defined?(Ractor)
38-
r = Ractor.new { URI.parse("https://ruby-lang.org/").inspect }
39-
assert_equal(URI.parse("https://ruby-lang.org/").inspect, r.take)
40-
end
41-
42-
def test_register_scheme
43-
assert_equal(["FILE", "FTP", "HTTP", "HTTPS", "LDAP", "LDAPS", "MAILTO", "WS"].sort, URI.scheme_list.keys.sort)
44-
45-
begin
46-
URI::Generic.const_set :FOOBAR, Class.new(URI::Generic)
47-
URI.refresh_scheme_list
48-
assert_equal(["FILE", "FTP", "HTTP", "HTTPS", "LDAP", "LDAPS", "MAILTO", "WS", "FOOBAR"].sort, URI.scheme_list.keys.sort)
49-
ensure
50-
URI::Generic.send(:remove_const, :FOOBAR)
51-
URI.refresh_scheme_list
52-
end
53-
end
54-
5536
def test_regexp
5637
EnvUtil.suppress_warning do
5738
assert_instance_of Regexp, URI.regexp

0 commit comments

Comments
 (0)