class Inheritance
Resolves relationships and inherited methods for a definition.
Definitions
Relationship = Struct.new(:kind, :name, :definition)
A relationship declared by a definition.
Method = Struct.new(:name, :definition)
A method inherited from another definition.
Group = Struct.new(:kind, :definition, :methods)
Methods inherited through a direct relationship.
def initialize(index, definition)
Initialize inheritance resolution for the given definition.
Signature
-
parameter
indexDecode::Index The index used to resolve relationships.
-
parameter
definitionDecode::Definition The definition to inspect.
Implementation
def initialize(index, definition)
@index = index
@definition = definition
end
attr :definition
The definition being inspected.
Signature
-
attribute
Decode::Definition
def relationships
Enumerate the directly declared relationships.
Signature
-
returns
Array(Relationship) The relationships in declaration order.
Implementation
def relationships
@relationships ||= begin
relationships = []
if @definition.respond_to?(:super_class) && (name = @definition.super_class)
relationships << relationship(:super_class, name)
end
{
prepends: :prepend,
includes: :include,
extends: :extend,
}.each do |attribute, kind|
if @definition.respond_to?(attribute)
@definition.public_send(attribute).each do |name|
relationships << relationship(kind, name)
end
end
end
relationships
end
end
def inherited_methods
Enumerate documented public and protected methods inherited by the definition.
Signature
-
returns
Array(Group) Methods grouped by the direct relationship which provides them.
Implementation
def inherited_methods
@groups = []
@groups_by_relationship = {}
collect_instance_methods(@definition, false, {}, {})
collect_class_methods(@definition, false, {}, {})
return @groups
end