class Methods::MethodsWrapper

Public Class Methods

new(obj, configuration) click to toggle source
# File lib/methods/methods_wrapper.rb, line 3
def initialize(obj, configuration)
  @obj = obj
  @configuration = configuration
end

Public Instance Methods

method_missing(method, *args, **kwargs, &block) click to toggle source
# File lib/methods/methods_wrapper.rb, line 8
def method_missing(method, *args, **kwargs, &block)
  __raise_no_method_error(method) unless respond_to?(method)
  method = @obj.method(method)

  if args.empty? && kwargs.empty? && block.nil?
    method
  else
    ::Kernel.lambda do |*call_args, **call_kwargs, &call_block|
      merged_args = __methods_merge_args(args, call_args)
      merged_kwargs = kwargs.merge(**call_kwargs)
      merged_block = call_block || block
      if merged_kwargs.empty?
        method.call(*merged_args, &merged_block)
      else
        method.call(*merged_args, **merged_kwargs, &merged_block)
      end
    end
  end
end
respond_to?(method) click to toggle source
# File lib/methods/methods_wrapper.rb, line 28
def respond_to?(method)
  if ::Kernel.binding.of_caller(2).eval('self').object_id == @obj.object_id
    @obj.respond_to?(method) || @obj.private_methods.include?(method)
  else
    @obj.respond_to?(method)
  end
end
respond_to_missing?(*args) click to toggle source
# File lib/methods/methods_wrapper.rb, line 36
def respond_to_missing?(*args)
  true
end

Private Instance Methods

__methods_merge_args(args, call_args) click to toggle source
# File lib/methods/methods_wrapper.rb, line 42
def __methods_merge_args(args, call_args)
  case @configuration.curry_args_strategy
  when :prepend then [*args, *call_args]
  when :append then [*call_args, *args]
  else
    warn "Invalid value for option curry_args_strategy = #{@configuration.curry_args_strategy.inspect}"
    warn "Falling back to :prepend"
    [*args, *call_args]
  end
end
__raise_no_method_error(method) click to toggle source
# File lib/methods/methods_wrapper.rb, line 53
def __raise_no_method_error(method)
  ::Kernel.raise ::NoMethodError, "undefined method '#{method}' for #{@obj.inspect}:#{@obj.class.name}"
end