pry 0.2.8 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -144,8 +144,8 @@ end.
144
144
  * Pry sessions can nest arbitrarily deeply -- to go back one level of nesting type 'exit' or 'quit' or 'back'
145
145
  * Use `_` to recover last result.
146
146
  * Pry has multi-line support built in.
147
- * Pry has unique commands not found in any other REPL: `show_method`,
148
- `jump_to`, `ls`, `cd`
147
+ * Pry has unique commands not found in any other REPL: `show_method`, `show_doc`
148
+ `jump_to`, `ls`, `cd`, `cat`
149
149
  * Pry gives good control over nested sessions (important when exploring complicated runtime state)
150
150
  * Pry is not based on the IRB codebase.
151
151
  * Pry uses [RubyParser](https://github.com/seattlerb/ruby_parser) to
@@ -202,11 +202,15 @@ If you want to access a method of the same name, prefix the invocation by whites
202
202
  are nested sessions).
203
203
  * `ls` returns a list of local variables and instance variables in the
204
204
  current scope
205
+ * `cat <var>` calls `inspect` on `<var>`
205
206
  * `cd <var>` starts a `Pry` session on the variable <var>. E.g `cd @x`
206
207
  * `show_method <methname>` Displays the sourcecode for the method
207
208
  <methname>. E.g `show_method hello`
208
- * `show_instance_method <methname>` Displays the sourcecode for the
209
- instance method <methname>. E.g `show_instance_method goodbye`
209
+ * `show_imethod <methname>` Displays the sourcecode for the
210
+ instance method <methname>. E.g `show_imethod goodbye`
211
+ * `show_doc <methname>` Displays comments for `<methname>`
212
+ * `show_idoc <methname>` Displays comments for instance
213
+ method `<methname>`
210
214
  * `exit_program` or `quit_program` will end the currently running
211
215
  program.
212
216
  * `nesting` shows Pry nesting information.
data/Rakefile CHANGED
@@ -20,7 +20,7 @@ def apply_spec_defaults(s)
20
20
  s.description = s.summary
21
21
  s.require_path = 'lib'
22
22
  s.add_dependency("ruby_parser",">=2.0.5")
23
- s.add_dependency("method_source",">=0.1.4")
23
+ s.add_dependency("method_source",">=0.2.0")
24
24
  s.homepage = "http://banisterfiend.wordpress.com"
25
25
  s.has_rdoc = 'yard'
26
26
  s.files = Dir["ext/**/extconf.rb", "ext/**/*.h", "ext/**/*.c", "lib/**/*.rb",
data/lib/pry.rb CHANGED
@@ -3,14 +3,13 @@
3
3
 
4
4
  direc = File.dirname(__FILE__)
5
5
 
6
- require 'ruby_parser'
7
- require 'method_source'
6
+ require "method_source"
8
7
  require "#{direc}/pry/version"
9
8
  require "#{direc}/pry/input"
10
9
  require "#{direc}/pry/output"
11
10
 
12
11
  class Pry
13
- def self.start(target)
12
+ def self.start(target=TOPLEVEL_BINDING)
14
13
  new.repl(target)
15
14
  end
16
15
 
@@ -158,18 +157,32 @@ class Pry
158
157
  when "ls"
159
158
  output.ls(target)
160
159
  eval_string.clear
160
+ when /^cat\s+(.+)/
161
+ var = $~.captures.first
162
+ output.cat(target, var)
163
+ eval_string.clear
161
164
  when /^cd\s+(.+)/
162
165
  obj = $~.captures.first
163
166
  target.eval("#{obj}.pry")
164
167
  eval_string.clear
168
+ when /^show_doc\s*(.+)/
169
+ meth_name = ($~.captures).first
170
+ doc = target.eval("method(:#{meth_name})").comment
171
+ output.show_doc doc
172
+ eval_string.clear
173
+ when /^show_idoc\s*(.+)/
174
+ meth_name = ($~.captures).first
175
+ doc = target.eval("instance_method(:#{meth_name})").comment
176
+ output.show_doc doc
177
+ eval_string.clear
165
178
  when /^show_method\s*(.+)/
166
179
  meth_name = ($~.captures).first
167
- code = get_method_source(target, meth_name, :method)
180
+ code = target.eval("method(:#{meth_name})").source
168
181
  output.show_method code
169
182
  eval_string.clear
170
- when /^show_instance_method\s*(.+)/
183
+ when /^show_instance_method\s*(.+)/, /^show_imethod\s*(.+)/
171
184
  meth_name = ($~.captures).first
172
- code = get_method_source(target, meth_name, :instance_method)
185
+ code = target.eval("instance_method(:#{meth_name})").source
173
186
  output.show_method code
174
187
  eval_string.clear
175
188
  when /^jump_to\s*(\d*)/
@@ -190,10 +203,6 @@ class Pry
190
203
  end
191
204
  end
192
205
 
193
- def get_method_source(target, meth_name, kind)
194
- target.eval("#{kind}(:#{meth_name}).source")
195
- end
196
-
197
206
  def prompt(eval_string, target, nest)
198
207
  target_self = target.eval('self')
199
208
 
@@ -212,6 +221,7 @@ class Pry
212
221
  end
213
222
 
214
223
  else
224
+ require 'ruby_parser'
215
225
 
216
226
  def valid_expression?(code)
217
227
  RubyParser.new.parse(code)
@@ -1,79 +1,96 @@
1
1
  class Pry
2
2
  class Output
3
+ attr_reader :out
4
+
5
+ def initialize(out=STDOUT)
6
+ @out = out
7
+ end
8
+
3
9
  def refresh
4
- puts "Refreshed REPL"
10
+ out.puts "Refreshed REPL"
5
11
  end
6
12
 
7
13
  def session_start(obj)
8
- puts "Beginning Pry session for #{Pry.view(obj)}"
14
+ out.puts "Beginning Pry session for #{Pry.view(obj)}"
9
15
  end
10
16
 
11
17
  def session_end(obj)
12
- puts "Ending Pry session for #{Pry.view(obj)}"
18
+ out.puts "Ending Pry session for #{Pry.view(obj)}"
13
19
  end
14
20
 
15
21
  # the print component of READ-EVAL-PRINT-LOOP
16
22
  def print(value)
17
23
  case value
18
24
  when Exception
19
- puts "#{value.class}: #{value.message}"
25
+ out.puts "#{value.class}: #{value.message}"
20
26
  else
21
- puts "=> #{Pry.view(value)}"
27
+ out.puts "=> #{Pry.view(value)}"
22
28
  end
23
29
  end
24
30
 
25
31
  def show_help
26
- puts "Command list:"
27
- puts "--"
28
- puts "help This menu"
29
- puts "status Show status information"
30
- puts "! Refresh the REPL"
31
- puts "nesting Show nesting information"
32
- puts "ls Show the list of variables in the current scope"
33
- puts "cd <var> Start a Pry session on <var> (use `cd ..` to go back)"
34
- puts "show_method <methname> Show the sourcecode for the method <method_name>"
35
- puts "show_instance_method <methname> Show the sourcecode for the instance method <method_name>"
36
- puts "exit/quit/back End the current Pry session"
37
- puts "exit_all End all nested Pry sessions"
38
- puts "exit_program/quit_program End the current program"
39
- puts "jump_to <level> Jump to a Pry session further up the stack, exiting all sessions below"
32
+ out.puts "Command list:"
33
+ out.puts "--"
34
+ out.puts "help This menu"
35
+ out.puts "status Show status information"
36
+ out.puts "! Refresh the REPL"
37
+ out.puts "nesting Show nesting information"
38
+ out.puts "ls Show the list of variables in the current scope"
39
+ out.puts "cat <var> Show output of <var>.inspect"
40
+ out.puts "cd <var> Start a Pry session on <var> (use `cd ..` to go back)"
41
+ out.puts "show_method <methname> Show the sourcecode for the method <methname>"
42
+ out.puts "show_imethod <methname> Show the sourcecode for the instance method <method_name>"
43
+ out.puts "show_doc <methname> Show the comments above <methname>"
44
+ out.puts "show_idoc <methname> Show the comments above instance method <methname>"
45
+ out.puts "exit/quit/back End the current Pry session"
46
+ out.puts "exit_all End all nested Pry sessions"
47
+ out.puts "exit_program/quit_program End the current program"
48
+ out.puts "jump_to <level> Jump to a Pry session further up the stack, exiting all sessions below"
40
49
  end
41
50
 
42
51
  def show_nesting(nesting)
43
- puts "Nesting status:"
44
- puts "--"
52
+ out.puts "Nesting status:"
53
+ out.puts "--"
45
54
  nesting.each do |level, obj|
46
55
  if level == 0
47
- puts "#{level}. #{Pry.view(obj)} (Pry top level)"
56
+ out.puts "#{level}. #{Pry.view(obj)} (Pry top level)"
48
57
  else
49
- puts "#{level}. #{Pry.view(obj)}"
58
+ out.puts "#{level}. #{Pry.view(obj)}"
50
59
  end
51
60
  end
52
61
  end
53
62
 
54
63
  def show_status(nesting, target)
55
- puts "Status:"
56
- puts "--"
57
- puts "Receiver: #{Pry.view(target.eval('self'))}"
58
- puts "Nesting level: #{nesting.level}"
59
- puts "Local variables: #{target.eval('Pry.view(local_variables)')}"
60
- puts "Last result: #{Pry.view(Pry.last_result)}"
64
+ out.puts "Status:"
65
+ out.puts "--"
66
+ out.puts "Receiver: #{Pry.view(target.eval('self'))}"
67
+ out.puts "Nesting level: #{nesting.level}"
68
+ out.puts "Local variables: #{target.eval('Pry.view(local_variables)')}"
69
+ out.puts "Last result: #{Pry.view(Pry.last_result)}"
61
70
  end
62
71
 
63
72
  def ls(target)
64
- puts "#{target.eval('Pry.view(local_variables + instance_variables)')}"
73
+ out.puts "#{target.eval('Pry.view(local_variables + instance_variables)')}"
74
+ end
75
+
76
+ def cat(target, var)
77
+ out.puts target.eval("#{var}.inspect")
65
78
  end
66
79
 
67
80
  def show_method(code)
68
- code.display
81
+ out.puts code
82
+ end
83
+
84
+ def show_doc(doc)
85
+ out.puts doc
69
86
  end
70
87
 
71
88
  def warn_already_at_level(nesting_level)
72
- puts "Already at nesting level #{nesting_level}"
89
+ out.puts "Already at nesting level #{nesting_level}"
73
90
  end
74
91
 
75
92
  def err_invalid_nest_level(nest_level, max_nest_level)
76
- puts "Invalid nest level. Must be between 0 and #{max_nest_level}. Got #{nest_level}."
93
+ out.puts "Invalid nest level. Must be between 0 and #{max_nest_level}. Got #{nest_level}."
77
94
  end
78
95
 
79
96
  def exit() end
@@ -1,3 +1,3 @@
1
1
  class Pry
2
- VERSION = "0.2.8"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pry
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 19
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
- - 2
8
- - 8
9
- version: 0.2.8
8
+ - 3
9
+ - 0
10
+ version: 0.3.0
10
11
  platform: ruby
11
12
  authors:
12
13
  - John Mair (banisterfiend)
@@ -14,7 +15,7 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-12-18 00:00:00 +13:00
18
+ date: 2010-12-19 00:00:00 +13:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
@@ -25,6 +26,7 @@ dependencies:
25
26
  requirements:
26
27
  - - ">="
27
28
  - !ruby/object:Gem::Version
29
+ hash: 5
28
30
  segments:
29
31
  - 2
30
32
  - 0
@@ -40,11 +42,12 @@ dependencies:
40
42
  requirements:
41
43
  - - ">="
42
44
  - !ruby/object:Gem::Version
45
+ hash: 23
43
46
  segments:
44
47
  - 0
45
- - 1
46
- - 4
47
- version: 0.1.4
48
+ - 2
49
+ - 0
50
+ version: 0.2.0
48
51
  type: :runtime
49
52
  version_requirements: *id002
50
53
  description: attach an irb-like session to any object at runtime
@@ -77,6 +80,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
77
80
  requirements:
78
81
  - - ">="
79
82
  - !ruby/object:Gem::Version
83
+ hash: 3
80
84
  segments:
81
85
  - 0
82
86
  version: "0"
@@ -85,6 +89,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
89
  requirements:
86
90
  - - ">="
87
91
  - !ruby/object:Gem::Version
92
+ hash: 3
88
93
  segments:
89
94
  - 0
90
95
  version: "0"