diff options
author | tomoya ishida <tomoyapenguin@gmail.com> | 2023-04-15 18:31:56 +0900 |
---|---|---|
committer | git <svn-admin@ruby-lang.org> | 2023-04-15 09:32:05 +0000 |
commit | 19aa30d5d515cd602211d4708e709913d5a136e1 (patch) | |
tree | 54d311050abfb559305108d1137b9d92fc1d2abe | |
parent | 34f484d233e8417588e2c1f7733b483597603cfc (diff) | |
download | ruby-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.rb | 8 | ||||
-rw-r--r-- | test/reline/test_reline.rb | 3 |
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) |