31 Jul 2013

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

Ben Aşkın, Protel Teknoloji Çözümlerinde yazılım geliştirme takım lideri olarak çalışıyorum.

Benimle ilgili daha fazla bilgiyi hakkımda sayfasına göz atarak veya Twitter, Facebook, Github ve Gplus üzerinden takip ederek öğrenebilirsiniz.