pry 0.9.6-i386-mingw32 → 0.9.6.1-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/.travis.yml +16 -0
- data/README.markdown +2 -1
- data/Rakefile +9 -4
- data/lib/pry.rb +3 -0
- data/lib/pry/command_context.rb +1 -0
- data/lib/pry/command_set.rb +2 -0
- data/lib/pry/default_commands/basic.rb +5 -7
- data/lib/pry/default_commands/context.rb +5 -2
- data/lib/pry/default_commands/documentation.rb +28 -79
- data/lib/pry/default_commands/input.rb +3 -7
- data/lib/pry/default_commands/introspection.rb +33 -42
- data/lib/pry/default_commands/shell.rb +2 -2
- data/lib/pry/extended_commands/experimental.rb +2 -6
- data/lib/pry/helpers/base_helpers.rb +1 -1
- data/lib/pry/helpers/command_helpers.rb +11 -247
- data/lib/pry/method.rb +184 -0
- data/lib/pry/rbx_method.rb +20 -0
- data/lib/pry/rbx_path.rb +34 -0
- data/lib/pry/version.rb +1 -1
- data/pry.gemspec +7 -4
- data/test/helper.rb +1 -0
- data/test/test_command_helpers.rb +1 -69
- data/test/test_command_set.rb +29 -28
- data/test/test_default_commands/test_introspection.rb +5 -0
- data/test/test_method.rb +72 -0
- data/test/test_pry.rb +9 -9
- data/test/test_pry_output.rb +2 -1
- metadata +33 -16
data/.travis.yml
ADDED
data/README.markdown
CHANGED
@@ -1,7 +1,8 @@
|
|
1
|
+
[](http://travis-ci.org/pry/pry)
|
1
2
|
<center>
|
2
3
|

|
3
4
|
|
4
|
-
(C) John Mair (banisterfiend) 2011
|
5
|
+
(C) John Mair (banisterfiend) 2011<br>
|
5
6
|
|
6
7
|
|
7
8
|
**Please** [DONATE](http://www.pledgie.com/campaigns/15899) to the Pry project - Pry was a **huge** amount of work and every donation received is encouraging and supports Pry's continued development!
|
data/Rakefile
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'rake/clean'
|
2
|
-
require
|
2
|
+
require "rubygems"
|
3
|
+
require "rubygems/package_task"
|
3
4
|
|
4
5
|
$:.unshift 'lib'
|
5
6
|
require 'pry/version'
|
@@ -26,8 +27,12 @@ def apply_spec_defaults(s)
|
|
26
27
|
s.add_dependency("method_source",">=0.6.5")
|
27
28
|
s.add_development_dependency("bacon",">=1.1.0")
|
28
29
|
s.add_development_dependency("open4", "~>1.0.1")
|
30
|
+
s.add_development_dependency("rake", "~>0.9")
|
29
31
|
end
|
30
32
|
|
33
|
+
desc "Set up and run tests"
|
34
|
+
task :default => [:test]
|
35
|
+
|
31
36
|
desc "Run tests"
|
32
37
|
task :test do
|
33
38
|
sh "bacon -Itest -rubygems -a -q"
|
@@ -49,7 +54,7 @@ namespace :ruby do
|
|
49
54
|
s.platform = Gem::Platform::RUBY
|
50
55
|
end
|
51
56
|
|
52
|
-
|
57
|
+
Gem::PackageTask.new(spec) do |pkg|
|
53
58
|
pkg.need_zip = false
|
54
59
|
pkg.need_tar = false
|
55
60
|
end
|
@@ -69,7 +74,7 @@ namespace :jruby do
|
|
69
74
|
s.platform = "java"
|
70
75
|
end
|
71
76
|
|
72
|
-
|
77
|
+
Gem::PackageTask.new(spec) do |pkg|
|
73
78
|
pkg.need_zip = false
|
74
79
|
pkg.need_tar = false
|
75
80
|
end
|
@@ -84,7 +89,7 @@ end
|
|
84
89
|
s.platform = "i386-#{v}"
|
85
90
|
end
|
86
91
|
|
87
|
-
|
92
|
+
Gem::PackageTask.new(spec) do |pkg|
|
88
93
|
pkg.need_zip = false
|
89
94
|
pkg.need_tar = false
|
90
95
|
end
|
data/lib/pry.rb
CHANGED
@@ -173,6 +173,9 @@ if RUBY_PLATFORM =~ /mswin/ || RUBY_PLATFORM =~ /mingw/
|
|
173
173
|
end
|
174
174
|
|
175
175
|
require "pry/version"
|
176
|
+
require "pry/rbx_method"
|
177
|
+
require "pry/rbx_path"
|
178
|
+
require "pry/method"
|
176
179
|
require "pry/history_array"
|
177
180
|
require "pry/helpers"
|
178
181
|
require "pry/history"
|
data/lib/pry/command_context.rb
CHANGED
data/lib/pry/command_set.rb
CHANGED
@@ -28,17 +28,15 @@ class Pry
|
|
28
28
|
end
|
29
29
|
|
30
30
|
command "reload-method", "Reload the source file that contains the specified method" do |meth_name|
|
31
|
-
|
32
|
-
|
33
|
-
next
|
34
|
-
end
|
31
|
+
meth = get_method_or_print_error(meth_name, target, {}, :omit_help)
|
32
|
+
next unless meth
|
35
33
|
|
36
|
-
if
|
34
|
+
if meth.source_type == :c
|
37
35
|
output.puts "Error: Can't reload a C method."
|
38
|
-
elsif
|
36
|
+
elsif meth.dynamically_defined?
|
39
37
|
output.puts "Error: Can't reload an eval method."
|
40
38
|
else
|
41
|
-
file_name = meth.
|
39
|
+
file_name = meth.source_file
|
42
40
|
load file_name
|
43
41
|
output.puts "Reloaded #{file_name}."
|
44
42
|
end
|
@@ -136,8 +136,11 @@ class Pry
|
|
136
136
|
i_num = 5
|
137
137
|
end
|
138
138
|
|
139
|
-
|
140
|
-
|
139
|
+
if (meth = Pry::Method.from_binding(target))
|
140
|
+
meth_name = meth.name
|
141
|
+
else
|
142
|
+
meth_name = "N/A"
|
143
|
+
end
|
141
144
|
|
142
145
|
if file =~ /(\(.*\))|<.*>/ || file == "" || file == "-e"
|
143
146
|
output.puts "Cannot find local context. Did you use `binding.pry` ?"
|
@@ -32,20 +32,15 @@ class Pry
|
|
32
32
|
|
33
33
|
args = [nil] if args.empty?
|
34
34
|
args.each do |method_name|
|
35
|
-
|
36
|
-
|
37
|
-
output.puts "Invalid method name: #{meth_name}. Type `show-doc --help` for help"
|
38
|
-
next
|
39
|
-
end
|
35
|
+
meth = get_method_or_print_error(method_name, target, opts.to_hash(true))
|
36
|
+
next unless meth
|
40
37
|
|
41
|
-
|
42
|
-
next if !doc
|
38
|
+
next output.puts("No documentation found.") if meth.doc.nil? || meth.doc.empty?
|
43
39
|
|
44
|
-
|
45
|
-
|
46
|
-
output.puts
|
47
|
-
output.puts "#{text.bold("
|
48
|
-
output.puts "#{text.bold("signature: ")} #{signature_for(meth)}"
|
40
|
+
doc = process_comment_markup(meth.doc, meth.source_type)
|
41
|
+
output.puts make_header(meth, doc)
|
42
|
+
output.puts "#{text.bold("visibility: ")} #{meth.visibility}"
|
43
|
+
output.puts "#{text.bold("signature: ")} #{meth.signature}"
|
49
44
|
output.puts
|
50
45
|
render_output(opts.flood?, false, doc)
|
51
46
|
doc
|
@@ -76,26 +71,20 @@ class Pry
|
|
76
71
|
|
77
72
|
next if opts.help?
|
78
73
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
output.puts "Visibility: " + method_visibility(meth).to_s
|
94
|
-
output.puts "Type: " + (meth.is_a?(Method) ? "Bound" : "Unbound")
|
95
|
-
output.puts "Arity: " + meth.arity.to_s
|
96
|
-
output.puts "Method Signature: " + signature_for(meth)
|
97
|
-
|
98
|
-
output.puts "Source location: " + (meth.source_location ? meth.source_location.join(":") : "Not found.")
|
74
|
+
meth = get_method_or_print_error(args.shift, target, opts.to_hash(true))
|
75
|
+
next unless meth
|
76
|
+
|
77
|
+
output.puts unindent <<-EOS
|
78
|
+
Method Information:
|
79
|
+
--
|
80
|
+
Name: #{meth.name}
|
81
|
+
Owner: #{meth.owner ? meth.owner : "Unknown"}
|
82
|
+
Visibility: #{meth.visibility}
|
83
|
+
Type: #{meth.is_a?(Method) ? "Bound" : "Unbound"}
|
84
|
+
Arity: #{meth.arity}
|
85
|
+
Method Signature: #{meth.signature}
|
86
|
+
Source Location: #{meth.source_location ? meth.source_location.join(":") : "Not found."}
|
87
|
+
EOS
|
99
88
|
end
|
100
89
|
|
101
90
|
command "gist-method", "Gist a method to github. Type `gist-method --help` for more info.", :requires_gem => "gist" do |*args|
|
@@ -122,19 +111,17 @@ class Pry
|
|
122
111
|
|
123
112
|
next if opts.help?
|
124
113
|
|
125
|
-
|
126
|
-
|
127
|
-
meth_name = args.shift
|
128
|
-
if (meth = get_method_object(meth_name, target, opts.to_hash(true))).nil?
|
129
|
-
output.puts "Invalid method name: #{meth_name}. Type `gist-method --help` for help"
|
130
|
-
next
|
131
|
-
end
|
114
|
+
meth = get_method_or_print_error(args.shift, target, opts.to_hash(true))
|
115
|
+
next unless meth
|
132
116
|
|
133
117
|
type_map = { :ruby => "rb", :c => "c", :plain => "plain" }
|
134
118
|
if !opts.doc?
|
135
|
-
content
|
119
|
+
content = meth.source
|
120
|
+
code_type = meth.source_type
|
136
121
|
else
|
137
|
-
content
|
122
|
+
content = meth.doc
|
123
|
+
code_type = meth.source_type
|
124
|
+
|
138
125
|
text.no_color do
|
139
126
|
content = process_comment_markup(content, code_type)
|
140
127
|
end
|
@@ -147,44 +134,6 @@ class Pry
|
|
147
134
|
|
148
135
|
output.puts "Gist created at #{link}"
|
149
136
|
end
|
150
|
-
|
151
|
-
helpers do
|
152
|
-
|
153
|
-
# paraphrased from awesome_print gem
|
154
|
-
def signature_for(method)
|
155
|
-
if method.respond_to?(:parameters)
|
156
|
-
|
157
|
-
args = method.parameters.inject([]) do |arr, (type, name)|
|
158
|
-
name ||= (type == :block ? 'block' : "arg#{arr.size + 1}")
|
159
|
-
arr << case type
|
160
|
-
when :req then name.to_s
|
161
|
-
when :opt, :rest then "*#{name}"
|
162
|
-
when :block then "&#{name}"
|
163
|
-
else '?'
|
164
|
-
end
|
165
|
-
end
|
166
|
-
else
|
167
|
-
args = (1..method.arity.abs).map { |i| "arg#{i}" }
|
168
|
-
args[-1] = "*#{args[-1]}" if method.arity < 0
|
169
|
-
end
|
170
|
-
|
171
|
-
"#{method.name}(#{args.join(', ')})"
|
172
|
-
end
|
173
|
-
|
174
|
-
def method_visibility(meth)
|
175
|
-
if meth.owner.public_instance_methods.include? meth.name
|
176
|
-
:public
|
177
|
-
elsif meth.owner.protected_instance_methods.include? meth.name
|
178
|
-
:protected
|
179
|
-
elsif meth.owner.private_instance_methods.include? meth.name
|
180
|
-
:private
|
181
|
-
else
|
182
|
-
:none
|
183
|
-
end
|
184
|
-
end
|
185
|
-
end
|
186
|
-
|
187
137
|
end
|
188
|
-
|
189
138
|
end
|
190
139
|
end
|
@@ -77,17 +77,13 @@ class Pry
|
|
77
77
|
|
78
78
|
if opts.m?
|
79
79
|
meth_name = opts[:m]
|
80
|
-
|
81
|
-
|
82
|
-
next
|
83
|
-
end
|
84
|
-
code, _ = code_and_code_type_for(meth)
|
85
|
-
next if !code
|
80
|
+
meth = get_method_or_print_error(meth_name, target, {}, :omit_help)
|
81
|
+
next unless meth and meth.source
|
86
82
|
|
87
83
|
range = opts.l? ? one_index_range_or_number(opts[:l]) : (0..-1)
|
88
84
|
range = (0..-2) if opts.o?
|
89
85
|
|
90
|
-
eval_string << Array(
|
86
|
+
eval_string << Array(meth.source.each_line.to_a[range]).join
|
91
87
|
elsif opts.f?
|
92
88
|
file_name = File.expand_path(opts[:f])
|
93
89
|
next output.puts "No such file: #{opts[:f]}" if !File.exists?(file_name)
|
@@ -28,33 +28,28 @@ class Pry
|
|
28
28
|
output.puts opt
|
29
29
|
end
|
30
30
|
end
|
31
|
-
|
32
31
|
next if opts.help?
|
32
|
+
opts[:instance] = opts['instance-methods'] if opts.m?
|
33
33
|
|
34
34
|
args = [nil] if args.empty?
|
35
35
|
args.each do |method_name|
|
36
|
-
|
37
|
-
|
38
|
-
output.puts "Invalid method name: #{meth_name}. Type `show-method --help` for help"
|
39
|
-
next
|
40
|
-
end
|
41
|
-
|
42
|
-
code, code_type = code_and_code_type_for(meth)
|
43
|
-
next if !code
|
36
|
+
meth = get_method_or_print_error(method_name, target, opts.to_hash(true))
|
37
|
+
next unless meth and meth.source
|
44
38
|
|
45
|
-
output.puts make_header(meth
|
39
|
+
output.puts make_header(meth)
|
46
40
|
if Pry.color
|
47
|
-
code = CodeRay.scan(
|
41
|
+
code = CodeRay.scan(meth.source, meth.source_type).term
|
42
|
+
else
|
43
|
+
code = meth.source
|
48
44
|
end
|
49
45
|
|
50
46
|
start_line = false
|
51
|
-
if opts.
|
52
|
-
start_line =
|
47
|
+
if opts.b?
|
48
|
+
start_line = 1
|
49
|
+
elsif opts.l?
|
50
|
+
start_line = meth.source_line || 1
|
53
51
|
end
|
54
52
|
|
55
|
-
start_line = opts.b? ? 1 : start_line
|
56
|
-
|
57
|
-
|
58
53
|
render_output(opts.flood?, start_line, code)
|
59
54
|
code
|
60
55
|
end
|
@@ -89,23 +84,25 @@ class Pry
|
|
89
84
|
end
|
90
85
|
|
91
86
|
if find_command(command_name)
|
92
|
-
block = find_command(command_name).block
|
87
|
+
block = Pry::Method.new(find_command(command_name).block)
|
93
88
|
|
94
|
-
|
95
|
-
|
89
|
+
next unless block.source
|
90
|
+
set_file_and_dir_locals(block.source_file)
|
96
91
|
|
97
|
-
output.puts make_header(block
|
92
|
+
output.puts make_header(block)
|
98
93
|
|
99
94
|
if Pry.color
|
100
|
-
code = CodeRay.scan(
|
95
|
+
code = CodeRay.scan(block.source, :ruby).term
|
96
|
+
else
|
97
|
+
code = block.source
|
101
98
|
end
|
102
99
|
|
103
100
|
start_line = false
|
104
101
|
if opts.l?
|
105
|
-
start_line = block.
|
102
|
+
start_line = block.source_line || 1
|
106
103
|
end
|
107
104
|
|
108
|
-
render_output(opts.flood?, opts.l? ? block.
|
105
|
+
render_output(opts.flood?, opts.l? ? block.source_line : false, code)
|
109
106
|
code
|
110
107
|
else
|
111
108
|
output.puts "No such command: #{command_name}."
|
@@ -115,13 +112,14 @@ class Pry
|
|
115
112
|
command "edit", "Invoke the default editor on a file. Type `edit --help` for more info" do |*args|
|
116
113
|
opts = Slop.parse!(args) do |opt|
|
117
114
|
opt.banner unindent <<-USAGE
|
118
|
-
Usage: edit [--no-reload|--reload] [--line LINE] [--temp|--ex|FILE[:LINE]]
|
115
|
+
Usage: edit [--no-reload|--reload] [--line LINE] [--temp|--ex|FILE[:LINE]|--in N]
|
119
116
|
Open a text editor. When no FILE is given, edits the pry input buffer.
|
120
117
|
Ensure #{text.bold("Pry.config.editor")} is set to your editor of choice.
|
121
118
|
e.g: edit sample.rb
|
122
119
|
USAGE
|
123
120
|
|
124
121
|
opt.on :e, :ex, "Open the file that raised the most recent exception (_ex_.file)", :optional => true, :as => Integer
|
122
|
+
opt.on :i, :in, "Open a temporary file containing the specified line of _in_.", :optional => true, :as => Integer
|
125
123
|
opt.on :t, :temp, "Open an empty temporary file"
|
126
124
|
opt.on :l, :line, "Jump to this line in the opened file", true, :as => Integer
|
127
125
|
opt.on :n, :"no-reload", "Don't automatically reload the edited code"
|
@@ -141,6 +139,8 @@ class Pry
|
|
141
139
|
|
142
140
|
content = if opts.t?
|
143
141
|
""
|
142
|
+
elsif opts.i?
|
143
|
+
_pry_.input_array[opts[:i] || -1] || ""
|
144
144
|
elsif eval_string.strip != ""
|
145
145
|
eval_string
|
146
146
|
else
|
@@ -168,8 +168,8 @@ class Pry
|
|
168
168
|
bt_index = opts[:ex].to_i
|
169
169
|
|
170
170
|
ex_file, ex_line = ex.bt_source_location_for(bt_index)
|
171
|
-
if ex_file &&
|
172
|
-
file_name =
|
171
|
+
if ex_file && RbxPath.is_core_path?(ex_file)
|
172
|
+
file_name = RbxPath.convert_path_to_full(ex_file)
|
173
173
|
else
|
174
174
|
file_name = ex_file
|
175
175
|
end
|
@@ -221,7 +221,6 @@ class Pry
|
|
221
221
|
output.puts opt
|
222
222
|
end
|
223
223
|
end
|
224
|
-
|
225
224
|
next if opts.help?
|
226
225
|
|
227
226
|
if !Pry.config.editor
|
@@ -230,21 +229,14 @@ class Pry
|
|
230
229
|
next
|
231
230
|
end
|
232
231
|
|
233
|
-
|
234
|
-
|
235
|
-
meth = get_method_object_from_target(meth_name, target, type)
|
236
|
-
|
237
|
-
if meth.nil?
|
238
|
-
output.puts "Invalid method name: #{meth_name}."
|
239
|
-
next
|
240
|
-
end
|
232
|
+
meth = get_method_or_print_error(args.shift, target, opts.to_hash(true))
|
233
|
+
next unless meth
|
241
234
|
|
242
|
-
if opts.p? ||
|
243
|
-
|
235
|
+
if opts.p? || meth.dynamically_defined?
|
236
|
+
lines = meth.source.lines.to_a
|
244
237
|
|
245
|
-
lines = code.lines.to_a
|
246
238
|
if lines[0] =~ /^def [^( \n]+/
|
247
|
-
lines[0] = "def #{
|
239
|
+
lines[0] = "def #{meth.name}#{$'}"
|
248
240
|
else
|
249
241
|
next output.puts "Error: Pry can only patch methods created with the `def` keyword."
|
250
242
|
end
|
@@ -258,11 +250,10 @@ class Pry
|
|
258
250
|
next
|
259
251
|
end
|
260
252
|
|
261
|
-
if
|
253
|
+
if meth.source_type == :c
|
262
254
|
output.puts "Error: Can't edit a C method."
|
263
255
|
else
|
264
|
-
file, line =
|
265
|
-
set_file_and_dir_locals(file)
|
256
|
+
file, line = meth.source_file, meth.source_line
|
266
257
|
|
267
258
|
invoke_editor(file, opts["no-jump"] ? 0 : line)
|
268
259
|
silence_warnings do
|