pry 0.10.pre.1-i386-mingw32 → 0.10.0.pre3-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 (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
data/lib/pry/editor.rb ADDED
@@ -0,0 +1,133 @@
1
+ class Pry
2
+ class Editor
3
+ include Pry::Helpers::BaseHelpers
4
+ include Pry::Helpers::CommandHelpers
5
+
6
+ attr_reader :_pry_
7
+
8
+ def initialize(_pry_)
9
+ @_pry_ = _pry_
10
+ end
11
+
12
+ def edit_tempfile_with_content(initial_content, line=1)
13
+ temp_file do |f|
14
+ f.puts(initial_content)
15
+ f.flush
16
+ f.close(false)
17
+ invoke_editor(f.path, line, true)
18
+ File.read(f.path)
19
+ end
20
+ end
21
+
22
+ def invoke_editor(file, line, blocking=true)
23
+ raise CommandError, "Please set Pry.config.editor or export $VISUAL or $EDITOR" unless _pry_.config.editor
24
+
25
+ editor_invocation = build_editor_invocation_string(file, line, blocking)
26
+ return nil unless editor_invocation
27
+
28
+ if jruby?
29
+ open_editor_on_jruby(editor_invocation)
30
+ else
31
+ open_editor(editor_invocation)
32
+ end
33
+ end
34
+
35
+ private
36
+
37
+ # Generate the string that's used to start the editor. This includes
38
+ # all the flags we want as well as the file and line number we
39
+ # want to open at.
40
+ def build_editor_invocation_string(file, line, blocking)
41
+
42
+ if _pry_.config.editor.respond_to?(:call)
43
+ args = [file, line, blocking][0...(_pry_.config.editor.arity)]
44
+ _pry_.config.editor.call(*args)
45
+ else
46
+ sanitized_file = if windows?
47
+ file.gsub(/\//, '\\')
48
+ else
49
+ Shellwords.escape(file)
50
+ end
51
+
52
+ "#{_pry_.config.editor} #{blocking_flag_for_editor(blocking)} #{start_line_syntax_for_editor(sanitized_file, line)}"
53
+ end
54
+ end
55
+
56
+ # Start the editor running, using the calculated invocation string
57
+ def open_editor(editor_invocation)
58
+ # Note we dont want to use Pry.config.system here as that
59
+ # may be invoked non-interactively (i.e via Open4), whereas we want to
60
+ # ensure the editor is always interactive
61
+ system(*Shellwords.split(editor_invocation)) or raise CommandError, "`#{editor_invocation}` gave exit status: #{$?.exitstatus}"
62
+ end
63
+
64
+ # We need JRuby specific code here cos just shelling out using
65
+ # system() appears to be pretty broken :/
66
+ def open_editor_on_jruby(editor_invocation)
67
+ begin
68
+ require 'spoon'
69
+ pid = Spoon.spawnp(*Shellwords.split(editor_invocation))
70
+ Process.waitpid(pid)
71
+ rescue FFI::NotFoundError
72
+ system(editor_invocation)
73
+ end
74
+ end
75
+
76
+ # Some editors that run outside the terminal allow you to control whether or
77
+ # not to block the process from which they were launched (in this case, Pry).
78
+ # For those editors, return the flag that produces the desired behavior.
79
+ def blocking_flag_for_editor(blocking)
80
+ case editor_name
81
+ when /^emacsclient/
82
+ '--no-wait' unless blocking
83
+ when /^[gm]vim/
84
+ '--nofork' if blocking
85
+ when /^jedit/
86
+ '-wait' if blocking
87
+ when /^mate/, /^subl/
88
+ '-w' if blocking
89
+ end
90
+ end
91
+
92
+ # Return the syntax for a given editor for starting the editor
93
+ # and moving to a particular line within that file
94
+ def start_line_syntax_for_editor(file_name, line_number)
95
+ # special case for 1st line
96
+ return file_name if line_number <= 1
97
+
98
+ case editor_name
99
+ when /^[gm]?vi/, /^emacs/, /^nano/, /^pico/, /^gedit/, /^kate/
100
+ "+#{line_number} #{file_name}"
101
+ when /^mate/, /^geany/
102
+ "-l #{line_number} #{file_name}"
103
+ when /^subl/
104
+ "#{file_name}:#{line_number}"
105
+ when /^uedit32/
106
+ "#{file_name}/#{line_number}"
107
+ when /^jedit/
108
+ "#{file_name} +line:#{line_number}"
109
+ else
110
+ if windows?
111
+ "#{file_name}"
112
+ else
113
+ "+#{line_number} #{file_name}"
114
+ end
115
+ end
116
+ end
117
+
118
+ # Get the name of the binary that Pry.config.editor points to.
119
+ #
120
+ # This is useful for deciding which flags we pass to the editor as
121
+ # we can just use the program's name and ignore any absolute paths.
122
+ #
123
+ # @example
124
+ # Pry.config.editor="/home/conrad/bin/textmate -w"
125
+ # editor_name
126
+ # # => textmate
127
+ #
128
+ def editor_name
129
+ File.basename(_pry_.config.editor).split(" ").first
130
+ end
131
+
132
+ end
133
+ end
@@ -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
data/lib/pry/helpers.rb CHANGED
@@ -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