2016-01-12 18:43:00 -06:00
|
|
|
class Ingredient < ActiveRecord::Base
|
2016-01-28 14:19:51 -06:00
|
|
|
include TokenizedLike
|
2016-01-13 17:10:43 -06:00
|
|
|
|
|
|
|
validates :name, presence: true
|
2016-01-14 15:22:15 -06:00
|
|
|
validates :density, density: true, allow_blank: true
|
2016-01-13 17:10:43 -06:00
|
|
|
|
2016-01-28 14:19:51 -06:00
|
|
|
def self.search(query)
|
|
|
|
tokens = query.to_s.split(' ')
|
|
|
|
|
|
|
|
if tokens.empty?
|
|
|
|
Ingredient.none
|
|
|
|
else
|
|
|
|
Ingredient.matches_tokens(:name, tokens)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-01-30 15:49:17 -06:00
|
|
|
def ndbn=(value)
|
|
|
|
@usda_food = nil
|
|
|
|
super
|
|
|
|
end
|
|
|
|
|
|
|
|
def usda_food
|
|
|
|
if self.ndbn.present?
|
|
|
|
@usda_food ||= UsdaFood.find_by_ndbn(self.ndbn)
|
|
|
|
else
|
|
|
|
nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def usda_food_name
|
|
|
|
if usda_food
|
|
|
|
usda_food.long_description
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-01-24 17:10:43 -06:00
|
|
|
def set_usda_food(food)
|
2016-01-28 14:19:51 -06:00
|
|
|
return unless food
|
|
|
|
|
2016-01-24 17:10:43 -06:00
|
|
|
self.ndbn = food.ndbn
|
2016-01-24 19:06:26 -06:00
|
|
|
self.water = food.water
|
|
|
|
self.protein = food.protein
|
|
|
|
self.lipids = food.lipid
|
|
|
|
self.ash = food.ash
|
|
|
|
self.kcal = food.kcal
|
|
|
|
self.fiber = food.fiber
|
|
|
|
self.sugar = food.sugar
|
2016-01-24 17:10:43 -06:00
|
|
|
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?
|
|
|
|
|
|
|
|
begin
|
2016-02-02 15:48:20 -06:00
|
|
|
value_unit = UnitConversion.parse(description)
|
|
|
|
if value_unit.volume?
|
|
|
|
density_value = grams.to_d / value_unit.raw_value
|
|
|
|
density_units = "g/#{value_unit.unit.unit}"
|
|
|
|
density = UnitConversion.parse(density_value, density_units)
|
|
|
|
return density.convert('oz/cup').to_s
|
2016-01-24 17:10:43 -06:00
|
|
|
else
|
|
|
|
return nil
|
|
|
|
end
|
|
|
|
rescue UnitConversion::UnparseableUnitError
|
|
|
|
return nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-01-12 18:43:00 -06:00
|
|
|
end
|