diff --git a/app/models/deliverable.rb b/app/models/deliverable.rb index 5f0c89e..1001a3f 100644 --- a/app/models/deliverable.rb +++ b/app/models/deliverable.rb @@ -21,6 +21,8 @@ class Deliverable < ActiveRecord::Base validates_presence_of :manager # Accessors + include DollarizedAttribute + dollarized_attribute :total delegate :name, :to => :contract, :prefix => true, :allow_nil => true @@ -53,14 +55,6 @@ class Deliverable < ActiveRecord::Base self.class.to_s.underscore end - def total=(v) - if v.is_a? String - write_attribute(:total, v.gsub(/[$ ,]/, '')) - else - write_attribute(:total, v) - end - end - def labor_budget_total(date=nil) labor_budgets.sum(:budget) end diff --git a/app/models/fixed_budget.rb b/app/models/fixed_budget.rb index 272bcde..1a132a0 100644 --- a/app/models/fixed_budget.rb +++ b/app/models/fixed_budget.rb @@ -7,13 +7,8 @@ class FixedBudget < ActiveRecord::Base # Validations # Accessors - def budget=(v) - if v.is_a? String - write_attribute(:budget, v.gsub(/[$ ,]/, '')) - else - write_attribute(:budget, v) - end - end + include DollarizedAttribute + dollarized_attribute :budget named_scope :by_period, lambda {|date| if date diff --git a/app/models/labor_budget.rb b/app/models/labor_budget.rb index d229686..831fc91 100644 --- a/app/models/labor_budget.rb +++ b/app/models/labor_budget.rb @@ -7,12 +7,6 @@ class LaborBudget < ActiveRecord::Base # Validations # Accessors - - def budget=(v) - if v.is_a? String - write_attribute(:budget, v.gsub(/[$ ,]/, '')) - else - write_attribute(:budget, v) - end - end + include DollarizedAttribute + dollarized_attribute :budget end diff --git a/app/models/overhead_budget.rb b/app/models/overhead_budget.rb index 62b8a69..ebc13b4 100644 --- a/app/models/overhead_budget.rb +++ b/app/models/overhead_budget.rb @@ -7,12 +7,6 @@ class OverheadBudget < ActiveRecord::Base # Validations # Accessors - - def budget=(v) - if v.is_a? String - write_attribute(:budget, v.gsub(/[$ ,]/, '')) - else - write_attribute(:budget, v) - end - end + include DollarizedAttribute + dollarized_attribute :budget end diff --git a/lib/dollarized_attribute.rb b/lib/dollarized_attribute.rb new file mode 100644 index 0000000..d59effb --- /dev/null +++ b/lib/dollarized_attribute.rb @@ -0,0 +1,23 @@ +# Shared module to allow seting an attribute using: +# * Dollar amount - $1,000.00 +# * Number - 100.00 +module DollarizedAttribute + module ClassMethods + + # dollarized_attribute(:budget) will create a budget=(value) method + def dollarized_attribute(attribute) + define_method(attribute.to_s + '=') {|value| + if value.is_a? String + write_attribute(attribute, value.gsub(/[$ ,]/, '')) + else + write_attribute(attribute, value) + end + } + end + + end + + def self.included(base) + base.extend ClassMethods + end +end