Update Pry::Config::Behavior#eager_load! (#1924)
* Update Pry::Config::Behavior#eager_load! I don't think `#eager_load!` was working properly on Pry master or even any of the released Prys from a quick test I did. The `memoized_methods` method `eager_load!` is relying on has since been removed from master too, so an update is needed. The new implementation is simpler, and it includes a test case to check that its behaving as expected because my manual tests suggest it was not (I observed some keys being loaded but not all of them). * Fix comment * Use "unless" instead
This commit is contained in:
parent
cfb67f447f
commit
46afb0991f
|
@ -263,30 +263,33 @@ class Pry
|
||||||
end
|
end
|
||||||
|
|
||||||
#
|
#
|
||||||
# Normally keys are read from a default on first access, this method can
|
# Eagerly loads keys into self directly from {#last_default}.
|
||||||
# be used to eagerly load all keys from {#last_default} at once instead.
|
|
||||||
#
|
#
|
||||||
# @example
|
# @example
|
||||||
# _pry_.config.eager_load!
|
|
||||||
# _pry_.config.keys # => [..., ..., ...]
|
|
||||||
#
|
#
|
||||||
# @return [void]
|
# [1] pry(main)> _pry_.config.keys.size
|
||||||
|
# => 13
|
||||||
|
# [2] pry(main)> _pry_.config.eager_load!;
|
||||||
|
# [warning] Pry.config.exception_whitelist is deprecated, please use Pry.config.unrescued_exceptions instead.
|
||||||
|
# [3] pry(main)> _pry_.config.keys.size
|
||||||
|
# => 40
|
||||||
|
#
|
||||||
|
# @return [Array<String>, nil]
|
||||||
|
# An array of keys inserted into self, or nil if {#last_default} is nil.
|
||||||
#
|
#
|
||||||
def eager_load!
|
def eager_load!
|
||||||
default = @default
|
return unless last_default
|
||||||
while default && default.respond_to?(:memoized_methods)
|
|
||||||
default.memoized_methods.each { self[key] = default.public_send(key) }
|
last_default.keys.each { |key| self[key] = public_send(key) }
|
||||||
default = @default.default
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
#
|
#
|
||||||
# @example
|
# @example
|
||||||
# # _pry_.config -> Pry.config -> Pry::Config.defaults
|
# # _pry_.config -> Pry.config -> Pry::Config.defaults
|
||||||
# _pry_.config.last_default
|
# [1] pry(main)> _pry_.config.last_default
|
||||||
#
|
#
|
||||||
# @return [Pry::Config::Behaviour]
|
# @return [Pry::Config::Behaviour]
|
||||||
# The last default, or nil.
|
# The last linked default, or nil if there is none.
|
||||||
#
|
#
|
||||||
def last_default
|
def last_default
|
||||||
last = @default
|
last = @default
|
||||||
|
|
|
@ -268,4 +268,14 @@ RSpec.describe Pry::Config do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "#eager_load!" do
|
||||||
|
it "eagerly loads keys from the last default into self" do
|
||||||
|
last_default = described_class.from_hash(foo: 1, bar: 2, baz: 3)
|
||||||
|
c = described_class.from_hash({}, last_default)
|
||||||
|
expect(c.keys.size).to eq(0)
|
||||||
|
c.eager_load!
|
||||||
|
expect(c.keys.size).to eq(3)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue