This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'stringio'
|
||||
|
||||
class Pry
|
||||
module Testable
|
||||
class PryTester
|
||||
extend Pry::Forwardable
|
||||
attr_reader :pry, :out
|
||||
def_delegators :@pry, :eval_string, :eval_string=
|
||||
|
||||
def initialize(target = TOPLEVEL_BINDING, options = {})
|
||||
@pry = Pry.new(options.merge(target: target))
|
||||
@history = options[:history]
|
||||
@pry.inject_sticky_locals!
|
||||
reset_output
|
||||
end
|
||||
|
||||
def eval(*strs)
|
||||
reset_output
|
||||
result = nil
|
||||
|
||||
strs.flatten.each do |str|
|
||||
# Check for space prefix. See #1369.
|
||||
str = "#{str.strip}\n" if str !~ /^\s\S/
|
||||
@history.push str if @history
|
||||
|
||||
result =
|
||||
if @pry.process_command(str)
|
||||
last_command_result_or_output
|
||||
else
|
||||
# Check if this is a multiline paste.
|
||||
begin
|
||||
complete_expr = Pry::Code.complete_expression?(str)
|
||||
rescue SyntaxError => exception
|
||||
@pry.output.puts(
|
||||
"SyntaxError: #{exception.message.sub(/.*syntax error, */m, '')}"
|
||||
)
|
||||
end
|
||||
@pry.evaluate_ruby(str) if complete_expr
|
||||
end
|
||||
end
|
||||
|
||||
result
|
||||
end
|
||||
|
||||
def push(*lines)
|
||||
Array(lines).flatten.each do |line|
|
||||
@pry.eval(line)
|
||||
end
|
||||
end
|
||||
|
||||
def push_binding(context)
|
||||
@pry.push_binding context
|
||||
end
|
||||
|
||||
def last_output
|
||||
@out.string if @out
|
||||
end
|
||||
|
||||
def process_command(command_str)
|
||||
@pry.process_command(command_str) || raise("Not a valid command")
|
||||
last_command_result_or_output
|
||||
end
|
||||
|
||||
def last_command_result
|
||||
result = Pry.current[:pry_cmd_result]
|
||||
result.retval if result
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def last_command_result_or_output
|
||||
result = last_command_result
|
||||
if result != Pry::Command::VOID_VALUE
|
||||
result
|
||||
else
|
||||
last_output
|
||||
end
|
||||
end
|
||||
|
||||
def reset_output
|
||||
@out = StringIO.new
|
||||
@pry.output = @out
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user