summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyrylo Silin <silin@kyrylo.org>2020-04-12 15:03:44 +0800
committerKyrylo Silin <silin@kyrylo.org>2020-04-12 15:10:57 +0800
commit5dd061c3406aa84e5cafd489a5c77e550b00d122 (patch)
tree9e526ce4e14379547b39633ac6369f62ad5b62b7
parentf0328a4dfa88a98d344086526d8e5a778b0452fd (diff)
downloadpry-5dd061c3406aa84e5cafd489a5c77e550b00d122.tar.gz
config: return `nil` on unknown option instead of raising
Returning `nil` on unknown option was default behaviour for Pry v0.12.x. In e5556a2be8627ec3fe594c738f10422d5a1f5d43 I changed that but I am not sure if it was intentional. This breaks plugins such as pry-theme (https://github.com/kyrylo/pry-theme/issues/59). Returning `nil` makes more sense, because we can write code like this: ``` Pry.config.foo ||= 123 ``` ...whereas as of now this is no longer possible and you would need to use `respond_to?` to achieve the same effect.
-rw-r--r--CHANGELOG.md6
-rw-r--r--lib/pry/config.rb6
-rw-r--r--spec/config_spec.rb4
3 files changed, 11 insertions, 5 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 85796fda..180b7737 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,12 @@
* Fixed bug where on invalid input only the last syntax error is displayed
(instead of all of them) ([#2117](https://github.com/pry/pry/pull/2117))
+#### API changes
+
+* `Pry::Config` returns `nil` on undefined option instead of raising
+ `NoMethodError` (usually invoked via `Pry.config.foo_option` calls)
+ ([#2126](https://github.com/pry/pry/pull/2126))
+
### [v0.13.0][v0.13.0] (March 21, 2020)
#### Features
diff --git a/lib/pry/config.rb b/lib/pry/config.rb
index 6c377a48..0e54bf69 100644
--- a/lib/pry/config.rb
+++ b/lib/pry/config.rb
@@ -239,17 +239,17 @@ class Pry
@custom_attrs[attr.to_s].call
end
- def method_missing(method_name, *args, &block)
+ # rubocop:disable Style/MethodMissingSuper
+ def method_missing(method_name, *args, &_block)
name = method_name.to_s
if name.end_with?('=')
self[name[0..-2]] = args.first
elsif @custom_attrs.key?(name)
self[name]
- else
- super
end
end
+ # rubocop:enable Style/MethodMissingSuper
def respond_to_missing?(method_name, include_all = false)
@custom_attrs.key?(method_name.to_s.tr('=', '')) || super
diff --git a/spec/config_spec.rb b/spec/config_spec.rb
index db91f7cb..f1cf5ea6 100644
--- a/spec/config_spec.rb
+++ b/spec/config_spec.rb
@@ -150,8 +150,8 @@ RSpec.describe Pry::Config do
end
context "when invoked method is not an option" do
- it "raises NoMethodError" do
- expect { subject.foo }.to raise_error(NoMethodError)
+ it "returns nil" do
+ expect(subject.foo).to be_nil
end
end