class Yoda::Store::Query::Associators::AssociateMethods

Attributes

registry[R]

@return [Registry]

Public Class Methods

new(registry) click to toggle source

@param registry [Registry]

# File lib/yoda/store/query/associators/associate_methods.rb, line 10
def initialize(registry)
  @registry = registry
end

Public Instance Methods

associate(obj) click to toggle source

@param obj [Object::Base] @return [Enumerator<Objects::MethodObject>]

# File lib/yoda/store/query/associators/associate_methods.rb, line 16
def associate(obj)
  if obj.is_a?(Objects::NamespaceObject)
    Enumerator.new do |yielder|
      name_set = Set.new

      AssociateAncestors.new(registry).associate(obj).each do |ancestor|
        ancestor.instance_method_addresses.each do |method_address|
          method_name = Objects::MethodObject.name_of_path(method_address)
          if !name_set.member?(method_name)
            name_set.add(method_name)
            if el = registry.find(method_address)
              yielder << el
            end
          end
        end
      end
    end
  else
    []
  end
end