pry 0.10.2-i386-mingw32 → 1.0.0.pre1-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.
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
@@ -1,4 +1,5 @@
1
- # -*- coding: utf-8 -*-
1
+ require "pry/indent"
2
+
2
3
  ##
3
4
  # Pry is a powerful alternative to the standard IRB shell for Ruby. It
4
5
  # features syntax highlighting, a flexible plugin architecture, runtime
@@ -20,27 +21,54 @@
20
21
  # * https://github.com/pry/pry
21
22
  # * the IRC channel, which is #pry on the Freenode network
22
23
  #
23
-
24
24
  class Pry
25
- attr_accessor :binding_stack
25
+ attr_accessor :input
26
+ attr_accessor :output
27
+ attr_accessor :commands
28
+ attr_accessor :print
29
+ attr_accessor :exception_handler
30
+ attr_accessor :quiet
31
+ alias :quiet? :quiet
32
+
26
33
  attr_accessor :custom_completions
34
+
35
+ attr_accessor :binding_stack
27
36
  attr_accessor :eval_string
28
- attr_accessor :backtrace
29
- attr_accessor :suppress_output
37
+
30
38
  attr_accessor :last_result
31
39
  attr_accessor :last_file
32
40
  attr_accessor :last_dir
33
41
 
34
42
  attr_reader :last_exception
35
- attr_reader :command_state
36
- attr_reader :exit_value
43
+
37
44
  attr_reader :input_array
38
45
  attr_reader :output_array
39
- attr_reader :config
40
46
 
41
- extend Pry::Config::Convenience
42
- config_shortcut(*Pry::Config.shortcuts)
43
- EMPTY_COMPLETIONS = [].freeze
47
+ attr_accessor :backtrace
48
+
49
+ attr_accessor :extra_sticky_locals
50
+
51
+ attr_accessor :suppress_output
52
+
53
+ # This is exposed via Pry::Command#state.
54
+ attr_reader :command_state
55
+
56
+ attr_reader :exit_value
57
+
58
+ attr_reader :hooks # Special treatment as we want to alert people of the
59
+ # changed API.
60
+
61
+ # FIXME: This is a hack to alert people of the new API.
62
+ # @param [Pry::Hooks] hooks
63
+ def hooks=(hooks)
64
+ if hooks.is_a?(Hash)
65
+ warn "Hash-based hooks are now deprecated! Use a `Pry::Hooks` object " \
66
+ "instead! http://rubydoc.info/github/pry/pry/master/Pry/Hooks"
67
+ @hooks = Pry::Hooks.from_hash(hooks)
68
+ else
69
+ @hooks = hooks
70
+ end
71
+ end
44
72
 
45
73
  # Create a new {Pry} instance.
46
74
  # @param [Hash] options
@@ -67,38 +95,40 @@ class Pry
67
95
  @indent = Pry::Indent.new
68
96
  @command_state = {}
69
97
  @eval_string = ""
70
- @backtrace = options.delete(:backtrace) || caller
71
- target = options.delete(:target)
72
- @config = Pry::Config.new
73
- config.merge!(options)
74
- push_prompt(config.prompt)
75
- @input_array = Pry::HistoryArray.new config.memory_size
76
- @output_array = Pry::HistoryArray.new config.memory_size
77
- @custom_completions = config.command_completions
78
- set_last_result nil
79
- @input_array << nil
80
- push_initial_binding(target)
81
- exec_hook(:when_started, target, options, self)
82
- end
98
+ @backtrace = options[:backtrace] || caller
83
99
 
84
- # The current prompt.
85
- # This is the prompt at the top of the prompt stack.
86
- #
87
- # @example
88
- # self.prompt = Pry::SIMPLE_PROMPT
89
- # self.prompt # => Pry::SIMPLE_PROMPT
90
- #
91
- # @return [Array<Proc>] Current prompt.
92
- def prompt
93
- prompt_stack.last
94
- end
100
+ refresh_config(options)
95
101
 
96
- def prompt=(new_prompt)
97
- if prompt_stack.empty?
98
- push_prompt new_prompt
99
- else
100
- prompt_stack[-1] = new_prompt
102
+ push_initial_binding(options[:target])
103
+
104
+ set_last_result nil
105
+ @input_array << nil # add empty input so _in_ and _out_ match
106
+
107
+ # yield the binding_stack to the hook for modification
108
+ exec_hook(:when_started, options[:target], options, self)
109
+ end
110
+
111
+ # Refresh the Pry instance settings from the Pry class.
112
+ # Allows options to be specified to override settings from Pry class.
113
+ # @param [Hash] options The options to override Pry class settings
114
+ # for this instance.
115
+ def refresh_config(options={})
116
+ defaults = {}
117
+ attributes = [
118
+ :input, :output, :commands, :print, :quiet,
119
+ :exception_handler, :hooks, :custom_completions,
120
+ :prompt, :memory_size, :extra_sticky_locals
121
+ ]
122
+
123
+ attributes.each do |attribute|
124
+ defaults[attribute] = Pry.send attribute
101
125
  end
126
+
127
+ defaults.merge!(options).each do |key, value|
128
+ send("#{key}=", value) if respond_to?("#{key}=")
129
+ end
130
+
131
+ true
102
132
  end
103
133
 
104
134
  # Initialize this instance by pushing its initial context into the binding
@@ -121,60 +151,55 @@ class Pry
121
151
  binding_stack << Pry.binding_for(object)
122
152
  end
123
153
 
154
+ # The current prompt.
155
+ # This is the prompt at the top of the prompt stack.
124
156
  #
125
- # Generate completions.
126
- #
127
- # @param [String] input
128
- # What the user has typed so far
129
- #
130
- # @return [Array<String>]
131
- # Possible completions
157
+ # @example
158
+ # self.prompt = Pry::SIMPLE_PROMPT
159
+ # self.prompt # => Pry::SIMPLE_PROMPT
132
160
  #
133
- def complete(str)
134
- return EMPTY_COMPLETIONS unless config.completer
161
+ # @return [Array<Proc>] Current prompt.
162
+ def prompt
163
+ prompt_stack.last
164
+ end
165
+
166
+ def prompt=(new_prompt)
167
+ if prompt_stack.empty?
168
+ push_prompt new_prompt
169
+ else
170
+ prompt_stack[-1] = new_prompt
171
+ end
172
+ end
173
+
174
+ # Generate completions.
175
+ # @param [String] input What the user has typed so far
176
+ # @return [Array<String>] Possible completions
177
+ def complete(input)
135
178
  Pry.critical_section do
136
- completer = config.completer.new(config.input, self)
137
- completer.call str, target: current_binding, custom_completions: custom_completions.call.push(*sticky_locals.keys)
179
+ Pry.config.completer.call(input, :target => current_binding,
180
+ :pry => self,
181
+ :custom_completions => instance_eval(&custom_completions))
138
182
  end
139
183
  end
140
184
 
141
- #
142
185
  # Injects a local variable into the provided binding.
143
- #
144
- # @param [String] name
145
- # The name of the local to inject.
146
- #
147
- # @param [Object] value
148
- # The value to set the local to.
149
- #
150
- # @param [Binding] b
151
- # The binding to set the local on.
152
- #
153
- # @return [Object]
154
- # The value the local was set to.
155
- #
186
+ # @param [String] name The name of the local to inject.
187
+ # @param [Object] value The value to set the local to.
188
+ # @param [Binding] b The binding to set the local on.
189
+ # @return [Object] The value the local was set to.
156
190
  def inject_local(name, value, b)
157
- value = Proc === value ? value.call : value
158
- if b.respond_to?(:local_variable_set)
159
- b.local_variable_set name, value
160
- else # < 2.1
161
- begin
162
- Pry.current[:pry_local] = value
163
- b.eval "#{name} = ::Pry.current[:pry_local]"
164
- ensure
165
- Pry.current[:pry_local] = nil
166
- end
167
- end
191
+ Pry.current[:pry_local] = value.is_a?(Proc) ? value.call : value
192
+ b.eval("#{name} = ::Pry.current[:pry_local]")
193
+ ensure
194
+ Pry.current[:pry_local] = nil
168
195
  end
169
196
 
170
- undef :memory_size if method_defined? :memory_size
171
197
  # @return [Integer] The maximum amount of objects remembered by the inp and
172
198
  # out arrays. Defaults to 100.
173
199
  def memory_size
174
200
  @output_array.max_size
175
201
  end
176
202
 
177
- undef :memory_size= if method_defined? :memory_size=
178
203
  def memory_size=(size)
179
204
  @input_array = Pry::HistoryArray.new(size)
180
205
  @output_array = Pry::HistoryArray.new(size)
@@ -193,19 +218,21 @@ class Pry
193
218
  # @yield The block that defines the content of the local. The local
194
219
  # will be refreshed at each tick of the repl loop.
195
220
  def add_sticky_local(name, &block)
196
- config.extra_sticky_locals[name] = block
221
+ sticky_locals[name] = block
197
222
  end
198
223
 
224
+ # @return [Hash] The currently defined sticky locals.
199
225
  def sticky_locals
200
- { _in_: input_array,
201
- _out_: output_array,
202
- _pry_: self,
203
- _ex_: last_exception && last_exception.wrapped_exception,
204
- _file_: last_file,
205
- _dir_: last_dir,
206
- _: proc { last_result },
207
- __: proc { output_array[-2] }
208
- }.merge(config.extra_sticky_locals)
226
+ @sticky_locals ||= {
227
+ :_in_ => proc { @input_array },
228
+ :_out_ => proc { @output_array },
229
+ :_pry_ => self,
230
+ :_ex_ => proc { last_exception },
231
+ :_file_ => proc { last_file },
232
+ :_dir_ => proc { last_dir },
233
+ :_ => proc { last_result },
234
+ :__ => proc { @output_array[-2] }
235
+ }.merge(extra_sticky_locals)
209
236
  end
210
237
 
211
238
  # Reset the current eval string. If the user has entered part of a multiline
@@ -222,7 +249,7 @@ class Pry
222
249
  # 1. Pry commands will be executed immediately if the line matches.
223
250
  # 2. Partial lines of input will be queued up until a complete expression has
224
251
  # been accepted.
225
- # 3. Output is written to `#output` in pretty colours, not returned.
252
+ # 3. Output is written to {#output} in pretty colours, not returned.
226
253
  #
227
254
  # Once this method has raised an exception or returned false, this instance
228
255
  # is no longer usable. {#exit_value} will return the session's breakout
@@ -259,7 +286,7 @@ class Pry
259
286
 
260
287
  def handle_line(line, options)
261
288
  if line.nil?
262
- config.control_d_handler.call(@eval_string, self)
289
+ Pry.config.control_d_handler.call(@eval_string, self)
263
290
  return
264
291
  end
265
292
 
@@ -298,22 +325,6 @@ class Pry
298
325
  @suppress_output = true
299
326
  end
300
327
 
301
- # A bug in jruby makes java.lang.Exception not rescued by
302
- # `rescue Pry::RescuableException` clause.
303
- #
304
- # * https://github.com/pry/pry/issues/854
305
- # * https://jira.codehaus.org/browse/JRUBY-7100
306
- #
307
- # Until that gets fixed upstream, treat java.lang.Exception
308
- # as an additional exception to be rescued explicitly.
309
- #
310
- # This workaround has a side effect: java exceptions specified
311
- # in `Pry.config.exception_whitelist` are ignored.
312
- jruby_exceptions = []
313
- if Pry::Helpers::BaseHelpers.jruby?
314
- jruby_exceptions << Java::JavaLang::Exception
315
- end
316
-
317
328
  begin
318
329
  # Reset eval string, in case we're evaluating Ruby that does something
319
330
  # like open a nested REPL on this instance.
@@ -321,13 +332,7 @@ class Pry
321
332
  reset_eval_string
322
333
 
323
334
  result = evaluate_ruby(eval_string)
324
- rescue RescuableException, *jruby_exceptions => e
325
- # Eliminate following warning:
326
- # warning: singleton on non-persistent Java type X
327
- # (http://wiki.jruby.org/Persistence)
328
- if Pry::Helpers::BaseHelpers.jruby? && e.class.respond_to?('__persistent__')
329
- e.class.__persistent__ = true
330
- end
335
+ rescue RescuableException => e
331
336
  self.last_exception = e
332
337
  result = e
333
338
  end
@@ -341,10 +346,19 @@ class Pry
341
346
  end
342
347
  private :handle_line
343
348
 
344
- # Potentially deprecated Use `Pry::REPL.new(pry, :target => target).start`
345
- # (If nested sessions are going to exist, this method is fine, but a goal is
346
- # to come up with an alternative to nested sessions altogether.)
349
+ # @deprecated Use `Pry::REPL.new(pry, :target => target).start` instead.
347
350
  def repl(target = nil)
351
+ @@repl_warning ||= (warn Pry::Helpers::CommandHelpers.unindent(<<-S); true)
352
+ DEPRECATION: Pry#repl is deprecated. Instead, use
353
+
354
+ Pry::REPL.new(pry, :target => target).start
355
+
356
+ where pry is the Pry instance you called #repl on and target is the
357
+ optional target parameter of #repl.
358
+
359
+ Call stack:
360
+ #{caller.join("\n" + (' ' * 8))}
361
+ S
348
362
  Pry::REPL.new(self, :target => target).start
349
363
  end
350
364
 
@@ -364,7 +378,7 @@ class Pry
364
378
  if last_result_is_exception?
365
379
  exception_handler.call(output, result, self)
366
380
  elsif should_print?
367
- print.call(output, result, self)
381
+ print.call(output, result)
368
382
  else
369
383
  # nothin'
370
384
  end
@@ -427,7 +441,7 @@ class Pry
427
441
  end
428
442
  end
429
443
 
430
- # Same as process_command, but outputs exceptions to `#output` instead of
444
+ # Same as process_command, but outputs exceptions to {#output} instead of
431
445
  # raising.
432
446
  # @param [String] val The line to process.
433
447
  # @return [Boolean] `true` if `val` is a command, `false` otherwise
@@ -484,17 +498,27 @@ class Pry
484
498
  self.last_result = result unless code =~ /\A\s*\z/
485
499
  end
486
500
 
487
- #
488
501
  # Set the last exception for a session.
489
- #
490
- # @param [Exception] e
491
- # the last exception.
492
- #
493
- def last_exception=(e)
494
- last_exception = Pry::LastException.new(e)
502
+ # @param [Exception] ex
503
+ def last_exception=(ex)
504
+ class << ex
505
+ attr_accessor :file, :line, :bt_index
506
+ def bt_source_location_for(index)
507
+ backtrace[index] =~ /(.*):(\d+)/
508
+ [$1, $2.to_i]
509
+ end
510
+
511
+ def inc_bt_index
512
+ @bt_index = (@bt_index + 1) % backtrace.size
513
+ end
514
+ end
515
+
516
+ ex.bt_index = 0
517
+ ex.file, ex.line = ex.bt_source_location_for(0)
518
+
495
519
  @last_result_is_exception = true
496
- @output_array << last_exception
497
- @last_exception = last_exception
520
+ @output_array << ex
521
+ @last_exception = ex
498
522
  end
499
523
 
500
524
  # Update Pry's internal state after evalling code.
@@ -505,7 +529,7 @@ class Pry
505
529
  @input_array << code
506
530
  if code
507
531
  Pry.line_buffer.push(*code.each_line)
508
- Pry.current_line += code.lines.count
532
+ Pry.current_line += code.each_line.count
509
533
  end
510
534
  end
511
535
 
@@ -531,7 +555,7 @@ class Pry
531
555
  open_token = @indent.open_delimiters.any? ? @indent.open_delimiters.last :
532
556
  @indent.stack.last
533
557
 
534
- c = Pry::Config.from_hash({
558
+ c = OpenStruct.new(
535
559
  :object => object,
536
560
  :nesting_level => binding_stack.size - 1,
537
561
  :open_token => open_token,
@@ -542,7 +566,7 @@ class Pry
542
566
  :binding_stack => binding_stack,
543
567
  :input_array => input_array,
544
568
  :eval_string => @eval_string,
545
- :cont => !@eval_string.empty?})
569
+ :cont => !@eval_string.empty?)
546
570
 
547
571
  Pry.critical_section do
548
572
  # If input buffer is empty then use normal prompt
@@ -598,22 +622,6 @@ class Pry
598
622
  prompt_stack.size > 1 ? prompt_stack.pop : prompt
599
623
  end
600
624
 
601
- undef :pager if method_defined? :pager
602
- # Returns the currently configured pager
603
- # @example
604
- # _pry_.pager.page text
605
- def pager
606
- Pry::Pager.new(self)
607
- end
608
-
609
- undef :output if method_defined? :output
610
- # Returns an output device
611
- # @example
612
- # _pry_.output.puts "ohai!"
613
- def output
614
- Pry::Output.new(self)
615
- end
616
-
617
625
  # Raise an exception out of Pry.
618
626
  #
619
627
  # See Kernel#raise for documentation of parameters.
@@ -655,10 +663,4 @@ class Pry
655
663
  end
656
664
  def raise_up(*args); raise_up_common(false, *args); end
657
665
  def raise_up!(*args); raise_up_common(true, *args); end
658
-
659
- # Convenience accessor for the `quiet` config key.
660
- # @return [Boolean]
661
- def quiet?
662
- config.quiet
663
- end
664
666
  end