pry 0.10.pre.1-i386-mswin32 → 0.10.0.pre3-i386-mswin32

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 (214) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +702 -0
  3. data/LICENSE +2 -2
  4. data/{README.markdown → README.md} +41 -35
  5. data/lib/pry.rb +82 -139
  6. data/lib/pry/cli.rb +77 -30
  7. data/lib/pry/code.rb +122 -183
  8. data/lib/pry/code/code_file.rb +103 -0
  9. data/lib/pry/code/code_range.rb +71 -0
  10. data/lib/pry/code/loc.rb +92 -0
  11. data/lib/pry/code_object.rb +172 -0
  12. data/lib/pry/color_printer.rb +55 -0
  13. data/lib/pry/command.rb +184 -28
  14. data/lib/pry/command_set.rb +113 -59
  15. data/lib/pry/commands.rb +4 -27
  16. data/lib/pry/commands/amend_line.rb +99 -0
  17. data/lib/pry/commands/bang.rb +20 -0
  18. data/lib/pry/commands/bang_pry.rb +17 -0
  19. data/lib/pry/commands/cat.rb +62 -0
  20. data/lib/pry/commands/cat/abstract_formatter.rb +27 -0
  21. data/lib/pry/commands/cat/exception_formatter.rb +77 -0
  22. data/lib/pry/commands/cat/file_formatter.rb +67 -0
  23. data/lib/pry/commands/cat/input_expression_formatter.rb +43 -0
  24. data/lib/pry/commands/cd.rb +41 -0
  25. data/lib/pry/commands/change_inspector.rb +27 -0
  26. data/lib/pry/commands/change_prompt.rb +26 -0
  27. data/lib/pry/commands/code_collector.rb +165 -0
  28. data/lib/pry/commands/disable_pry.rb +27 -0
  29. data/lib/pry/commands/disabled_commands.rb +2 -0
  30. data/lib/pry/commands/easter_eggs.rb +112 -0
  31. data/lib/pry/commands/edit.rb +195 -0
  32. data/lib/pry/commands/edit/exception_patcher.rb +25 -0
  33. data/lib/pry/commands/edit/file_and_line_locator.rb +36 -0
  34. data/lib/pry/commands/exit.rb +42 -0
  35. data/lib/pry/commands/exit_all.rb +29 -0
  36. data/lib/pry/commands/exit_program.rb +23 -0
  37. data/lib/pry/commands/find_method.rb +193 -0
  38. data/lib/pry/commands/fix_indent.rb +19 -0
  39. data/lib/pry/commands/gem_cd.rb +26 -0
  40. data/lib/pry/commands/gem_install.rb +32 -0
  41. data/lib/pry/commands/gem_list.rb +33 -0
  42. data/lib/pry/commands/gem_open.rb +29 -0
  43. data/lib/pry/commands/gist.rb +101 -0
  44. data/lib/pry/commands/help.rb +164 -0
  45. data/lib/pry/commands/hist.rb +180 -0
  46. data/lib/pry/commands/import_set.rb +22 -0
  47. data/lib/pry/commands/install_command.rb +53 -0
  48. data/lib/pry/commands/jump_to.rb +29 -0
  49. data/lib/pry/commands/list_inspectors.rb +35 -0
  50. data/lib/pry/commands/list_prompts.rb +35 -0
  51. data/lib/pry/commands/ls.rb +114 -0
  52. data/lib/pry/commands/ls/constants.rb +47 -0
  53. data/lib/pry/commands/ls/formatter.rb +49 -0
  54. data/lib/pry/commands/ls/globals.rb +48 -0
  55. data/lib/pry/commands/ls/grep.rb +21 -0
  56. data/lib/pry/commands/ls/instance_vars.rb +39 -0
  57. data/lib/pry/commands/ls/interrogatable.rb +18 -0
  58. data/lib/pry/commands/ls/jruby_hacks.rb +49 -0
  59. data/lib/pry/commands/ls/local_names.rb +35 -0
  60. data/lib/pry/commands/ls/local_vars.rb +39 -0
  61. data/lib/pry/commands/ls/ls_entity.rb +70 -0
  62. data/lib/pry/commands/ls/methods.rb +57 -0
  63. data/lib/pry/commands/ls/methods_helper.rb +46 -0
  64. data/lib/pry/commands/ls/self_methods.rb +32 -0
  65. data/lib/pry/commands/nesting.rb +25 -0
  66. data/lib/pry/commands/play.rb +103 -0
  67. data/lib/pry/commands/pry_backtrace.rb +25 -0
  68. data/lib/pry/commands/pry_version.rb +17 -0
  69. data/lib/pry/commands/raise_up.rb +32 -0
  70. data/lib/pry/commands/reload_code.rb +62 -0
  71. data/lib/pry/commands/reset.rb +18 -0
  72. data/lib/pry/commands/ri.rb +60 -0
  73. data/lib/pry/commands/save_file.rb +61 -0
  74. data/lib/pry/commands/shell_command.rb +48 -0
  75. data/lib/pry/commands/shell_mode.rb +25 -0
  76. data/lib/pry/commands/show_doc.rb +83 -0
  77. data/lib/pry/commands/show_info.rb +195 -0
  78. data/lib/pry/commands/show_input.rb +17 -0
  79. data/lib/pry/commands/show_source.rb +50 -0
  80. data/lib/pry/commands/simple_prompt.rb +22 -0
  81. data/lib/pry/commands/stat.rb +40 -0
  82. data/lib/pry/commands/switch_to.rb +23 -0
  83. data/lib/pry/commands/toggle_color.rb +24 -0
  84. data/lib/pry/commands/watch_expression.rb +105 -0
  85. data/lib/pry/commands/watch_expression/expression.rb +38 -0
  86. data/lib/pry/commands/whereami.rb +190 -0
  87. data/lib/pry/commands/wtf.rb +57 -0
  88. data/lib/pry/config.rb +20 -229
  89. data/lib/pry/config/behavior.rb +139 -0
  90. data/lib/pry/config/convenience.rb +26 -0
  91. data/lib/pry/config/default.rb +165 -0
  92. data/lib/pry/core_extensions.rb +59 -38
  93. data/lib/pry/editor.rb +133 -0
  94. data/lib/pry/exceptions.rb +77 -0
  95. data/lib/pry/helpers.rb +1 -0
  96. data/lib/pry/helpers/base_helpers.rb +40 -154
  97. data/lib/pry/helpers/command_helpers.rb +19 -130
  98. data/lib/pry/helpers/documentation_helpers.rb +21 -11
  99. data/lib/pry/helpers/table.rb +109 -0
  100. data/lib/pry/helpers/text.rb +8 -9
  101. data/lib/pry/history.rb +61 -45
  102. data/lib/pry/history_array.rb +11 -1
  103. data/lib/pry/hooks.rb +10 -32
  104. data/lib/pry/indent.rb +110 -38
  105. data/lib/pry/input_completer.rb +242 -0
  106. data/lib/pry/input_lock.rb +132 -0
  107. data/lib/pry/inspector.rb +27 -0
  108. data/lib/pry/last_exception.rb +61 -0
  109. data/lib/pry/method.rb +199 -200
  110. data/lib/pry/method/disowned.rb +53 -0
  111. data/lib/pry/method/patcher.rb +125 -0
  112. data/lib/pry/method/weird_method_locator.rb +186 -0
  113. data/lib/pry/module_candidate.rb +39 -33
  114. data/lib/pry/object_path.rb +82 -0
  115. data/lib/pry/output.rb +50 -0
  116. data/lib/pry/pager.rb +234 -0
  117. data/lib/pry/plugins.rb +4 -3
  118. data/lib/pry/prompt.rb +26 -0
  119. data/lib/pry/pry_class.rb +199 -227
  120. data/lib/pry/pry_instance.rb +344 -403
  121. data/lib/pry/rbx_path.rb +1 -1
  122. data/lib/pry/repl.rb +202 -0
  123. data/lib/pry/repl_file_loader.rb +20 -26
  124. data/lib/pry/rubygem.rb +82 -0
  125. data/lib/pry/terminal.rb +79 -0
  126. data/lib/pry/test/helper.rb +170 -0
  127. data/lib/pry/version.rb +1 -1
  128. data/lib/pry/wrapped_module.rb +133 -48
  129. metadata +132 -197
  130. data/.document +0 -2
  131. data/.gemtest +0 -0
  132. data/.gitignore +0 -16
  133. data/.travis.yml +0 -17
  134. data/.yardopts +0 -1
  135. data/CHANGELOG +0 -387
  136. data/CONTRIBUTORS +0 -36
  137. data/Gemfile +0 -2
  138. data/Rakefile +0 -137
  139. data/TODO +0 -117
  140. data/examples/example_basic.rb +0 -15
  141. data/examples/example_command_override.rb +0 -32
  142. data/examples/example_commands.rb +0 -36
  143. data/examples/example_hooks.rb +0 -9
  144. data/examples/example_image_edit.rb +0 -67
  145. data/examples/example_input.rb +0 -7
  146. data/examples/example_input2.rb +0 -29
  147. data/examples/example_output.rb +0 -11
  148. data/examples/example_print.rb +0 -6
  149. data/examples/example_prompt.rb +0 -9
  150. data/examples/helper.rb +0 -6
  151. data/lib/pry/completion.rb +0 -221
  152. data/lib/pry/custom_completions.rb +0 -6
  153. data/lib/pry/default_commands/cd.rb +0 -81
  154. data/lib/pry/default_commands/commands.rb +0 -62
  155. data/lib/pry/default_commands/context.rb +0 -98
  156. data/lib/pry/default_commands/easter_eggs.rb +0 -95
  157. data/lib/pry/default_commands/editing.rb +0 -420
  158. data/lib/pry/default_commands/find_method.rb +0 -169
  159. data/lib/pry/default_commands/gems.rb +0 -84
  160. data/lib/pry/default_commands/gist.rb +0 -187
  161. data/lib/pry/default_commands/help.rb +0 -127
  162. data/lib/pry/default_commands/hist.rb +0 -120
  163. data/lib/pry/default_commands/input_and_output.rb +0 -306
  164. data/lib/pry/default_commands/introspection.rb +0 -410
  165. data/lib/pry/default_commands/ls.rb +0 -272
  166. data/lib/pry/default_commands/misc.rb +0 -38
  167. data/lib/pry/default_commands/navigating_pry.rb +0 -110
  168. data/lib/pry/default_commands/whereami.rb +0 -92
  169. data/lib/pry/extended_commands/experimental.rb +0 -7
  170. data/lib/pry/rbx_method.rb +0 -13
  171. data/man/pry.1 +0 -195
  172. data/man/pry.1.html +0 -204
  173. data/man/pry.1.ronn +0 -141
  174. data/pry.gemspec +0 -46
  175. data/test/candidate_helper1.rb +0 -11
  176. data/test/candidate_helper2.rb +0 -8
  177. data/test/helper.rb +0 -223
  178. data/test/test_cli.rb +0 -78
  179. data/test/test_code.rb +0 -201
  180. data/test/test_command.rb +0 -712
  181. data/test/test_command_helpers.rb +0 -9
  182. data/test/test_command_integration.rb +0 -668
  183. data/test/test_command_set.rb +0 -610
  184. data/test/test_completion.rb +0 -62
  185. data/test/test_control_d_handler.rb +0 -45
  186. data/test/test_default_commands/example.erb +0 -5
  187. data/test/test_default_commands/test_cd.rb +0 -318
  188. data/test/test_default_commands/test_context.rb +0 -280
  189. data/test/test_default_commands/test_documentation.rb +0 -314
  190. data/test/test_default_commands/test_find_method.rb +0 -50
  191. data/test/test_default_commands/test_gems.rb +0 -18
  192. data/test/test_default_commands/test_help.rb +0 -57
  193. data/test/test_default_commands/test_input.rb +0 -428
  194. data/test/test_default_commands/test_introspection.rb +0 -511
  195. data/test/test_default_commands/test_ls.rb +0 -151
  196. data/test/test_default_commands/test_shell.rb +0 -343
  197. data/test/test_default_commands/test_show_source.rb +0 -432
  198. data/test/test_exception_whitelist.rb +0 -21
  199. data/test/test_history_array.rb +0 -65
  200. data/test/test_hooks.rb +0 -521
  201. data/test/test_indent.rb +0 -277
  202. data/test/test_input_stack.rb +0 -86
  203. data/test/test_method.rb +0 -401
  204. data/test/test_pry.rb +0 -463
  205. data/test/test_pry_defaults.rb +0 -419
  206. data/test/test_pry_history.rb +0 -84
  207. data/test/test_pry_output.rb +0 -41
  208. data/test/test_sticky_locals.rb +0 -155
  209. data/test/test_syntax_checking.rb +0 -65
  210. data/test/test_wrapped_module.rb +0 -174
  211. data/test/testrc +0 -2
  212. data/test/testrcbad +0 -2
  213. data/wiki/Customizing-pry.md +0 -397
  214. data/wiki/Home.md +0 -4
@@ -0,0 +1,77 @@
1
+ class Pry
2
+
3
+ # As a REPL, we often want to catch any unexpected exceptions that may have
4
+ # been raised; however we don't want to go overboard and prevent the user
5
+ # from exiting Pry when they want to.
6
+ module RescuableException
7
+ def self.===(exception)
8
+ case exception
9
+ # Catch when the user hits ^C (Interrupt < SignalException), and assume
10
+ # that they just wanted to stop the in-progress command (just like bash
11
+ # etc.)
12
+ when Interrupt
13
+ true
14
+ # Don't catch signals (particularly not SIGTERM) as these are unlikely
15
+ # to be intended for pry itself. We should also make sure that
16
+ # Kernel#exit works.
17
+ when *Pry.config.exception_whitelist
18
+ false
19
+ # All other exceptions will be caught.
20
+ else
21
+ true
22
+ end
23
+ end
24
+ end
25
+
26
+ # Catches SecurityErrors if $SAFE is set
27
+ module Pry::TooSafeException
28
+ def self.===(exception)
29
+ $SAFE > 0 && SecurityError === exception
30
+ end
31
+ end
32
+
33
+ # An Exception Tag (cf. Exceptional Ruby) that instructs Pry to show the error
34
+ # in a more user-friendly manner. This should be used when the exception
35
+ # happens within Pry itself as a direct consequence of the user typing
36
+ # something wrong.
37
+ #
38
+ # This allows us to distinguish between the user typing:
39
+ #
40
+ # pry(main)> def )
41
+ # SyntaxError: unexpected )
42
+ #
43
+ # pry(main)> method_that_evals("def )")
44
+ # SyntaxError: (eval):1: syntax error, unexpected ')'
45
+ # from ./a.rb:2 in `eval'
46
+ module UserError; end
47
+
48
+ # When we try to get a binding for an object, we try to define a method on
49
+ # that Object's singleton class. This doesn't work for "frozen" Object's, and
50
+ # the exception is just a vanilla RuntimeError.
51
+ module FrozenObjectException
52
+ def self.===(exception)
53
+ ["can't modify frozen class/module",
54
+ "can't modify frozen Class",
55
+ ].include?(exception.message)
56
+ end
57
+ end
58
+
59
+ # Don't catch these exceptions
60
+ DEFAULT_EXCEPTION_WHITELIST = [SystemExit,
61
+ SignalException,
62
+ Pry::TooSafeException]
63
+
64
+ # CommandErrors are caught by the REPL loop and displayed to the user. They
65
+ # indicate an exceptional condition that's fatal to the current command.
66
+ class CommandError < StandardError; end
67
+ class MethodNotFound < CommandError; end
68
+
69
+ # indicates obsolete API
70
+ class ObsoleteError < StandardError; end
71
+
72
+ # This is to keep from breaking under Rails 3.2 for people who are doing that
73
+ # IRB = Pry thing.
74
+ module ExtendCommandBundle
75
+ end
76
+
77
+ end
@@ -2,3 +2,4 @@ require "pry/helpers/base_helpers"
2
2
  require "pry/helpers/options_helpers"
3
3
  require "pry/helpers/command_helpers"
4
4
  require "pry/helpers/text"
5
+ require "pry/helpers/table"
@@ -15,16 +15,20 @@ class Pry
15
15
  end
16
16
  end
17
17
 
18
- def find_command(name)
19
- command_match = commands.find { |_, command| command.options[:listing] == name }
20
-
21
- return command_match.last if command_match
22
- nil
23
- end
24
-
25
- def gem_installed?(gem_name)
26
- require 'rubygems'
27
- Gem::Specification.respond_to?(:find_all_by_name) ? !Gem::Specification.find_all_by_name(gem_name).empty? : Gem.source_index.find_name(gem_name).first
18
+ # Acts like send but ignores any methods defined below Object or Class in the
19
+ # inheritance hierarchy.
20
+ # This is required to introspect methods on objects like Net::HTTP::Get that
21
+ # have overridden the `method` method.
22
+ def safe_send(obj, method, *args, &block)
23
+ (Module === obj ? Module : Object).instance_method(method).bind(obj).call(*args, &block)
24
+ end
25
+ public :safe_send
26
+
27
+ def find_command(name, set = Pry::Commands)
28
+ command_match = set.find do |_, command|
29
+ (listing = command.options[:listing]) == name && listing != nil
30
+ end
31
+ command_match.last if command_match
28
32
  end
29
33
 
30
34
  def not_a_real_file?(file)
@@ -34,51 +38,16 @@ class Pry
34
38
  def command_dependencies_met?(options)
35
39
  return true if !options[:requires_gem]
36
40
  Array(options[:requires_gem]).all? do |g|
37
- gem_installed?(g)
38
- end
39
- end
40
-
41
- def set_file_and_dir_locals(file_name)
42
- return if !target or !file_name
43
- _pry_.last_file = File.expand_path(file_name)
44
- _pry_.inject_local("_file_", _pry_.last_file, target)
45
-
46
- _pry_.last_dir = File.dirname(_pry_.last_file)
47
- _pry_.inject_local("_dir_", _pry_.last_dir, target)
48
- end
49
-
50
- def stub_proc(name, options)
51
- gems_needed = Array(options[:requires_gem])
52
- gems_not_installed = gems_needed.select { |g| !gem_installed?(g) }
53
- proc do
54
- output.puts "\nThe command '#{name}' requires the following gems to be installed: #{(gems_needed.join(", "))}"
55
- output.puts "-"
56
- output.puts "Command not available due to dependency on gems: `#{gems_not_installed.join(", ")}` not being met."
57
- output.puts "-"
58
- output.puts "Type `install #{name}` to install the required gems and activate this command."
59
- end
60
- end
61
-
62
- def create_command_stub(names, description, options, block)
63
- Array(names).each do |name|
64
- commands[name] = {
65
- :description => "Not available. Execute #{(name)} command for more information.",
66
- :action => stub_proc(name, options),
67
- :stub_info => options
68
- }
41
+ Rubygem.installed?(g)
69
42
  end
70
43
  end
71
44
 
72
45
  def use_ansi_codes?
73
- windows_ansi? || ENV['TERM'] && ENV['TERM'] != "dumb"
46
+ windows_ansi? || ENV['TERM'] && ENV['TERM'] != "dumb"
74
47
  end
75
48
 
76
49
  def colorize_code(code)
77
- if Pry.color
78
- CodeRay.scan(code, :ruby).term
79
- else
80
- code
81
- end
50
+ CodeRay.scan(code, :ruby).term
82
51
  end
83
52
 
84
53
  def highlight(string, regexp, highlight_color=:bright_yellow)
@@ -88,11 +57,7 @@ class Pry
88
57
  # formatting
89
58
  def heading(text)
90
59
  text = "#{text}\n--"
91
- Pry.color ? "\e[1m#{text}\e[0m": text
92
- end
93
-
94
- def page_size
95
- 27
60
+ "\e[1m#{text}\e[0m"
96
61
  end
97
62
 
98
63
  # have fun on the Windows platform.
@@ -102,126 +67,47 @@ class Pry
102
67
 
103
68
  # are we able to use ansi on windows?
104
69
  def windows_ansi?
105
- defined?(Win32::Console) || ENV['ANSICON']
70
+ defined?(Win32::Console) || ENV['ANSICON'] || (windows? && mri_2?)
106
71
  end
107
72
 
108
- # are we on Jruby platform?
109
73
  def jruby?
110
74
  RbConfig::CONFIG['ruby_install_name'] == 'jruby'
111
75
  end
112
76
 
113
- # are we on rbx platform?
77
+ def jruby_19?
78
+ jruby? && RbConfig::CONFIG['ruby_version'] == '1.9'
79
+ end
80
+
114
81
  def rbx?
115
82
  RbConfig::CONFIG['ruby_install_name'] == 'rbx'
116
83
  end
117
84
 
118
- def mri_18?
119
- RUBY_VERSION =~ /1.8/ && RbConfig::CONFIG['ruby_install_name'] == 'ruby'
85
+ def mri?
86
+ RbConfig::CONFIG['ruby_install_name'] == 'ruby'
120
87
  end
121
88
 
122
89
  def mri_19?
123
- RUBY_VERSION =~ /1.9/ && RbConfig::CONFIG['ruby_install_name'] == 'ruby'
124
- end
125
-
126
- # a simple pager for systems without `less`. A la windows.
127
- def simple_pager(text, output=output())
128
- text_array = text.lines.to_a
129
- text_array.each_slice(page_size) do |chunk|
130
- output.puts chunk.join
131
- break if chunk.size < page_size
132
- if text_array.size > page_size
133
- output.puts "\n<page break> --- Press enter to continue ( q<enter> to break ) --- <page break>"
134
- break if $stdin.gets.chomp == "q"
135
- end
136
- end
90
+ mri? && RUBY_VERSION =~ /^1\.9/
137
91
  end
138
92
 
139
- # Try to use `less` for paging, if it fails then use
140
- # simple_pager. Also do not page if Pry.pager is falsey
141
- # FIXME! Another JRuby hack
142
- def stagger_output(text, out = nil)
143
- out ||= case
144
- when respond_to?(:output)
145
- # Mixin.
146
- output
147
- when Pry.respond_to?(:output)
148
- # Parent.
149
- Pry.output
150
- else
151
- # Sys.
152
- $stdout
153
- end
154
-
155
- if text.lines.count < page_size || !Pry.pager
156
- out.puts text
157
- return
158
- end
159
-
160
- # FIXME! Another JRuby hack
161
- if jruby?
162
- simple_pager(text, out)
163
- else
164
- lesspipe { |less| less.puts text }
165
- end
166
- rescue Errno::ENOENT
167
- simple_pager(text, out)
168
- rescue Errno::EPIPE
169
- end
170
-
171
- #
172
- # Create scrollable output via less!
173
- #
174
- # This command runs `less` in a subprocess, and gives you the IO to its STDIN pipe
175
- # so that you can communicate with it.
176
- #
177
- # Example:
178
- #
179
- # lesspipe do |less|
180
- # 50.times { less.puts "Hi mom!" }
181
- # end
182
- #
183
- # The default less parameters are:
184
- # * Allow colour
185
- # * Don't wrap lines longer than the screen
186
- # * Quit immediately (without paging) if there's less than one screen of text.
187
- #
188
- # You can change these options by passing a hash to `lesspipe`, like so:
189
- #
190
- # lesspipe(:wrap=>false) { |less| less.puts essay.to_s }
191
- #
192
- # It accepts the following boolean options:
193
- # :color => Allow ANSI colour codes?
194
- # :wrap => Wrap long lines?
195
- # :always => Always page, even if there's less than one page of text?
196
- #
197
- def lesspipe(*args)
198
- if args.any? and args.last.is_a?(Hash)
199
- options = args.pop
200
- else
201
- options = {}
202
- end
93
+ def mri_2?
94
+ mri? && RUBY_VERSION =~ /^2/
95
+ end
203
96
 
204
- output = args.first if args.any?
97
+ def mri_20?
98
+ mri? && RUBY_VERSION =~ /^2\.0/
99
+ end
205
100
 
206
- params = []
207
- params << "-R" unless options[:color] == false
208
- params << "-S" unless options[:wrap] == true
209
- params << "-F" unless options[:always] == true
210
- if options[:tail] == true
211
- params << "+\\>"
212
- $stderr.puts "Seeking to end of stream..."
213
- end
214
- params << "-X"
215
-
216
- IO.popen("less #{params * ' '}", "w") do |less|
217
- if output
218
- less.puts output
219
- else
220
- yield less
221
- end
222
- end
101
+ def mri_21?
102
+ mri? && RUBY_VERSION =~ /^2\.1/
223
103
  end
224
104
 
105
+ # Send the given text through the best available pager (if Pry.config.pager is
106
+ # enabled). Infers where to send the output if used as a mixin.
107
+ # DEPRECATED.
108
+ def stagger_output(text, out = nil)
109
+ Pry.new.pager.page text
110
+ end
225
111
  end
226
112
  end
227
113
  end
@@ -15,53 +15,29 @@ class Pry
15
15
  file.close(true) if file
16
16
  end
17
17
 
18
- def render_output(str, opts={})
19
- if opts[:flood]
20
- output.puts str
21
- else
22
- stagger_output str
23
- end
24
- end
25
-
26
- # Return the file and line for a Binding.
27
- # @param [Binding] target The binding
28
- # @return [Array] The file and line
29
- def file_and_line_from_binding(target)
30
- file = target.eval('__FILE__')
31
- line_num = target.eval('__LINE__')
32
- if rbx?
33
- if !target.instance_variable_defined?(:@__actual_file__)
34
- target.instance_variable_set(:@__actual_file__, RbxPath.convert_path_to_full(target.variables.method.file.to_s))
35
- end
36
- file = target.instance_variable_get(:@__actual_file__).to_s
37
- end
38
-
39
- [file, line_num]
40
- end
41
-
42
18
  def internal_binding?(target)
43
- m = target.eval("__method__").to_s
19
+ m = target.eval("::Kernel.__method__").to_s
44
20
  # class_eval is here because of http://jira.codehaus.org/browse/JRUBY-6753
45
- ["__binding__", "__binding_impl__", "class_eval"].include?(m)
21
+ ["__binding__", "__pry__", "class_eval"].include?(m)
46
22
  end
47
23
 
48
24
  def get_method_or_raise(name, target, opts={}, omit_help=false)
49
25
  meth = Pry::Method.from_str(name, target, opts)
50
26
 
51
27
  if name && !meth
52
- command_error("The method '#{name}' could not be found.", omit_help)
28
+ command_error("The method '#{name}' could not be found.", omit_help, MethodNotFound)
53
29
  end
54
30
 
55
31
  (opts[:super] || 0).times do
56
32
  if meth.super
57
33
  meth = meth.super
58
34
  else
59
- command_error("'#{meth.name_with_owner}' has no super method.", omit_help)
35
+ command_error("'#{meth.name_with_owner}' has no super method.", omit_help, MethodNotFound)
60
36
  end
61
37
  end
62
38
 
63
39
  if !meth || (!name && internal_binding?(target))
64
- command_error("No method name given, and context is not a method.", omit_help, NonMethodContextError)
40
+ command_error("No method name given, and context is not a method.", omit_help, MethodNotFound)
65
41
  end
66
42
 
67
43
  set_file_and_dir_locals(meth.source_file)
@@ -73,104 +49,6 @@ class Pry
73
49
  raise klass, message
74
50
  end
75
51
 
76
- def make_header(meth, content=meth.source)
77
- header = "\n#{Pry::Helpers::Text.bold('From:')} #{meth.source_file} "
78
-
79
- if meth.source_type == :c
80
- header << "(C Method):\n"
81
- else
82
- header << "@ line #{meth.source_line}:\n"
83
- end
84
-
85
- header << "#{Pry::Helpers::Text.bold("Number of lines:")} #{content.each_line.count.to_s}\n"
86
- end
87
-
88
- def invoke_editor(file, line, reloading)
89
- raise CommandError, "Please set Pry.config.editor or export $VISUAL or $EDITOR" unless Pry.config.editor
90
- if Pry.config.editor.respond_to?(:call)
91
- args = [file, line, reloading][0...(Pry.config.editor.arity)]
92
- editor_invocation = Pry.config.editor.call(*args)
93
- else
94
- editor_invocation = "#{Pry.config.editor} #{blocking_flag_for_editor(reloading)} #{start_line_syntax_for_editor(file, line)}"
95
- end
96
- return nil unless editor_invocation
97
-
98
- if jruby?
99
- begin
100
- require 'spoon'
101
- pid = Spoon.spawnp(*editor_invocation.split)
102
- Process.waitpid(pid)
103
- rescue FFI::NotFoundError
104
- system(editor_invocation)
105
- end
106
- else
107
- # Note we dont want to use Pry.config.system here as that
108
- # may be invoked non-interactively (i.e via Open4), whereas we want to
109
- # ensure the editor is always interactive
110
- system(editor_invocation) or raise CommandError, "`#{editor_invocation}` gave exit status: #{$?.exitstatus}"
111
- end
112
- end
113
-
114
- # Some editors that run outside the terminal allow you to control whether or
115
- # not to block the process from which they were launched (in this case, Pry).
116
- # For those editors, return the flag that produces the desired behavior.
117
- def blocking_flag_for_editor(block)
118
- case editor_name
119
- when /^emacsclient/
120
- '--no-wait' unless block
121
- when /^[gm]vim/
122
- '--nofork' if block
123
- when /^jedit/
124
- '-wait' if block
125
- when /^mate/, /^subl/
126
- '-w' if block
127
- end
128
- end
129
-
130
- # Return the syntax for a given editor for starting the editor
131
- # and moving to a particular line within that file
132
- def start_line_syntax_for_editor(file_name, line_number)
133
- if windows?
134
- file_name = file_name.gsub(/\//, '\\')
135
- end
136
-
137
- # special case for 1st line
138
- return file_name if line_number <= 1
139
-
140
- case editor_name
141
- when /^[gm]?vi/, /^emacs/, /^nano/, /^pico/, /^gedit/, /^kate/
142
- "+#{line_number} #{file_name}"
143
- when /^mate/, /^geany/
144
- "-l #{line_number} #{file_name}"
145
- when /^subl/
146
- "#{file_name}:#{line_number}"
147
- when /^uedit32/
148
- "#{file_name}/#{line_number}"
149
- when /^jedit/
150
- "#{file_name} +line:#{line_number}"
151
- else
152
- if windows?
153
- "#{file_name}"
154
- else
155
- "+#{line_number} #{file_name}"
156
- end
157
- end
158
- end
159
-
160
- # Get the name of the binary that Pry.config.editor points to.
161
- #
162
- # This is useful for deciding which flags we pass to the editor as
163
- # we can just use the program's name and ignore any absolute paths.
164
- #
165
- # @example
166
- # Pry.config.editor="/home/conrad/bin/textmate -w"
167
- # editor_name
168
- # # => textmate
169
- #
170
- def editor_name
171
- File.basename(Pry.config.editor).split(" ").first
172
- end
173
-
174
52
  # Remove any common leading whitespace from every line in `text`.
175
53
  #
176
54
  # This can be used to make a HEREDOC line up with the left margin, without
@@ -193,12 +71,14 @@ class Pry
193
71
  #
194
72
  # @param [String] text The text from which to remove indentation
195
73
  # @return [String] The text with indentation stripped.
196
- def unindent(text)
74
+ def unindent(text, left_padding = 0)
197
75
  # Empty blank lines
198
76
  text = text.sub(/^[ \t]+$/, '')
199
77
 
200
78
  # Find the longest common whitespace to all indented lines
201
- margin = text.scan(/^[ \t]*(?=[^ \t\n])/).inject do |current_margin, next_indent|
79
+ # Ignore lines containing just -- or ++ as these seem to be used by
80
+ # comment authors as delimeters.
81
+ margin = text.scan(/^[ \t]*(?!--\n|\+\+\n)(?=[^ \t\n])/).inject do |current_margin, next_indent|
202
82
  if next_indent.start_with?(current_margin)
203
83
  current_margin
204
84
  elsif current_margin.start_with?(next_indent)
@@ -208,7 +88,7 @@ class Pry
208
88
  end
209
89
  end
210
90
 
211
- text.gsub(/^#{margin}/, '')
91
+ text.gsub(/^#{margin}/, ' ' * left_padding)
212
92
  end
213
93
 
214
94
  # Restrict a string to the given range of lines (1-indexed)
@@ -261,6 +141,15 @@ class Pry
261
141
 
262
142
  Range.new(a, b)
263
143
  end
144
+
145
+ def set_file_and_dir_locals(file_name, _pry_=_pry_(), target=target())
146
+ return if !target or !file_name
147
+ _pry_.last_file = File.expand_path(file_name)
148
+ _pry_.inject_local("_file_", _pry_.last_file, target)
149
+
150
+ _pry_.last_dir = File.dirname(_pry_.last_file)
151
+ _pry_.inject_local("_dir_", _pry_.last_dir, target)
152
+ end
264
153
  end
265
154
 
266
155
  end