class TkInspect::ClassBrowser::ClassTreeDataSource

Attributes

class_filter[RW]

Public Instance Methods

items_for_path(path) click to toggle source
# File lib/tk_inspect/class_browser/class_tree_data_source.rb, line 6
def items_for_path(path)
  path = [] if path.blank?
  parent_class = path.last
  subclasses_of(parent_class).sort
end
path_for_class(class_name) click to toggle source
# File lib/tk_inspect/class_browser/class_tree_data_source.rb, line 16
def path_for_class(class_name)
  return unless (klass = Object.const_get(class_name))
  path = [class_name]
  while (klass = klass.superclass) do
    path.unshift(name_for_class(klass))
  end
  path
end
title_for_path(path, items) click to toggle source
# File lib/tk_inspect/class_browser/class_tree_data_source.rb, line 12
def title_for_path(path, items)
  "#{items.count} #{'class'.pluralize(items.count)}"
end

Private Instance Methods

filtered_classes() click to toggle source
# File lib/tk_inspect/class_browser/class_tree_data_source.rb, line 33
def filtered_classes
  list = ObjectSpace.each_object(Class).select do |k|
    !k.name.nil?
  end
  return list if @class_filter.blank?
  list.select! do |k|
    k.name.match(/#{@class_filter}/i)
  end
  ancestors = list.reduce(Set.new) do |acum, k|
    an = k
    while !(an = an.superclass).nil? do
      acum << an
    end
    acum
  end
  (list.to_set + ancestors).to_a
end
name_for_class(klass) click to toggle source
# File lib/tk_inspect/class_browser/class_tree_data_source.rb, line 51
def name_for_class(klass)
  klass.respond_to?(:name) ? klass.name : klass.to_s
end
subclasses_of(class_name) click to toggle source
# File lib/tk_inspect/class_browser/class_tree_data_source.rb, line 27
def subclasses_of(class_name)
  filtered_classes.select do |k|
    k.superclass&.to_s == class_name
  end.map { |k| name_for_class(k) }
end