pry 0.4.8 → 0.5.0pre2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,13 +1,24 @@
1
1
  direc = File.dirname(__FILE__)
2
2
  require "#{direc}/command_base"
3
+ require "optparse"
3
4
 
4
5
  class Pry
5
6
 
6
7
  # Default commands used by Pry.
7
8
  class Commands < CommandBase
9
+
10
+ # We make this a lambda to avoid documenting it
11
+ meth_name_from_binding = lambda do |b|
12
+ meth_name = b.eval('__method__')
13
+ if [nil, :__binding__, :__binding_impl__].include?(meth_name)
14
+ nil
15
+ else
16
+ meth_name
17
+ end
18
+ end
8
19
 
9
- command "!", "Refresh the REPL" do
10
- output.puts "Refreshed REPL"
20
+ command "!", "Clear the input buffer. Useful if the parsing process goes wrong." do
21
+ output.puts "Input buffer cleared!"
11
22
  opts[:eval_string].clear
12
23
  end
13
24
 
@@ -15,10 +26,12 @@ class Pry
15
26
  Pry.start(target)
16
27
  end
17
28
 
18
- command ["exit_program", "quit_program"], "End the current program." do
29
+ command "exit-program", "End the current program. Aliases: quit-program" do
19
30
  exit
20
31
  end
21
32
 
33
+ alias_command "quit-program", "exit-program", ""
34
+
22
35
  command "nesting", "Show nesting information." do
23
36
  out = output
24
37
  nesting = opts[:nesting]
@@ -27,9 +40,9 @@ class Pry
27
40
  out.puts "--"
28
41
  nesting.each do |level, obj|
29
42
  if level == 0
30
- out.puts "#{level}. #{Pry.view(obj)} (Pry top level)"
43
+ out.puts "#{level}. #{Pry.view_clip(obj)} (Pry top level)"
31
44
  else
32
- out.puts "#{level}. #{Pry.view(obj)}"
45
+ out.puts "#{level}. #{Pry.view_clip(obj)}"
33
46
  end
34
47
  end
35
48
  end
@@ -40,71 +53,282 @@ class Pry
40
53
 
41
54
  out.puts "Status:"
42
55
  out.puts "--"
43
- out.puts "Receiver: #{Pry.view(target.eval('self'))}"
56
+ out.puts "Receiver: #{Pry.view_clip(target.eval('self'))}"
44
57
  out.puts "Nesting level: #{nesting.level}"
45
- out.puts "Local variables: #{Pry.view(target.eval('local_variables'))}"
58
+ out.puts "Pry version: #{Pry::VERSION}"
59
+ out.puts "Ruby version: #{RUBY_VERSION}"
60
+
61
+ mn = meth_name_from_binding.call(target)
62
+ out.puts "Current method: #{mn ? mn : "N/A"}"
46
63
  out.puts "Pry instance: #{Pry.active_instance}"
47
64
  out.puts "Last result: #{Pry.view(Pry.last_result)}"
48
65
  end
49
66
 
50
- command "exit_all", "End all nested Pry sessions." do
67
+ command "version", "Show Pry version." do
68
+ output.puts "Pry version: #{Pry::VERSION}"
69
+ end
70
+
71
+ command "exit-all", "End all nested Pry sessions." do
51
72
  throw(:breakout, 0)
52
73
  end
53
74
 
54
- command "ls", "Show the list of vars in the current scope. Use -c to include constants." do |arg|
55
- with_constants = (arg == "-c")
75
+ command "ls", "Show the list of vars in the current scope. Type `ls --help` for more info." do |*args|
76
+ options = {}
77
+
78
+ # Set target local to the default -- note that we can set a different target for
79
+ # ls if we like: e.g ls my_var
80
+ target = target()
81
+
82
+ OptionParser.new do |opts|
83
+ opts.banner = %{Usage: ls [OPTIONS] [VAR]\n\
84
+ List information about VAR (the current context by default).
85
+ Always shows local and instance variables by default; use -r to restrict to specific types.
86
+ --
87
+ }
88
+
89
+ opts.on("-g", "--globals", "Display global variables.") do |g|
90
+ options[:g] = true
91
+ end
92
+
93
+ opts.on("-c", "--constants", "Display constants.") do |c|
94
+ options[:c] = true
95
+ end
96
+
97
+ opts.on("-l", "--locals", "Display locals.") do |c|
98
+ options[:l] = true
99
+ end
100
+
101
+ opts.on("-i", "--ivars", "Display instance variables.") do |c|
102
+ options[:i] = true
103
+ end
104
+
105
+ opts.on("-k", "--class-vars", "Display class variables.") do |c|
106
+ options[:k] = true
107
+ end
108
+
109
+ opts.on("-m", "--methods", "Display methods.") do |c|
110
+ options[:m] = true
111
+ end
112
+
113
+ opts.on("-M", "--instance-methods", "Display instance methods (only relevant to classes and modules).") do |c|
114
+ options[:M] = true
115
+ end
116
+
117
+ opts.on("-s", "--super", "Include superclass entries (relevant to constant and methods options).") do |c|
118
+ options[:s] = true
119
+ end
120
+
121
+ opts.on("-r", "--restrict", "Restrict to specified types.") do |c|
122
+ options[:r] = true
123
+ end
124
+
125
+ opts.on("-a", "--all", "Display all types of entries.") do |a|
126
+ options[:a] = true
127
+ end
128
+
129
+ opts.on("-v", "--verbose", "Verbose ouput.") do |c|
130
+ options[:v] = true
131
+ end
132
+
133
+ opts.on_tail("-h", "--help", "Show this message.") do
134
+ output.puts opts
135
+ options[:h] = true
136
+ end
137
+ end.order(args) do |new_target|
138
+ target = Pry.binding_for(target.eval("#{new_target}")) if !options[:h]
139
+ end
140
+
141
+ # exit if we've displayed help
142
+ next if options[:h]
143
+
144
+ info = {}
56
145
  target_self = target.eval('self')
57
146
 
58
- case target_self
59
- when Module
60
- c = with_constants ? target_self.constants.inspect : [].inspect
61
- output.puts "#{Pry.view(target.eval("local_variables + instance_variables + #{c}"))}"
147
+ # ensure we have a real boolean and not a `nil` (important when
148
+ # interpolating in the string)
149
+ options[:s] = !!options[:s]
150
+
151
+ # Numbers (e.g 0, 1, 2) are for ordering the hash values in Ruby
152
+ # 1.8
153
+ i = -1
154
+ info["local variables"] = Array(target.eval("local_variables")).sort, i += 1 if !options[:r] || options[:l] || options[:a]
155
+ info["instance variables"] = Array(target.eval("instance_variables")).sort, i += 1 if !options[:r] || options[:i] || options[:a]
156
+ info["class variables"] = (target_self.is_a?(Module) ? Array(target.eval("class_variables")).sort : Array(target.eval("self.class.class_variables")).sort), i += 1 if !options[:r] || options[:k] || options[:a]
157
+
158
+ info["global variables"] = Array(target.eval("global_variables")).sort, i += 1 if options[:g] || options[:a]
159
+
160
+ info["methods"] = Array(target.eval("methods(#{options[:s]}) + public_methods(#{options[:s]}) +\
161
+ protected_methods(#{options[:s]}) +\
162
+ private_methods(#{options[:s]})")).uniq.sort, i += 1 if options[:m] || options[:a]
163
+
164
+ info["instance methods"] = Array(target.eval("instance_methods(#{options[:s]}) +\
165
+ public_instance_methods(#{options[:s]}) +\
166
+ protected_instance_methods(#{options[:s]}) +\
167
+ private_instance_methods(#{options[:s]})")).uniq.sort, i += 1 if target_self.is_a?(Module) && (options[:M] || options[:a])
168
+
169
+ # dealing with 1.8/1.9 compatibility issues :/
170
+ csuper = options[:s]
171
+ if Module.method(:constants).arity == 0
172
+ csuper = nil
173
+ end
174
+
175
+ info["constants"] = Array(target_self.is_a?(Module) ? target.eval("constants(#{csuper})") :
176
+ target.eval("self.class.constants(#{csuper})")).uniq.sort, i += 1 if options[:c] || options[:a]
177
+
178
+ # verbose output?
179
+ if options[:v]
180
+
181
+ # verbose
182
+ info.each.sort_by { |k, v| v.last }.each do |k, v|
183
+ if !v.first.empty?
184
+ output.puts "#{k}:\n--"
185
+ output.puts Pry.view(v.first)
186
+ output.puts
187
+ end
188
+ end
189
+
190
+ # plain
62
191
  else
63
- c = with_constants ? target_self.class.constants.inspect : [].inspect
64
- output.puts "#{Pry.view(target.eval("local_variables + instance_variables + #{c}"))}"
192
+ output.puts Pry.view(info.values.sort_by { |v| v.last }.map { |v| v.first }.inject(&:+))
65
193
  end
66
194
  end
67
195
 
68
- command "cat", "Show output of <var>.inspect." do |obj|
69
- out = output
70
- out.puts target.eval("#{obj}.inspect")
196
+ command "cat", "Show output of VAR.inspect. Aliases: inspect" do |obj|
197
+ if !obj
198
+ output.puts "Must provide an object to inspect."
199
+ next
200
+ end
201
+
202
+ output.puts target.eval("#{obj}.inspect")
71
203
  end
204
+
205
+ alias_command "inspect", "cat", ""
72
206
 
73
- command "cd", "Start a Pry session on <var> (use `cd ..` to go back)" do |obj|
207
+ command "cd", "Start a Pry session on VAR (use `cd ..` to go back)" do |obj|
208
+ if !obj
209
+ output.puts "Must provide an object."
210
+ next
211
+ end
212
+
74
213
  throw(:breakout, opts[:nesting].level) if obj == ".."
75
214
  target.eval("#{obj}.pry")
76
215
  end
77
216
 
78
- command "show_doc", "Show the comments above <methname>" do |meth_name|
79
- doc = target.eval("method(:#{meth_name})").comment
80
- output.puts doc
81
- end
217
+ command "show-doc", "Show the comments above METH. Type `show-doc --help` for more info." do |*args|
218
+ options = {}
219
+ meth_name = nil
220
+
221
+ OptionParser.new do |opts|
222
+ opts.banner = %{Usage: show-doc [OPTIONS] [METH]
223
+ Show the comments above method METH. Shows _method_ comments (rather than instance methods) by default.
224
+ e.g show-doc hello_method
225
+ --
226
+ }
227
+ opts.on("-M", "--instance-methods", "Operate on instance methods instead.") do |m|
228
+ options[:M] = true
229
+ end
82
230
 
83
- command "show_idoc", "Show the comments above instance method <methname>" do |meth_name|
84
- doc = target.eval("instance_method(:#{meth_name})").comment
231
+ opts.on_tail("-h", "--help", "This message.") do |h|
232
+ output.puts opts
233
+ options[:h] = true
234
+ end
235
+ end.order(args) do |v|
236
+ meth_name = v
237
+ end
238
+
239
+ next if options[:h]
240
+
241
+ if !meth_name
242
+ output.puts "You need to specify a method. Type `show-doc --help` for help"
243
+ next
244
+ end
245
+
246
+ begin
247
+ if options[:M]
248
+ meth = target.eval("instance_method(:#{meth_name})")
249
+ else
250
+ meth = target.eval("method(:#{meth_name})")
251
+ end
252
+ rescue
253
+ output.puts "Invalid method name: #{meth_name}. Type `show-doc --help` for help"
254
+ next
255
+ end
256
+
257
+ doc = meth.comment
258
+ file, line = meth.source_location
259
+ output.puts "From #{file} @ line ~#{line}:"
85
260
  output.puts doc
86
261
  end
87
262
 
88
- command "show_method", "Show sourcecode for method <methname>." do |meth_name|
89
- context_meth_name = target.eval("__method__")
90
- meth_name = context_meth_name if !meth_name
263
+ command "show-method", "Show the source for METH. Type `show-method --help` for more info." do |*args|
264
+ options = {}
265
+ meth_name = nil
266
+
267
+ OptionParser.new do |opts|
268
+ opts.banner = %{Usage: show-method [OPTIONS] [METH]
269
+ Show the source for method METH. Shows _method_ source (rather than instance methods) by default.
270
+ e.g: show-method hello_method
271
+ --
272
+ }
273
+ opts.on("-M", "--instance-methods", "Operate on instance methods instead.") do |m|
274
+ options[:M] = true
275
+ end
91
276
 
92
- # fragile as it hard-codes in the __binding_impl__ method name
93
- # from core_extensions.rb
94
- if meth_name && meth_name != :__binding_impl__
95
- code = target.eval("method(\"#{meth_name.to_s}\")").source
96
- output.puts code
277
+ opts.on_tail("-h", "--help", "This message.") do |h|
278
+ output.puts opts
279
+ options[:h] = true
280
+ end
281
+ end.order(args) do |v|
282
+ meth_name = v
283
+ end
284
+
285
+ next if options[:h]
286
+
287
+ # If no method name is given then use current method, if it exists
288
+ meth_name = meth_name_from_binding.call(target) if !meth_name
289
+
290
+ if !meth_name
291
+ output.puts "You need to specify a method. Type `show-method --help` for help"
292
+ next
293
+ end
294
+
295
+ begin
296
+ if options[:M]
297
+ meth = target.eval("instance_method(:#{meth_name})")
298
+ else
299
+ meth = target.eval("method(:#{meth_name})")
300
+ end
301
+ rescue
302
+ output.puts "Invalid method name: #{meth_name}. Type `show-method --help` for help"
97
303
  next
98
304
  end
99
- output.puts "Error: Not in a method."
100
- end
101
305
 
102
- command "show_imethod", "Show sourcecode for instance method <methname>." do |meth_name|
103
- code = target.eval("instance_method(\"#{meth_name}\")").source
306
+ code = meth.source
307
+ file, line = meth.source_location
308
+ output.puts "From #{file} @ line #{line}:"
104
309
  output.puts code
105
310
  end
106
-
107
- command "jump_to", "Jump to a Pry session further up the stack, exiting all sessions below." do |break_level|
311
+
312
+ command "show-command", "Show sourcecode for a Pry command, e.g: show-command ls" do |command_name|
313
+ cmds = Pry.active_instance.commands.commands
314
+
315
+ if !command_name
316
+ output.puts "You must provide a command name."
317
+ next
318
+ end
319
+
320
+ if cmds[command_name]
321
+ meth = cmds[command_name][:action]
322
+ code = meth.source
323
+ file, line = meth.source_location
324
+ output.puts "From #{file} @ line #{line}:"
325
+ output.puts code
326
+ else
327
+ output.puts "No such command: #{command_name}."
328
+ end
329
+ end
330
+
331
+ command "jump-to", "Jump to a Pry session further up the stack, exiting all sessions below." do |break_level|
108
332
  break_level = break_level.to_i
109
333
  nesting = opts[:nesting]
110
334
 
@@ -119,16 +343,11 @@ class Pry
119
343
  end
120
344
  end
121
345
 
122
- command "ls_methods", "List all methods defined on class of receiver." do
123
- output.puts "#{Pry.view(target.eval('(public_methods(false) + private_methods(false) + protected_methods(false)).sort'))}"
124
- end
125
-
126
- command "ls_imethods", "List all instance methods defined on class of receiver." do
127
- output.puts "#{Pry.view(target.eval('(public_instance_methods(false) + private_instance_methods(false) + protected_instance_methods(false)).sort'))}"
128
- end
129
-
130
- command ["exit", "quit", "back"], "End the current Pry session." do
346
+ command "exit", "End the current Pry session. Aliases: quit, back" do
131
347
  throw(:breakout, opts[:nesting].level)
132
348
  end
349
+
350
+ alias_command "quit", "exit", ""
351
+ alias_command "back", "exit", ""
133
352
  end
134
353
  end
@@ -2,7 +2,7 @@ class Pry
2
2
 
3
3
  # The default hooks - display messages when beginning and ending Pry sessions.
4
4
  DEFAULT_HOOKS = {
5
- :before_session => proc { |out, obj| out.puts "Beginning Pry session for #{Pry.view(obj)}" },
6
- :after_session => proc { |out, obj| out.puts "Ending Pry session for #{Pry.view(obj)}" }
5
+ :before_session => proc { |out, obj| out.puts "Beginning Pry session for #{Pry.view_clip(obj)}" },
6
+ :after_session => proc { |out, obj| out.puts "Ending Pry session for #{Pry.view_clip(obj)}" }
7
7
  }
8
8
  end
@@ -1,20 +1,22 @@
1
1
  class Pry
2
2
 
3
+
3
4
  # The default prompt; includes the target and nesting level
4
5
  DEFAULT_PROMPT = [
5
6
  proc do |target_self, nest_level|
7
+
6
8
  if nest_level == 0
7
- "pry(#{Pry.view(target_self)})> "
9
+ "pry(#{Pry.view_clip(target_self)})> "
8
10
  else
9
- "pry(#{Pry.view(target_self)}):#{Pry.view(nest_level)}> "
11
+ "pry(#{Pry.view_clip(target_self)}):#{Pry.view_clip(nest_level)}> "
10
12
  end
11
13
  end,
12
14
 
13
15
  proc do |target_self, nest_level|
14
16
  if nest_level == 0
15
- "pry(#{Pry.view(target_self)})* "
17
+ "pry(#{Pry.view_clip(target_self)})* "
16
18
  else
17
- "pry(#{Pry.view(target_self)}):#{Pry.view(nest_level)}* "
19
+ "pry(#{Pry.view_clip(target_self)}):#{Pry.view_clip(nest_level)}* "
18
20
  end
19
21
  end
20
22
  ]
@@ -81,6 +81,19 @@ class Pry
81
81
  end
82
82
  end
83
83
 
84
+ # A version of `Pry.view` that clips the output to `max_size` chars.
85
+ # In case of > `max_size` chars the `#<Object...> notation is used.
86
+ # @param obj The object to view.
87
+ # @param max_size The maximum number of chars before clipping occurs.
88
+ # @return [String] The string representation of `obj`.
89
+ def self.view_clip(obj, max_size=60)
90
+ if Pry.view(obj).size < max_size
91
+ Pry.view(obj)
92
+ else
93
+ "#<#{obj.class}:%#x>" % (obj.object_id << 1)
94
+ end
95
+ end
96
+
84
97
  # Set all the configurable options back to their default values
85
98
  def self.reset_defaults
86
99
  @input = Readline
@@ -104,4 +117,21 @@ class Pry
104
117
  # last element in nesting array is the pry instance
105
118
  nesting.map(&:last)
106
119
  end
120
+
121
+ # Return a `Binding` object for `target` or return `target` if it is
122
+ # already a `Binding`.
123
+ # In the case where `target` is top-level then return `TOPLEVEL_BINDING`
124
+ # @param [Object] target The object to get a `Binding` object for.
125
+ # @return [Binding] The `Binding` object.
126
+ def self.binding_for(target)
127
+ if target.is_a?(Binding)
128
+ target
129
+ else
130
+ if target == TOPLEVEL_BINDING.eval('self')
131
+ TOPLEVEL_BINDING
132
+ else
133
+ target.__binding__
134
+ end
135
+ end
136
+ end
107
137
  end
@@ -1,4 +1,5 @@
1
1
  require 'readline'
2
+ require 'shellwords'
2
3
 
3
4
  class Pry
4
5
 
@@ -70,7 +71,7 @@ class Pry
70
71
  # @example
71
72
  # Pry.new.repl(Object.new)
72
73
  def repl(target=TOPLEVEL_BINDING)
73
- target = binding_for(target)
74
+ target = Pry.binding_for(target)
74
75
  target_self = target.eval('self')
75
76
 
76
77
  exec_hook :before_session, output, target_self
@@ -110,7 +111,7 @@ class Pry
110
111
  # @example
111
112
  # Pry.new.rep(Object.new)
112
113
  def rep(target=TOPLEVEL_BINDING)
113
- target = binding_for(target)
114
+ target = Pry.binding_for(target)
114
115
  print.call output, re(target)
115
116
  end
116
117
 
@@ -121,7 +122,7 @@ class Pry
121
122
  # @example
122
123
  # Pry.new.re(Object.new)
123
124
  def re(target=TOPLEVEL_BINDING)
124
- target = binding_for(target)
125
+ target = Pry.binding_for(target)
125
126
 
126
127
  if input == Readline
127
128
  # Readline tab completion
@@ -153,13 +154,17 @@ class Pry
153
154
  # @example
154
155
  # Pry.new.r(Object.new)
155
156
  def r(target=TOPLEVEL_BINDING)
156
- target = binding_for(target)
157
+ target = Pry.binding_for(target)
157
158
  eval_string = ""
158
159
 
159
160
  loop do
160
161
  current_prompt = select_prompt(eval_string.empty?, target.eval('self'))
161
162
 
162
163
  val = readline(current_prompt)
164
+
165
+ # exit pry if we receive EOF character
166
+ val = "quit" if !val
167
+
163
168
  val.chomp!
164
169
 
165
170
  process_commands(val, eval_string, target)
@@ -188,7 +193,7 @@ class Pry
188
193
 
189
194
  if pattern
190
195
  args_string = $1
191
- args = args_string ? args_string.split : []
196
+ args = args_string ? Shellwords.shellwords(args_string) : []
192
197
  action = data[:action]
193
198
 
194
199
  options = {
@@ -288,21 +293,4 @@ class Pry
288
293
  true
289
294
  end
290
295
  end
291
-
292
- # Return a `Binding` object for `target` or return `target` if it is
293
- # already a `Binding`.
294
- # In the case where `target` is top-level then return `TOPLEVEL_BINDING`
295
- # @param [Object] target The object to get a `Binding` object for.
296
- # @return [Binding] The `Binding` object.
297
- def binding_for(target)
298
- if target.is_a?(Binding)
299
- target
300
- else
301
- if target == TOPLEVEL_BINDING.eval('self')
302
- TOPLEVEL_BINDING
303
- else
304
- target.__binding__
305
- end
306
- end
307
- end
308
296
  end
@@ -1,3 +1,3 @@
1
1
  class Pry
2
- VERSION = "0.4.8"
2
+ VERSION = "0.5.0pre2"
3
3
  end
@@ -200,12 +200,12 @@ describe Pry do
200
200
  end
201
201
  end
202
202
 
203
- describe "Pry#binding_for" do
203
+ describe "Pry.binding_for" do
204
204
  it 'should return TOPLEVEL_BINDING if parameter self is main' do
205
205
  _main_ = lambda { TOPLEVEL_BINDING.eval('self') }
206
- Pry.new.binding_for(_main_.call).is_a?(Binding).should == true
207
- Pry.new.binding_for(_main_.call).should == TOPLEVEL_BINDING
208
- Pry.new.binding_for(_main_.call).should == Pry.new.binding_for(_main_.call)
206
+ Pry.binding_for(_main_.call).is_a?(Binding).should == true
207
+ Pry.binding_for(_main_.call).should == TOPLEVEL_BINDING
208
+ Pry.binding_for(_main_.call).should == Pry.binding_for(_main_.call)
209
209
  end
210
210
  end
211
211
 
@@ -346,7 +346,7 @@ describe Pry do
346
346
  end
347
347
 
348
348
  Command3.commands.include?("nesting").should == true
349
- Command3.commands.include?("jump_to").should == true
349
+ Command3.commands.include?("jump-to").should == true
350
350
  Command3.commands.include?("cd").should == true
351
351
  Command3.commands.include?("v").should == true
352
352
 
@@ -422,7 +422,7 @@ describe Pry do
422
422
 
423
423
  it 'should import commands from another command object' do
424
424
  class Command3 < Pry::CommandBase
425
- import_from Pry::Commands, "status", "jump_to"
425
+ import_from Pry::Commands, "status", "jump-to"
426
426
  end
427
427
 
428
428
  str_output = StringIO.new
@@ -443,7 +443,7 @@ describe Pry do
443
443
  end
444
444
 
445
445
  Command3.commands.include?("nesting").should == true
446
- Command3.commands.include?("jump_to").should == true
446
+ Command3.commands.include?("jump-to").should == true
447
447
  Command3.commands.include?("cd").should == true
448
448
  Command3.commands.include?("v").should == true
449
449
  Command3.commands.include?("show_doc").should == false
@@ -455,8 +455,8 @@ describe Pry do
455
455
 
456
456
  it 'should override some inherited commands' do
457
457
  class Command3 < Pry::Commands
458
- command "jump_to" do
459
- output.puts "jump_to the music"
458
+ command "jump-to" do
459
+ output.puts "jump-to the music"
460
460
  end
461
461
 
462
462
  command "help" do
@@ -468,8 +468,8 @@ describe Pry do
468
468
  Pry.print = proc {}
469
469
 
470
470
  str_output = StringIO.new
471
- Pry.new(:input => InputTester.new("jump_to"), :output => str_output, :commands => Command3).rep
472
- str_output.string.chomp.should == "jump_to the music"
471
+ Pry.new(:input => InputTester.new("jump-to"), :output => str_output, :commands => Command3).rep
472
+ str_output.string.chomp.should == "jump-to the music"
473
473
 
474
474
  str_output = StringIO.new
475
475
  Pry.new(:input => InputTester.new("help"), :output => str_output, :commands => Command3).rep
metadata CHANGED
@@ -1,80 +1,56 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: pry
3
- version: !ruby/object:Gem::Version
4
- hash: 31
5
- prerelease:
6
- segments:
7
- - 0
8
- - 4
9
- - 8
10
- version: 0.4.8
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.0pre2
5
+ prerelease: 5
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - John Mair (banisterfiend)
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-02-12 00:00:00 +13:00
12
+ date: 2011-02-17 00:00:00.000000000 +13:00
19
13
  default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
22
16
  name: ruby_parser
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
17
+ requirement: &17857404 !ruby/object:Gem::Requirement
25
18
  none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 5
30
- segments:
31
- - 2
32
- - 0
33
- - 5
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
34
22
  version: 2.0.5
35
23
  type: :runtime
36
- version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- name: method_source
39
24
  prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
25
+ version_requirements: *17857404
26
+ - !ruby/object:Gem::Dependency
27
+ name: method_source
28
+ requirement: &17857080 !ruby/object:Gem::Requirement
41
29
  none: false
42
- requirements:
43
- - - ">="
44
- - !ruby/object:Gem::Version
45
- hash: 23
46
- segments:
47
- - 0
48
- - 2
49
- - 0
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
50
33
  version: 0.2.0
51
34
  type: :runtime
52
- version_requirements: *id002
53
- - !ruby/object:Gem::Dependency
54
- name: bacon
55
35
  prerelease: false
56
- requirement: &id003 !ruby/object:Gem::Requirement
36
+ version_requirements: *17857080
37
+ - !ruby/object:Gem::Dependency
38
+ name: bacon
39
+ requirement: &17856744 !ruby/object:Gem::Requirement
57
40
  none: false
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- hash: 19
62
- segments:
63
- - 1
64
- - 1
65
- - 0
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
66
44
  version: 1.1.0
67
45
  type: :development
68
- version_requirements: *id003
46
+ prerelease: false
47
+ version_requirements: *17856744
69
48
  description: attach an irb-like session to any object at runtime
70
49
  email: jrmair@gmail.com
71
50
  executables: []
72
-
73
51
  extensions: []
74
-
75
52
  extra_rdoc_files: []
76
-
77
- files:
53
+ files:
78
54
  - lib/pry/commands.rb
79
55
  - lib/pry/command_base.rb
80
56
  - lib/pry/completion.rb
@@ -106,36 +82,26 @@ files:
106
82
  has_rdoc: true
107
83
  homepage: http://banisterfiend.wordpress.com
108
84
  licenses: []
109
-
110
85
  post_install_message:
111
86
  rdoc_options: []
112
-
113
- require_paths:
87
+ require_paths:
114
88
  - lib
115
- required_ruby_version: !ruby/object:Gem::Requirement
89
+ required_ruby_version: !ruby/object:Gem::Requirement
116
90
  none: false
117
- requirements:
118
- - - ">="
119
- - !ruby/object:Gem::Version
120
- hash: 3
121
- segments:
122
- - 0
123
- version: "0"
124
- required_rubygems_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
125
96
  none: false
126
- requirements:
127
- - - ">="
128
- - !ruby/object:Gem::Version
129
- hash: 3
130
- segments:
131
- - 0
132
- version: "0"
97
+ requirements:
98
+ - - ! '>'
99
+ - !ruby/object:Gem::Version
100
+ version: 1.3.1
133
101
  requirements: []
134
-
135
102
  rubyforge_project:
136
103
  rubygems_version: 1.5.2
137
104
  signing_key:
138
105
  specification_version: 3
139
106
  summary: attach an irb-like session to any object at runtime
140
107
  test_files: []
141
-