From 2202ab775c635f8b7a3c244266365d442e9ceaec Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Wed, 30 Apr 2014 00:51:59 -0700 Subject: [PATCH] Move to a fall-through config hash. This is somewhat easier to understand than the current solution, but does have some downsides: namely it doesn't work for things like Pry::Hooks. It is however the only way I've thought of to let setting Pry.config.color = work in addition to _pry.config.color =. For now I've added a hack so that hooks work as they did before, in future we should work out how to fix them so that only the data for hooks is stored in the config object, not the hooks object itself. --- lib/pry/config/behavior.rb | 19 +++++-------------- spec/config_spec.rb | 6 ------ 2 files changed, 5 insertions(+), 20 deletions(-) diff --git a/lib/pry/config/behavior.rb b/lib/pry/config/behavior.rb index 9b5c42ae..1cb98da5 100644 --- a/lib/pry/config/behavior.rb +++ b/lib/pry/config/behavior.rb @@ -19,11 +19,7 @@ module Pry::Config::Behavior end def initialize(default = Pry.config) - if default - @default = default.dup - @default.default_for(self) - end - @default_for = nil + @default = default @lookup = {} end @@ -56,7 +52,10 @@ module Pry::Config::Behavior self[key] elsif @default.respond_to?(name) value = @default.public_send(name, *args, &block) - self[key] = _dup(value) + # FIXME: refactor Pry::Hook so that it stores config on the config object, + # so that we can use the normal strategy. + self[key] = value.dup if key == 'hooks' + value else nil end @@ -94,14 +93,6 @@ module Pry::Config::Behavior @lookup.delete(key.to_s) end - def default_for(other) - if @default_for - raise RuntimeError, "self is already the default for %s" % _clip_inspect(@default_for) - else - @default_for = other - end - end - def keys @lookup.keys end diff --git a/spec/config_spec.rb b/spec/config_spec.rb index 0652619d..228f30dc 100644 --- a/spec/config_spec.rb +++ b/spec/config_spec.rb @@ -21,12 +21,6 @@ describe Pry::Config do local.foo.should == 2 end - it "duplicates a copy on read from the parent" do - ukraine = "i love" - local = Pry::Config.new Pry::Config.from_hash(home: ukraine) - local.home.equal?(ukraine).should == false - end - it "traverses through a chain of parents" do root = Pry::Config.from_hash({foo: 21}) local1 = Pry::Config.new(root)