Class: Methods::MethodsWrapper

Inherits:
BasicObject
Defined in:
lib/methods/methods_wrapper.rb

Instance Method Summary collapse

Constructor Details

#initialize(obj, configuration) ⇒ MethodsWrapper

Returns a new instance of MethodsWrapper.



3
4
5
6
# File 'lib/methods/methods_wrapper.rb', line 3

def initialize(obj, configuration)
  @obj = obj
  @configuration = configuration
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args, **kwargs, &block) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 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

Instance Method Details

#respond_to?(method) ⇒ Boolean

Returns:

  • (Boolean)


28
29
30
31
32
33
34
# 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) ⇒ Boolean

Returns:

  • (Boolean)


36
37
38
# File 'lib/methods/methods_wrapper.rb', line 36

def respond_to_missing?(*args)
  true
end