35 lines
908 B
Ruby
35 lines
908 B
Ruby
class Conversion
|
|
include ActiveModel::Validations
|
|
include ActiveModel::Conversion
|
|
extend ActiveModel::Naming
|
|
|
|
attr_accessor :input_quantity, :input_units, :scale, :output_units, :density
|
|
attr_reader :output_quantity
|
|
|
|
validates :input_quantity, presence: true
|
|
validate :check_conversion, :if => Proc.new { |object| object.errors.empty? }
|
|
|
|
def initialize(attrs = nil)
|
|
if attrs
|
|
attrs.each do |k, v|
|
|
send("#{k}=", v)
|
|
end
|
|
end
|
|
|
|
@output_quantity = nil
|
|
end
|
|
|
|
def check_conversion
|
|
begin
|
|
scale = self.scale.blank? ? '1' : self.scale
|
|
density = self.density.blank? ? nil : self.density
|
|
@output_quantity = UnitConversion.convert(input_quantity, scale, input_units, output_units, density)
|
|
rescue UnitConversion::UnparseableUnitError => err
|
|
errors[:base] << "Invalid Data: #{err.message}"
|
|
end
|
|
end
|
|
|
|
def persisted?
|
|
false
|
|
end
|
|
end |