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