Ruby · Intermediário · Inglês · Técnico
Forwardable
Módulo da biblioteca padrão que adiciona def_delegator e def_delegators para repassar métodos a outro objeto, normalmente guardado numa variável de instância. Facilita composição no lugar de herança.
Onde usar
Aparece ao envolver um array ou outro objeto expondo só parte da interface dele. Usa-se com extend Forwardable dentro da classe.
Em código
require "forwardable"
class Fila
extend Forwardable
def_delegators :@itens, :size, :<<
def initialize; @itens = []; end
end
f = Fila.new
f << 1; p f.size # => 1Exemplos
I delegated size and push to the inner array.
Deleguei size e push para o array interno.
Forwardable keeps the class interface small.
O Forwardable mantém a interface da classe pequena.
Cuidado
Não herde de Array só para ganhar métodos; compor com Forwardable evita expor uma API enorme sem controle.
Sinônimos
delegação