Skip to content

Commit fd2efe7

Browse files
committed
Raise informative error on SortedSet access
1 parent 101d285 commit fd2efe7

File tree

4 files changed

+47
-0
lines changed

4 files changed

+47
-0
lines changed

lib/set.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -690,3 +690,5 @@ def to_set(klass = Set, *args, &block)
690690
klass.new(self, *args, &block)
691691
end
692692
end
693+
694+
autoload :SortedSet, "#{__dir__}/set/sorted_set"

lib/set/sorted_set.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
begin
2+
require 'sorted_set'
3+
rescue ::LoadError
4+
raise "The `SortedSet` class has been extracted from the `set` gem." \
5+
"You must `require 'sorted_set'`."
6+
end
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class SortedSet
2+
# ...
3+
end

test/test_sorted_set.rb

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# frozen_string_literal: false
2+
require 'test/unit'
3+
require 'set'
4+
5+
class TC_SortedSet < Test::Unit::TestCase
6+
def base_dir
7+
"#{__dir__}/../lib"
8+
end
9+
10+
def assert_runs(ruby, options: nil)
11+
options = ['-I', base_dir, *options]
12+
r = system(RbConfig.ruby, *options, '-e', ruby)
13+
assert(r)
14+
end
15+
16+
def test_error
17+
assert_runs <<~RUBY
18+
require "set"
19+
20+
r = begin
21+
puts SortedSet.new
22+
rescue Exception => e
23+
e.message
24+
end
25+
raise r unless r.match? /has been extracted/
26+
RUBY
27+
end
28+
29+
def test_ok
30+
assert_runs <<~RUBY, options: ['-I', "#{__dir__}/fixtures/fake_sorted_set_gem"]
31+
require "set"
32+
33+
var = SortedSet.new.to_s
34+
RUBY
35+
end
36+
end

0 commit comments

Comments
 (0)