pry 0.8.4pre1-i386-mswin32 → 0.9.0-i386-mswin32
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/CHANGELOG +25 -6
- data/README.markdown +11 -4
- data/Rakefile +15 -19
- data/TODO +28 -2
- data/bin/pry +28 -11
- data/examples/example_basic.rb +2 -4
- data/examples/example_command_override.rb +2 -5
- data/examples/example_commands.rb +1 -4
- data/examples/example_hooks.rb +2 -5
- data/examples/example_image_edit.rb +4 -8
- data/examples/example_input.rb +1 -4
- data/examples/example_input2.rb +1 -4
- data/examples/example_output.rb +1 -4
- data/examples/example_print.rb +2 -5
- data/examples/example_prompt.rb +2 -5
- data/examples/helper.rb +6 -0
- data/lib/pry.rb +59 -3
- data/lib/pry/command_context.rb +10 -9
- data/lib/pry/command_processor.rb +51 -73
- data/lib/pry/command_set.rb +79 -28
- data/lib/pry/commands.rb +9 -123
- data/lib/pry/completion.rb +30 -29
- data/lib/pry/config.rb +100 -0
- data/lib/pry/default_commands/basic.rb +37 -0
- data/lib/pry/default_commands/context.rb +16 -15
- data/lib/pry/default_commands/documentation.rb +73 -54
- data/lib/pry/default_commands/easter_eggs.rb +1 -20
- data/lib/pry/default_commands/gems.rb +31 -40
- data/lib/pry/default_commands/input.rb +223 -15
- data/lib/pry/default_commands/introspection.rb +108 -73
- data/lib/pry/default_commands/ls.rb +25 -11
- data/lib/pry/default_commands/shell.rb +29 -39
- data/lib/pry/extended_commands/experimental.rb +17 -0
- data/lib/pry/extended_commands/user_command_api.rb +22 -0
- data/lib/pry/helpers.rb +1 -0
- data/lib/pry/helpers/base_helpers.rb +15 -104
- data/lib/pry/helpers/command_helpers.rb +96 -59
- data/lib/pry/helpers/text.rb +83 -0
- data/lib/pry/history_array.rb +105 -0
- data/lib/pry/plugins.rb +79 -0
- data/lib/pry/pry_class.rb +102 -114
- data/lib/pry/pry_instance.rb +123 -55
- data/lib/pry/version.rb +1 -1
- data/pry.gemspec +45 -0
- data/test/helper.rb +57 -7
- data/test/test_command_processor.rb +205 -0
- data/test/{test_commandset.rb → test_command_set.rb} +18 -12
- data/test/test_default_commands.rb +59 -0
- data/test/test_default_commands/test_context.rb +64 -0
- data/test/test_default_commands/test_documentation.rb +31 -0
- data/test/test_default_commands/test_gems.rb +14 -0
- data/test/test_default_commands/test_input.rb +327 -0
- data/test/test_default_commands/test_introspection.rb +155 -0
- data/test/test_history_array.rb +65 -0
- data/test/test_pry.rb +548 -313
- metadata +48 -15
- data/lib/pry/hooks.rb +0 -17
- data/lib/pry/print.rb +0 -16
- data/lib/pry/prompts.rb +0 -31
data/lib/pry/commands.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require "pry/default_commands/basic"
|
1
2
|
require "pry/default_commands/documentation"
|
2
3
|
require "pry/default_commands/gems"
|
3
4
|
require "pry/default_commands/context"
|
@@ -6,135 +7,20 @@ require "pry/default_commands/shell"
|
|
6
7
|
require "pry/default_commands/introspection"
|
7
8
|
require "pry/default_commands/easter_eggs"
|
8
9
|
|
10
|
+
require "pry/extended_commands/user_command_api"
|
11
|
+
require "pry/extended_commands/experimental"
|
12
|
+
|
9
13
|
class Pry
|
10
14
|
|
11
15
|
# Default commands used by Pry.
|
12
|
-
Commands = Pry::CommandSet.new
|
16
|
+
Commands = Pry::CommandSet.new do
|
17
|
+
import DefaultCommands::Basic
|
13
18
|
import DefaultCommands::Documentation
|
14
19
|
import DefaultCommands::Gems
|
15
20
|
import DefaultCommands::Context
|
16
|
-
import DefaultCommands::Input
|
21
|
+
import DefaultCommands::Input
|
22
|
+
import DefaultCommands::Shell
|
17
23
|
import DefaultCommands::Introspection
|
18
24
|
import DefaultCommands::EasterEggs
|
19
|
-
|
20
|
-
Helpers::CommandHelpers.try_to_load_pry_doc
|
21
|
-
|
22
|
-
command "toggle-color", "Toggle syntax highlighting." do
|
23
|
-
Pry.color = !Pry.color
|
24
|
-
output.puts "Syntax highlighting #{Pry.color ? "on" : "off"}"
|
25
|
-
end
|
26
|
-
|
27
|
-
command "simple-prompt", "Toggle the simple prompt." do
|
28
|
-
case Pry.active_instance.prompt
|
29
|
-
when Pry::SIMPLE_PROMPT
|
30
|
-
Pry.active_instance.prompt = Pry::DEFAULT_PROMPT
|
31
|
-
else
|
32
|
-
Pry.active_instance.prompt = Pry::SIMPLE_PROMPT
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
command "status", "Show status information." do
|
37
|
-
nesting = opts[:nesting]
|
38
|
-
|
39
|
-
output.puts "Status:"
|
40
|
-
output.puts "--"
|
41
|
-
output.puts "Receiver: #{Pry.view_clip(target.eval('self'))}"
|
42
|
-
output.puts "Nesting level: #{nesting.level}"
|
43
|
-
output.puts "Pry version: #{Pry::VERSION}"
|
44
|
-
output.puts "Ruby version: #{RUBY_VERSION}"
|
45
|
-
|
46
|
-
mn = meth_name_from_binding(target)
|
47
|
-
output.puts "Current method: #{mn ? mn : "N/A"}"
|
48
|
-
output.puts "Pry instance: #{Pry.active_instance}"
|
49
|
-
output.puts "Last result: #{Pry.view(Pry.last_result)}"
|
50
|
-
end
|
51
|
-
|
52
|
-
|
53
|
-
command "req", "Requires gem(s). No need for quotes! (If the gem isn't installed, it will ask if you want to install it.)" do |*gems|
|
54
|
-
gems = gems.join(' ').gsub(',', '').split(/\s+/)
|
55
|
-
gems.each do |gem|
|
56
|
-
begin
|
57
|
-
if require gem
|
58
|
-
output.puts "#{bright_yellow(gem)} loaded"
|
59
|
-
else
|
60
|
-
output.puts "#{bright_white(gem)} already loaded"
|
61
|
-
end
|
62
|
-
|
63
|
-
rescue LoadError => e
|
64
|
-
|
65
|
-
if gem_installed? gem
|
66
|
-
output.puts e.inspect
|
67
|
-
else
|
68
|
-
output.puts "#{bright_red(gem)} not found"
|
69
|
-
if prompt("Install the gem?") == "y"
|
70
|
-
run "gem-install", gem
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
end # rescue
|
75
|
-
end # gems.each
|
76
|
-
end
|
77
|
-
|
78
|
-
command "version", "Show Pry version." do
|
79
|
-
output.puts "Pry version: #{Pry::VERSION} on Ruby #{RUBY_VERSION}."
|
80
|
-
end
|
81
|
-
|
82
|
-
|
83
|
-
command "lls", "List local files using 'ls'" do |*args|
|
84
|
-
cmd = ".ls"
|
85
|
-
run cmd, *args
|
86
|
-
end
|
87
|
-
|
88
|
-
command "lcd", "Change the current (working) directory" do |*args|
|
89
|
-
run ".cd", *args
|
90
|
-
end
|
91
|
-
|
92
|
-
|
93
|
-
command "eval-file", "Eval a Ruby script. Type `eval-file --help` for more info." do |*args|
|
94
|
-
options = {}
|
95
|
-
target = target()
|
96
|
-
file_name = nil
|
97
|
-
|
98
|
-
OptionParser.new do |opts|
|
99
|
-
opts.banner = %{Usage: eval-file [OPTIONS] FILE
|
100
|
-
Eval a Ruby script at top-level or in the specified context. Defaults to top-level.
|
101
|
-
e.g: eval-file -c self "hello.rb"
|
102
|
-
--
|
103
|
-
}
|
104
|
-
opts.on("-c", "--context CONTEXT", "Eval the script in the specified context.") do |context|
|
105
|
-
options[:c] = true
|
106
|
-
target = Pry.binding_for(target.eval(context))
|
107
|
-
end
|
108
|
-
|
109
|
-
opts.on_tail("-h", "--help", "This message.") do
|
110
|
-
output.puts opts
|
111
|
-
options[:h] = true
|
112
|
-
end
|
113
|
-
end.order(args) do |v|
|
114
|
-
file_name = v
|
115
|
-
end
|
116
|
-
|
117
|
-
next if options[:h]
|
118
|
-
|
119
|
-
if !file_name
|
120
|
-
output.puts "You need to specify a file name. Type `eval-file --help` for help"
|
121
|
-
next
|
122
|
-
end
|
123
|
-
|
124
|
-
old_constants = Object.constants
|
125
|
-
if options[:c]
|
126
|
-
target_self = target.eval('self')
|
127
|
-
target.eval(File.read(File.expand_path(file_name)))
|
128
|
-
output.puts "--\nEval'd '#{file_name}' in the `#{target_self}` context."
|
129
|
-
else
|
130
|
-
TOPLEVEL_BINDING.eval(File.read(File.expand_path(file_name)))
|
131
|
-
output.puts "--\nEval'd '#{file_name}' at top-level."
|
132
|
-
end
|
133
|
-
set_file_and_dir_locals(file_name)
|
134
|
-
|
135
|
-
new_constants = Object.constants - old_constants
|
136
|
-
output.puts "Brought in the following top-level constants: #{new_constants.inspect}" if !new_constants.empty?
|
137
|
-
end
|
138
|
-
|
139
|
-
end
|
25
|
+
end
|
140
26
|
end
|
data/lib/pry/completion.rb
CHANGED
@@ -14,28 +14,29 @@ class Pry
|
|
14
14
|
Readline.completion_append_character = nil
|
15
15
|
|
16
16
|
ReservedWords = [
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
17
|
+
"BEGIN", "END",
|
18
|
+
"alias", "and",
|
19
|
+
"begin", "break",
|
20
|
+
"case", "class",
|
21
|
+
"def", "defined", "do",
|
22
|
+
"else", "elsif", "end", "ensure",
|
23
|
+
"false", "for",
|
24
|
+
"if", "in",
|
25
|
+
"module",
|
26
|
+
"next", "nil", "not",
|
27
|
+
"or",
|
28
|
+
"redo", "rescue", "retry", "return",
|
29
|
+
"self", "super",
|
30
|
+
"then", "true",
|
31
|
+
"undef", "unless", "until",
|
32
|
+
"when", "while",
|
33
|
+
"yield" ]
|
34
|
+
|
35
|
+
Operators = [
|
36
|
+
"%", "&", "*", "**", "+", "-", "/",
|
37
|
+
"<", "<<", "<=", "<=>", "==", "===", "=~", ">", ">=", ">>",
|
38
|
+
"[]", "[]=", "^", "!", "!=", "!~"
|
39
|
+
]
|
39
40
|
|
40
41
|
# Return a new completion proc for use by Readline.
|
41
42
|
# @param [Binding] target The current binding context.
|
@@ -188,13 +189,13 @@ class Pry
|
|
188
189
|
|
189
190
|
def self.select_message(receiver, message, candidates)
|
190
191
|
candidates.grep(/^#{message}/).collect do |e|
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
192
|
+
case e
|
193
|
+
when /^[a-zA-Z_]/
|
194
|
+
receiver + "." + e
|
195
|
+
when /^[0-9]/
|
196
|
+
when *Operators
|
197
|
+
#receiver + " " + e
|
198
|
+
end
|
198
199
|
end
|
199
200
|
end
|
200
201
|
end
|
data/lib/pry/config.rb
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
3
|
+
class Pry
|
4
|
+
class Config < OpenStruct
|
5
|
+
|
6
|
+
# Get/Set the object to use for input by default by all Pry instances.
|
7
|
+
# @return [#readline] The object to use for input by default by all
|
8
|
+
# Pry instances.
|
9
|
+
attr_accessor :input
|
10
|
+
|
11
|
+
# Get/Set the object to use for output by default by all Pry instances.
|
12
|
+
# @return [#puts] The object to use for output by default by all
|
13
|
+
# Pry instances.
|
14
|
+
attr_accessor :output
|
15
|
+
|
16
|
+
# Get/Set the object to use for commands by default by all Pry instances.
|
17
|
+
# @return [Pry::CommandBase] The object to use for commands by default by all
|
18
|
+
# Pry instances.
|
19
|
+
attr_accessor :commands
|
20
|
+
|
21
|
+
# Get/Set the Proc to use for printing by default by all Pry
|
22
|
+
# instances.
|
23
|
+
# This is the 'print' component of the REPL.
|
24
|
+
# @return [Proc] The Proc to use for printing by default by all
|
25
|
+
# Pry instances.
|
26
|
+
attr_accessor :print
|
27
|
+
|
28
|
+
# @return [Proc] The Proc to use for printing exceptions by default by all
|
29
|
+
# Pry instances.
|
30
|
+
attr_accessor :exception_handler
|
31
|
+
|
32
|
+
# Get/Set the Hash that defines Pry hooks used by default by all Pry
|
33
|
+
# instances.
|
34
|
+
# @return [Hash] The hooks used by default by all Pry instances.
|
35
|
+
# @example
|
36
|
+
# Pry.hooks :before_session => proc { puts "hello" },
|
37
|
+
# :after_session => proc { puts "goodbye" }
|
38
|
+
attr_accessor :hooks
|
39
|
+
|
40
|
+
# Get the array of Procs to be used for the prompts by default by
|
41
|
+
# all Pry instances.
|
42
|
+
# @return [Array<Proc>] The array of Procs to be used for the
|
43
|
+
# prompts by default by all Pry instances.
|
44
|
+
attr_accessor :prompt
|
45
|
+
|
46
|
+
# The default editor to use. Defaults to $EDITOR or nano if
|
47
|
+
# $EDITOR is not defined.
|
48
|
+
# If `editor` is a String then that string is used as the shell
|
49
|
+
# command to invoke the editor. If `editor` is callable (e.g a
|
50
|
+
# Proc) then `file` and `line` are passed in as parameters and the
|
51
|
+
# return value of that callable invocation is used as the exact
|
52
|
+
# shell command to invoke the editor.
|
53
|
+
# @example String
|
54
|
+
# Pry.editor = "emacsclient"
|
55
|
+
# @example Callable
|
56
|
+
# Pry.editor = proc { |file, line| "emacsclient #{file} +#{line}" }
|
57
|
+
# @return [String, #call]
|
58
|
+
attr_accessor :editor
|
59
|
+
|
60
|
+
# @return [Boolean] Toggle Pry color on and off.
|
61
|
+
attr_accessor :color
|
62
|
+
|
63
|
+
# @return [Boolean] Toggle paging on and off.
|
64
|
+
attr_accessor :pager
|
65
|
+
|
66
|
+
# Determines whether the rc file (~/.pryrc) should be loaded.
|
67
|
+
# @return [Boolean]
|
68
|
+
attr_accessor :should_load_rc
|
69
|
+
|
70
|
+
# Determines whether plugins should be loaded.
|
71
|
+
# @return [Boolean]
|
72
|
+
attr_accessor :should_load_plugins
|
73
|
+
|
74
|
+
# Config option for history.
|
75
|
+
# sub-options include hist.file, hist.load, and hist.save
|
76
|
+
# hist.file is the file to save/load history too, e.g
|
77
|
+
# Pry.config.history.file = "~/.pry_history".
|
78
|
+
# hist.should_load is a boolean that determines whether history will be
|
79
|
+
# loaded from hist.file at session start.
|
80
|
+
# hist.should_save is a boolean that determines whether history will be
|
81
|
+
# saved to hist.file at session end.
|
82
|
+
# @return [OpenStruct]
|
83
|
+
attr_accessor :history
|
84
|
+
|
85
|
+
# Config option for plugins:
|
86
|
+
# sub-options include:
|
87
|
+
# `plugins.enabled` (Boolean) to toggle the loading of plugins on and off wholesale. (defaults to true)
|
88
|
+
# `plugins.strict_loading` (Boolean) which toggles whether referring to a non-existent plugin should raise an exception (defaults to `false`)
|
89
|
+
# @return [OpenStruct]
|
90
|
+
attr_accessor :plugins
|
91
|
+
|
92
|
+
# @return [Integer] Amount of results that will be stored into out
|
93
|
+
attr_accessor :memory_size
|
94
|
+
|
95
|
+
# @return [Boolean] Whether or not evalation results (`=>`) are sent
|
96
|
+
# through a pager.
|
97
|
+
attr_accessor :result_pager
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
@@ -0,0 +1,37 @@
|
|
1
|
+
class Pry
|
2
|
+
module DefaultCommands
|
3
|
+
|
4
|
+
Basic = Pry::CommandSet.new do
|
5
|
+
command "toggle-color", "Toggle syntax highlighting." do
|
6
|
+
Pry.color = !Pry.color
|
7
|
+
output.puts "Syntax highlighting #{Pry.color ? "on" : "off"}"
|
8
|
+
end
|
9
|
+
|
10
|
+
command "simple-prompt", "Toggle the simple prompt." do
|
11
|
+
case Pry.active_instance.prompt
|
12
|
+
when Pry::SIMPLE_PROMPT
|
13
|
+
Pry.active_instance.pop_prompt
|
14
|
+
else
|
15
|
+
Pry.active_instance.push_prompt Pry::SIMPLE_PROMPT
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
command "version", "Show Pry version." do
|
20
|
+
output.puts "Pry version: #{Pry::VERSION} on Ruby #{RUBY_VERSION}."
|
21
|
+
end
|
22
|
+
|
23
|
+
command "import", "Import a command set" do |command_set_name|
|
24
|
+
next output.puts "Provide a command set name" if command_set.nil?
|
25
|
+
|
26
|
+
set = target.eval(arg_string)
|
27
|
+
Pry.active_instance.commands.import set
|
28
|
+
end
|
29
|
+
|
30
|
+
command "reset", "Reset the REPL to a clean state." do
|
31
|
+
output.puts "Pry reset."
|
32
|
+
exec "pry"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -3,23 +3,25 @@ require "pry/default_commands/ls"
|
|
3
3
|
class Pry
|
4
4
|
module DefaultCommands
|
5
5
|
|
6
|
-
Context = Pry::CommandSet.new
|
6
|
+
Context = Pry::CommandSet.new do
|
7
7
|
import Ls
|
8
8
|
|
9
9
|
command "cd", "Start a Pry session on VAR (use `cd ..` to go back and `cd /` to return to Pry top-level)", :keep_retval => true do |obj|
|
10
|
-
|
10
|
+
case obj
|
11
|
+
when nil
|
11
12
|
output.puts "Must provide an object."
|
12
13
|
next
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
if obj == "/"
|
14
|
+
when ".."
|
15
|
+
throw(:breakout, opts[:nesting].level)
|
16
|
+
when "/"
|
18
17
|
throw(:breakout, 1) if opts[:nesting].level > 0
|
19
18
|
next
|
19
|
+
when "::"
|
20
|
+
TOPLEVEL_BINDING.pry
|
21
|
+
next
|
22
|
+
else
|
23
|
+
Pry.start target.eval(arg_string)
|
20
24
|
end
|
21
|
-
|
22
|
-
Pry.start target.eval("#{obj}")
|
23
25
|
end
|
24
26
|
|
25
27
|
command "nesting", "Show nesting information." do
|
@@ -52,21 +54,20 @@ class Pry
|
|
52
54
|
end
|
53
55
|
|
54
56
|
command "exit", "End the current Pry session. Accepts optional return value. Aliases: quit, back" do
|
55
|
-
|
56
|
-
throw(:breakout, [opts[:nesting].level, target.eval(str)])
|
57
|
+
throw(:breakout, [opts[:nesting].level, target.eval(arg_string)])
|
57
58
|
end
|
58
59
|
|
59
60
|
alias_command "quit", "exit", ""
|
60
61
|
alias_command "back", "exit", ""
|
61
62
|
|
62
63
|
command "exit-all", "End all nested Pry sessions. Accepts optional return value. Aliases: !!@" do
|
63
|
-
|
64
|
-
throw(:breakout, [0, target.eval(str)])
|
64
|
+
throw(:breakout, [0, target.eval(arg_string)])
|
65
65
|
end
|
66
66
|
|
67
67
|
alias_command "!!@", "exit-all", ""
|
68
68
|
|
69
69
|
command "exit-program", "End the current program. Aliases: quit-program, !!!" do
|
70
|
+
Pry.active_instance.save_history if Pry.config.history.should_save
|
70
71
|
exit
|
71
72
|
end
|
72
73
|
|
@@ -74,7 +75,7 @@ class Pry
|
|
74
75
|
alias_command "!!!", "exit-program", ""
|
75
76
|
|
76
77
|
command "!pry", "Start a Pry session on current self; this even works mid-expression." do
|
77
|
-
|
78
|
+
target.pry
|
78
79
|
end
|
79
80
|
|
80
81
|
command "whereami", "Show the code context for the session. (whereami <n> shows <n> extra lines of code around the invocation line. Default: 5)" do |num|
|
@@ -97,7 +98,7 @@ class Pry
|
|
97
98
|
end
|
98
99
|
|
99
100
|
set_file_and_dir_locals(file)
|
100
|
-
output.puts "\n#{bold('From:')} #{file} @ line #{line_num} in #{klass}##{meth_name}:\n\n"
|
101
|
+
output.puts "\n#{text.bold('From:')} #{file} @ line #{line_num} in #{klass}##{meth_name}:\n\n"
|
101
102
|
|
102
103
|
# This method inspired by http://rubygems.org/gems/ir_b
|
103
104
|
File.open(file).each_with_index do |line, index|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class Pry
|
2
2
|
module DefaultCommands
|
3
3
|
|
4
|
-
Documentation = Pry::CommandSet.new
|
4
|
+
Documentation = Pry::CommandSet.new do
|
5
5
|
|
6
6
|
command "ri", "View ri documentation. e.g `ri Array#each`" do |*args|
|
7
7
|
run ".ri", *args
|
@@ -10,20 +10,19 @@ class Pry
|
|
10
10
|
command "show-doc", "Show the comments above METH. Type `show-doc --help` for more info. Aliases: \?" do |*args|
|
11
11
|
target = target()
|
12
12
|
|
13
|
-
opts = Slop.parse!(args) do |
|
14
|
-
|
15
|
-
Show the comments above method METH. Tries instance methods first and then methods by default
|
16
|
-
e.g show-doc hello_method
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
opts.on :c, :context, "Select object context to run under.", true do |context|
|
13
|
+
opts = Slop.parse!(args) do |opt|
|
14
|
+
opt.banner = "Usage: show-doc [OPTIONS] [METH]\n" \
|
15
|
+
"Show the comments above method METH. Tries instance methods first and then methods by default.\n" \
|
16
|
+
"e.g show-doc hello_method"
|
17
|
+
|
18
|
+
opt.on :M, "instance-methods", "Operate on instance methods."
|
19
|
+
opt.on :m, :methods, "Operate on methods."
|
20
|
+
opt.on :c, :context, "Select object context to run under.", true do |context|
|
22
21
|
target = Pry.binding_for(target.eval(context))
|
23
22
|
end
|
24
|
-
|
25
|
-
|
26
|
-
output.puts
|
23
|
+
opt.on :f, :flood, "Do not use a pager to view text longer than one screen."
|
24
|
+
opt.on :h, :help, "This message." do
|
25
|
+
output.puts opt
|
27
26
|
end
|
28
27
|
end
|
29
28
|
|
@@ -41,29 +40,31 @@ e.g show-doc hello_method
|
|
41
40
|
next output.puts("No documentation found.") if doc.empty?
|
42
41
|
doc = process_comment_markup(doc, code_type)
|
43
42
|
output.puts make_header(meth, code_type, doc)
|
43
|
+
if meth.respond_to?(:parameters)
|
44
|
+
output.puts "#{text.bold("signature")}: #{signature_for(meth)}"
|
45
|
+
output.puts
|
46
|
+
end
|
44
47
|
render_output(opts.flood?, false, doc)
|
45
48
|
doc
|
46
49
|
end
|
47
50
|
|
48
51
|
alias_command "?", "show-doc", ""
|
49
52
|
|
50
|
-
|
51
53
|
command "stat", "View method information and set _file_ and _dir_ locals. Type `stat --help` for more info." do |*args|
|
52
54
|
target = target()
|
53
55
|
|
54
|
-
opts = Slop.parse!(args) do |
|
55
|
-
|
56
|
-
Show method information for method METH and set _file_ and _dir_ locals.
|
57
|
-
e.g: stat hello_method
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
opts.on :c, :context, "Select object context to run under.", true do |context|
|
56
|
+
opts = Slop.parse!(args) do |opt|
|
57
|
+
opt.banner "Usage: stat [OPTIONS] [METH]\n" \
|
58
|
+
"Show method information for method METH and set _file_ and _dir_ locals." \
|
59
|
+
"e.g: stat hello_method"
|
60
|
+
|
61
|
+
opt.on :M, "instance-methods", "Operate on instance methods."
|
62
|
+
opt.on :m, :methods, "Operate on methods."
|
63
|
+
opt.on :c, :context, "Select object context to run under.", true do |context|
|
63
64
|
target = Pry.binding_for(target.eval(context))
|
64
65
|
end
|
65
|
-
|
66
|
-
output.puts
|
66
|
+
opt.on :h, :help, "This message" do
|
67
|
+
output.puts opt
|
67
68
|
end
|
68
69
|
end
|
69
70
|
|
@@ -75,41 +76,40 @@ e.g: stat hello_method
|
|
75
76
|
next
|
76
77
|
end
|
77
78
|
|
78
|
-
|
79
|
-
|
80
|
-
|
79
|
+
if !is_a_c_method?(meth) && !is_a_dynamically_defined_method?(meth)
|
80
|
+
set_file_and_dir_locals(path_line_for(meth).first)
|
81
|
+
end
|
81
82
|
|
82
|
-
output.puts
|
83
|
-
output.puts
|
84
|
-
output.puts
|
85
|
-
output.puts
|
86
|
-
output.puts
|
87
|
-
output.puts
|
83
|
+
output.puts "Method Information:"
|
84
|
+
output.puts "--"
|
85
|
+
output.puts "Name: " + meth_name
|
86
|
+
output.puts "Owner: " + (meth.owner.to_s ? meth.owner.to_s : "Unknown")
|
87
|
+
output.puts "Type: " + (meth.is_a?(Method) ? "Bound" : "Unbound")
|
88
|
+
output.puts "Arity: " + meth.arity.to_s
|
88
89
|
|
89
|
-
name_map = { :req => "Required:", :opt => "Optional:", :rest => "Rest:" }
|
90
90
|
if meth.respond_to?(:parameters)
|
91
|
-
output.puts
|
92
|
-
map { |k, v| "#{name_map[k]} #{v.map { |kk, vv| vv ? vv.to_s : "noname" }.join(", ")}" }.join(". ")
|
91
|
+
output.puts "Method Signature: " + signature_for(meth)
|
93
92
|
end
|
94
|
-
|
93
|
+
|
95
94
|
end
|
96
95
|
|
97
96
|
command "gist-method", "Gist a method to github. Type `gist-method --help` for more info.", :requires_gem => "gist" do |*args|
|
97
|
+
require 'gist'
|
98
|
+
|
98
99
|
target = target()
|
99
100
|
|
100
|
-
opts = Slop.parse!(args) do |
|
101
|
-
|
102
|
-
Gist the method (doc or source) to github
|
103
|
-
Ensure the `gist` gem is properly working before use. http://github.com/defunkt/gist for instructions
|
104
|
-
e.g: gist -m my_method
|
105
|
-
e.g: gist -d my_method
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
output.puts opts
|
101
|
+
opts = Slop.parse!(args) do |opt|
|
102
|
+
opt.banner "Usage: gist-method [OPTIONS] [METH]\n" \
|
103
|
+
"Gist the method (doc or source) to github.\n" \
|
104
|
+
"Ensure the `gist` gem is properly working before use. http://github.com/defunkt/gist for instructions.\n" \
|
105
|
+
"e.g: gist -m my_method\n" \
|
106
|
+
"e.g: gist -d my_method\n"
|
107
|
+
|
108
|
+
opt.on :m, :method, "Gist a method's source."
|
109
|
+
opt.on :d, :doc, "Gist a method's documentation."
|
110
|
+
opt.on :p, :private, "Create a private gist (default: true)", :default => true
|
111
|
+
opt.on :h, :help, "This message" do
|
112
|
+
output.puts opt
|
113
113
|
end
|
114
114
|
end
|
115
115
|
|
@@ -128,14 +128,33 @@ e.g: gist -d my_method
|
|
128
128
|
content, code_type = code_and_code_type_for(meth)
|
129
129
|
else
|
130
130
|
content, code_type = doc_and_code_type_for(meth)
|
131
|
-
no_color do
|
131
|
+
text.no_color do
|
132
132
|
content = process_comment_markup(content, code_type)
|
133
133
|
end
|
134
134
|
code_type = :plain
|
135
135
|
end
|
136
136
|
|
137
|
-
|
138
|
-
|
137
|
+
link = Gist.write([:extension => ".#{type_map[code_type]}",
|
138
|
+
:input => content],
|
139
|
+
opts.p?)
|
140
|
+
|
141
|
+
output.puts "Gist created at #{link}"
|
142
|
+
end
|
143
|
+
|
144
|
+
helpers do
|
145
|
+
def signature_for(meth)
|
146
|
+
param_strings = []
|
147
|
+
meth.parameters.each do |kind, name|
|
148
|
+
case kind
|
149
|
+
when :req
|
150
|
+
param_strings << name
|
151
|
+
when :opt
|
152
|
+
param_strings << "#{name}=?"
|
153
|
+
when :rest
|
154
|
+
param_strings << "*#{name}"
|
155
|
+
end
|
156
|
+
end
|
157
|
+
"#{meth.name}(#{param_strings.join(", ")})"
|
139
158
|
end
|
140
159
|
end
|
141
160
|
|