pry 0.8.4pre1-i386-mingw32 → 0.9.0-i386-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
|