pry 0.2.8 → 0.3.0

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.
@@ -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"