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.rb
r-obert b5538b8501
Remove unnecessary classes / modules used by config (#1897)
* Remove` Pry::Config::Default`

* Remove `Pry::Config::Memoization`

* Remove confusing use of `instance_eval`

* Add `Pry::Config.defaults`
  Returns an instance of `Pry::Config`, initialized with Pry defaults.
  Replaces the previous role of `Pry::Config::Default`.
2018-12-01 08:51:52 +01:00

90 lines
3.6 KiB
Ruby

class Pry
# The Pry config.
# @api public
class Config < Pry::BasicObject
include Behavior
#
# @return [Pry::Config]
# An object who implements the default configuration for all
# Pry sessions.
#
def self.defaults
defaults = from_hash(
input: Pry.lazy { lazy_readline(defaults) },
output: $stdout.tap { |out| out.sync = true },
commands: Pry::Commands,
prompt_name: Pry::Prompt::DEFAULT_NAME,
prompt: Pry::Prompt[:default],
prompt_safe_contexts: Pry::Prompt::SAFE_CONTEXTS,
print: Pry::DEFAULT_PRINT,
quiet: false,
exception_handler: Pry::DEFAULT_EXCEPTION_HANDLER,
unrescued_exceptions: Pry::DEFAULT_UNRESCUED_EXCEPTIONS,
exception_whitelist: Pry.lazy do
defaults.output.puts '[warning] Pry.config.exception_whitelist is deprecated, ' \
'please use Pry.config.unrescued_exceptions instead.'
Pry::DEFAULT_UNRESCUED_EXCEPTIONS
end,
hooks: Pry::DEFAULT_HOOKS,
pager: true,
system: Pry::DEFAULT_SYSTEM,
color: Pry::Helpers::BaseHelpers.use_ansi_codes?,
default_window_size: 5,
editor: Pry.default_editor_for_platform,
should_load_rc: true,
should_load_local_rc: true,
should_trap_interrupts: Pry::Helpers::Platform.jruby?,
disable_auto_reload: false,
command_prefix: "",
auto_indent: Pry::Helpers::BaseHelpers.use_ansi_codes?,
correct_indent: true,
collision_warning: false,
output_prefix: "=> ",
requires: [],
should_load_requires: true,
should_load_plugins: true,
windows_console_warning: true,
control_d_handler: Pry::DEFAULT_CONTROL_D_HANDLER,
memory_size: 100,
extra_sticky_locals: {},
command_completions: Pry.lazy { defaults.commands.keys },
file_completions: proc { Dir["."] },
ls: Pry::Config.from_hash(Pry::Command::Ls::DEFAULT_OPTIONS),
completer: Pry::InputCompleter,
gist: Pry::Config.from_hash(inspecter: proc(&:pretty_inspect)),
history: Pry::Config.from_hash(should_save: true, should_load: true).tap do |history|
history_file = if File.exist?(File.expand_path('~/.pry_history'))
'~/.pry_history'
elsif ENV.key?('XDG_DATA_HOME') && ENV['XDG_DATA_HOME'] != ''
# See XDG Base Directory Specification at
# https://standards.freedesktop.org/basedir-spec/basedir-spec-0.8.html
ENV['XDG_DATA_HOME'] + '/pry/pry_history'
else
'~/.local/share/pry/pry_history'
end
history.file = File.expand_path(history_file)
end,
exec_string: ""
)
end
def self.shortcuts
Convenience::SHORTCUTS
end
# @api private
def self.lazy_readline(defaults)
require 'readline'
::Readline
rescue LoadError
defaults.output.puts "Sorry, you can't use Pry without Readline or a compatible library. \n" \
"Possible solutions: \n" \
" * Rebuild Ruby with Readline support using `--with-readline` \n" \
" * Use the rb-readline gem, which is a pure-Ruby port of Readline \n" \
" * Use the pry-coolline gem, a pure-ruby alternative to Readline"
raise
end
private_class_method :lazy_readline
end
end