class Vernier::Output::Firefox::Categorizer
def add_category(name:, **kw)
def add_category(name:, **kw) category = Category.new(@categories.length, name: name, **kw) @categories << category @categories_by_name[name] = category category.add_subcategory(name: "Other") yield category if block_given? category end
def categorize(path)
def categorize(path) @categories.detect { |category| category.matches?(path) } || @categories.first end
def gem_path(*names)
def gem_path(*names) %r{\A#{Regexp.union(Gem.path)}/gems/#{Regexp.union(names)}} end
def get_category(name)
def get_category(name) @categories_by_name[name] end
def initialize
def initialize @categories = [] @categories_by_name = {} add_category(name: "Ruby", color: "grey") do |c| rails_components = %w[ activesupport activemodel activerecord actionview actionpack activejob actionmailer actioncable activestorage actionmailbox actiontext railties ] c.add_subcategory( name: "Rails", matcher: gem_path(*rails_components) ) c.add_subcategory( name: "gem", matcher: starts_with(*Gem.path) ) c.add_subcategory( name: "stdlib", matcher: starts_with(RbConfig::CONFIG["rubylibdir"]) ) end add_category(name: "Idle", color: "transparent") add_category(name: "Stalled", color: "transparent") add_category(name: "GC", color: "red") add_category(name: "cfunc", color: "yellow", matcher: "<cfunc>") add_category(name: "Thread", color: "grey") end
def starts_with(*paths)
def starts_with(*paths) %r{\A#{Regexp.union(paths)}} end