Module: Forwardable

Defined in:
lib/opal_patches.rb

Instance Method Summary collapse

Instance Method Details

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



177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
# File 'lib/opal_patches.rb', line 177

def def_instance_delegator(accessor, method, ali = method)
  accessor_str = accessor.to_s
  if accessor_str.start_with?("@") && !accessor_str.include?(".")
    define_method ali do |*args, &block|
      instance_variable_get(accessor_str).__send__(method, *args, &block)
    end
  elsif accessor_str =~ /\A[A-Za-z_]\w*\z/
    # Plain identifier (method name) — call via __send__ as before.
    define_method ali do |*args, &block|
      __send__(accessor_str).__send__(method, *args, &block)
    end
  else
    # Dot-path expression like 'self.class'. Resolve without eval.
    define_method ali do |*args, &block|
      ForwardableAccessor.resolve(self, accessor_str).__send__(
        method,
        *args,
        &block
      )
    end
  end
end