Finished chapter 11
[depot.git] / app / models / product.rb
index 077a8197956de5d49c2de53c2b9aefd6e8477ff8..27fbdabe21bba36592467e18883ed7556e0f039f 100644 (file)
@@ -1,2 +1,20 @@
 class Product < ActiveRecord::Base
+  validates_presence_of :title, :description, :image_url
+  validates_numericality_of :price
+  validate :price_must_be_at_least_a_penny
+  validates_uniqueness_of :title
+  validates_format_of :image_url,
+                      :with    => %r{\.(gif|jpg|png)$}i,
+                      :message => "must be a URL for GIF, JPG, or PNG image."
+  
+  def self.find_products_for_sale
+    find(:all, 
+      :conditions => "date_available <= now() and (date_available_until is null or date_available_until >= now())",
+      :order => :title)
+  end
+  
+protected
+  def price_must_be_at_least_a_penny
+    errors.add(:price, 'should be at least 0.01') if price.nil? || price < 0.01
+  end
 end