summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortomoya ishida <tomoyapenguin@gmail.com>2023-04-15 18:31:56 +0900
committergit <svn-admin@ruby-lang.org>2023-04-15 09:32:05 +0000
commit19aa30d5d515cd602211d4708e709913d5a136e1 (patch)
tree54d311050abfb559305108d1137b9d92fc1d2abe
parent34f484d233e8417588e2c1f7733b483597603cfc (diff)
downloadruby-19aa30d5d515cd602211d4708e709913d5a136e1.tar.gz
[ruby/reline] Change Reline.add_dialog_proc(name, nil) to properly
remove dialog_proc (https://github.com/ruby/reline/pull/532) https://github.com/ruby/reline/commit/43283b2f37
-rw-r--r--lib/reline.rb8
-rw-r--r--test/reline/test_reline.rb3
2 files changed, 9 insertions, 2 deletions
diff --git a/lib/reline.rb b/lib/reline.rb
index 210f33478f..a128d7347d 100644
--- a/lib/reline.rb
+++ b/lib/reline.rb
@@ -166,9 +166,13 @@ module Reline
DialogProc = Struct.new(:dialog_proc, :context)
def add_dialog_proc(name_sym, p, context = nil)
- raise ArgumentError unless p.respond_to?(:call) or p.nil?
raise ArgumentError unless name_sym.instance_of?(Symbol)
- @dialog_proc_list[name_sym] = DialogProc.new(p, context)
+ if p.nil?
+ @dialog_proc_list.delete(name_sym)
+ else
+ raise ArgumentError unless p.respond_to?(:call)
+ @dialog_proc_list[name_sym] = DialogProc.new(p, context)
+ end
end
def dialog_proc(name_sym)
diff --git a/test/reline/test_reline.rb b/test/reline/test_reline.rb
index 9692605a00..460fb7872d 100644
--- a/test/reline/test_reline.rb
+++ b/test/reline/test_reline.rb
@@ -321,6 +321,9 @@ class Reline::Test < Reline::TestCase
d = Reline.dialog_proc(:test_proc)
assert_equal(dummy_proc_2, d.dialog_proc)
+ Reline.add_dialog_proc(:test_proc, nil)
+ assert_nil(Reline.dialog_proc(:test_proc))
+
l = lambda {}
Reline.add_dialog_proc(:test_lambda, l)
d = Reline.dialog_proc(:test_lambda)