pry 0.9.2-i386-mingw32 → 0.9.3-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 CHANGED
@@ -7,3 +7,4 @@ doc/
7
7
  pkg/
8
8
  coverage/
9
9
  .yardoc/
10
+ /tags
data/CHANGELOG CHANGED
@@ -1,3 +1,20 @@
1
+ */7/2011 version 0.9.3
2
+ * cat --ex (cats 5 lines above and below line in file where exception was raised)
3
+ * edit --ex (edits line in file where exception was raised)
4
+ * edit -t (opens a temporary file and evals it in current context when closed)
5
+ * `pry -r` requires now happen after plugin loading (so as not to interfere with
6
+ * new Pry.config.disable_auto_reload option, for turning off auto reloading by edit-method and related (thanks ryanf)
7
+ * add better error messages for `cd` command
8
+ * fixed exotic object regression - BasicObject.new etc now return "=> unknown"
9
+ * added reload-method command (reloads the associated file of a method)
10
+ * converted: import => import-set, version => pry-version, install => install-command
11
+ * Pry.config.command_prefix support (thanks ryanf!)
12
+ * fixed indentation for simple-prompt
13
+ * hist command now excludes last line of input (the command invocation itself)
14
+ * hist now has `history` alias
15
+ * missing plugins no longer raise exception, just print a warning to $stderr
16
+ * fixed jedit editor support
17
+
1
18
  21/6/2011 version 0.9.2
2
19
  * fixed string interpolation bug (caused valid ruby code not to execute, sorry!)
3
20
  * fixed `ls` command, so it can properly display members of Object and classes, and BasicObject, etc
@@ -4,14 +4,11 @@
4
4
 
5
5
  _Get to the code_
6
6
 
7
- ## These docs are now out of date for the 0.9.0 release.
8
-
9
- ** New documentation will be available shortly, please see the CHANGELOG and Pry's own livehelp system for information in the meantime.
10
-
11
- Also note that JRuby is not yet supported in this release, but will be soon.
12
-
13
- Thanks **
7
+ **Note that JRuby is not yet supported in this release, but will be
8
+ soon.**
14
9
 
10
+ [Skip to the website](http://pry.github.com) <br />
11
+ [Skip to the wiki](https://github.com/pry/pry/wiki)
15
12
 
16
13
  Pry is a powerful alternative to the standard IRB shell for Ruby. It is
17
14
  written from scratch to provide a number of advanced features, some of
@@ -37,7 +34,7 @@ currently not nearly as powerful as tools like [SLIME](http://en.wikipedia.org/w
37
34
  general direction Pry is heading.
38
35
 
39
36
  Pry is also fairly flexible and allows significant user
40
- [customization](http://rdoc.info/github/banister/pry/master/file/wiki/Customizing-pry.md). It
37
+ [customization](https://github.com/pry/pry/wiki/Customization-and-configuration)
41
38
  is trivial to set it to read from any object that has a `readline` method and write to any object that has a
42
39
  `puts` method - many other aspects of Pry are also configurable making
43
40
  it a good choice for implementing custom shells.
@@ -52,8 +49,9 @@ methods. The additional docs are accessed through the `show-doc` and
52
49
  `show-method` commands.
53
50
 
54
51
  * Install the [gem](https://rubygems.org/gems/pry): `gem install pry`
55
- * Read the [documentation](http://rdoc.info/github/banister/pry/master/file/README.markdown)
56
- * See the [source code](http://github.com/banister/pry)
52
+ * Browse the comprehensive [documentation at the official Pry wiki](https://github.com/pry/pry/wiki)
53
+ * Read the [YARD API documentation](http://rdoc.info/github/pry/pry/master/file/README.markdown)
54
+ * See the [source code](http://github.com/pry/pry)
57
55
 
58
56
  Pry also has `rubygems-test` support; to participate, first install
59
57
  Pry, then:
@@ -71,7 +69,7 @@ whitespace in between. Commands support a flexible syntax and allow
71
69
  Pry command will show a list of all private instance methods (in
72
70
  scope) that begin with 'pa'
73
71
 
74
- pry(YARD::Parser::SourceParser):5> ls -Mp --grep pa
72
+ pry(YARD::Parser::SourceParser):5> ls -Mp --grep ^pa
75
73
  [:parser_class, :parser_type=, :parser_type_for_filename]
76
74
 
77
75
  ### Navigating around state
@@ -202,8 +200,6 @@ current directory and count the number of lines in that file with
202
200
 
203
201
  ### Code Browsing
204
202
 
205
- #### show-method
206
-
207
203
  You can browse method source code with the `show-method` command. Nearly all Ruby methods (and some C methods, with the pry-doc
208
204
  gem) can have their source viewed. Code that is longer than a page is
209
205
  sent through a pager (such as less), and all code is properly syntax
@@ -233,7 +229,7 @@ instance methods beginning with 're' and display the source code for the `rep` m
233
229
  148: end
234
230
 
235
231
  Note that we can also view C methods (from Ruby Core) using the
236
- `pry-doc` gem; we also show off the alternate syntax for
232
+ `pry-doc` plugin; we also show off the alternate syntax for
237
233
  `show-method`:
238
234
 
239
235
  pry(main)> show-method Array#select
@@ -257,47 +253,6 @@ Note that we can also view C methods (from Ruby Core) using the
257
253
  return result;
258
254
  }
259
255
 
260
- #### Special locals
261
-
262
- Some commands such as `show-method`, `show-doc`, `show-command`, `stat`
263
- and `cat` update the `_file_` and `_dir_` local variables after they
264
- run. These locals contain the full path to the file involved in the
265
- last command as well as the directory containing that file.
266
-
267
- You can then use these special locals in conjunction with shell
268
- commands to do such things as change directory into the directory
269
- containing the file, open the file in an editor, display the file using `cat`, and so on.
270
-
271
- In the following example we wil use Pry to fix a bug in a method:
272
-
273
- pry(main)> greet "john"
274
- hello johnhow are you?=> nil
275
- pry(main)> show-method greet
276
-
277
- From: /Users/john/ruby/play/bug.rb @ line 2:
278
- Number of lines: 4
279
-
280
- def greet(name)
281
- print "hello #{name}"
282
- print "how are you?"
283
- end
284
- pry(main)> .emacsclient #{_file_}
285
- pry(main)> load _file_
286
- pry(main)> greet "john"
287
- hello john
288
- how are you?
289
- => nil
290
- pry(main)> show-method greet
291
-
292
- From: /Users/john/ruby/play/bug.rb @ line 2:
293
- Number of lines: 4
294
-
295
- def greet(name)
296
- puts "hello #{name}"
297
- puts "how are you?"
298
- end
299
-
300
-
301
256
  ### Documentation Browsing
302
257
 
303
258
  One use-case for Pry is to explore a program at run-time by `cd`-ing
@@ -352,63 +307,6 @@ We can also use `ri` in the normal way:
352
307
 
353
308
  a -- b -- c --
354
309
 
355
-
356
- ### History
357
-
358
- Readline history can be viewed and replayed using the `hist`
359
- command. When `hist` is invoked with no arguments it simply displays
360
- the history (passing the output through a pager if necessary))
361
- when the `--replay` option is used a line or a range of lines of
362
- history can be replayed.
363
-
364
- In the example below we will enter a few lines in a Pry session and
365
- then view history; we will then replay one of those lines:
366
-
367
- pry(main)> hist
368
- 0: hist -h
369
- 1: ls
370
- 2: ls
371
- 3: show-method puts
372
- 4: x = rand
373
- 5: hist
374
- pry(main)> hist --replay 3
375
-
376
- From: io.c in Ruby Core (C Method):
377
- Number of lines: 8
378
-
379
- static VALUE
380
- rb_f_puts(int argc, VALUE *argv, VALUE recv)
381
- {
382
- if (recv == rb_stdout) {
383
- return rb_io_puts(argc, argv, recv);
384
- }
385
- return rb_funcall2(rb_stdout, rb_intern("puts"), argc, argv);
386
- }
387
-
388
- In the next example we will replay a range of lines in history. Note
389
- that we replay to a point where a class definition is still open and so
390
- we can continue to add instance methods to the class:
391
-
392
- pry(main)> hist
393
- 0: class Hello
394
- 1: def hello_world
395
- 2: puts "hello world!"
396
- 3: end
397
- 4: end
398
- 5: hist
399
- pry(main)> hist --replay 0..3
400
- pry(main)* def goodbye_world
401
- pry(main)* puts "goodbye world!"
402
- pry(main)* end
403
- pry(main)* end
404
- => nil
405
- pry(main)> Hello.new.goodbye_world;
406
- goodbye world!
407
- pry(main)>
408
-
409
- Also note that in the above the line `Hello.new.goodbye_world;` ends
410
- with a semi-colon which causes expression evaluation output to be suppressed.
411
-
412
310
  ### Gist integration
413
311
 
414
312
  If the `gist` gem is installed then method source or documentation can be gisted to github with the
@@ -456,54 +354,12 @@ avaiable.
456
354
 
457
355
  MyArtChannel has kindly provided a hack to replace the `rails console` command in Rails 3: [https://gist.github.com/941174](https://gist.github.com/941174) This is not recommended for code bases with multiple developers, as they may not all want to use Pry.
458
356
 
459
- ### Other Features and limitations
460
-
461
- #### Other Features:
462
-
463
- * Pry can be invoked both at the command-line and used as a more
464
- powerful alternative to IRB or it can be invoked at runtime and used
465
- as a developer consoler / debugger.
466
- * Additional documentation and source code for Ruby Core methods are supported when the `pry-doc` gem is installed.
467
- * Pry sessions can nest arbitrarily deeply -- to go back one level of nesting type 'exit' or 'quit' or 'back'
468
- * Pry comes with syntax highlighting on by default just use the `toggle-color` command to turn it on and off.
469
- * Use `_` to recover last result.
470
- * Use `_pry_` to reference the Pry instance managing the current session.
471
- * Use `_ex_` to recover the last exception.
472
- * Use `_file_` and `_dir_` to refer to the associated file or
473
- directory containing the definition for a method.
474
- * A trailing `;` on an entered expression suppresses the display of
475
- the evaluation output.
476
- * Typing `!` on a line by itself will clear the input buffer - useful for
477
- getting you out of a situation where the parsing process
478
- goes wrong and you get stuck in an endless read loop.
479
- * Pry supports tab completion.
480
- * Pry has multi-line support built in.
481
- * Use `^d` (control-d) to quickly break out of a session.
482
- * Pry has special commands not found in many other Ruby REPLs: `show-method`, `show-doc`
483
- `jump-to`, `ls`, `cd`, `cat`
484
- * Pry gives good control over nested sessions (important when exploring complicated runtime state)
485
- * Pry is not based on the IRB codebase.
486
- * Pry allows significant customizability.
487
- * Pry uses the [method_source](https://github.com/banister/method_source) gem; so
488
- this functionality is available to a Pry session.
489
- * Pry uses [RubyParser](https://github.com/seattlerb/ruby_parser) to
490
- validate expressions in 1.8, and [Ripper](http://rdoc.info/docs/ruby-core/1.9.2/Ripper) for 1.9.
491
- * Pry implements all the methods in the REPL chain separately: `Pry#r`
492
- for reading; `Pry#re` for eval; `Pry#rep` for printing; and `Pry#repl`
493
- for the loop (`Pry.start` simply wraps `Pry.new.repl`). You can
494
- invoke any of these methods directly depending on exactly what aspect of the functionality you need.
495
-
496
- #### Limitations:
497
-
498
- * Some Pry commands (e.g `show-command`) do not work in Ruby 1.8
499
- MRI. But many other commands do work in Ruby 1.8 MRI, e.g
500
- `show-method`, due to a functional 1.8 source_location implementation.
357
+ ### Limitations:
358
+
501
359
  * JRuby not officially supported due to currently too many quirks and
502
- strange behaviour. Nonetheless most functionality should still work
503
- OK in JRuby. Full JRuby support coming in a future version.
504
- * `method_source` functionality does not work in JRuby with Ruby 1.8
360
+ strange behaviour. This will be fixed soon.
505
361
  * Tab completion is currently a bit broken/limited this will have a
506
- major overhaul in a future version.
362
+ major overhaul in a future version.
507
363
 
508
364
  ### Syntax Highlighting
509
365
 
@@ -512,40 +368,15 @@ off in a session by using the `toggle-color` command. Alternatively,
512
368
  you can turn it off permanently by putting the line `Pry.color =
513
369
  false` in your `~/.pryrc` file.
514
370
 
515
- ### Example Programs
516
-
517
- Pry comes bundled with a few example programs to illustrate some
518
- features, see the `examples/` directory.
519
-
520
- * `example_basic.rb` - Demonstrate basic Pry functionality
521
- * `example_input.rb` - Demonstrates how to set the `input` object.
522
- * `example_output.rb` - Demonstrates how to set the `output` object.
523
- * `example_hooks.rb` - Demonstrates how to set the `hooks` hash.
524
- * `example_print.rb` - Demonstrates how to set the `print` object.
525
- * `example_prompt.rb` - Demonstrates how to set the `prompt`.
526
- * `example_input2.rb` - An advanced `input` example.
527
- * `example_commands.rb` - Implementing a mathematical command set.
528
- * `example_commands_override.rb` - An advanced `commands` example.
529
- * `example_image_edit.rb` - A simple image editor using a Pry REPL (requires `Gosu` and `TexPlay` gems).
530
-
531
- ### Customizing Pry
532
-
533
- Pry allows a large degree of customization.
534
-
535
- [Read how to customize Pry here.](http://rdoc.info/github/banister/pry/master/file/wiki/Customizing-pry.md)
536
-
537
371
  ### Future Directions
538
372
 
539
373
  Many new features are planned such as:
540
374
 
375
+ * Increase modularity (rely more on plugin system)
541
376
  * Much improved tab completion (using [Bond](http://github.com/cldwalker/bond))
542
377
  * Improved JRuby support
543
- * Support for viewing source-code of binary gems and C stdlib
544
- * git integration
545
378
  * Much improved documentation system, better support for YARD
546
- * A proper plugin system
547
- * Get rid of `.` prefix for shell commands in `shell-mode`
548
- * Better support for code and method reloading
379
+ * Better support for code and method reloading and saving code
549
380
  * Extended and more sophisticated command system, allowing piping
550
381
  between commands and running commands in background
551
382
 
@@ -558,6 +389,6 @@ Problems or questions contact me at [github](http://github.com/banister)
558
389
  The Pry team consists of:
559
390
 
560
391
  * [banisterfiend](http://github.com/banister)
561
- * [injekt](http://github.com/injekt)
562
- * [Mon_Ouie](http://github.com/mon-ouie)
563
392
  * [Rob Gleeson](https://github.com/robgleeson)
393
+ * [Mon_Ouie](http://github.com/mon-ouie)
394
+ * [injekt](http://github.com/injekt)
data/Rakefile CHANGED
@@ -10,13 +10,13 @@ CLEAN.include("**/*#*", "**/*#*.*", "**/*_flymake*.*", "**/*_flymake",
10
10
 
11
11
  def apply_spec_defaults(s)
12
12
  s.name = "pry"
13
- s.summary = "an IRB alternative and runtime developer console"
13
+ s.summary = "An IRB alternative and runtime developer console"
14
14
  s.version = Pry::VERSION
15
15
  s.date = Time.now.strftime '%Y-%m-%d'
16
16
  s.author = "John Mair (banisterfiend)"
17
17
  s.email = 'jrmair@gmail.com'
18
18
  s.description = s.summary
19
- s.homepage = "http://banisterfiend.wordpress.com"
19
+ s.homepage = "http://pry.github.com"
20
20
  s.executables = ["pry"]
21
21
  s.files = `git ls-files`.split("\n")
22
22
  s.test_files = `git ls-files -- test/*`.split("\n")
data/TODO CHANGED
@@ -1,10 +1,17 @@
1
-
2
- ROADMAP
3
-
4
- FUTURE
5
- --------
6
- * Pry server and Pry client for SLIME style remote repl connectinos.
7
- * i18n support
1
+ 0.9.3
2
+ * hist command now excludes last line of input (the command invocation itself)
3
+ * hist now has `history` alias
4
+ * `pry -r` requires now happen after plugin loading (so as not to interfere with
5
+ * new Pry.config.disable_auto_reload option, for turning off auto reloading by edit-method and related
6
+ * add better error messages for `cd` command
7
+ * add command_prefix
8
+ * change some command names to include hyphen, e.g version => pry-version, install => install-command
9
+ * do cat --ex and edit --ex
10
+ * add reload-method
11
+ * fixed exotic object regression - BasicObject.new etc now return "=> unknown"
12
+ * converted: import => import-set, version => pry-version, install => install-command
13
+ * fix show-doc bug for ruby 1.8 and Kernel.fork
14
+ * edit -t (opens a temporary file and evals it in current context when closed)
8
15
 
9
16
  0.9.0
10
17
  Major features
data/bin/pry CHANGED
@@ -46,7 +46,7 @@ See: `https://github.com/banister` for more information.
46
46
  end
47
47
 
48
48
  on :r, :require, "`require` a Ruby script at startup", true do |file|
49
- require file
49
+ Pry.config.requires << file
50
50
  end
51
51
 
52
52
  on :I, "Add a path to the $LOAD_PATH", true do |path|
data/lib/pry.rb CHANGED
@@ -20,7 +20,11 @@ class Pry
20
20
 
21
21
  # The default prints
22
22
  DEFAULT_PRINT = proc do |output, value|
23
- Helpers::BaseHelpers.stagger_output("=> #{Helpers::BaseHelpers.colorize_code(value.pretty_inspect)}", output)
23
+ begin
24
+ Helpers::BaseHelpers.stagger_output("=> #{Helpers::BaseHelpers.colorize_code(value.pretty_inspect)}", output)
25
+ rescue NoMethodError
26
+ output.puts "=> unknown"
27
+ end
24
28
  end
25
29
 
26
30
  # Will only show the first line of the backtrace
@@ -49,7 +53,7 @@ class Pry
49
53
  ]
50
54
 
51
55
  # A simple prompt - doesn't display target or nesting level
52
- SIMPLE_PROMPT = [proc { ">> " }, proc { " | " }]
56
+ SIMPLE_PROMPT = [proc { ">> " }, proc { " | " }]
53
57
 
54
58
  SHELL_PROMPT = [
55
59
  proc { |target_self, _| "pry #{Pry.view_clip(target_self)}:#{Dir.pwd} $ " },
@@ -11,6 +11,15 @@ class Pry
11
11
  attr_accessor :command_set
12
12
  attr_accessor :command_processor
13
13
 
14
+ # Run a command from another command.
15
+ # @param [String] command_string The string that invokes the command
16
+ # @param [Array] args Further arguments to pass to the command
17
+ # @example
18
+ # run "show-input"
19
+ # @example
20
+ # run ".ls"
21
+ # @example
22
+ # run "amend-line", "5", 'puts "hello world"'
14
23
  def run(command_string, *args)
15
24
  complete_string = "#{command_string} #{args.join(" ")}"
16
25
  command_processor.process_commands(complete_string, eval_string, target)
@@ -55,7 +55,10 @@ class Pry
55
55
  def command_matched(val, target)
56
56
  _, cmd_data = commands.commands.find do |name, data|
57
57
 
58
- command_regex = /^#{convert_to_regex(name)}(?!\S)/
58
+ prefix = Regexp.escape(Pry.config.command_prefix)
59
+ prefix = "(?:#{prefix})?" unless data.options[:use_prefix]
60
+
61
+ command_regex = /^#{prefix}#{convert_to_regex(name)}(?!\S)/
59
62
 
60
63
  if data.options[:interpolate]
61
64
  # If interpolation fails then the command cannot be matched,
@@ -68,6 +68,9 @@ class Pry
68
68
  # @option options [String] :listing The listing name of the
69
69
  # command. That is the name by which the command is looked up by
70
70
  # help and by show-command. Necessary for regex based commands.
71
+ # @option options [Boolean] :use_prefix Whether the command uses
72
+ # `Pry.config.command_prefix` prefix (if one is defined). Defaults
73
+ # to true.
71
74
  # @yield The action to perform. The parameters in the block
72
75
  # determines the parameters the command will receive. All
73
76
  # parameters passed into the block will be strings. Successive
@@ -105,7 +108,8 @@ class Pry
105
108
  :keep_retval => false,
106
109
  :argument_required => false,
107
110
  :interpolate => true,
108
- :listing => name
111
+ :listing => name,
112
+ :use_prefix => true
109
113
  }.merge!(options)
110
114
 
111
115
  unless command_dependencies_met? options
@@ -115,7 +119,7 @@ class Pry
115
119
  options[:stub_info] = proc do
116
120
  output.puts "\nThe command '#{name}' is #{Helpers::Text.bold("unavailable")} because it requires the following gems to be installed: #{(gems_not_installed.join(", "))}"
117
121
  output.puts "-"
118
- output.puts "Type `install #{name}` to install the required gems and activate this command."
122
+ output.puts "Type `install-command #{name}` to install the required gems and activate this command."
119
123
  end
120
124
  end
121
125
 
@@ -123,7 +127,7 @@ class Pry
123
127
  end
124
128
 
125
129
  def each &block
126
- @commands.each(&block)
130
+ @commands.each(&block)
127
131
  end
128
132
 
129
133
  # Removes some commands from the set
@@ -239,7 +243,7 @@ class Pry
239
243
  end
240
244
  end
241
245
 
242
- command "install", "Install a disabled command." do |name|
246
+ command "install-command", "Install a disabled command." do |name|
243
247
  command = find_command(name)
244
248
  stub_info = command.options[:stub_info]
245
249
 
@@ -57,6 +57,11 @@ class Pry
57
57
  # @return [String, #call]
58
58
  attr_accessor :editor
59
59
 
60
+ # A string that must precede all Pry commands (e.g., if command_prefix is
61
+ # set to "%", the "cd" command must be invoked as "%cd").
62
+ # @return [String]
63
+ attr_accessor :command_prefix
64
+
60
65
  # @return [Boolean] Toggle Pry color on and off.
61
66
  attr_accessor :color
62
67
 
@@ -71,6 +76,14 @@ class Pry
71
76
  # @return [Boolean]
72
77
  attr_accessor :should_load_plugins
73
78
 
79
+ # Determines whether to load files specified with the -r flag.
80
+ # @return [Boolean]
81
+ attr_accessor :should_load_requires
82
+
83
+ # Determines whether to disable edit-method's auto-reloading behavior.
84
+ # @return [Boolean]
85
+ attr_accessor :disable_auto_reload
86
+
74
87
  # Config option for history.
75
88
  # sub-options include hist.file, hist.load, and hist.save
76
89
  # hist.file is the file to save/load history too, e.g
@@ -89,12 +102,11 @@ class Pry
89
102
  # @return [OpenStruct]
90
103
  attr_accessor :plugins
91
104
 
105
+ # @return [Array<String>] Ruby files to be required after loading any plugins.
106
+ attr_accessor :requires
107
+
92
108
  # @return [Integer] Amount of results that will be stored into out
93
109
  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
110
  end
99
111
  end
100
112
 
@@ -16,17 +16,34 @@ class Pry
16
16
  end
17
17
  end
18
18
 
19
- command "version", "Show Pry version." do
19
+ command "pry-version", "Show Pry version." do
20
20
  output.puts "Pry version: #{Pry::VERSION} on Ruby #{RUBY_VERSION}."
21
21
  end
22
22
 
23
- command "import", "Import a command set" do |command_set_name|
23
+ command "import-set", "Import a command set" do |command_set_name|
24
24
  next output.puts "Provide a command set name" if command_set.nil?
25
25
 
26
26
  set = target.eval(arg_string)
27
27
  Pry.active_instance.commands.import set
28
28
  end
29
29
 
30
+ command "reload-method", "Reload the source file that contains the specified method" do |meth_name|
31
+ if (meth = get_method_object(meth_name, target, {})).nil?
32
+ output.puts "Invalid method name: #{meth_name}."
33
+ next
34
+ end
35
+
36
+ if is_a_c_method?(meth)
37
+ output.puts "Error: Can't reload a C method."
38
+ elsif is_a_dynamically_defined_method?(meth)
39
+ output.puts "Error: Can't reload an eval method."
40
+ else
41
+ file_name = meth.source_location.first
42
+ load file_name
43
+ output.puts "Reloaded #{file_name}."
44
+ end
45
+ end
46
+
30
47
  command "reset", "Reset the REPL to a clean state." do
31
48
  output.puts "Pry reset."
32
49
  exec "pry"
@@ -3,7 +3,7 @@ class Pry
3
3
 
4
4
  Input = Pry::CommandSet.new do
5
5
 
6
- command "!", "Clear the input buffer. Useful if the parsing process goes wrong and you get stuck in the read loop." do
6
+ command "!", "Clear the input buffer. Useful if the parsing process goes wrong and you get stuck in the read loop.", :use_prefix => false do
7
7
  output.puts "Input buffer cleared!"
8
8
  eval_string.replace("")
9
9
  end
@@ -56,11 +56,11 @@ e.g amend-line puts 'hello again' # no line number modifies immediately preced
56
56
 
57
57
  command "play", "Play back a string or a method or a file as input. Type `play --help` for more information." do |*args|
58
58
  opts = Slop.parse!(args) do |opt|
59
- opt.banner "Usage: play [OPTIONS] [--help]\nDefault action (no options) is to play the provided string\ne.g `play puts 'hello world'` #=> \"hello world\"\ne.g `play -m Pry#repl --lines 1..-1`\ne.g `play -f Rakefile --lines 5`\n"
59
+ opt.banner "Usage: play [OPTIONS] [--help]\nDefault action (no options) is to play the provided string\ne.g `play puts 'hello world'` #=> \"hello world\"\ne.g `play -m Pry#repl --lines 1..-1`\ne.g `play -f Rakefile --lines 5`"
60
60
 
61
61
  opt.on :l, :lines, 'The line (or range of lines) to replay.', true, :as => Range
62
62
  opt.on :m, :method, 'Play a method.', true
63
- opt.on :f, "file", 'The line (or range of lines) to replay.', true
63
+ opt.on :f, "file", 'The file to replay in context.', true
64
64
  opt.on :o, "open", 'When used with the -m switch, it plays the entire method except the last line, leaving the method definition "open". `amend-line` can then be used to modify the method.'
65
65
  opt.on :h, :help, "This message." do
66
66
  output.puts opt
@@ -95,8 +95,9 @@ e.g amend-line puts 'hello again' # no line number modifies immediately preced
95
95
  end
96
96
  end
97
97
 
98
- command "hist", "Show and replay Readline history. Type `hist --help` for more info." do |*args|
99
- history = Readline::HISTORY.to_a
98
+ command "hist", "Show and replay Readline history. Type `hist --help` for more info. Aliases: history" do |*args|
99
+ # exclude the current command from history.
100
+ history = Readline::HISTORY.to_a[0..-2]
100
101
 
101
102
  opts = Slop.parse!(args) do |opt|
102
103
  opt.banner "Usage: hist [--replay START..END] [--clear] [--grep PATTERN] [--head N] [--tail N] [--help] [--save [START..END] file.txt]\n"
@@ -213,6 +214,7 @@ e.g amend-line puts 'hello again' # no line number modifies immediately preced
213
214
 
214
215
  end
215
216
 
217
+ alias_command "history", "hist", ""
216
218
 
217
219
  helpers do
218
220
  def one_index_number(line_number)
@@ -1,3 +1,5 @@
1
+ require 'tempfile'
2
+
1
3
  class Pry
2
4
  module DefaultCommands
3
5
 
@@ -110,8 +112,10 @@ class Pry
110
112
  "Ensure #{text.bold("Pry.editor")} is set to your editor of choice.\n" \
111
113
  "e.g: edit sample.rb"
112
114
 
113
- opt.on :r, "reload", "Eval file content after editing (using `load`)"
114
- opt.on :p, "play", "Use the pry `play` command to eval the file content after editing (instead of the `load` method)."
115
+ opt.on :r, "reload", "Eval file content after editing (evals at top level)"
116
+ opt.on :ex, "Open an editor at the line and file that generated the most recent Exception."
117
+ opt.on :t, "temp", "Open a temporary file in an editor and eval it in current context after closing."
118
+ opt.on :p, "play", "Use the pry `play` command to eval the file content after editing."
115
119
  opt.on :l, "line", "Specify line number to jump to in file", true, :as => Integer
116
120
  opt.on :h, :help, "This message." do
117
121
  output.puts opt
@@ -119,19 +123,38 @@ class Pry
119
123
  end
120
124
  next if opts.h?
121
125
 
122
- next output.puts("Need to specify a file.") if !args.first
123
- file_name = File.expand_path(args.first)
126
+ # the context the file will be eval'd in after closing
127
+ context = TOPLEVEL_BINDING
128
+ should_reload = opts[:r]
129
+
130
+ if opts.ex?
131
+ next output.puts "No Exception found." if Pry.last_exception.nil?
132
+
133
+ file_name = Pry.last_exception.file
134
+ line = Pry.last_exception.line
135
+ next output.puts "Exception has no associated file." if file_name.nil?
136
+ next output.puts "Cannot edit exceptions raised in REPL." if Pry.eval_path == file_name
137
+ elsif opts.t?
138
+ file_name = Tempfile.new("tmp").tap(&:close).path
139
+ line = 0
140
+ should_reload = true
141
+ context = target
142
+ else
143
+ next output.puts("Need to specify a file.") if !args.first
144
+ file_name = File.expand_path(args.first)
145
+ line = opts[:l].to_i
146
+ end
124
147
 
125
- invoke_editor(file_name, opts[:l].to_i)
148
+ invoke_editor(file_name, line)
126
149
  set_file_and_dir_locals(file_name)
127
150
 
128
- if opts[:r]
151
+ if opts[:p]
129
152
  silence_warnings do
130
- load file_name
153
+ Pry.active_instance.input = StringIO.new(File.readlines(file_name).join)
131
154
  end
132
- elsif opts[:p]
155
+ elsif should_reload
133
156
  silence_warnings do
134
- Pry.active_instance.input = StringIO.new(File.readlines(file_name).join)
157
+ context.eval(File.read(file_name))
135
158
  end
136
159
  end
137
160
  end
@@ -147,7 +170,7 @@ class Pry
147
170
 
148
171
  opt.on :M, "instance-methods", "Operate on instance methods."
149
172
  opt.on :m, :methods, "Operate on methods."
150
- opt.on :n, "no-reload", "Do not automatically reload the method's file after editting."
173
+ opt.on :n, "no-reload", "Do not automatically reload the method's file after editing."
151
174
  opt.on "no-jump", "Do not fast forward editor to first line of method."
152
175
  opt.on :c, :context, "Select object context to run under.", true do |context|
153
176
  target = Pry.binding_for(target.eval(context))
@@ -179,7 +202,7 @@ class Pry
179
202
 
180
203
  invoke_editor(file, opts["no-jump"] ? 0 : line)
181
204
  silence_warnings do
182
- load file if !opts.n?
205
+ load file if !opts.n? && !Pry.config.disable_auto_reload
183
206
  end
184
207
  end
185
208
  end
@@ -197,7 +220,7 @@ class Pry
197
220
  end
198
221
 
199
222
  def start_line_syntax_for_editor(file_name, line_number)
200
- file_name.gsub!(/\//, '\\') if RUBY_PLATFORM =~ /mswin|mingw/
223
+ file_name = file_name.gsub(/\//, '\\') if RUBY_PLATFORM =~ /mswin|mingw/
201
224
 
202
225
  case Pry.editor
203
226
  when /^[gm]?vi/, /^emacs/, /^nano/, /^pico/, /^gedit/, /^kate/
@@ -207,7 +230,7 @@ class Pry
207
230
  when /^uedit32/
208
231
  "#{file_name}/#{line_number}"
209
232
  when /^jedit/
210
- "#{file_name} +#{line_number}"
233
+ "#{file_name} +line:#{line_number}"
211
234
  else
212
235
  if RUBY_PLATFORM =~ /mswin|mingw/
213
236
  "#{file_name}"
@@ -3,7 +3,7 @@ class Pry
3
3
 
4
4
  Shell = Pry::CommandSet.new do
5
5
 
6
- command(/\.(.*)/, "All text following a '.' is forwarded to the shell.", :listing => ".<shell command>") do |cmd|
6
+ command(/\.(.*)/, "All text following a '.' is forwarded to the shell.", :listing => ".<shell command>", :use_prefix => false) do |cmd|
7
7
  if cmd =~ /^cd\s+(.+)/i
8
8
  dest = $1
9
9
  begin
@@ -37,6 +37,7 @@ class Pry
37
37
  command "cat", "Show output of file FILE. Type `cat --help` for more information." do |*args|
38
38
  start_line = 0
39
39
  end_line = -1
40
+ file_name = nil
40
41
 
41
42
  opts = Slop.parse!(args) do |opt|
42
43
  opt.on :s, :start, "Start line (defaults to start of file)Line 1 is the first line.", true, :as => Integer do |line|
@@ -47,6 +48,16 @@ class Pry
47
48
  end_line = line - 1
48
49
  end
49
50
 
51
+ opt.on :ex, "Show a window of N lines around last exception (defaults to 5).", :optional => true, :as => Integer do |window_size|
52
+ window_size ||= 5
53
+ ex = Pry.last_exception
54
+ next if !ex
55
+ start_line = (ex.line - 1) - window_size
56
+ start_line = start_line < 0 ? 0 : start_line
57
+ end_line = (ex.line - 1) + window_size
58
+ file_name = ex.file
59
+ end
60
+
50
61
  opt.on :l, "line-numbers", "Show line numbers."
51
62
  opt.on :t, :type, "The specific file type for syntax higlighting (e.g ruby, python)", true, :as => Symbol
52
63
  opt.on :f, :flood, "Do not use a pager to view text longer than one screen."
@@ -57,7 +68,13 @@ class Pry
57
68
 
58
69
  next if opts.help?
59
70
 
60
- file_name = args.shift
71
+ if opts.ex?
72
+ next output.puts "No Exception or Exception has no associated file." if file_name.nil?
73
+ next output.puts "Cannot cat exceptions raised in REPL." if Pry.eval_path == file_name
74
+ else
75
+ file_name = args.shift
76
+ end
77
+
61
78
  if !file_name
62
79
  output.puts "Must provide a file name."
63
80
  next
@@ -65,6 +82,18 @@ class Pry
65
82
 
66
83
  contents, normalized_start_line, _ = read_between_the_lines(file_name, start_line, end_line)
67
84
 
85
+ # add the arrow pointing to line that caused the exception
86
+ if opts.ex?
87
+ contents = contents.lines.each_with_index.map do |line, idx|
88
+ l = idx + start_line
89
+ if l == (Pry.last_exception.line - 1)
90
+ "=> #{line}"
91
+ else
92
+ " #{line}"
93
+ end
94
+ end.join
95
+ end
96
+
68
97
  if Pry.color
69
98
  contents = syntax_highlight_by_file_type_or_specified(contents, file_name, opts[:type])
70
99
  end
@@ -11,67 +11,6 @@ class Pry
11
11
 
12
12
  meth.reload
13
13
  end
14
-
15
- command "blame", "Show blame for a method", :requires_gem => "grit" do |meth_name|
16
- require 'grit'
17
- if (meth = get_method_object(meth_name, target, {})).nil?
18
- output.puts "Invalid method name: #{meth_name}."
19
- next
20
- end
21
-
22
- repo ||= Grit::Repo.new(".")
23
- start_line = meth.source_location.last
24
- num_lines = meth.source.lines.count
25
- authors = repo.blame(meth.source_location.first).lines.select do |v|
26
- v.lineno >= start_line && v.lineno <= start_line + num_lines
27
- end.map do |v|
28
- v.commit.author.output(Time.new).split(/</).first.strip
29
- end
30
-
31
- lines_with_blame = []
32
- meth.source.lines.zip(authors) { |line, author| lines_with_blame << ("#{author}".ljust(10) + colorize_code(line)) }
33
- output.puts lines_with_blame.join
34
- end
35
-
36
- command "diff", "Show the diff for a method", :requires_gem => ["grit", "diffy"] do |meth_name|
37
- require 'grit'
38
- require 'diffy'
39
-
40
- if (meth = get_method_object(meth_name, target, {})).nil?
41
- output.puts "Invalid method name: #{meth_name}."
42
- next
43
- end
44
-
45
- output.puts colorize_code(Diffy::Diff.new(method_code_from_head(meth), meth.source))
46
- end
47
-
48
- helpers do
49
- def get_file_from_commit(path)
50
- repo = Grit::Repo.new('.')
51
- head = repo.commits.first
52
- tree_names = path.split("/")
53
- start_tree = head.tree
54
- blob_name = tree_names.last
55
- tree = tree_names[0..-2].inject(start_tree) { |a, v| a.trees.find { |t| t.basename == v } }
56
- blob = tree.blobs.find { |v| v.basename == blob_name }
57
- blob.data
58
- end
59
-
60
- def method_code_from_head(meth)
61
- rel_path = relative_path(meth.source_location.first)
62
- code = get_file_from_commit(rel_path)
63
- start_line = meth.source_location.last
64
- code_length = meth.source.lines.count
65
- code.lines.to_a[(start_line - 1)...((start_line - 1) + code_length)].join
66
- end
67
-
68
- def relative_path(path)
69
- path =~ /#{Regexp.escape(File.expand_path("."))}\/(.*)/
70
- $1
71
- end
72
-
73
- end
74
-
75
14
  end
76
15
  end
77
16
  end
@@ -27,7 +27,7 @@ class Pry
27
27
  begin
28
28
  require gem_name
29
29
  rescue LoadError
30
- raise PluginNotFound, "The plugin '#{gem_name}' was not found!"
30
+ $stderr.puts "Warning: The plugin '#{gem_name}' was not found!"
31
31
  end
32
32
  self.active = true
33
33
  self.enabled = true
@@ -82,6 +82,13 @@ class Pry
82
82
  end
83
83
  end
84
84
 
85
+ # Load any Ruby files specified with the -r flag on the command line.
86
+ def self.load_requires
87
+ Pry.config.requires.each do |file|
88
+ require file
89
+ end
90
+ end
91
+
85
92
  # Start a Pry REPL.
86
93
  # This method also loads the files specified in `Pry::RC_FILES` the
87
94
  # first time it is invoked.
@@ -97,6 +104,7 @@ class Pry
97
104
  # multiple times per each new session (i.e in debugging)
98
105
  load_rc if Pry.config.should_load_rc
99
106
  load_plugins if Pry.config.plugins.enabled
107
+ load_requires if Pry.config.should_load_requires
100
108
  load_history if Pry.config.history.should_load
101
109
 
102
110
  @initial_session = false
@@ -190,11 +198,16 @@ class Pry
190
198
  config.pager = true
191
199
  config.editor = default_editor_for_platform
192
200
  config.should_load_rc = true
201
+ config.disable_auto_reload = false
202
+ config.command_prefix = ""
193
203
 
194
204
  config.plugins ||= OpenStruct.new
195
205
  config.plugins.enabled = true
196
206
  config.plugins.strict_loading = true
197
207
 
208
+ config.requires ||= []
209
+ config.should_load_requires = true
210
+
198
211
  config.history ||= OpenStruct.new
199
212
  config.history.should_save = true
200
213
  config.history.should_load = true
@@ -247,7 +260,7 @@ class Pry
247
260
  if target.is_a?(Binding)
248
261
  target
249
262
  else
250
- if target == TOPLEVEL_BINDING.eval('self')
263
+ if TOPLEVEL_BINDING.eval('self') == target
251
264
  TOPLEVEL_BINDING
252
265
  else
253
266
  target.__binding__
@@ -1,3 +1,3 @@
1
1
  class Pry
2
- VERSION = "0.9.2"
2
+ VERSION = "0.9.3"
3
3
  end
@@ -74,12 +74,15 @@ end
74
74
 
75
75
  class InputTester
76
76
  def initialize(*actions)
77
+ if actions.last.is_a?(Hash) && actions.last.keys == [:history]
78
+ @hist = actions.pop[:history]
79
+ end
77
80
  @orig_actions = actions.dup
78
81
  @actions = actions
79
82
  end
80
83
 
81
84
  def readline(*)
82
- @actions.shift
85
+ @actions.shift.tap{ |line| @hist << line if @hist }
83
86
  end
84
87
 
85
88
  def rewind
@@ -93,6 +93,57 @@ describe "Pry::CommandProcessor" do
93
93
  pos.should == command.name.length
94
94
  end
95
95
 
96
+ it 'should correctly match a command preceded by the command_prefix if one is defined' do
97
+ Pry.config.command_prefix = "%"
98
+
99
+ @pry.commands.command("test-command") {}
100
+ command, captures, pos = @command_processor.command_matched "%test-command hello", binding
101
+
102
+ command.name.should == "test-command"
103
+ captures.should == []
104
+ pos.should == "test-command".length + "%".length
105
+
106
+ Pry.config.command_prefix = ''
107
+ end
108
+
109
+ it 'should not match a command not preceded by the command_prefix if one is defined' do
110
+ Pry.config.command_prefix = "%"
111
+
112
+ @pry.commands.command("test-command") {}
113
+ command, captures, pos = @command_processor.command_matched "test-command hello", binding
114
+
115
+ command.should == nil
116
+ captures.should == nil
117
+
118
+ Pry.config.command_prefix = ''
119
+ end
120
+
121
+ it 'should match a command preceded by the command_prefix when :use_prefix => false' do
122
+ Pry.config.command_prefix = "%"
123
+
124
+ @pry.commands.command("test-command", "", :use_prefix => false) {}
125
+ command, captures, pos = @command_processor.command_matched "%test-command hello", binding
126
+
127
+ command.name.should == "test-command"
128
+ captures.should == []
129
+ pos.should == "test-command".length + "%".length
130
+
131
+ Pry.config.command_prefix = ''
132
+ end
133
+
134
+ it 'should match a command not preceded by the command_prefix when :use_prefix => false' do
135
+ Pry.config.command_prefix = "%"
136
+
137
+ @pry.commands.command("test-command", "", :use_prefix => false) {}
138
+ command, captures, pos = @command_processor.command_matched "test-command hello", binding
139
+
140
+ command.name.should == "test-command"
141
+ captures.should == []
142
+ pos.should == "test-command".length
143
+
144
+ Pry.config.command_prefix = ''
145
+ end
146
+
96
147
  it 'should correctly match a regex command with spaces in its name' do
97
148
  regex_command_name = /test\s+(.+)\s+command/
98
149
  @pry.commands.command(regex_command_name) {}
@@ -201,5 +252,4 @@ describe "Pry::CommandProcessor" do
201
252
  # you'll cause yourself incredible confusion
202
253
  lambda { @command_processor.command_matched('boast #{c}', binding) }.should.not.raise NameError
203
254
  end
204
-
205
255
  end
@@ -211,7 +211,7 @@ describe "Pry::DefaultCommands::Input" do
211
211
  @hist.push "hello"
212
212
  @hist.push "world"
213
213
  str_output = StringIO.new
214
- redirect_pry_io(InputTester.new("hist", "exit-all"), str_output) do
214
+ redirect_pry_io(InputTester.new("hist", "exit-all", :history => @hist), str_output) do
215
215
  pry
216
216
  end
217
217
  str_output.string.should =~ /hello\n.*world/
@@ -223,7 +223,7 @@ describe "Pry::DefaultCommands::Input" do
223
223
  @hist.push ":bucket"
224
224
  @hist.push ":ostrich"
225
225
  str_output = StringIO.new
226
- redirect_pry_io(InputTester.new("hist --replay -1", "exit-all"), str_output) do
226
+ redirect_pry_io(InputTester.new("hist --replay -1", "exit-all", :history => @hist), str_output) do
227
227
  pry
228
228
  end
229
229
  str_output.string.should =~ /ostrich/
@@ -234,7 +234,7 @@ describe "Pry::DefaultCommands::Input" do
234
234
  @hist.push ":hello"
235
235
  @hist.push ":carl"
236
236
  str_output = StringIO.new
237
- redirect_pry_io(InputTester.new("hist --replay 0..2", "exit-all"), str_output) do
237
+ redirect_pry_io(InputTester.new("hist --replay 0..2", "exit-all", :history => @hist), str_output) do
238
238
  pry
239
239
  end
240
240
  str_output.string.should =~ /:hello\n.*:carl/
@@ -253,21 +253,21 @@ describe "Pry::DefaultCommands::Input" do
253
253
  @hist.push "place holder"
254
254
 
255
255
  str_output = StringIO.new
256
- redirect_pry_io(InputTester.new("hist --grep o", "exit-all"), str_output) do
256
+ redirect_pry_io(InputTester.new("hist --grep o", "exit-all", :history => @hist), str_output) do
257
257
  pry
258
258
  end
259
259
  str_output.string.should =~ /\d:.*?box\n\d:.*?button\n\d:.*?orange/
260
260
 
261
261
  # test more than one word in a regex match (def blah)
262
262
  str_output = StringIO.new
263
- redirect_pry_io(InputTester.new("hist --grep def blah", "exit-all"), str_output) do
263
+ redirect_pry_io(InputTester.new("hist --grep def blah", "exit-all", :history => @hist), str_output) do
264
264
  pry
265
265
  end
266
266
  str_output.string.should =~ /def blah 1/
267
267
 
268
268
  # test more than one word with leading white space in a regex match (def boink)
269
269
  str_output = StringIO.new
270
- redirect_pry_io(InputTester.new("hist --grep def boink", "exit-all"), str_output) do
270
+ redirect_pry_io(InputTester.new("hist --grep def boink", "exit-all", :history => @hist), str_output) do
271
271
  pry
272
272
  end
273
273
  str_output.string.should =~ /def boink 2/
@@ -280,7 +280,7 @@ describe "Pry::DefaultCommands::Input" do
280
280
  end
281
281
 
282
282
  str_output = StringIO.new
283
- redirect_pry_io(InputTester.new("hist --tail 3", "exit-all"), str_output) do
283
+ redirect_pry_io(InputTester.new("hist --tail 3", "exit-all", :history => @hist), str_output) do
284
284
  pry
285
285
  end
286
286
 
@@ -297,7 +297,7 @@ describe "Pry::DefaultCommands::Input" do
297
297
  end
298
298
 
299
299
  str_output = StringIO.new
300
- redirect_pry_io(InputTester.new("hist --head 4", "exit-all"), str_output) do
300
+ redirect_pry_io(InputTester.new("hist --head 4", "exit-all", :history => @hist), str_output) do
301
301
  pry
302
302
  end
303
303
 
@@ -314,7 +314,7 @@ describe "Pry::DefaultCommands::Input" do
314
314
  end
315
315
 
316
316
  str_output = StringIO.new
317
- redirect_pry_io(InputTester.new("hist --show 1..4", "exit-all"), str_output) do
317
+ redirect_pry_io(InputTester.new("hist --show 1..4", "exit-all", :history => @hist), str_output) do
318
318
  pry
319
319
  end
320
320
 
@@ -17,6 +17,36 @@ describe Pry do
17
17
  end
18
18
  end
19
19
 
20
+ if RUBY_VERSION =~ /1.9/
21
+ describe "Exotic object support" do
22
+
23
+ # regression test for exotic object support
24
+ it "Should not error when return value is a BasicObject instance" do
25
+
26
+ lambda do
27
+ redirect_pry_io(InputTester.new("BasicObject.new", "exit-all"), StringIO.new) do
28
+ Pry.start
29
+ end
30
+ end.should.not.raise NoMethodError
31
+
32
+ end
33
+ end
34
+ end
35
+
36
+
37
+ describe "Pry.binding_for" do
38
+
39
+ # regression test for burg's bug (see git history)
40
+ it "Should not error when object doesn't have a valid == method" do
41
+ o = Object.new
42
+ def o.==(other)
43
+ raise
44
+ end
45
+
46
+ lambda { Pry.binding_for(o) }.should.not.raise Exception
47
+ end
48
+ end
49
+
20
50
  describe "open a Pry session on an object" do
21
51
  describe "rep" do
22
52
  before do
@@ -710,7 +740,7 @@ describe Pry do
710
740
 
711
741
  klass.commands.keys.size.should == 3
712
742
  klass.commands.keys.include?("help").should == true
713
- klass.commands.keys.include?("install").should == true
743
+ klass.commands.keys.include?("install-command").should == true
714
744
  klass.commands.keys.include?("h").should == true
715
745
  end
716
746
 
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: pry
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.9.2
5
+ version: 0.9.3
6
6
  platform: i386-mingw32
7
7
  authors:
8
8
  - John Mair (banisterfiend)
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-06-21 00:00:00 Z
13
+ date: 2011-07-28 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: ruby_parser
@@ -89,7 +89,7 @@ dependencies:
89
89
  version: 1.3.0
90
90
  type: :runtime
91
91
  version_requirements: *id007
92
- description: an IRB alternative and runtime developer console
92
+ description: An IRB alternative and runtime developer console
93
93
  email: jrmair@gmail.com
94
94
  executables:
95
95
  - pry
@@ -164,7 +164,7 @@ files:
164
164
  - test/testrc
165
165
  - wiki/Customizing-pry.md
166
166
  - wiki/Home.md
167
- homepage: http://banisterfiend.wordpress.com
167
+ homepage: http://pry.github.com
168
168
  licenses: []
169
169
 
170
170
  post_install_message:
@@ -190,7 +190,7 @@ rubyforge_project:
190
190
  rubygems_version: 1.7.2
191
191
  signing_key:
192
192
  specification_version: 3
193
- summary: an IRB alternative and runtime developer console
193
+ summary: An IRB alternative and runtime developer console
194
194
  test_files:
195
195
  - test/helper.rb
196
196
  - test/test_command_helpers.rb