Commit Graph

3 Commits

Author SHA1 Message Date
Kyrylo Silin 367e076670 Change behavior of `cd -` command
Since banister begged me to do that... completely rewrite `cd -`
command (implemetation is much simpler now).

This commit brings such changes:

  * completely rewrite behavior of `cd -` command;

  * implement ScratchPad aka Pad for unit testing purposes (by
    banister);

  * use Pad riches in the unit tests for `cd -` command;

  * remove verbose and clunky unit tests;

This commit brings new meaning to the `cd -` command. The main
difference is that the new command saves entire binding stack, not just
the last binding. Let me show you an example of the variance between
these two implemetations:

  * Old `cd -` implementation saves *only* last binding. With our next
    `cd -` invocation our interjacent results are lost:
      [1] pry(main)> cd 1/2/3/../4
      [2] pry(4):3> cd -
      [3] pry(main)> cd -
      [4] pry(4):1> nesting
      Nesting status:
      --
      0. main (Pry top level)
      1. 4

      Also, there are a few bugs in old `cd -` command:

        * you type `cd :foo`, `cd 1/2/3` and `cd -`. The last command
          relocates you to the scope of `3` (leaves you where you was),
          when `:foo` is expected;

        * you type `cd :foo`, `cd 1/2/3/../4`, `cd -`. The last command
          relocates you to the scope of `3`, when `:foo` is expected.

  * New and shiny `cd -` is devoid of those shortcomings:
      [1] pry(main)> cd 1/2/3/../4
      [2] pry(4):3> cd -
      [3] pry(main)> cd -
      [4] pry(4):3> nesting
      Nesting status:
      --
      0. main (Pry top level)
      1. 1
      2. 2
      3. 4

As I said before, this solution is *much* simpler and less error-prone.

Signed-off-by: Kyrylo Silin <kyrylosilin@gmail.com>
2012-06-27 14:54:07 +03:00
Kyrylo Silin 3e56239d50 Implement `cd -` command
The `cd -` command allows a user to toggle between last two scopes.

Example:

  [1] pry(main)> cd :foo
  [2] pry(:foo):1> cd :bar
  [3] pry(:bar):2> cd -
           ^ save :bar and toggle
  [4] pry(:foo):1> cd 44
           ^ we are back at foo
  [5] pry(44):2> cd ..
  [6] pry(:foo):1> cd ..
  [7] pry(main)> cd -
           ^ save main and toggle
  [8] pry(:foo):1>
           ^ we are back at foo

Signed-off-by: Kyrylo Silin <kyrylosilin@gmail.com>
Signed-off-by: Yorick Peterse <yorickpeterse@gmail.com>
2012-06-19 16:43:46 +02:00
Conrad Irwin 2b7ae5ab60 move cd/hist commands to their own files and new groups 2012-03-01 17:10:55 -08:00