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: