I'm writing a Rails service in which a series of operations are performed on a record:
class RecordBaseAmountService
self.build
new
end
def call(record, subrecord)
record = calculate_base_amount(record, subrecord)
record = adjust_base_amount(record, subrecord)
record = pro_rate_record(record, subrecord) if subrecord.is_prorated?
return record
end
private
def calculate_base_amount(record, subrecord)
if subrecord.type == 0
base_amount = 10
elsif subrecord.type == 1
base_amount = 20
else
base_amount = 30
end
record.base_amount = base_amount
record.audit_field += "=>base amount calculated"
record
end
def adjust_base_amount(record, subrecord)
record.base_amount = record.base_amount*30
record.audit_field += "=>base amount adjusted"
record
end
def pro_rate_record(record, subrecord)
record.pro_rated_amount = record.base_amount*subrecord.pro_rate
record.base_amount = record.base_amount - record.pro_rated_amount
record.audit_field += "=>prorated"
record
end
end
Is this code thread safe? Any comments on how to improve it?