Add the VideoPolicy model, to hold all the base prices and periods
authorIra W. Snyder <devel@irasnyder.com>
Fri, 23 Nov 2007 10:38:06 +0000 (02:38 -0800)
committerIra W. Snyder <devel@irasnyder.com>
Fri, 23 Nov 2007 10:38:06 +0000 (02:38 -0800)
Signed-off-by: Ira W. Snyder <devel@irasnyder.com>
app/models/video_policy.rb [new file with mode: 0644]
db/development.sqlite3
db/migrate/022_create_video_policies.rb [new file with mode: 0644]
db/schema.rb
test/fixtures/video_policies.yml [new file with mode: 0644]
test/unit/video_policy_test.rb [new file with mode: 0644]

diff --git a/app/models/video_policy.rb b/app/models/video_policy.rb
new file mode 100644 (file)
index 0000000..ec1e704
--- /dev/null
@@ -0,0 +1,35 @@
+class VideoPolicy < ActiveRecord::Base
+  validates_presence_of :day
+  validates_presence_of :fee
+  validates_presence_of :period
+  validates_presence_of :description
+
+  validates_numericality_of :day
+  validates_numericality_of :fee
+  validates_numericality_of :period
+
+  # Find the base fee for today
+  def todays_fee
+    # Gets the current day of the week in 0-6 == Sun-Sat form
+    day_of_week = Time.now.to_date.wday
+    return VideoPolicy.find_by_day(day_of_week).fee
+  end
+
+  # Find the base rental period for today
+  def todays_period
+    # Gets the current day of the week in 0-6 == Sun-Sat form
+    day_of_week = Time.now.to_date.wday
+    return VideoPolicy.find_by_day(day_of_week).period
+  end
+
+  # Find the fee for overdue videos (per day)
+  def overdue_fee
+    overdue_day = 7
+    return VideoPolicy.find_by_day(overdue_day).fee
+  end
+
+  protected
+  def validate
+    errors.add(:fee, "must be greater than $0.01") if fee < 0.01
+  end
+end
index 7294671..41a0f85 100644 (file)
Binary files a/db/development.sqlite3 and b/db/development.sqlite3 differ
diff --git a/db/migrate/022_create_video_policies.rb b/db/migrate/022_create_video_policies.rb
new file mode 100644 (file)
index 0000000..0a44934
--- /dev/null
@@ -0,0 +1,14 @@
+class CreateVideoPolicies < ActiveRecord::Migration
+  def self.up
+    create_table :video_policies do |t|
+      t.column :day, :integer, :null => false
+      t.column :fee, :decimal, :precision => 8, :scale => 2, :null => false
+      t.column :period, :integer
+      t.column :description, :string
+    end
+  end
+
+  def self.down
+    drop_table :video_policies
+  end
+end
index 8132da3..c89ecac 100644 (file)
@@ -2,7 +2,7 @@
 # migrations feature of ActiveRecord to incrementally modify your database, and
 # then regenerate this schema definition.
 
-ActiveRecord::Schema.define(:version => 21) do
+ActiveRecord::Schema.define(:version => 22) do
 
   create_table "bitems", :force => true do |t|
     t.column "customer_id",    :integer, :null => false
@@ -68,6 +68,13 @@ ActiveRecord::Schema.define(:version => 21) do
 # Could not dump table "sqlite_sequence" because of following StandardError
 #   Unknown type '' for column 'name'
 
+  create_table "video_policies", :force => true do |t|
+    t.column "day",         :integer,                               :null => false
+    t.column "fee",         :decimal, :precision => 8, :scale => 2, :null => false
+    t.column "period",      :integer
+    t.column "description", :string
+  end
+
   create_table "videogenres", :force => true do |t|
     t.column "name", :string, :null => false
   end
diff --git a/test/fixtures/video_policies.yml b/test/fixtures/video_policies.yml
new file mode 100644 (file)
index 0000000..b49c4eb
--- /dev/null
@@ -0,0 +1,5 @@
+# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
+one:
+  id: 1
+two:
+  id: 2
diff --git a/test/unit/video_policy_test.rb b/test/unit/video_policy_test.rb
new file mode 100644 (file)
index 0000000..a41340d
--- /dev/null
@@ -0,0 +1,10 @@
+require File.dirname(__FILE__) + '/../test_helper'
+
+class VideoPolicyTest < Test::Unit::TestCase
+  fixtures :video_policies
+
+  # Replace this with your real tests.
+  def test_truth
+    assert true
+  end
+end