Report abuse


			
# sometimes DRY can be taken too far.
# which of these do you think is cleaner?

# metaprogramming
class A < ActiveRecord::Base
  class << self
    %w(start end).each do |word|
      self.define_method("#{word}_date_str".to_sym) do
        v = self.send("#{word}_date".to_sym)
        v ? v.strftime("%m/%d/%Y") : nil
      end

      self.define_method("#{word}_date_str=".to_sym) do |str|
        self.send("#{word}_date=".to_sym, parse_date(str))
      end
    end
  end
end

# vs.

# code duplication
class A < ActiveRecord::Base
  def start_date_str
    self.start_date ? self.start_date.strftime("%m/%d/%Y") : nil
  end

  def start_date_str=(str)
    self.start_date = parse_date(str)
  end

  def end_date_str
    self.start_date ? self.start_date.strftime("%m/%d/%Y") : nil
  end

  def end_date_str=(str)
    self.start_date = parse_date(str)
  end
end