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

Sign up to get free protection for your applications and to get access to all the features.
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