Refactor: extract methods to a module and class helper, dollarized_attribute

This commit is contained in:
Eric Davis
2010-09-23 11:25:16 -07:00
parent 83e3023d85
commit 56a38fbd93
5 changed files with 31 additions and 31 deletions
+2 -8
View File
@@ -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
+2 -7
View File
@@ -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
+2 -8
View File
@@ -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
+2 -8
View File
@@ -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
+23
View File
@@ -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