pry 0.10.2-i386-mswin32 → 1.0.0.pre1-i386-mswin32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (189) hide show
  1. data/.document +2 -0
  2. data/.gitignore +16 -0
  3. data/.travis.yml +21 -0
  4. data/.yardopts +3 -0
  5. data/CHANGELOG +503 -0
  6. data/CONTRIBUTORS +55 -0
  7. data/Gemfile +9 -0
  8. data/Guardfile +62 -0
  9. data/LICENSE +2 -2
  10. data/{README.md → README.markdown} +31 -37
  11. data/Rakefile +144 -0
  12. data/TODO +117 -0
  13. data/lib/pry.rb +146 -33
  14. data/lib/pry/cli.rb +13 -35
  15. data/lib/pry/code.rb +63 -24
  16. data/lib/pry/code/loc.rb +2 -2
  17. data/lib/pry/code_object.rb +21 -40
  18. data/lib/pry/command.rb +6 -9
  19. data/lib/pry/command_set.rb +37 -80
  20. data/lib/pry/commands.rb +1 -1
  21. data/lib/pry/commands/amend_line.rb +1 -1
  22. data/lib/pry/commands/bang.rb +1 -1
  23. data/lib/pry/commands/cat.rb +2 -11
  24. data/lib/pry/commands/cat/abstract_formatter.rb +1 -1
  25. data/lib/pry/commands/cat/exception_formatter.rb +7 -6
  26. data/lib/pry/commands/cat/file_formatter.rb +32 -15
  27. data/lib/pry/commands/cat/input_expression_formatter.rb +1 -1
  28. data/lib/pry/commands/cd.rb +3 -14
  29. data/lib/pry/commands/code_collector.rb +4 -4
  30. data/lib/pry/commands/easter_eggs.rb +3 -3
  31. data/lib/pry/commands/edit.rb +22 -10
  32. data/lib/pry/commands/edit/exception_patcher.rb +1 -1
  33. data/lib/pry/commands/edit/file_and_line_locator.rb +2 -0
  34. data/lib/pry/{method/patcher.rb → commands/edit/method_patcher.rb} +37 -40
  35. data/lib/pry/commands/find_method.rb +22 -16
  36. data/lib/pry/commands/gem_install.rb +2 -5
  37. data/lib/pry/commands/gem_open.rb +1 -1
  38. data/lib/pry/commands/gist.rb +11 -10
  39. data/lib/pry/commands/help.rb +14 -14
  40. data/lib/pry/commands/hist.rb +5 -24
  41. data/lib/pry/commands/ls.rb +287 -56
  42. data/lib/pry/commands/play.rb +10 -44
  43. data/lib/pry/commands/pry_backtrace.rb +2 -1
  44. data/lib/pry/commands/raise_up.rb +1 -1
  45. data/lib/pry/commands/reload_code.rb +15 -31
  46. data/lib/pry/commands/ri.rb +3 -7
  47. data/lib/pry/commands/shell_command.rb +12 -17
  48. data/lib/pry/commands/shell_mode.rb +2 -2
  49. data/lib/pry/commands/show_doc.rb +0 -5
  50. data/lib/pry/commands/show_info.rb +10 -11
  51. data/lib/pry/commands/show_source.rb +3 -15
  52. data/lib/pry/commands/simple_prompt.rb +1 -1
  53. data/lib/pry/commands/toggle_color.rb +4 -8
  54. data/lib/pry/commands/whereami.rb +10 -18
  55. data/lib/pry/completion.rb +293 -0
  56. data/lib/pry/config.rb +233 -20
  57. data/lib/pry/core_extensions.rb +19 -29
  58. data/lib/pry/custom_completions.rb +6 -0
  59. data/lib/pry/editor.rb +103 -109
  60. data/lib/pry/helpers/base_helpers.rb +109 -22
  61. data/lib/pry/helpers/command_helpers.rb +8 -10
  62. data/lib/pry/helpers/documentation_helpers.rb +2 -1
  63. data/lib/pry/helpers/text.rb +5 -4
  64. data/lib/pry/history.rb +10 -21
  65. data/lib/pry/history_array.rb +0 -5
  66. data/lib/pry/hooks.rb +29 -9
  67. data/lib/pry/indent.rb +10 -5
  68. data/lib/pry/method.rb +86 -81
  69. data/lib/pry/method/weird_method_locator.rb +2 -4
  70. data/lib/pry/module_candidate.rb +14 -5
  71. data/lib/pry/pager.rb +48 -193
  72. data/lib/pry/plugins.rb +2 -2
  73. data/lib/pry/pry_class.rb +193 -104
  74. data/lib/pry/pry_instance.rb +154 -152
  75. data/lib/pry/rbx_method.rb +13 -0
  76. data/lib/pry/rbx_path.rb +1 -1
  77. data/lib/pry/repl.rb +14 -17
  78. data/lib/pry/repl_file_loader.rb +3 -8
  79. data/lib/pry/rubygem.rb +3 -3
  80. data/lib/pry/terminal.rb +3 -4
  81. data/lib/pry/test/helper.rb +11 -6
  82. data/lib/pry/version.rb +1 -1
  83. data/lib/pry/wrapped_module.rb +56 -49
  84. data/man/pry.1 +195 -0
  85. data/man/pry.1.html +204 -0
  86. data/man/pry.1.ronn +141 -0
  87. data/pry.gemspec +31 -0
  88. data/spec/Procfile +3 -0
  89. data/spec/cli_spec.rb +78 -0
  90. data/spec/code_object_spec.rb +277 -0
  91. data/spec/code_spec.rb +219 -0
  92. data/spec/command_helpers_spec.rb +29 -0
  93. data/spec/command_integration_spec.rb +562 -0
  94. data/spec/command_set_spec.rb +627 -0
  95. data/spec/command_spec.rb +821 -0
  96. data/spec/commands/amend_line_spec.rb +247 -0
  97. data/spec/commands/bang_spec.rb +18 -0
  98. data/spec/commands/cat_spec.rb +164 -0
  99. data/spec/commands/cd_spec.rb +250 -0
  100. data/spec/commands/disable_pry_spec.rb +25 -0
  101. data/spec/commands/edit_spec.rb +725 -0
  102. data/spec/commands/exit_all_spec.rb +27 -0
  103. data/spec/commands/exit_program_spec.rb +19 -0
  104. data/spec/commands/exit_spec.rb +28 -0
  105. data/spec/commands/find_method_spec.rb +70 -0
  106. data/spec/commands/gem_list_spec.rb +26 -0
  107. data/spec/commands/gist_spec.rb +79 -0
  108. data/spec/commands/help_spec.rb +56 -0
  109. data/spec/commands/hist_spec.rb +172 -0
  110. data/spec/commands/jump_to_spec.rb +15 -0
  111. data/spec/commands/ls_spec.rb +189 -0
  112. data/spec/commands/play_spec.rb +136 -0
  113. data/spec/commands/raise_up_spec.rb +56 -0
  114. data/spec/commands/save_file_spec.rb +177 -0
  115. data/spec/commands/show_doc_spec.rb +488 -0
  116. data/spec/commands/show_input_spec.rb +17 -0
  117. data/spec/commands/show_source_spec.rb +760 -0
  118. data/spec/commands/whereami_spec.rb +203 -0
  119. data/spec/completion_spec.rb +221 -0
  120. data/spec/control_d_handler_spec.rb +62 -0
  121. data/spec/documentation_helper_spec.rb +73 -0
  122. data/spec/editor_spec.rb +79 -0
  123. data/spec/exception_whitelist_spec.rb +21 -0
  124. data/spec/fixtures/candidate_helper1.rb +11 -0
  125. data/spec/fixtures/candidate_helper2.rb +8 -0
  126. data/spec/fixtures/example.erb +5 -0
  127. data/spec/fixtures/example_nesting.rb +33 -0
  128. data/spec/fixtures/show_source_doc_examples.rb +15 -0
  129. data/spec/fixtures/testlinkrc +2 -0
  130. data/spec/fixtures/testrc +2 -0
  131. data/spec/fixtures/testrcbad +2 -0
  132. data/spec/fixtures/whereami_helper.rb +6 -0
  133. data/spec/helper.rb +35 -0
  134. data/spec/helpers/bacon.rb +86 -0
  135. data/spec/helpers/mock_pry.rb +44 -0
  136. data/spec/helpers/repl_tester.rb +112 -0
  137. data/spec/helpers/table_spec.rb +105 -0
  138. data/spec/history_array_spec.rb +67 -0
  139. data/spec/hooks_spec.rb +522 -0
  140. data/spec/indent_spec.rb +301 -0
  141. data/spec/method_spec.rb +482 -0
  142. data/spec/prompt_spec.rb +61 -0
  143. data/spec/pry_defaults_spec.rb +420 -0
  144. data/spec/pry_history_spec.rb +69 -0
  145. data/spec/pry_output_spec.rb +95 -0
  146. data/spec/pry_repl_spec.rb +86 -0
  147. data/spec/pry_spec.rb +394 -0
  148. data/spec/pryrc_spec.rb +97 -0
  149. data/spec/run_command_spec.rb +25 -0
  150. data/spec/sticky_locals_spec.rb +147 -0
  151. data/spec/syntax_checking_spec.rb +81 -0
  152. data/spec/wrapped_module_spec.rb +261 -0
  153. data/wiki/Customizing-pry.md +397 -0
  154. data/wiki/Home.md +4 -0
  155. metadata +272 -61
  156. checksums.yaml +0 -7
  157. data/CHANGELOG.md +0 -714
  158. data/lib/pry/code/code_file.rb +0 -103
  159. data/lib/pry/color_printer.rb +0 -55
  160. data/lib/pry/commands/change_inspector.rb +0 -27
  161. data/lib/pry/commands/change_prompt.rb +0 -26
  162. data/lib/pry/commands/list_inspectors.rb +0 -35
  163. data/lib/pry/commands/list_prompts.rb +0 -35
  164. data/lib/pry/commands/ls/constants.rb +0 -47
  165. data/lib/pry/commands/ls/formatter.rb +0 -49
  166. data/lib/pry/commands/ls/globals.rb +0 -48
  167. data/lib/pry/commands/ls/grep.rb +0 -21
  168. data/lib/pry/commands/ls/instance_vars.rb +0 -39
  169. data/lib/pry/commands/ls/interrogatable.rb +0 -18
  170. data/lib/pry/commands/ls/jruby_hacks.rb +0 -49
  171. data/lib/pry/commands/ls/local_names.rb +0 -35
  172. data/lib/pry/commands/ls/local_vars.rb +0 -39
  173. data/lib/pry/commands/ls/ls_entity.rb +0 -70
  174. data/lib/pry/commands/ls/methods.rb +0 -57
  175. data/lib/pry/commands/ls/methods_helper.rb +0 -46
  176. data/lib/pry/commands/ls/self_methods.rb +0 -32
  177. data/lib/pry/commands/watch_expression.rb +0 -105
  178. data/lib/pry/commands/watch_expression/expression.rb +0 -38
  179. data/lib/pry/config/behavior.rb +0 -139
  180. data/lib/pry/config/convenience.rb +0 -25
  181. data/lib/pry/config/default.rb +0 -161
  182. data/lib/pry/exceptions.rb +0 -78
  183. data/lib/pry/input_completer.rb +0 -242
  184. data/lib/pry/input_lock.rb +0 -132
  185. data/lib/pry/inspector.rb +0 -27
  186. data/lib/pry/last_exception.rb +0 -61
  187. data/lib/pry/object_path.rb +0 -82
  188. data/lib/pry/output.rb +0 -50
  189. data/lib/pry/prompt.rb +0 -26
data/TODO ADDED
@@ -0,0 +1,117 @@
1
+ 0.9.5
2
+ * include method visiblity in show-doc and stat output
3
+ * tempfile should end in .rb (for edit -t)
4
+ * ls output should not be in array format
5
+ * exceptions should allow access to previous items in the backtrace
6
+ * input should allow multiple objects which are switched to automatically when EOF is reached on the preceding one
7
+ * pry -r should happen in pry
8
+ * more plugin-related commands in pry - see installed ones, see activated ones, see available on rubygems
9
+ * should also allow plugins be explicitly activated as a command line option
10
+ * should not raise if plugin activation fails (should show warning instead)
11
+ * more documentation on CommandContext, etc and also command helpers
12
+ * fix history saving (should not save all of Readline::HISTORY, but only what changed)
13
+ * prevent blank lines going to Readline::HISTORY
14
+ * ensure that cat --ex emulates the `whereami` format - includes line numbers and formatted the same, etc
15
+ * rename inp and out to _inp_ and _out_ otherwise than can overwrite locals by those names when debugging (not good)
16
+ * add source file to stat command
17
+ * make plugins use hash instead of array
18
+ * ensure edit -t has 'edit' alias (no parameters) and dumps eval_string into buffer
19
+ * whitelist exceptions
20
+ * hooks system
21
+ * jruby shell command support
22
+
23
+ 0.9.3
24
+ * hist command now excludes last line of input (the command invocation itself)
25
+ * hist now has `history` alias
26
+ * `pry -r` requires now happen after plugin loading (so as not to interfere with
27
+ * new Pry.config.disable_auto_reload option, for turning off auto reloading by edit-method and related
28
+ * add better error messages for `cd` command
29
+ * add command_prefix
30
+ * change some command names to include hyphen, e.g version => pry-version, install => install-command
31
+ * do cat --ex and edit --ex
32
+ * add reload-method
33
+ * fixed exotic object regression - BasicObject.new etc now return "=> unknown"
34
+ * converted: import => import-set, version => pry-version, install => install-command
35
+ * fix show-doc bug for ruby 1.8 and Kernel.fork
36
+ * edit -t (opens a temporary file and evals it in current context when closed)
37
+
38
+ 0.9.0
39
+ Major features
40
+ --------------
41
+ * Restructure command system and helpers (almost complete)
42
+ * Delete unnecessary commands, add a couple of new ones (e.g amend-line)
43
+ * Readline history
44
+ * Plugin support
45
+ * Support Rubinius core methods
46
+ * in[] and out[] arrays
47
+ * Improve test coverage (test some commands, etc)
48
+
49
+ Minor changes
50
+ -------------
51
+ * improve edit-method support for various editors
52
+ * ensure all commands have appropriate error handing and informative error messages
53
+ * show-doc should include signature of method
54
+
55
+ Optional
56
+ --------
57
+ * multi-line readline support
58
+
59
+
60
+ 0.8.0
61
+ * allow #{} interpolation of all commands
62
+ * update documentation! new commands and features and change in behaviour of `run`
63
+ * add ; at end of line to suppress return value output
64
+ * Remove message spam (before/after hooks)
65
+ * stop commands returning a value
66
+ * use `redo` in the r() method when encounter a command
67
+ * shell functionality should just use system(), but redirect in and
68
+ out to Pry.input and Pry.output by reassining $stdin and $stdout
69
+ for duration of block.
70
+ * basicobject and no to_s/inspect support
71
+ * fix documentation, support rdoc and yard properly
72
+ * only load Ripper if 1.9 AND MRI (support jruby 1.9, using
73
+ RubyParser)
74
+ * shell commands invokable file .<command>
75
+ * supercharge cat-file so it can syntax highlight sourcecode files
76
+
77
+
78
+ 0.7.0
79
+ * add pry-doc support with syntax highlighting for docs
80
+ * add 'mj' option to ls (restrict to singleton methods)
81
+ * add _ex_ local to hold last exception raised in an exception
82
+
83
+ 0.6.8
84
+ * add whereami command, a la the `ir_b` gem
85
+ * make .pryrc be loaded by run-time pry sessions
86
+
87
+ 0.6.7
88
+ * color support
89
+ * --simple-prompt for pry commandline
90
+ * -I mode for pry commandline
91
+ * --color mode for pry commandline
92
+ * clean up requires (put them all in one place)
93
+ * simple-prompt command and toggle-color commandd.
94
+
95
+ 0.6.1
96
+ * !@ command alias for exit_all
97
+ * `cd /` for breaking out to pry top level (jump-to 0)
98
+ * made `-e` option work in a more effective way for `pry` command line invocation
99
+ * exit and exit-all commands now accept a parameter, this parameter becomes the return value of repl()
100
+ * `command` method from CommandBase now accepts a :keep_retval arg that determines if command value is returned to pry session or just `nil` (`nil` was old behaviour)
101
+ * tests for new :keep_retval and exit-all/exit behaviour; :keep_retval will remain undocumented.
102
+
103
+ 0.5.0 release:
104
+ * !!!! UPDATE DOCUMENTATION !!!!
105
+ * Use clipped version of Pry.view() for large objects
106
+ * Exit Pry session on ^d
107
+ * Use Shellwords for breaking up parameters to pry commands
108
+ * Use OptionParser to parse options for default pry commands
109
+ * Add version command
110
+ * Refactor 'status' command: add current method info
111
+ * Add meth_name_from_binding utility lambda to commands.rb
112
+ * Add -M, -m, -v(erbose), -a(ll), -s(uper), -l(ocals), -i(ivars), -k(klass vars) options to ls
113
+ * add -i(nstance) option to show-method
114
+ * add --help option to most commands
115
+ * Get rid of ls_method and ls_imethods (subsumed by more powerful ls)
116
+ * Get rid of show_idoc and show_imethod
117
+ * Add special eval-file command that evals target file in current context
data/lib/pry.rb CHANGED
@@ -1,13 +1,10 @@
1
- # (C) John Mair (banisterfiend) 2013
1
+ # (C) John Mair (banisterfiend) 2011
2
2
  # MIT License
3
3
  #
4
- require 'pp'
5
4
 
6
- require 'pry/input_lock'
7
- require 'pry/exceptions'
5
+ require 'pp'
8
6
  require 'pry/helpers/base_helpers'
9
7
  require 'pry/hooks'
10
- require 'forwardable'
11
8
 
12
9
  class Pry
13
10
  # The default hooks - display messages when beginning and ending Pry sessions.
@@ -17,11 +14,42 @@ class Pry
17
14
  end
18
15
 
19
16
  # The default print
20
- DEFAULT_PRINT = proc do |output, value, _pry_|
21
- _pry_.pager.open do |pager|
22
- pager.print _pry_.config.output_prefix
23
- Pry::ColorPrinter.pp(value, pager, Pry::Terminal.width! - 1)
17
+ DEFAULT_PRINT = proc do |output, value|
18
+ output_with_default_format(output, value, :hashrocket => true)
19
+ end
20
+
21
+ def self.output_with_default_format(output, value, options = {})
22
+ stringified = begin
23
+ value.pretty_inspect
24
+ rescue RescuableException
25
+ nil
26
+ end
27
+
28
+ unless String === stringified
29
+ # Read the class name off of the singleton class to provide a default
30
+ # inspect.
31
+ eig = class << value; self; end
32
+ klass = Pry::Method.safe_send(eig, :ancestors).first
33
+ id = value.__id__.to_s(16) rescue 0
34
+ stringified = "#<#{klass}:0x#{id}>"
24
35
  end
36
+
37
+ nonce = rand(0x100000000).to_s(16) # whatever
38
+
39
+ stringified.gsub!(/#</, "%<#{nonce}")
40
+ # Don't recolorize output with color (for cucumber, looksee, etc.) [Issue #751]
41
+ colorized = if stringified =~ /\e\[/
42
+ stringified
43
+ else
44
+ Helpers::BaseHelpers.colorize_code(stringified)
45
+ end
46
+
47
+ # avoid colour-leak from CodeRay and any of the users' previous output
48
+ colorized = colorized.sub(/(\n*)\z/, "\e[0m\\1") if Pry.color
49
+
50
+ result = colorized.gsub(/%<(.*?)#{nonce}/, '#<\1')
51
+ result = "=> #{result}"if options[:hashrocket]
52
+ Helpers::BaseHelpers.stagger_output(result, output)
25
53
  end
26
54
 
27
55
  # may be convenient when working with enormous objects and
@@ -36,7 +64,7 @@ class Pry
36
64
 
37
65
  # useful when playing with truly enormous objects
38
66
  CLIPPED_PRINT = proc do |output, value|
39
- output.puts Pry.view_clip(value, id: true)
67
+ output.puts Pry.view_clip(value)
40
68
  end
41
69
 
42
70
  # Will only show the first line of the backtrace
@@ -54,36 +82,32 @@ class Pry
54
82
  # The default prompt; includes the target and nesting level
55
83
  DEFAULT_PROMPT = [
56
84
  proc { |target_self, nest_level, pry|
57
- "[#{pry.input_array.size}] #{pry.config.prompt_name}(#{Pry.view_clip(target_self)})#{":#{nest_level}" unless nest_level.zero?}> "
85
+ "[#{pry.input_array.size}] #{Pry.config.prompt_name}(#{Pry.view_clip(target_self)})#{":#{nest_level}" unless nest_level.zero?}> "
58
86
  },
59
87
 
60
88
  proc { |target_self, nest_level, pry|
61
- "[#{pry.input_array.size}] #{pry.config.prompt_name}(#{Pry.view_clip(target_self)})#{":#{nest_level}" unless nest_level.zero?}* "
89
+ "[#{pry.input_array.size}] #{Pry.config.prompt_name}(#{Pry.view_clip(target_self)})#{":#{nest_level}" unless nest_level.zero?}* "
62
90
  }
63
91
  ]
64
92
 
65
- DEFAULT_PROMPT_SAFE_OBJECTS = [String, Numeric, Symbol, nil, true, false]
66
-
67
93
  # A simple prompt - doesn't display target or nesting level
68
94
  SIMPLE_PROMPT = [proc { ">> " }, proc { " | " }]
69
95
 
70
- NO_PROMPT = [proc { '' }, proc { '' }]
71
-
72
96
  SHELL_PROMPT = [
73
- proc { |target_self, _, _pry_| "#{_pry_.config.prompt_name} #{Pry.view_clip(target_self)}:#{Dir.pwd} $ " },
74
- proc { |target_self, _, _pry_| "#{_pry_.config.prompt_name} #{Pry.view_clip(target_self)}:#{Dir.pwd} * " }
97
+ proc { |target_self, _, _| "#{Pry.config.prompt_name} #{Pry.view_clip(target_self)}:#{Dir.pwd} $ " },
98
+ proc { |target_self, _, _| "#{Pry.config.prompt_name} #{Pry.view_clip(target_self)}:#{Dir.pwd} * " }
75
99
  ]
76
100
 
77
101
  # A prompt that includes the full object path as well as
78
102
  # input/output (_in_ and _out_) information. Good for navigation.
79
103
  NAV_PROMPT = [
80
- proc do |_, _, _pry_|
81
- tree = _pry_.binding_stack.map { |b| Pry.view_clip(b.eval("self")) }.join " / "
82
- "[#{_pry_.input_array.count}] (#{_pry_.config.prompt_name}) #{tree}: #{_pry_.binding_stack.size - 1}> "
104
+ proc do |conf|
105
+ tree = conf.binding_stack.map { |b| Pry.view_clip(b.eval("self")) }.join " / "
106
+ "[#{conf.expr_number}] (#{Pry.config.prompt_name}) #{tree}: #{conf.nesting_level}> "
83
107
  end,
84
- proc do |_, _, _pry_|
85
- tree = _pry_.binding_stack.map { |b| Pry.view_clip(b.eval("self")) }.join " / "
86
- "[#{_pry_.input_array.count}] (#{ _pry_.config.prompt_name}) #{tree}: #{_pry_.binding_stack.size - 1}* "
108
+ proc do |conf|
109
+ tree = conf.binding_stack.map { |b| Pry.view_clip(b.eval("self")) }.join " / "
110
+ "[#{conf.expr_number}] (#{ Pry.config.prompt_name}) #{tree}: #{conf.nesting_level}* "
87
111
  end,
88
112
  ]
89
113
 
@@ -100,7 +124,7 @@ class Pry
100
124
  else
101
125
  # Otherwise, saves current binding stack as old stack and pops last
102
126
  # binding out of binding stack (the old stack still has that binding).
103
- _pry_.command_state["cd"] ||= Pry::Config.from_hash({}) # FIXME
127
+ _pry_.command_state["cd"] ||= OpenStruct.new # FIXME
104
128
  _pry_.command_state['cd'].old_stack = _pry_.binding_stack.dup
105
129
  _pry_.binding_stack.pop
106
130
  end
@@ -116,9 +140,70 @@ class Pry
116
140
  # your process has changed directory since boot. [Issue #675]
117
141
  INITIAL_PWD = Dir.pwd
118
142
 
143
+ # As a REPL, we often want to catch any unexpected exceptions that may have
144
+ # been raised; however we don't want to go overboard and prevent the user
145
+ # from exiting Pry when they want to.
146
+ module RescuableException
147
+ def self.===(exception)
148
+ case exception
149
+ # Catch when the user hits ^C (Interrupt < SignalException), and assume
150
+ # that they just wanted to stop the in-progress command (just like bash etc.)
151
+ when Interrupt
152
+ true
153
+ # Don't catch signals (particularly not SIGTERM) as these are unlikely to be
154
+ # intended for pry itself. We should also make sure that Kernel#exit works.
155
+ when *Pry.config.exception_whitelist
156
+ false
157
+ # All other exceptions will be caught.
158
+ else
159
+ true
160
+ end
161
+ end
162
+ end
163
+
164
+ # An Exception Tag (cf. Exceptional Ruby) that instructs Pry to show the error in
165
+ # a more user-friendly manner. This should be used when the exception happens within
166
+ # Pry itself as a direct consequence of the user typing something wrong.
167
+ #
168
+ # This allows us to distinguish between the user typing:
169
+ #
170
+ # pry(main)> def )
171
+ # SyntaxError: unexpected )
172
+ #
173
+ # pry(main)> method_that_evals("def )")
174
+ # SyntaxError: (eval):1: syntax error, unexpected ')'
175
+ # from ./a.rb:2 in `eval'
176
+ module UserError; end
177
+
178
+ # Catches SecurityErrors if $SAFE is set
179
+ module TooSafeException
180
+ def self.===(exception)
181
+ $SAFE > 0 && SecurityError === exception
182
+ end
183
+ end
184
+
185
+ # Don't catch these exceptions
186
+ DEFAULT_EXCEPTION_WHITELIST = [SystemExit, SignalException, Pry::TooSafeException]
187
+
188
+ # CommandErrors are caught by the REPL loop and displayed to the user. They
189
+ # indicate an exceptional condition that's fatal to the current command.
190
+ class CommandError < StandardError; end
191
+ class MethodNotFound < CommandError; end
192
+
193
+ # indicates obsolete API
194
+ class ObsoleteError < StandardError; end
195
+
119
196
  # This is to keep from breaking under Rails 3.2 for people who are doing that
120
197
  # IRB = Pry thing.
121
- module ExtendCommandBundle; end
198
+ module ExtendCommandBundle
199
+ end
200
+ end
201
+
202
+ if Pry::Helpers::BaseHelpers.mri_18?
203
+ begin
204
+ require 'ruby18_source_location'
205
+ rescue LoadError
206
+ end
122
207
  end
123
208
 
124
209
  require 'method_source'
@@ -130,8 +215,41 @@ require 'rbconfig'
130
215
  require 'tempfile'
131
216
  require 'pathname'
132
217
 
218
+ begin
219
+ require 'readline'
220
+ rescue LoadError
221
+ warn "You're running a version of ruby with no Readline support"
222
+ warn "Please `gem install rb-readline` or recompile ruby --with-readline."
223
+ exit!
224
+ end
225
+
226
+ if Pry::Helpers::BaseHelpers.jruby?
227
+ begin
228
+ require 'ffi'
229
+ rescue LoadError
230
+ warn "Need to `gem install ffi`"
231
+ end
232
+ end
233
+
234
+ if Pry::Helpers::BaseHelpers.windows? && !Pry::Helpers::BaseHelpers.windows_ansi?
235
+ begin
236
+ require 'win32console'
237
+ # The mswin and mingw versions of pry require win32console, so this should
238
+ # only fail on jruby (where win32console doesn't work).
239
+ # Instead we'll recommend ansicon, which does.
240
+ rescue LoadError
241
+ warn "For a better pry experience, please use ansicon: http://adoxa.3eeweb.com/ansicon/"
242
+ end
243
+ end
244
+
245
+ begin
246
+ require 'bond'
247
+ rescue LoadError
248
+ end
249
+
133
250
  require 'pry/version'
134
251
  require 'pry/repl'
252
+ require 'pry/rbx_method'
135
253
  require 'pry/rbx_path'
136
254
  require 'pry/code'
137
255
  require 'pry/history_array'
@@ -143,19 +261,14 @@ require 'pry/history'
143
261
  require 'pry/command'
144
262
  require 'pry/command_set'
145
263
  require 'pry/commands'
264
+ require 'pry/custom_completions'
265
+ require 'pry/completion'
146
266
  require 'pry/plugins'
147
267
  require 'pry/core_extensions'
148
268
  require 'pry/pry_class'
149
269
  require 'pry/pry_instance'
150
270
  require 'pry/cli'
151
- require 'pry/color_printer'
152
271
  require 'pry/pager'
153
272
  require 'pry/terminal'
154
273
  require 'pry/editor'
155
274
  require 'pry/rubygem'
156
- require "pry/indent"
157
- require "pry/last_exception"
158
- require "pry/prompt"
159
- require "pry/inspector"
160
- require 'pry/object_path'
161
- require 'pry/output'
@@ -1,3 +1,4 @@
1
+
1
2
  class Pry
2
3
 
3
4
  # Manage the processing of command line options
@@ -10,9 +11,7 @@ class Pry
10
11
  # @return [Proc] The Proc defining the valid command line options.
11
12
  attr_accessor :options
12
13
 
13
- # @return [Array] The Procs that process the parsed options. Plugins can
14
- # utilize this facility in order to add and process their own Pry
15
- # options.
14
+ # @return [Array] The Procs that process the parsed options.
16
15
  attr_accessor :option_processors
17
16
 
18
17
  # @return [Array<String>] The input array of strings to process
@@ -44,7 +43,7 @@ class Pry
44
43
  end
45
44
 
46
45
  # Add a block responsible for processing parsed options.
47
- def add_option_processor(&block)
46
+ def process_options(&block)
48
47
  self.option_processors ||= []
49
48
  option_processors << block
50
49
 
@@ -57,26 +56,14 @@ class Pry
57
56
  self.option_processors = nil
58
57
  end
59
58
 
60
- def parse_options(args=ARGV)
59
+ def parse_options(args=ARGV.dup)
61
60
  unless options
62
61
  raise NoOptionsError, "No command line options defined! Use Pry::CLI.add_options to add command line options."
63
62
  end
64
63
 
65
64
  self.input_args = args
66
65
 
67
- begin
68
- opts = Slop.parse!(
69
- args,
70
- :help => true,
71
- :multiple_switches => false,
72
- :strict => true,
73
- &options
74
- )
75
- rescue Slop::InvalidOptionError
76
- # Display help message on unknown switches and exit.
77
- puts Slop.new(&options)
78
- exit
79
- end
66
+ opts = Slop.parse!(args, :help => true, :multiple_switches => false, &options)
80
67
 
81
68
  # Option processors are optional.
82
69
  if option_processors
@@ -104,19 +91,19 @@ Slop.new do
104
91
  end.parse(ARGV.dup)
105
92
 
106
93
  if Pry.config.should_load_plugins
107
- Pry::CLI.add_plugin_options
94
+ Pry::CLI.add_plugin_options
108
95
  end
109
96
 
110
97
  # The default Pry command line options (before plugin options are included)
111
98
  Pry::CLI.add_options do
112
99
  banner %{Usage: pry [OPTIONS]
113
100
  Start a Pry session.
114
- See http://pryrepl.org/ for more information.
101
+ See: `https://github.com/pry` for more information.
115
102
  Copyright (c) 2013 John Mair (banisterfiend)
116
103
  --
117
104
  }
118
105
  on :e, :exec=, "A line of code to execute in context before the session starts" do |input|
119
- exec_string << input << "\n"
106
+ exec_string << input + "\n"
120
107
  end
121
108
 
122
109
  on "no-pager", "Disable pager for long output" do
@@ -128,7 +115,7 @@ Copyright (c) 2013 John Mair (banisterfiend)
128
115
  end
129
116
 
130
117
  on "no-color", "Disable syntax highlighting for session" do
131
- Pry.config.color = false
118
+ Pry.color = false
132
119
  end
133
120
 
134
121
  on :f, "Suppress loading of ~/.pryrc and ./.pryrc" do
@@ -149,11 +136,11 @@ Copyright (c) 2013 John Mair (banisterfiend)
149
136
  Pry.config.should_load_plugins = false
150
137
  end
151
138
 
152
- on "plugins", "List installed plugins." do
139
+ on "installed-plugins", "List installed plugins." do
153
140
  puts "Installed Plugins:"
154
141
  puts "--"
155
142
  Pry.locate_plugins.each do |plugin|
156
- puts "#{plugin.name}".ljust(18) << plugin.spec.summary
143
+ puts "#{plugin.name}".ljust(18) + plugin.spec.summary
157
144
  end
158
145
  exit
159
146
  end
@@ -162,10 +149,6 @@ Copyright (c) 2013 John Mair (banisterfiend)
162
149
  Pry.config.prompt = Pry::SIMPLE_PROMPT
163
150
  end
164
151
 
165
- on "noprompt", "No prompt mode" do
166
- Pry.config.prompt = Pry::NO_PROMPT
167
- end
168
-
169
152
  on :r, :require=, "`require` a Ruby script at startup" do |file|
170
153
  Pry.config.requires << file
171
154
  end
@@ -194,7 +177,7 @@ Copyright (c) 2013 John Mair (banisterfiend)
194
177
  "Start the session in the specified context. Equivalent to `context.pry` in a session.",
195
178
  :default => "Pry.toplevel_binding"
196
179
  )
197
- end.add_option_processor do |opts|
180
+ end.process_options do |opts|
198
181
 
199
182
  exit if opts.help?
200
183
 
@@ -202,12 +185,7 @@ end.add_option_processor do |opts|
202
185
  Pry.cli = true
203
186
 
204
187
  # create the actual context
205
- if opts[:context]
206
- Pry.initial_session_setup
207
- context = Pry.binding_for(eval(opts[:context]))
208
- else
209
- context = Pry.toplevel_binding
210
- end
188
+ context = Pry.binding_for(eval(opts[:context]))
211
189
 
212
190
  if Pry::CLI.input_args.any? && Pry::CLI.input_args != ["pry"]
213
191
  full_name = File.expand_path(Pry::CLI.input_args.first)