class Dry::Types::Constructor::Function::MethodCall
@api private
Coercion via a method call on a known object
def self.[](fn, safe)
-
(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)
-
(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]