Class: Byebug::Command
- Inherits:
-
Object
show all
- Extended by:
- Forwardable
- Defined in:
- lib/byebug/command.rb
Direct Known Subclasses
AddDisplayCommand, BreakCommand, CatchCommand, ConditionCommand, ContinueCommand, DeleteCommand, DeleteDisplayCommand, DisableCommand, DisplayCommand, DownCommand, Edit, EnableCommand, EvalCommand, FinishCommand, FrameCommand, HelpCommand, IRBCommand, InfoCommand, KillCommand, ListCommand, MethodCommand, MethodSigCommand, NextCommand, PPCommand, PSCommand, PryCommand, PutLCommand, QuitCommand, ReloadCommand, RestartCommand, SaveCommand, SetCommand, ShowCommand, SkipCommand, SourceCommand, StepCommand, ThreadCurrentCommand, ThreadListCommand, ThreadResumeCommand, ThreadStopCommand, ThreadSwitchCommand, TraceCommand, UpCommand, VarClassVarCommand, VarConstantCommand, VarGlobalCommand, VarInheritCommand, VarInstanceCommand, VarLocalCommand, WhereCommand
Defined Under Namespace
Classes: Subcmd
Constant Summary
collapse
- DEF_OPTIONS =
{ allow_in_control: false,
allow_in_post_mortem: true ,
event: true ,
always_run: 0 ,
unknown: false,
need_context: false }
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(state) ⇒ Command
Returns a new instance of Command.
175
176
177
|
# File 'lib/byebug/command.rb', line 175
def initialize(state)
@match, @state = nil, state
end
|
Class Method Details
.command_exists?(command) ⇒ Boolean
144
145
146
147
|
# File 'lib/byebug/command.rb', line 144
def command_exists?(command)
ENV['PATH'].split(File::PATH_SEPARATOR).any? {
|d| File.exists? File.join(d, command) }
end
|
.commands ⇒ Object
22
23
24
|
# File 'lib/byebug/command.rb', line 22
def commands
@commands ||= []
end
|
.find(subcmds, param) ⇒ Object
43
44
45
46
47
48
49
50
51
52
|
# File 'lib/byebug/command.rb', line 43
def find(subcmds, param)
param.downcase!
for try_subcmd in subcmds do
if (param.size >= try_subcmd.min) and
(try_subcmd.name[0..param.size-1] == param)
return try_subcmd
end
end
return nil
end
|
54
55
56
57
58
59
60
|
# File 'lib/byebug/command.rb', line 54
def format_subcmd(subcmd_name)
subcmd = find(self::Subcommands, subcmd_name)
return "Invalid \"#{names.join("|")}\" " \
"subcommand \"#{args[1]}\"." unless subcmd
return "#{subcmd.help}.\n"
end
|
62
63
64
65
66
67
68
69
70
71
72
73
|
# File 'lib/byebug/command.rb', line 62
def format_subcmds
cmd_name = names.join("|")
s = "\n" \
"--\n" \
"List of \"#{cmd_name}\" subcommands:\n" \
"--\n"
w = self::Subcommands.map(&:name).max_by(&:size).size
for subcmd in self::Subcommands do
s += sprintf "%s %-#{w}s -- %s\n", cmd_name, subcmd.name, subcmd.help
end
return s
end
|
.help(args) ⇒ Object
33
34
35
36
37
38
39
40
41
|
# File 'lib/byebug/command.rb', line 33
def help(args)
if args && args[1]
output = format_subcmd(args[1])
else
output = description.gsub(/^ +/, '') + "\n"
output += format_subcmds if defined? self::Subcommands
end
output
end
|
.inherited(klass) ⇒ Object
75
76
77
78
79
80
|
# File 'lib/byebug/command.rb', line 75
def inherited(klass)
DEF_OPTIONS.each do |o, v|
klass.options[o] = v if klass.options[o].nil?
end
commands << klass
end
|
.load_commands ⇒ Object
82
83
84
85
86
87
|
# File 'lib/byebug/command.rb', line 82
def load_commands
Dir[File.join(File.dirname(__FILE__), 'commands', '*')].each {
|file| require file }
Byebug.constants.grep(/Functions$/).map {
|name| Byebug.const_get(name) }.each { |mod| include mod }
end
|
.method_missing(meth, *args, &block) ⇒ Object
89
90
91
92
93
94
95
96
97
98
99
|
# File 'lib/byebug/command.rb', line 89
def method_missing(meth, *args, &block)
if meth.to_s =~ /^(.+?)=$/
options[$1.intern] = args.first
else
if options.has_key?(meth)
options[meth]
else
super
end
end
end
|
.options ⇒ Object
101
102
103
|
# File 'lib/byebug/command.rb', line 101
def options
@options ||= {}
end
|
.register_setting_get(name, &block) ⇒ Object
134
135
136
137
|
# File 'lib/byebug/command.rb', line 134
def register_setting_get(name, &block)
settings_map[name] ||= {}
settings_map[name][:getter] = block
end
|
.register_setting_set(name, &block) ⇒ Object
139
140
141
142
|
# File 'lib/byebug/command.rb', line 139
def register_setting_set(name, &block)
settings_map[name] ||= {}
settings_map[name][:setter] = block
end
|
.register_setting_var(name, default) ⇒ Object
127
128
129
130
131
132
|
# File 'lib/byebug/command.rb', line 127
def register_setting_var(name, default)
var_name = "@@#{name}"
class_variable_set(var_name, default)
register_setting_get(name) { class_variable_get(var_name) }
register_setting_set(name) { |value| class_variable_set(var_name, value) }
end
|
.settings ⇒ Object
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
# File 'lib/byebug/command.rb', line 110
def settings
unless defined? @settings and @settings
@settings = Object.new
map = settings_map
c = class << @settings; self end
c.send(:define_method, :[]) do |name|
raise "No such setting #{name}" unless map.has_key?(name)
map[name][:getter].call
end
c.send(:define_method, :[]=) do |name, value|
raise "No such setting #{name}" unless map.has_key?(name)
map[name][:setter].call(value)
end
end
@settings
end
|
.settings_map ⇒ Object
105
106
107
|
# File 'lib/byebug/command.rb', line 105
def settings_map
@@settings_map ||= {}
end
|
.terminal_width ⇒ Object
149
150
151
152
153
154
155
156
157
|
# File 'lib/byebug/command.rb', line 149
def terminal_width
if ENV['COLUMNS'] =~ /^\d+$/
ENV['COLUMNS'].to_i
elsif STDIN.tty? && command_exists?('stty')
`stty size`.scan(/\d+/)[1].to_i
else
nil
end
end
|
Instance Method Details
#match(input) ⇒ Object
179
180
181
|
# File 'lib/byebug/command.rb', line 179
def match(input)
@match = regexp.match(input)
end
|