class Dry::Types::Constructor::Function::MethodCall

@api private
Coercion via a method call on a known object

def self.[](fn, safe)

Returns:
  • (MethodCall) -

Other tags:
    Api: - private
def self.[](fn, safe)
  public = fn.receiver.respond_to?(fn.name)
  MethodCall.call_class(fn.name, public, safe).new(fn)
end

def self.call_class(method, public, safe)

Returns:
  • (Function) -
def self.call_class(method, public, safe)
  @cache.fetch_or_store([method, public, safe]) do
    if public
      ::Class.new(PublicCall) do
        include PublicCall.call_interface(method, safe)
        define_method(:__to_s__) do
          "#<PublicCall for :#{method}>"
        end
      end
    elsif safe
      PrivateCall
    else
      PrivateSafeCall
    end
  end
end

def initialize(fn)

def initialize(fn)
  super
  @target = fn.receiver
  @name = fn.name
end

def to_ast = [:method, target, name]

def to_ast = [:method, target, name]