2010-12-24 08:30:51 +00:00
|
|
|
class Pry
|
|
|
|
class Commands
|
2010-12-25 12:05:48 +00:00
|
|
|
attr_reader :commands, :output
|
|
|
|
|
|
|
|
def initialize(out)
|
|
|
|
@output = out
|
|
|
|
|
2010-12-24 08:30:51 +00:00
|
|
|
@commands = {
|
2010-12-25 12:05:48 +00:00
|
|
|
["exit_program", "quit_program"] => proc { opts[:output].exit_program; exit },
|
|
|
|
"!" => proc { |opts| opts[:output].refresh; opts[:eval_string].clear },
|
|
|
|
"help" => proc { |opts| opts[:output].show_help; opts[:eval_string].clear },
|
|
|
|
"nesting" => proc { |opts| opts[:output].show_nesting(opts[:nesting]); opts[:eval_string].clear },
|
2010-12-24 08:30:51 +00:00
|
|
|
"status" => proc do |opts|
|
2010-12-25 12:05:48 +00:00
|
|
|
opts[:output].show_status(opts[:nesting], opts[:target])
|
|
|
|
opts[:eval_string].clear
|
2010-12-24 08:30:51 +00:00
|
|
|
end,
|
|
|
|
"exit_all" => proc { throw(:breakout, 0) },
|
2010-12-25 12:05:48 +00:00
|
|
|
["exit", "quit", "back", "cd .."] => proc do |opts|
|
2010-12-24 08:30:51 +00:00
|
|
|
output.exit
|
|
|
|
throw(:breakout, opts[:nesting].level)
|
|
|
|
end,
|
|
|
|
"ls" => proc do |opts|
|
2010-12-25 12:05:48 +00:00
|
|
|
opts[:output].ls(opts[:target])
|
2010-12-24 08:30:51 +00:00
|
|
|
opts[:eval_string].clear
|
|
|
|
end,
|
|
|
|
/^cat\s+(.+)/ => proc do |opts|
|
|
|
|
obj = opts[:captures].first
|
2010-12-25 12:05:48 +00:00
|
|
|
opts[:output].cat(opts[:target], obj)
|
2010-12-24 08:30:51 +00:00
|
|
|
opts[:eval_string].clear
|
|
|
|
end,
|
|
|
|
/^cd\s+(.+)/ => proc do |opts|
|
|
|
|
obj = opts[:captures].first
|
|
|
|
opts[:target].eval("#{obj}.pry")
|
2010-12-25 12:05:48 +00:00
|
|
|
opts[:output].cd obj
|
2010-12-24 08:30:51 +00:00
|
|
|
opts[:eval_string].clear
|
|
|
|
end,
|
|
|
|
/^show_doc\s*(.+)/ => proc do |opts|
|
|
|
|
meth_name = opts[:captures].first
|
|
|
|
doc = opts[:target].eval("method(:#{meth_name})").comment
|
2010-12-25 12:05:48 +00:00
|
|
|
opts[:output].show_doc doc
|
2010-12-24 08:30:51 +00:00
|
|
|
opts[:eval_string].clear
|
|
|
|
end,
|
|
|
|
/^show_idoc\s*(.+)/ => proc do |opts|
|
|
|
|
meth_name = opts[:captures].first
|
|
|
|
doc = opts[:target].eval("instance_method(:#{meth_name})").comment
|
2010-12-25 12:05:48 +00:00
|
|
|
opts[:output].show_doc doc
|
2010-12-24 08:30:51 +00:00
|
|
|
opts[:eval_string].clear
|
|
|
|
end,
|
|
|
|
/^show_method\s*(.+)/ => proc do |opts|
|
|
|
|
meth_name = opts[:captures].first
|
|
|
|
code = opts[:target].eval("method(:#{meth_name})").source
|
2010-12-25 12:05:48 +00:00
|
|
|
opts[:output].show_method code
|
2010-12-24 08:30:51 +00:00
|
|
|
opts[:eval_string].clear
|
|
|
|
end,
|
|
|
|
/^show_imethod\s*(.+)/ => proc do |opts|
|
|
|
|
meth_name = opts[:captures].first
|
|
|
|
code = opts[:target].eval("instance_method(:#{meth_name})").source
|
|
|
|
output.show_method code
|
|
|
|
opts[:eval_string].clear
|
|
|
|
end,
|
|
|
|
/^jump_to\s*(\d*)/ => proc do |opts|
|
|
|
|
break_level = opts[:captures].first.to_i
|
2010-12-25 12:05:48 +00:00
|
|
|
opts[:output].jump_to(break_level)
|
2010-12-24 08:30:51 +00:00
|
|
|
nesting = opts[:nesting]
|
|
|
|
|
|
|
|
case break_level
|
|
|
|
when nesting.level
|
2010-12-25 12:05:48 +00:00
|
|
|
opts[:output].warn_already_at_level(nesting.level)
|
2010-12-24 08:30:51 +00:00
|
|
|
opts[:eval_string].clear
|
|
|
|
when (0...nesting.level)
|
|
|
|
throw(:breakout, break_level + 1)
|
|
|
|
else
|
2010-12-25 12:05:48 +00:00
|
|
|
opts[:output].err_invalid_nest_level(break_level,
|
|
|
|
nestingn.level - 1)
|
2010-12-24 08:30:51 +00:00
|
|
|
opts[:eval_string].clear
|
|
|
|
end
|
|
|
|
end
|
2010-12-25 12:05:48 +00:00
|
|
|
}
|
2010-12-24 08:30:51 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|