<h2>
  <%= @klass.class == Module ? "module" : "class" %>  
  <%= @klass.name %>
  <% if @superclass %>
    &lt; <%= @superclass.name %>
  <% end %>

  <% if @class_ancestors %>
    <span class="inheritance-chain">
      &lt;
      <%= @class_ancestors.
            map { |ancestor| link_to(ancestor.name, constant_path(ancestor.name)) }.
            join(" &lt; ") %>
    </span>
  <% end %>
</h2>


<% unless @methods.files.empty? %>
  <div>
    <h4>Defined In Files</h4>
    <% @methods.files.sort.each do |path| %>
      <%= link_to_file(path) %><br/>
    <% end %>
  </div>
<% end %>

<% unless @methods.constants.empty? %>
  <div>
    <h4>Nested Classes/Modules</h4>
    <%= content_tag(:pre, constants_table(@klass, @methods.constants)) %>
  </div>
<% end %>

<% unless @methods.descendants.empty? %>
  <div>
    <h4><%= @klass.instance_of?(Module) ? "Included In" : "Descendants" %></h4>
    <%= content_tag(:pre, constants_table(@klass, @methods.descendants)) %>
  </div>
<% end %>

<div class="opener">
  <h4 class="trigger" title="Show Legend">
    <span>Ancestor Chain</span>
  </h4>

  <div class="content">
    Singleton classes are included. The chain is flattened, Classes/Modules
    which don't contribute any methods are not shown.
    <div>Legend: <br/>
      <dl>
        <dt>[M]</dt>
        <dd>- included Module;</dd>
        <dt>[C]</dt>
        <dd>- inherited Class; </dd>
        <dt>S[M]</dt>
        <dd>- Module included in singleton class; </dd>
      </dl>
    </div>
  </div>
</div>

<div>
  <% @methods.all.each do |ancestor_with_level_methods| %>
    <% ancestor, level_methods =
            ancestor_with_level_methods.keys[0], ancestor_with_level_methods.values[0] %>
    <h3>
      <% ancestor_type, ancestor_constant = ancestor.split %>
      <%= link_to(ancestor,
                  constant_path(ancestor_constant)) %>
    </h3>

    <% if methods = level_methods[:class] %>
      <div class="class-methods">

        <% methods.each do |visibility, methods| %>
          <h5>Class <%= visibility.to_s.capitalize %></h5>
          <% method_method = ancestor_type == "S[M]" ? :instance : :class %>
          <%= content_tag(:pre,
                          new_methods_table(ancestor_constant, method_method, methods)) %>
        <% end %>
      </div>
    <% end %>

    <% if methods = level_methods[:instance] %>
      <div class="class-methods">

        <% methods.each do |visibility, methods| %>
          <h5>Instance <%= visibility.to_s.capitalize %></h5>
          <%= content_tag(:pre,
                          new_methods_table(ancestor_constant, :instance, methods)) %>
        <% end %>
      </div>
    <% end %>
  <% end %>
</div>