instance method delegate_missing_to

Ruby on Rails edge

Since v5.1.7

Available in: v5.1.7 v5.2.8.1 v6.0.6.1 v6.1.7.10 v7.0.10 v7.1.6 v7.2.4 v8.0.5.1 v8.1.4 edge

Signature

delegate_missing_to(target, allow_nil: nil)

When building decorators, a common pattern may emerge:

“‘ class Partition

def initialize(event)
  @event = event
end

def person
  detail.person || creator
end

private
  def respond_to_missing?(name, include_private = false)
    @event.respond_to?(name, include_private)
  end

  def method_missing(method, *args, &block)
    @event.send(method, *args, &block)
  end

end “‘

With ‘Module#delegate_missing_to`, the above is condensed to:

“‘ class Partition

delegate_missing_to :@event

def initialize(event)
  @event = event
end

def person
  detail.person || creator
end

end “‘

The target can be anything callable within the object, e.g. instance

variables, methods, constants, etc.

The delegated method must be public on the target, otherwise it will raise ActiveSupport::DelegationError. If you wish to instead return nil, use the :allow_nil option.

The marshal_dump and _dump methods are exempt from delegation due to possible interference when calling ‘Marshal.dump(object)`, should the delegation target method of object add or remove instance variables.

Parameters

target req
allow_nil key = nil
Source
# File activesupport/lib/active_support/core_ext/module/delegation.rb, line 254
  def delegate_missing_to(target, allow_nil: nil)
    ::ActiveSupport::Delegation.generate_method_missing(
      self,
      target,
      allow_nil: allow_nil,
    )
  end

Defined in activesupport/lib/active_support/core_ext/module/delegation.rb line 254 · View on GitHub · Improve this page · Find usages on GitHub

Defined in Module

Type at least 2 characters to search.

Use the arrow keys to navigate results, Enter to open one, Escape to close.

Keyboard shortcuts

/
Focus search
⌘K / Ctrl-K
Command palette
?
This help
Esc
Close