class Pry::REPLFileLoader
def define_additional_commands
Define a few extra commands useful for flipping back & forth
def define_additional_commands s = self Pry::Commands.command "make-interactive", "Make the session interactive" do s.interactive_mode(pry_instance) end Pry::Commands.command( "load-file", "Load another file through the repl" ) do |file_name| s.non_interactive_mode(pry_instance, File.read(File.expand_path(file_name))) end end
def initialize(file_name)
def initialize(file_name) full_name = File.expand_path(file_name) raise "No such file: #{full_name}" unless File.exist?(full_name) define_additional_commands @content = File.read(full_name) end
def interactive_mode(pry_instance)
-
pry_instance
(Pry
) -- the Pry instance to make interactive.
def interactive_mode(pry_instance) pry_instance.config.input = Pry.config.input pry_instance.config.print = Pry.config.print pry_instance.config.exception_handler = Pry.config.exception_handler Pry::REPL.new(pry_instance).start end
def load
Actually load the file through the REPL by setting file content
def load non_interactive_mode(Pry.new, @content) end
def non_interactive_mode(pry_instance, content)
-
pry_instance
(Pry
) -- the Pry instance to make non-interactive.
def non_interactive_mode(pry_instance, content) pry_instance.print = proc {} pry_instance.exception_handler = proc do |o, _e, p| p.run_command "cat --ex" o.puts "...exception encountered, going interactive!" interactive_mode(pry_instance) end content.lines.each do |line| break unless pry_instance.eval line, generated: true end return if pry_instance.eval_string.empty? pry_instance.output.puts( "#{pry_instance.eval_string}...exception encountered, going interactive!" ) interactive_mode(pry_instance) end