Class yapılarımızda aşağıdakine benzer yöntemlerin tanımlanması ayrıntılı ve gereksizdir.

def failure
  self.state = :failure
end

def error
  self.state = :error
end

def success
  self.state = :success
end

Bunun yerine şöyle bir kod işimizi görür.

[:failure, :error, :success].each do |method|
  define_method method do
    self.state = method
  end
end

Başka bir örnek görelim. Rails uygulamamızda Post modelimizdeki state alanındaki verilere göre örneğin published?, draft?, archived? şeklinde metodlara ihtiyacımız var.

# app/model/post.rb
class Post < ActiveRecord::Base
  STATES = %w(published, draft, archived)

  STATES.each do |s|
    define_method "#{s}?" do
      self.state == s
    end
  end
end

Son olarak bunları öğrenince ben:

Kaynaklar

Aşkın Gedik Ruby on Rails Developer