class AwesomePrint::Inspector

Constants

AP

Attributes

options[RW]

Public Class Methods

new(options = {}) click to toggle source
# File lib/awesome_print/inspector.rb, line 24
def initialize(options = {})
  @options = { 
    :indent     => 4,      # Indent using 4 spaces.
    :index      => true,   # Display array indices.
    :html       => false,  # Use ANSI color codes rather than HTML.
    :multiline  => true,   # Display in multiple lines.
    :plain      => false,  # Use colors.
    :sort_keys  => false,  # Do not sort hash keys.
    :limit      => false,  # Limit large output for arrays and hashes. Set to a boolean or integer.
    :color => { 
      :args       => :pale,
      :array      => :white,
      :bigdecimal => :blue,
      :class      => :yellow,
      :date       => :greenish,
      :falseclass => :red,
      :fixnum     => :blue,
      :float      => :blue,
      :hash       => :pale,
      :keyword    => :cyan,
      :method     => :purpleish,
      :nilclass   => :red,
      :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)
  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 65
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 80
def colorize?
  AwesomePrint.force_colors ||= false
  AwesomePrint.force_colors || (STDOUT.tty? && ((ENV['TERM'] && ENV['TERM'] != 'dumb') || ENV['ANSICON']))
end

Private Instance Methods

merge_custom_defaults!() click to toggle source

Load ~/.aprc file with custom defaults that override default options.

# File lib/awesome_print/inspector.rb, line 130
def merge_custom_defaults!
  dotfile = File.join(ENV["HOME"], ".aprc")
  if File.readable?(dotfile)
    load dotfile
    merge_options!(AwesomePrint.defaults)
  end
rescue => e
  $stderr.puts "Could not load #{dotfile}: #{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 123
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 93
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 110
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 103
def unnested(object)
  @formatter.format(object, printable(object))
end