class AwesomePrint::Inspector
Constants
- AP
Attributes
indentator[RW]
options[RW]
Public Class Methods
new(options = {})
click to toggle source
# File lib/awesome_print/inspector.rb, line 14 def initialize(options = {}) @options = { indent: 4, # Number of spaces for indenting. index: true, # Display array indices. html: false, # Use ANSI color codes rather than HTML. multiline: true, # Display in multiple lines. plain: false, # Use colors. raw: false, # Do not recursively format instance variables. sort_keys: false, # Do not sort hash keys. sort_vars: true, # Sort instance variables. limit: false, # Limit arrays & hashes. Accepts bool or int. ruby19_syntax: false, # Use Ruby 1.9 hash syntax in output. class_name: :class, # Method used to get Instance class name. object_id: true, # Show object_id. color: { args: :pale, array: :white, bigdecimal: :blue, class: :yellow, date: :greenish, falseclass: :red, fixnum: :blue, integer: :blue, float: :blue, hash: :pale, keyword: :cyan, method: :purpleish, nilclass: :red, rational: :blue, string: :yellowish, struct: :pale, symbol: :cyanish, time: :greenish, trueclass: :green, variable: :cyanish } } # Merge custom defaults and let explicit options parameter override them. merge_custom_defaults! merge_options!(options) @formatter = AwesomePrint::Formatter.new(self) @indentator = AwesomePrint::Indentator.new(@options[:indent].abs) Thread.current[AP] ||= [] end
Public Instance Methods
awesome(object)
click to toggle source
Dispatcher that detects data nesting and invokes object-aware formatter.
# File lib/awesome_print/inspector.rb, line 71 def awesome(object) if Thread.current[AP].include?(object.object_id) nested(object) else begin Thread.current[AP] << object.object_id unnested(object) ensure Thread.current[AP].pop end end end
colorize?()
click to toggle source
Return true if we are to colorize the output.
# File lib/awesome_print/inspector.rb, line 86 def colorize? AwesomePrint.force_colors ||= false AwesomePrint.force_colors || ( STDOUT.tty? && ( ( ENV['TERM'] && ENV['TERM'] != 'dumb' ) || ENV['ANSICON'] ) ) end
current_indentation()
click to toggle source
# File lib/awesome_print/inspector.rb, line 61 def current_indentation indentator.indentation end
increase_indentation(&block)
click to toggle source
# File lib/awesome_print/inspector.rb, line 65 def increase_indentation(&block) indentator.indent(&block) end
Private Instance Methods
dotfile_readable?(dotfile)
click to toggle source
# File lib/awesome_print/inspector.rb, line 152 def dotfile_readable? dotfile if @@dotfile_readable.nil? || @@dotfile != dotfile @@dotfile_readable = File.readable?(@@dotfile = dotfile) end @@dotfile_readable end
load_dotfile()
click to toggle source
This method needs to be mocked during testing so that it always loads predictable values
# File lib/awesome_print/inspector.rb, line 147 def load_dotfile dotfile = File.join(ENV['HOME'], '.aprc') load dotfile if dotfile_readable?(dotfile) end
merge_custom_defaults!()
click to toggle source
Load ~/.aprc file with custom defaults that override default options.
# File lib/awesome_print/inspector.rb, line 162 def merge_custom_defaults! load_dotfile merge_options!(AwesomePrint.defaults) if AwesomePrint.defaults.is_a?(Hash) rescue => e $stderr.puts "Could not load '.aprc' from ENV['HOME']: #{e}" end
merge_options!(options = {})
click to toggle source
Update @options by first merging the :color hash and then the remaining keys.
# File lib/awesome_print/inspector.rb, line 139 def merge_options!(options = {}) @options[:color].merge!(options.delete(:color) || {}) @options.merge!(options) end
nested(object)
click to toggle source
Format nested data, for example:
arr = [1, 2]; arr << arr => [1,2, [...]] hash = { :a => 1 }; hash[:b] = hash => { :a => 1, :b => {...} }
# File lib/awesome_print/inspector.rb, line 107 def nested(object) case printable(object) when :array then @formatter.colorize('[...]', :array) when :hash then @formatter.colorize('{...}', :hash) when :struct then @formatter.colorize('{...}', :struct) else @formatter.colorize("...#{object.class}...", :class) end end
printable(object)
click to toggle source
Turn class name into symbol, ex: Hello::World => :hello_world. Classes that inherit from Array, Hash, File, Dir, and Struct are treated as the base class.
# File lib/awesome_print/inspector.rb, line 125 def printable(object) case object when Array then :array when Hash then :hash when File then :file when Dir then :dir when Struct then :struct else object.class.to_s.gsub(/:+/, '_').downcase.to_sym end end
unnested(object)
click to toggle source
# File lib/awesome_print/inspector.rb, line 117 def unnested(object) @formatter.format(object, printable(object)) end