class Hinge::Resolver::Node

Attributes

dependency_names[R]
method[R]
method_name[R]
name[R]

Public Class Methods

new(name, container) click to toggle source
# File lib/hinge/resolver.rb, line 56
def initialize(name, container)
  @name = name
  @method_name = "build_#{@name}"
  @method =
    begin
      container.method(@method_name)
    rescue NameError
      nil
    end

  if @method
    @dependency_names = []
    @positional_args_count = 0
    @keyword_arg_names = []

    @method.parameters.each do |kind, argument_name|
      argument_name = argument_name.to_sym
      @dependency_names << argument_name
      case kind
      when :req
        @positional_args_count += 1
      when :keyreq
        @keyword_arg_names << argument_name
      end
    end
  end
end

Public Instance Methods

invoke(ordered_values) click to toggle source
# File lib/hinge/resolver.rb, line 85
def invoke(ordered_values)
  splat = ordered_values.take(@positional_args_count)
  splat << Hash[
    @keyword_arg_names.zip(ordered_values.drop(@positional_args_count))
  ] if @keyword_arg_names.any?
  @method.call(*splat)
end