Sha256: aecd234ee0ae6cbc8e5adff4fcc182b61982452bd7e7f2e3d637ea897f4af8eb

Contents?: true

Size: 892 Bytes

Versions: 1

Compression:

Stored size: 892 Bytes

Contents

# frozen_string_literal: true

require_relative 'blood/version'
require 'tree_html'
require 'set'
require 'cgi'

module Blood
  def self.source(mods)
    hier = Hash.new{ |h, k| h[k] = Set.new }
    mods.each do |mod|
      ances = mod.ancestors
      ances.each_with_index do |child, i|
        parent = ances[i + 1]
        hier[parent] << child
      end
    end
    Node.new(BasicObject, hier)
  end

  class Node
    include TreeHtml

    def initialize(mod, hier)
      @mod = mod
      @hier = hier
    end

    def label_for_tree_html
      name = ::CGI.escapeHTML(@mod.to_s)
      Class === @mod ? "<span class='hl'>#{name}</span>" : name
    end

    def children_for_tree_html
      children.map{ |sub| Node.new(sub, @hier) }
    end

    def css_for_tree_html
      '.hl{color: #cc342d;}'
    end

    private

    def children
      @hier[@mod].sort_by(&:to_s)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
blood-0.1.0 lib/blood.rb