Skip to content

Commit d599c29

Browse files
committed
Fix PlainBackend about to use top-level include
[Fix GH-303]
1 parent 9f878bf commit d599c29

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

lib/iruby/backend.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ def initialize
4040
require 'irb/completion'
4141
IRB.setup(nil)
4242
@main = TOPLEVEL_BINDING.eval("self").dup
43+
init_main_object(@main)
4344
@workspace = IRB::WorkSpace.new(@main)
4445
@irb = IRB::Irb.new(@workspace)
4546
@eval_path = @irb.context.irb_path
@@ -58,6 +59,16 @@ def eval(code, store_history)
5859
def complete(code)
5960
IRB::InputCompletor::CompletionProc.call(code)
6061
end
62+
63+
private
64+
65+
def init_main_object(main)
66+
wrapper_module = Module.new
67+
main.extend(wrapper_module)
68+
main.define_singleton_method(:include) do |mod|
69+
wrapper_module.include(mod)
70+
end
71+
end
6172
end
6273

6374
class PryBackend

test/iruby/backend_test.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@ def test_eval_one_plus_two
88
assert_equal 3, @plainbackend.eval('1+2', false)
99
end
1010

11+
def test_include_module
12+
assert_nothing_raised do
13+
@plainbackend.eval("include Math", false)
14+
end
15+
end
16+
1117
def test_complete_req
1218
assert_includes @plainbackend.complete('req'), 'require'
1319
end
@@ -26,6 +32,12 @@ def test_eval_one_plus_two
2632
assert_equal 3, @prybackend.eval('1+2', false)
2733
end
2834

35+
def test_include_module
36+
assert_nothing_raised do
37+
@prybackend.eval("include Math", false)
38+
end
39+
end
40+
2941
def test_complete_req
3042
assert_includes @prybackend.complete('req'), 'require'
3143
end

0 commit comments

Comments
 (0)