class GemFootprintAnalyzer::Formatters::Tree
Prints results with the cumulated entry first and details below, indented to give information about the calling order of subsequent requires.
Constants
- INDENT
Public Instance Methods
format_list(requires_list)
click to toggle source
# File lib/gem_footprint_analyzer/formatters/tree.rb, line 60 def format_list(requires_list) return if requires_list.size == 1 entries = init_entries(requires_list) info + formatted_entries(entries) end
Private Instance Methods
count_indent_level(entry)
click to toggle source
# File lib/gem_footprint_analyzer/formatters/tree.rb, line 114 def count_indent_level(entry) @indent_levels ||= [] parent_hash = @indent_levels.find { |elem| elem.key?(entry.parent) } parent_level = parent_hash ? parent_hash.values.first : -1 indent_level = parent_level + 1 @indent_levels.unshift(entry.name => indent_level) indent_level end
count_indent_levels(entries)
click to toggle source
# File lib/gem_footprint_analyzer/formatters/tree.rb, line 123 def count_indent_levels(entries) root = entries.last indent_levels = {root.name => 0} (entries - [root]).reverse_each do |entry| indent_levels[entry.name] ||= indent_levels.fetch(entry.parent, 0) + 1 end max_indent = indent_levels.values.max [indent_levels, max_indent * INDENT.size] end
format_entry(entry, indent_level, ljust_value)
click to toggle source
# File lib/gem_footprint_analyzer/formatters/tree.rb, line 89 def format_entry(entry, indent_level, ljust_value) indent = INDENT * indent_level time = format('%5dms', entry.time) rss = format('%7dKB', entry.rss) "#{indent}#{entry.formatted_name}".ljust(ljust_value) + time + rss end
formatted_entries(entries)
click to toggle source
# File lib/gem_footprint_analyzer/formatters/tree.rb, line 69 def formatted_entries(entries) max_indent = max_indent(entries) max_name_length = entries.map { |e| e.formatted_name.length }.max ljust_value = max_name_length + max_indent + 1 lines = entries.reverse.map do |entry| indent_level = count_indent_level(entry) format_entry(entry, indent_level, ljust_value) end (legend(ljust_value) + lines) end
init_entries(requires_list)
click to toggle source
# File lib/gem_footprint_analyzer/formatters/tree.rb, line 97 def init_entries(requires_list) entries = requires_list.last(requires_list.size - 1).map do |entry_hash| Entry.new(entry_hash, @options) end entries.select!(&:top_level?) if @options[:analyze_gemfile] entries end
legend(ljust_value)
click to toggle source
# File lib/gem_footprint_analyzer/formatters/tree.rb, line 82 def legend(ljust_value) [ 'name'.ljust(ljust_value + 2) + 'time' + ' RSS after', dash(ljust_value + 16) ] end
max_indent(entries)
click to toggle source
# File lib/gem_footprint_analyzer/formatters/tree.rb, line 107 def max_indent(entries) entries.reverse_each { |entry| count_indent_level(entry) } max_indent_level = @indent_levels.map(&:values).flatten.max @indent_levels = [] max_indent_level * INDENT.size end