diff --git a/lib/reline.rb b/lib/reline.rb index 210f33478fd831..a128d7347db85c 100644 --- a/lib/reline.rb +++ b/lib/reline.rb @@ -166,9 +166,13 @@ def dig_perfect_match_proc=(p) 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 9692605a007eb7..460fb7872d5b18 100644 --- a/test/reline/test_reline.rb +++ b/test/reline/test_reline.rb @@ -321,6 +321,9 @@ def test_add_dialog_proc 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)