From: Ira W. Snyder Date: Fri, 23 Nov 2007 10:38:06 +0000 (-0800) Subject: Add the VideoPolicy model, to hold all the base prices and periods X-Git-Tag: turned-in~50 X-Git-Url: https://www.irasnyder.com/gitweb/?a=commitdiff_plain;h=09ddd1ef5546ec679c832c7cefb93f00125c96c6;p=cs356-p2-videostore.git Add the VideoPolicy model, to hold all the base prices and periods Signed-off-by: Ira W. Snyder --- diff --git a/app/models/video_policy.rb b/app/models/video_policy.rb new file mode 100644 index 0000000..ec1e704 --- /dev/null +++ b/app/models/video_policy.rb @@ -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 diff --git a/db/development.sqlite3 b/db/development.sqlite3 index 7294671..41a0f85 100644 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 index 0000000..0a44934 --- /dev/null +++ b/db/migrate/022_create_video_policies.rb @@ -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 diff --git a/db/schema.rb b/db/schema.rb index 8132da3..c89ecac 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -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 index 0000000..b49c4eb --- /dev/null +++ b/test/fixtures/video_policies.yml @@ -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 index 0000000..a41340d --- /dev/null +++ b/test/unit/video_policy_test.rb @@ -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