Class: ClassSource::MethodIndex::ClassMethodIndex

Inherits:
Object
  • Object
show all
Defined in:
lib/class_source/method_index.rb

Instance Method Summary collapse

Constructor Details

#initialize(target_class) ⇒ ClassMethodIndex

Returns a new instance of ClassMethodIndex.



37
38
39
# File 'lib/class_source/method_index.rb', line 37

def initialize(target_class)
  @target_class = target_class
end

Instance Method Details

#ancestral_sources(method) ⇒ Object



61
62
63
# File 'lib/class_source/method_index.rb', line 61

def ancestral_sources(method)
  superclasses.map { |mod| mod.respond_to?(method) && mod.method(method).source_location }.compact
end

#extendedObject



45
46
47
48
49
# File 'lib/class_source/method_index.rb', line 45

def extended 
  @target_class.singleton_class.ancestors.map do |mod|
    mod.instance_methods.select { |m| mod.instance_method(m).source_location == @target_class.method(m).source_location }
  end.flatten
end

#overriddenObject



55
56
57
58
59
# File 'lib/class_source/method_index.rb', line 55

def overridden
  (@target_class.methods - uniquely_named).select do |m|
    !ancestral_sources(m).include?(@target_class.method(m).source_location)
  end
end

#superclassesObject



65
66
67
# File 'lib/class_source/method_index.rb', line 65

def superclasses
  @target_class.ancestors - [@target_class]
end

#uniqueObject



41
42
43
# File 'lib/class_source/method_index.rb', line 41

def unique
  uniquely_named + overridden - extended
end

#uniquely_namedObject



51
52
53
# File 'lib/class_source/method_index.rb', line 51

def uniquely_named
  @target_class.singleton_methods(false)
end