Class: AwesomePrint::Formatters::BaseFormatter

Inherits:
Object
  • Object
show all
Includes:
Colorize
Defined in:
lib/awesome_print/formatters/base_formatter.rb

Constant Summary collapse

DEFAULT_LIMIT_SIZE =
7

Instance Method Summary collapse

Methods included from Colorize

#colorize

Instance Method Details

#align(value, width) ⇒ Object



122
123
124
125
126
127
128
129
130
131
132
133
134
# File 'lib/awesome_print/formatters/base_formatter.rb', line 122

def align(value, width)
  if options[:multiline]
    if options[:indent] > 0
      value.rjust(width)
    elsif options[:indent] == 0
      indent + value.ljust(width)
    else
      indent[0, indentation + options[:indent]] + value.ljust(width)
    end
  else
    value
  end
end

#get_limit_sizeObject



34
35
36
37
38
39
40
41
# File 'lib/awesome_print/formatters/base_formatter.rb', line 34

def get_limit_size
  case options[:limit]
  when true
    DEFAULT_LIMIT_SIZE
  else
    options[:limit]
  end
end

#indentObject



114
115
116
# File 'lib/awesome_print/formatters/base_formatter.rb', line 114

def indent
  ' ' * indentation
end

#indentationObject

Indentation related methods




106
107
108
# File 'lib/awesome_print/formatters/base_formatter.rb', line 106

def indentation
  inspector.current_indentation
end

#indentedObject



110
111
112
# File 'lib/awesome_print/formatters/base_formatter.rb', line 110

def indented
  inspector.increase_indentation(&Proc.new)
end

#limited(data, width, is_hash = false) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/awesome_print/formatters/base_formatter.rb', line 43

def limited(data, width, is_hash = false)
  limit = get_limit_size
  if data.length <= limit
    data
  else
    # Calculate how many elements to be displayed above and below the separator.
    head = limit / 2
    tail = head - (limit - 1) % 2

    # Add the proper elements to the temp array and format the separator.
    temp = data[0, head] + [ nil ] + data[-tail, tail]

    if is_hash
      temp[head] = "#{indent}#{data[head].strip} .. #{data[data.length - tail - 1].strip}"
    else
      temp[head] = "#{indent}[#{head.to_s.rjust(width)}] .. [#{data.length - tail - 1}]"
    end

    temp
  end
end

#method_tuple(method) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/awesome_print/formatters/base_formatter.rb', line 66

def method_tuple(method)
  if method.respond_to?(:parameters) # Ruby 1.9.2+
    # See http://ruby.runpaint.org/methods#method-objects-parameters
    args = method.parameters.inject([]) do |arr, (type, name)|
      name ||= (type == :block ? 'block' : "arg#{arr.size + 1}")
      arr << case type
        when :req        then name.to_s
        when :opt, :rest then "*#{name}"
        when :block      then "&#{name}"
        else '?'
      end
    end
  else # See http://ruby-doc.org/core/classes/Method.html#M001902
    args = (1..method.arity.abs).map { |i| "arg#{i}" }
    args[-1] = "*#{args[-1]}" if method.arity < 0
  end

  # method.to_s formats to handle:
  #
  # #<Method: Fixnum#zero?>
  # #<Method: Fixnum(Integer)#years>
  # #<Method: User(#<Module:0x00000103207c00>)#_username>
  # #<Method: User(id: integer, username: string).table_name>
  # #<Method: User(id: integer, username: string)(ActiveRecord::Base).current>
  # #<UnboundMethod: Hello#world>
  #
  if method.to_s =~ /(Unbound)*Method: (.*)[#\.]/
    unbound, klass = $1 && '(unbound)', $2
    if klass && klass =~ /(\(\w+:\s.*?\))/  # Is this ActiveRecord-style class?
      klass.sub!($1, '')                    # Yes, strip the fields leaving class name only.
    end
    owner = "#{klass}#{unbound}".gsub('(', ' (')
  end

  [ method.name.to_s, "(#{args.join(', ')})", owner.to_s ]
end

#outdentObject



118
119
120
# File 'lib/awesome_print/formatters/base_formatter.rb', line 118

def outdent
  ' ' * (indentation - options[:indent].abs)
end

#should_be_limited?Boolean

To support limited output, for example:

ap (‘a’..‘z’).to_a, :limit => 3 [

[ 0] "a",
[ 1] .. [24],
[25] "z"

]

ap (1..100).to_a, :limit => true # Default limit is 7. [

[ 0] 1,
[ 1] 2,
[ 2] 3,
[ 3] .. [96],
[97] 98,
[98] 99,
[99] 100

]


Returns:

  • (Boolean)


30
31
32
# File 'lib/awesome_print/formatters/base_formatter.rb', line 30

def should_be_limited?
  options[:limit] or (options[:limit].is_a?(Fixnum) and options[:limit] > 0)
end