Remove order dependency between :input and :completer procs
This required switching Config::Default to use instance_eval instead of call so that config procs can reference each other. I also brought over a couple of copy changes from 0-9-12-stable.
This commit is contained in:
parent
b9b87171f9
commit
8ed7a869c7
|
@ -137,7 +137,8 @@ if Pry::Helpers::BaseHelpers.jruby?
|
||||||
begin
|
begin
|
||||||
require 'ffi'
|
require 'ffi'
|
||||||
rescue LoadError
|
rescue LoadError
|
||||||
warn "Need to `gem install ffi`"
|
# TODO: Why do we need this?
|
||||||
|
warn "For a better Pry experience on JRuby, please `gem install ffi`."
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -148,7 +149,8 @@ if Pry::Helpers::BaseHelpers.windows? && !Pry::Helpers::BaseHelpers.windows_ansi
|
||||||
# only fail on jruby (where win32console doesn't work).
|
# only fail on jruby (where win32console doesn't work).
|
||||||
# Instead we'll recommend ansicon, which does.
|
# Instead we'll recommend ansicon, which does.
|
||||||
rescue LoadError
|
rescue LoadError
|
||||||
warn "For a better pry experience, please use ansicon: https://github.com/adoxa/ansicon"
|
warn "For a better Pry experience on Windows, please use ansicon:"
|
||||||
|
warn " http://adoxa.3eeweb.com/ansicon/"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,19 +1,8 @@
|
||||||
class Pry::Config::Default
|
class Pry::Config::Default
|
||||||
include Pry::Config::Behavior
|
include Pry::Config::Behavior
|
||||||
|
|
||||||
def self.lazy_readline
|
|
||||||
require 'readline'
|
|
||||||
Readline
|
|
||||||
rescue LoadError => e
|
|
||||||
warn "Pry says!"
|
|
||||||
warn "require of 'readline' has failed."
|
|
||||||
warn "you can rebuild ruby with readline support from C through '--with-readline'."
|
|
||||||
warn "alternatively, you can use the pure-ruby version of readline through 'gem install rb-readline'"
|
|
||||||
raise(e)
|
|
||||||
end
|
|
||||||
|
|
||||||
default = {
|
default = {
|
||||||
:input => method(:lazy_readline).to_proc,
|
:input => proc { lazy_readline },
|
||||||
:output => proc { $stdout },
|
:output => proc { $stdout },
|
||||||
:commands => proc { Pry::Commands },
|
:commands => proc { Pry::Commands },
|
||||||
:prompt_name => proc { Pry::DEFAULT_PROMPT_NAME },
|
:prompt_name => proc { Pry::DEFAULT_PROMPT_NAME },
|
||||||
|
@ -46,13 +35,7 @@ class Pry::Config::Default
|
||||||
:extra_sticky_locals => proc { {} },
|
:extra_sticky_locals => proc { {} },
|
||||||
:command_completer => proc { proc { Pry.commands.commands.keys } },
|
:command_completer => proc { proc { Pry.commands.commands.keys } },
|
||||||
:file_completer => proc { proc { Dir["."] } },
|
:file_completer => proc { proc { Dir["."] } },
|
||||||
:completer => proc {
|
:completer => proc { lazy_completer }
|
||||||
if defined?(Bond) && Readline::VERSION !~ /editline/i
|
|
||||||
Pry::BondCompleter.start
|
|
||||||
else
|
|
||||||
Pry::InputCompleter.start
|
|
||||||
end
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
|
@ -65,13 +48,14 @@ class Pry::Config::Default
|
||||||
default.each do |key, value|
|
default.each do |key, value|
|
||||||
define_method(key) do
|
define_method(key) do
|
||||||
if default[key].equal?(value)
|
if default[key].equal?(value)
|
||||||
default[key] = value.call
|
default[key] = instance_eval(&value)
|
||||||
end
|
end
|
||||||
default[key]
|
default[key]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
# TODO:
|
# TODO:
|
||||||
# all of this configure_* stuff is a relic of old code.
|
# all of this configure_* stuff is a relic of old code.
|
||||||
# we should try move this code to being command-local.
|
# we should try move this code to being command-local.
|
||||||
|
@ -112,4 +96,27 @@ private
|
||||||
history.should_load = false
|
history.should_load = false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def lazy_readline
|
||||||
|
require 'readline'
|
||||||
|
Readline
|
||||||
|
rescue LoadError
|
||||||
|
warn "Sorry, you can't use Pry without Readline or a compatible library."
|
||||||
|
warn "Possible solutions:"
|
||||||
|
warn " * Rebuild Ruby with Readline support using `--with-readline`"
|
||||||
|
warn " * Use the rb-readline gem, which is a pure-Ruby port of Readline"
|
||||||
|
raise
|
||||||
|
end
|
||||||
|
|
||||||
|
def lazy_completer
|
||||||
|
if defined?(Bond) && !is_editline?(input)
|
||||||
|
Pry::BondCompleter.start
|
||||||
|
else
|
||||||
|
Pry::InputCompleter.start
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def is_editline?(input)
|
||||||
|
defined?(input::VERSION) && input::VERSION =~ /editline/i
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -15,6 +15,9 @@ require 'spec_helpers/bacon'
|
||||||
require 'spec_helpers/mock_pry'
|
require 'spec_helpers/mock_pry'
|
||||||
require 'spec_helpers/repl_tester'
|
require 'spec_helpers/repl_tester'
|
||||||
|
|
||||||
|
# FIXME: temporary until history is fixed to not need Readline
|
||||||
|
require 'readline'
|
||||||
|
|
||||||
class Module
|
class Module
|
||||||
public :remove_const
|
public :remove_const
|
||||||
public :remove_method
|
public :remove_method
|
||||||
|
|
Loading…
Reference in New Issue