Definições de método de refatoração

Digamos que temos uma classe onde temos 3 métodos:

class Messages
def draft
@status = :draft
end

def posted
@status = :posted
end

def deleted
@status = :deleted
end
end

Como podemos ver, os três métodos estão apenas atualizando o valor de nossa variável de instância ‘@status’, podemos refatorar isso tirando vantagem do método define , primeiro precisamos criar um array de estados e iterar por ele, então dentro do bloco chame o método define para criar dinamicamente nossos métodos como:

class Messages
states
= [:draft, :posted, :deleted]

states
.each do |state|
define_method state
do
@status = state
end
end
end

Lá vamos nós, muito mais limpo e executado exatamente da mesma forma, agora se quisermos criar novos métodos, só precisamos adicioná-los ao array de estados, espero que seja útil.