Module: Pry::Helpers::BaseHelpers
- Included in:
- Command, CommandSet, Indent
- Defined in:
- lib/pry/helpers/base_helpers.rb
Class Method Summary (collapse)
- + (Object) colorize_code(code)
- + (Boolean) command_dependencies_met?(options)
- + (Object) create_command_stub(names, description, options, block)
- + (Object) find_command(name)
- + (Boolean) gem_installed?(gem_name)
-
+ (Object) heading(text)
formatting.
- + (Object) highlight(string, regexp, highlight_color = :bright_yellow)
-
+ (Boolean) jruby?
are we on Jruby platform?.
-
+ (Object) lesspipe(*args)
Create scrollable output via less!.
- + (Boolean) mri_18?
- + (Boolean) mri_19?
- + (Boolean) not_a_real_file?(file)
- + (Object) page_size
-
+ (Boolean) rbx?
are we on rbx platform?.
- + (Object) set_file_and_dir_locals(file_name)
- + (Object) silence_warnings
-
+ (Object) simple_pager(text, output = output())
a simple pager for systems without
less. -
+ (Object) stagger_output(text, out = nil)
Try to use
lessfor paging, if it fails then use simple_pager. - + (Object) stub_proc(name, options)
- + (Boolean) use_ansi_codes?
-
+ (Boolean) windows?
have fun on the Windows platform.
Instance Method Summary (collapse)
- - (Object) colorize_code(code) private
- - (Object) command_dependencies_met?(options) private
- - (Object) create_command_stub(names, description, options, block) private
- - (Object) find_command(name) private
- - (Object) gem_installed?(gem_name) private
-
- (Object) heading(text)
private
formatting.
- - (Object) highlight(string, regexp, highlight_color = :bright_yellow) private
-
- (Object) jruby?
private
are we on Jruby platform?.
-
- (Object) lesspipe(*args)
private
Create scrollable output via less!.
- - (Object) mri_18? private
- - (Object) mri_19? private
- - (Object) not_a_real_file?(file) private
- - (Object) page_size private
-
- (Object) rbx?
private
are we on rbx platform?.
- - (Object) set_file_and_dir_locals(file_name) private
- - (Object) silence_warnings private
-
- (Object) simple_pager(text, output = output())
private
a simple pager for systems without
less. -
- (Object) stagger_output(text, out = nil)
private
Try to use
lessfor paging, if it fails then use simple_pager. - - (Object) stub_proc(name, options) private
- - (Object) use_ansi_codes? private
-
- (Object) windows?
private
have fun on the Windows platform.
Class Method Details
+ (Object) colorize_code(code)
76 77 78 79 80 81 82 |
# File 'lib/pry/helpers/base_helpers.rb', line 76 def colorize_code(code) if Pry.color CodeRay.scan(code, :ruby).term else code end end |
+ (Boolean) command_dependencies_met?(options)
34 35 36 37 38 39 |
# File 'lib/pry/helpers/base_helpers.rb', line 34 def command_dependencies_met?() return true if ![:requires_gem] Array([:requires_gem]).all? do |g| gem_installed?(g) end end |
+ (Object) create_command_stub(names, description, options, block)
62 63 64 65 66 67 68 69 70 |
# File 'lib/pry/helpers/base_helpers.rb', line 62 def create_command_stub(names, description, , block) Array(names).each do |name| commands[name] = { :description => "Not available. Execute #{(name)} command for more information.", :action => stub_proc(name, ), :stub_info => } end end |
+ (Object) find_command(name)
18 19 20 21 22 23 |
# File 'lib/pry/helpers/base_helpers.rb', line 18 def find_command(name) command_match = commands.find { |_, command| command.[:listing] == name } return command_match.last if command_match nil end |
+ (Boolean) gem_installed?(gem_name)
25 26 27 28 |
# File 'lib/pry/helpers/base_helpers.rb', line 25 def gem_installed?(gem_name) require 'rubygems' 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 end |
+ (Object) heading(text)
formatting
89 90 91 92 |
# File 'lib/pry/helpers/base_helpers.rb', line 89 def heading(text) text = "#{text}\n--" Pry.color ? "\e[1m#{text}\e[0m": text end |
+ (Object) highlight(string, regexp, highlight_color = :bright_yellow)
84 85 86 |
# File 'lib/pry/helpers/base_helpers.rb', line 84 def highlight(string, regexp, highlight_color=:bright_yellow) string.gsub(regexp) { |match| "<#{highlight_color}>#{match}</#{highlight_color}>" } end |
+ (Boolean) jruby?
are we on Jruby platform?
104 105 106 |
# File 'lib/pry/helpers/base_helpers.rb', line 104 def jruby? RbConfig::CONFIG['ruby_install_name'] == 'jruby' end |
+ (Object) lesspipe(*args)
Create scrollable output via less!
This command runs less in a subprocess, and gives you the IO to its STDIN pipe
so that you can communicate with it.
Example:
lesspipe do |less| 50.times { less.puts "Hi mom!" } end
The default less parameters are: * Allow colour * Don't wrap lines longer than the screen * Quit immediately (without paging) if there's less than one screen of text.
You can change these options by passing a hash to lesspipe, like so:
lesspipe(:wrap=>false) { |less| less.puts essay.to_s }
It accepts the following boolean options: :color => Allow ANSI colour codes? :wrap => Wrap long lines? :always => Always page, even if there's less than one page of text?
192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 |
# File 'lib/pry/helpers/base_helpers.rb', line 192 def lesspipe(*args) if args.any? and args.last.is_a?(Hash) = args.pop else = {} end output = args.first if args.any? params = [] params << "-R" unless [:color] == false params << "-S" unless [:wrap] == true params << "-F" unless [:always] == true if [:tail] == true params << "+\\>" $stderr.puts "Seeking to end of stream..." end params << "-X" IO.popen("less #{params * ' '}", "w") do |less| if output less.puts output else yield less end end end |
+ (Boolean) mri_18?
113 114 115 |
# File 'lib/pry/helpers/base_helpers.rb', line 113 def mri_18? RUBY_VERSION =~ /1.8/ && RbConfig::CONFIG['ruby_install_name'] == 'ruby' end |
+ (Boolean) mri_19?
117 118 119 |
# File 'lib/pry/helpers/base_helpers.rb', line 117 def mri_19? RUBY_VERSION =~ /1.9/ && RbConfig::CONFIG['ruby_install_name'] == 'ruby' end |
+ (Boolean) not_a_real_file?(file)
30 31 32 |
# File 'lib/pry/helpers/base_helpers.rb', line 30 def not_a_real_file?(file) file =~ /(\(.*\))|<.*>/ || file =~ /__unknown__/ || file == "" || file == "-e" end |
+ (Object) page_size
94 95 96 |
# File 'lib/pry/helpers/base_helpers.rb', line 94 def page_size 27 end |
+ (Boolean) rbx?
are we on rbx platform?
109 110 111 |
# File 'lib/pry/helpers/base_helpers.rb', line 109 def rbx? RbConfig::CONFIG['ruby_install_name'] == 'rbx' end |
+ (Object) set_file_and_dir_locals(file_name)
41 42 43 44 45 46 47 48 |
# File 'lib/pry/helpers/base_helpers.rb', line 41 def set_file_and_dir_locals(file_name) return if !target or !file_name _pry_.last_file = File.(file_name) _pry_.inject_local("_file_", _pry_.last_file, target) _pry_.last_dir = File.dirname(_pry_.last_file) _pry_.inject_local("_dir_", _pry_.last_dir, target) end |
+ (Object) silence_warnings
8 9 10 11 12 13 14 15 16 |
# File 'lib/pry/helpers/base_helpers.rb', line 8 def silence_warnings old_verbose = $VERBOSE $VERBOSE = nil begin yield ensure $VERBOSE = old_verbose end end |
+ (Object) simple_pager(text, output = output())
a simple pager for systems without less. A la windows.
122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/pry/helpers/base_helpers.rb', line 122 def simple_pager(text, output=output()) text_array = text.lines.to_a text_array.each_slice(page_size) do |chunk| output.puts chunk.join break if chunk.size < page_size if text_array.size > page_size output.puts "\n<page break> --- Press enter to continue ( q<enter> to break ) --- <page break>" break if $stdin.gets.chomp == "q" end end end |
+ (Object) stagger_output(text, out = nil)
Try to use less for paging, if it fails then use
simple_pager. Also do not page if Pry.pager is falsey
FIXME! Another JRuby hack
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
# File 'lib/pry/helpers/base_helpers.rb', line 137 def stagger_output(text, out = nil) out ||= case when respond_to?(:output) # Mixin. output when Pry.respond_to?(:output) # Parent. Pry.output else # Sys. $stdout end if text.lines.count < page_size || !Pry.pager out.puts text return end # FIXME! Another JRuby hack if jruby? simple_pager(text, out) else lesspipe { |less| less.puts text } end rescue Errno::ENOENT simple_pager(text, out) rescue Errno::EPIPE end |
+ (Object) stub_proc(name, options)
50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/pry/helpers/base_helpers.rb', line 50 def stub_proc(name, ) gems_needed = Array([:requires_gem]) gems_not_installed = gems_needed.select { |g| !gem_installed?(g) } proc do output.puts "\nThe command '#{name}' requires the following gems to be installed: #{(gems_needed.join(", "))}" output.puts "-" output.puts "Command not available due to dependency on gems: `#{gems_not_installed.join(", ")}` not being met." output.puts "-" output.puts "Type `install #{name}` to install the required gems and activate this command." end end |
+ (Boolean) use_ansi_codes?
72 73 74 |
# File 'lib/pry/helpers/base_helpers.rb', line 72 def use_ansi_codes? defined?(Win32::Console) || ENV['TERM'] && ENV['TERM'] != "dumb" end |
+ (Boolean) windows?
have fun on the Windows platform.
99 100 101 |
# File 'lib/pry/helpers/base_helpers.rb', line 99 def windows? RbConfig::CONFIG['host_os'] =~ /mswin|mingw/ end |
Instance Method Details
- (Object) colorize_code(code) (private)
76 77 78 79 80 81 82 |
# File 'lib/pry/helpers/base_helpers.rb', line 76 def colorize_code(code) if Pry.color CodeRay.scan(code, :ruby).term else code end end |
- (Object) command_dependencies_met?(options) (private)
34 35 36 37 38 39 |
# File 'lib/pry/helpers/base_helpers.rb', line 34 def command_dependencies_met?() return true if ![:requires_gem] Array([:requires_gem]).all? do |g| gem_installed?(g) end end |
- (Object) create_command_stub(names, description, options, block) (private)
62 63 64 65 66 67 68 69 70 |
# File 'lib/pry/helpers/base_helpers.rb', line 62 def create_command_stub(names, description, , block) Array(names).each do |name| commands[name] = { :description => "Not available. Execute #{(name)} command for more information.", :action => stub_proc(name, ), :stub_info => } end end |
- (Object) find_command(name) (private)
18 19 20 21 22 23 |
# File 'lib/pry/helpers/base_helpers.rb', line 18 def find_command(name) command_match = commands.find { |_, command| command.[:listing] == name } return command_match.last if command_match nil end |
- (Object) gem_installed?(gem_name) (private)
25 26 27 28 |
# File 'lib/pry/helpers/base_helpers.rb', line 25 def gem_installed?(gem_name) require 'rubygems' 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 end |
- (Object) heading(text) (private)
formatting
89 90 91 92 |
# File 'lib/pry/helpers/base_helpers.rb', line 89 def heading(text) text = "#{text}\n--" Pry.color ? "\e[1m#{text}\e[0m": text end |
- (Object) highlight(string, regexp, highlight_color = :bright_yellow) (private)
84 85 86 |
# File 'lib/pry/helpers/base_helpers.rb', line 84 def highlight(string, regexp, highlight_color=:bright_yellow) string.gsub(regexp) { |match| "<#{highlight_color}>#{match}</#{highlight_color}>" } end |
- (Object) jruby? (private)
are we on Jruby platform?
104 105 106 |
# File 'lib/pry/helpers/base_helpers.rb', line 104 def jruby? RbConfig::CONFIG['ruby_install_name'] == 'jruby' end |
- (Object) lesspipe(*args) (private)
Create scrollable output via less!
This command runs less in a subprocess, and gives you the IO to its STDIN pipe
so that you can communicate with it.
Example:
lesspipe do |less| 50.times { less.puts "Hi mom!" } end
The default less parameters are: * Allow colour * Don't wrap lines longer than the screen * Quit immediately (without paging) if there's less than one screen of text.
You can change these options by passing a hash to lesspipe, like so:
lesspipe(:wrap=>false) { |less| less.puts essay.to_s }
It accepts the following boolean options: :color => Allow ANSI colour codes? :wrap => Wrap long lines? :always => Always page, even if there's less than one page of text?
192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 |
# File 'lib/pry/helpers/base_helpers.rb', line 192 def lesspipe(*args) if args.any? and args.last.is_a?(Hash) = args.pop else = {} end output = args.first if args.any? params = [] params << "-R" unless [:color] == false params << "-S" unless [:wrap] == true params << "-F" unless [:always] == true if [:tail] == true params << "+\\>" $stderr.puts "Seeking to end of stream..." end params << "-X" IO.popen("less #{params * ' '}", "w") do |less| if output less.puts output else yield less end end end |
- (Object) mri_18? (private)
113 114 115 |
# File 'lib/pry/helpers/base_helpers.rb', line 113 def mri_18? RUBY_VERSION =~ /1.8/ && RbConfig::CONFIG['ruby_install_name'] == 'ruby' end |
- (Object) mri_19? (private)
117 118 119 |
# File 'lib/pry/helpers/base_helpers.rb', line 117 def mri_19? RUBY_VERSION =~ /1.9/ && RbConfig::CONFIG['ruby_install_name'] == 'ruby' end |
- (Object) not_a_real_file?(file) (private)
30 31 32 |
# File 'lib/pry/helpers/base_helpers.rb', line 30 def not_a_real_file?(file) file =~ /(\(.*\))|<.*>/ || file =~ /__unknown__/ || file == "" || file == "-e" end |
- (Object) page_size (private)
94 95 96 |
# File 'lib/pry/helpers/base_helpers.rb', line 94 def page_size 27 end |
- (Object) rbx? (private)
are we on rbx platform?
109 110 111 |
# File 'lib/pry/helpers/base_helpers.rb', line 109 def rbx? RbConfig::CONFIG['ruby_install_name'] == 'rbx' end |
- (Object) set_file_and_dir_locals(file_name) (private)
41 42 43 44 45 46 47 48 |
# File 'lib/pry/helpers/base_helpers.rb', line 41 def set_file_and_dir_locals(file_name) return if !target or !file_name _pry_.last_file = File.(file_name) _pry_.inject_local("_file_", _pry_.last_file, target) _pry_.last_dir = File.dirname(_pry_.last_file) _pry_.inject_local("_dir_", _pry_.last_dir, target) end |
- (Object) silence_warnings (private)
8 9 10 11 12 13 14 15 16 |
# File 'lib/pry/helpers/base_helpers.rb', line 8 def silence_warnings old_verbose = $VERBOSE $VERBOSE = nil begin yield ensure $VERBOSE = old_verbose end end |
- (Object) simple_pager(text, output = output()) (private)
a simple pager for systems without less. A la windows.
122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/pry/helpers/base_helpers.rb', line 122 def simple_pager(text, output=output()) text_array = text.lines.to_a text_array.each_slice(page_size) do |chunk| output.puts chunk.join break if chunk.size < page_size if text_array.size > page_size output.puts "\n<page break> --- Press enter to continue ( q<enter> to break ) --- <page break>" break if $stdin.gets.chomp == "q" end end end |
- (Object) stagger_output(text, out = nil) (private)
Try to use less for paging, if it fails then use
simple_pager. Also do not page if Pry.pager is falsey
FIXME! Another JRuby hack
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
# File 'lib/pry/helpers/base_helpers.rb', line 137 def stagger_output(text, out = nil) out ||= case when respond_to?(:output) # Mixin. output when Pry.respond_to?(:output) # Parent. Pry.output else # Sys. $stdout end if text.lines.count < page_size || !Pry.pager out.puts text return end # FIXME! Another JRuby hack if jruby? simple_pager(text, out) else lesspipe { |less| less.puts text } end rescue Errno::ENOENT simple_pager(text, out) rescue Errno::EPIPE end |
- (Object) stub_proc(name, options) (private)
50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/pry/helpers/base_helpers.rb', line 50 def stub_proc(name, ) gems_needed = Array([:requires_gem]) gems_not_installed = gems_needed.select { |g| !gem_installed?(g) } proc do output.puts "\nThe command '#{name}' requires the following gems to be installed: #{(gems_needed.join(", "))}" output.puts "-" output.puts "Command not available due to dependency on gems: `#{gems_not_installed.join(", ")}` not being met." output.puts "-" output.puts "Type `install #{name}` to install the required gems and activate this command." end end |
- (Object) use_ansi_codes? (private)
72 73 74 |
# File 'lib/pry/helpers/base_helpers.rb', line 72 def use_ansi_codes? defined?(Win32::Console) || ENV['TERM'] && ENV['TERM'] != "dumb" end |
- (Object) windows? (private)
have fun on the Windows platform.
99 100 101 |
# File 'lib/pry/helpers/base_helpers.rb', line 99 def windows? RbConfig::CONFIG['host_os'] =~ /mswin|mingw/ end |