class Yoda::Store::Query::FindSignature

Public Instance Methods

select(namespace, method_name, visibility: nil) click to toggle source

@param namespace [Objects::NamespaceObject] @param method_name [String, Regexp] @param visibility [Array<Symbol>, nil] @return [Array<Objects::MethodObject>]

# File lib/yoda/store/query/find_signature.rb, line 9
def select(namespace, method_name, visibility: nil)
  FindMethod.new(registry).select(namespace, method_name, visibility: visibility).map { |el| build(namespace, el) }.flatten
end

Private Instance Methods

build(receiver, method_object) click to toggle source

@param receiver [Store::Objects::NamespaceObject] @param method_object [Store::Objects::MethodObject] @return [Array<FunctionSignatures::Base>]

# File lib/yoda/store/query/find_signature.rb, line 18
def build(receiver, method_object)
  if constructor = try_to_build_constructor(receiver, method_object)
    [constructor]
  elsif method_object.overloads.empty?
    [Model::FunctionSignatures::Method.new(method_object)]
  else
    method_object.overloads.map { |overload| Model::FunctionSignatures::Overload.new(method_object, overload) }
  end
end
try_to_build_constructor(receiver, method_object) click to toggle source

@param receiver [Store::Objects::NamespaceObject] @param method_object [Store::Objects::MethodObject] @return [FunctionSignatures::Constructor, nil]

# File lib/yoda/store/query/find_signature.rb, line 31
def try_to_build_constructor(receiver, method_object)
  if method_object.path == 'Class#new' && receiver.is_a?(Store::Objects::MetaClassObject) && receiver.path != 'Class'
    base_class = registry.find(receiver.base_class_address) || return
    initialize_object = FindMethod.new(registry).find(base_class, 'initialize') || return
    Model::FunctionSignatures::Constructor.new(base_class, initialize_object)
  else
    nil
  end
end