32 lines
917 B
Ruby
32 lines
917 B
Ruby
class Ingredient < ActiveRecord::Base
|
|
|
|
validates :name, presence: true
|
|
validates :density, density: true, allow_blank: true
|
|
|
|
def set_usda_food(food)
|
|
self.ndbn = food.ndbn
|
|
self.density = calculate_density(food.gram_weight_1, food.gram_weight_desc_1) || calculate_density(food.gram_weight_2, food.gram_weight_desc_2)
|
|
end
|
|
|
|
def calculate_density(grams, description)
|
|
return nil if grams.blank? || description.blank?
|
|
|
|
# replace 'fl oz' with 'floz'
|
|
description = description.gsub(/fl oz/i, 'floz')
|
|
|
|
begin
|
|
unit = UnitConversion.parse(description)
|
|
if UnitConversion.volume?(unit)
|
|
mass = Unitwise(grams, 'g')
|
|
density = (mass / unit).convert_to(UnitConversion.normalize_unit_names('oz/cup'))
|
|
return "#{density.value.round(4)} oz/cup"
|
|
else
|
|
return nil
|
|
end
|
|
rescue UnitConversion::UnparseableUnitError
|
|
return nil
|
|
end
|
|
end
|
|
|
|
end
|