Module: SingleForwardable

Included in:
RgGen::Base::Component
Defined in:
lib/rggen/core_extensions/forwardable.rb

Instance Method Summary collapse

Instance Method Details

#def_object_delegator(target, method, ali = method) ⇒ Object



15
16
17
18
19
# File 'lib/rggen/core_extensions/forwardable.rb', line 15

def def_object_delegator(target, method, ali = method)
  define_singleton_method(ali) do |*args, &block|
    target.__send__(method, *args, &block)
  end
end

#def_object_delegators(target, *methods) ⇒ Object



21
22
23
24
25
# File 'lib/rggen/core_extensions/forwardable.rb', line 21

def def_object_delegators(target, *methods)
  methods.each do |method|
    def_object_delegator(target, method)
  end
end

#def_single_delegator(accessor, method, ali = method) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/rggen/core_extensions/forwardable.rb', line 29

def def_single_delegator(accessor, method, ali = method)
  accessor = accessor.to_s
  if method_defined?(accessor) || private_method_defined?(accessor)
    accessor = "#{accessor}()"
  end if self.class === Module

  line_no = __LINE__; str = %{
    def #{ali}(*args, &block)
      begin
        #{accessor}.__send__(:#{method}, *args, &block)
      rescue ::Exception
        [email protected]_if{|s| ::Forwardable::FILE_REGEXP =~ s} unless ::Forwardable::debug
        ::Kernel::raise
      end
    end
  }

  instance_eval(str, __FILE__, line_no)
end