Refactor: extract methods to a module and class helper, dollarized_attribute
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user