From a8452a834f8c98441c9f4a59c56c48983dac4119 Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Fri, 2 Jul 2010 14:29:01 -0700 Subject: [PATCH] [#4182] Create a LaborBudget model. --- app/models/deliverable.rb | 3 ++- app/models/labor_expense.rb | 21 ++++++++++++++++ db/migrate/004_create_labor_expenses.rb | 16 ++++++++++++ test/unit/deliverable_test.rb | 1 + test/unit/labor_expense_test.rb | 33 +++++++++++++++++++++++++ 5 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 app/models/labor_expense.rb create mode 100644 db/migrate/004_create_labor_expenses.rb create mode 100644 test/unit/labor_expense_test.rb diff --git a/app/models/deliverable.rb b/app/models/deliverable.rb index 4570e62..97d3575 100644 --- a/app/models/deliverable.rb +++ b/app/models/deliverable.rb @@ -4,7 +4,8 @@ class Deliverable < ActiveRecord::Base # Associations belongs_to :contract belongs_to :manager, :class_name => 'User', :foreign_key => 'manager_id' - + has_many :labor_expenses + # Validations validates_presence_of :title validates_presence_of :type diff --git a/app/models/labor_expense.rb b/app/models/labor_expense.rb new file mode 100644 index 0000000..0e32a0c --- /dev/null +++ b/app/models/labor_expense.rb @@ -0,0 +1,21 @@ +class LaborExpense < ActiveRecord::Base + unloadable + + # Associations + belongs_to :deliverable + + # Validations + validates_presence_of :hours + validates_presence_of :budget + validates_presence_of :deliverable + + # Accessors + + def budget=(v) + if v.is_a? String + write_attribute(:budget, v.gsub(/[$ ,]/, '')) + else + write_attribute(:budget, v) + end + end +end diff --git a/db/migrate/004_create_labor_expenses.rb b/db/migrate/004_create_labor_expenses.rb new file mode 100644 index 0000000..b12d6e7 --- /dev/null +++ b/db/migrate/004_create_labor_expenses.rb @@ -0,0 +1,16 @@ +class CreateLaborExpenses < ActiveRecord::Migration + def self.up + create_table :labor_expenses do |t| + t.decimal :hours, :precision => 15, :scale => 4 + t.decimal :budget, :precision => 15, :scale => 4 + t.references :deliverable + t.timestamps + end + + add_index :labor_expenses, :deliverable_id + end + + def self.down + drop_table :labor_expenses + end +end diff --git a/test/unit/deliverable_test.rb b/test/unit/deliverable_test.rb index a88b9fd..c51ee13 100644 --- a/test/unit/deliverable_test.rb +++ b/test/unit/deliverable_test.rb @@ -3,6 +3,7 @@ require File.dirname(__FILE__) + '/../test_helper' class DeliverableTest < ActiveSupport::TestCase should_belong_to :contract should_belong_to :manager + should_have_many :labor_expenses should_validate_presence_of :title should_validate_presence_of :type diff --git a/test/unit/labor_expense_test.rb b/test/unit/labor_expense_test.rb new file mode 100644 index 0000000..222b388 --- /dev/null +++ b/test/unit/labor_expense_test.rb @@ -0,0 +1,33 @@ +require File.dirname(__FILE__) + '/../test_helper' + +class LaborExpenseTest < ActiveSupport::TestCase + should_belong_to :deliverable + + should_validate_presence_of :hours + should_validate_presence_of :budget + should_validate_presence_of :deliverable + + context "#budget=" do + should "strip dollar signs when writing" do + e = LaborExpense.new + e.budget = '$100.00' + + assert_equal 100.00, e.budget.to_f + end + + should "strip commas when writing" do + e = LaborExpense.new + e.budget = '20,100.00' + + assert_equal 20100.00, e.budget.to_f + end + + should "strip spaces when writing" do + e = LaborExpense.new + e.budget = '20 100.00' + + assert_equal 20100.00, e.budget.to_f + end + end + +end