1
0
Fork 0
mirror of https://github.com/pry/pry.git synced 2022-11-09 12:35:05 -05:00
pry--pry/lib/pry/config/convenience.rb
Robert Gleeson 5db725eca6 implement Pry global and pry-local configuration.
maybe best explained with an example:
      [1] pry(main)> Pry.config.hi = "hi"
      => "hi"
      [2] pry(main)> _pry_.config.hi
      => "hi"
      [3] pry(main)> _pry_.config.x = 1
      => 1
      [4] pry(main)> Pry.config.x
      => nil
      [5] pry(main)>

'Pry.config' is an instance of Pry::Config::Default. it defines the initial
default configuration values an instance of 'Pry' is going to have. an instance
of 'Pry' uses an instance of Pry::Config who relies on Pry.config as a default
or fallback for keys it cannot find locally.

for example 'Pry.config.color = true' is seen by _all_ pry REPLs who are active
but _pry_.config.color = false is seen only by the REPL session being interacted
with. a number of "config shortcircuts" are still available, for example it is
possible to say `_pry_.input = StringIO.new` or `Pry.input = StringIO.new`. the
shortcuts are maintained for the Pry class and instances of the Pry class through
Pry::Config.shortcuts.

Pry::Config::Convenience adds a method called 'config_shortcuts' which can be used
to setup shortcut access to 'some_obj.config.blah' as 'some_obj.blah'

a lot of tests still fail, so work in progress.

this should help solve #1055.
2014-01-19 03:18:46 +01:00

27 lines
653 B
Ruby

module Pry::Config::Convenience
SHORTCUTS = [
:input,
:output,
:commands,
:prompt,
:print,
:exception_handler,
:quiet?,
:hooks,
:color,
:pager,
:editor,
:memory_size,
:extra_sticky_locals
]
def config_shortcut(*names)
names.each do |name|
reader = name
setter = "#{name}="
define_method(reader) { config.public_send(name) }
define_method(setter) { |value| config.public_send(setter, value) }
end
end
end