require 'ruby-units' require 'etiqueta/grasas' require 'etiqueta/hidratos' require 'etiqueta/factor' # Etiqueta utilizada en los cálculos del valor nutricional de un alimento. # Utiliza las clases Grasa e Hidratos y el modulo Factor para los cálculos. class Etiqueta include Comparable attr_accessor :nombre, :gramos, :grasas, :hidratos, :proteinas, :sal, :fibra_alimentaria, :vitamina_mineral, :porciones def initialize(nombre, gramos, grasas, hidratos, proteinas, sal = nil, fibra_alimentaria = nil, vitamina_mineral = nil, porciones = 1) @nombre = nombre @gramos = Unit.new(gramos).convert_to('g') @grasas = grasas @hidratos = hidratos @proteinas = Unit.new(proteinas).convert_to('g') @sal = Unit.new(sal).convert_to('g') unless sal.nil? @fibra_alimentaria = Unit.new(fibra_alimentaria).convert_to('g') unless fibra_alimentaria.nil? @vitamina_mineral = Unit.new(vitamina_mineral).convert_to('mg') unless vitamina_mineral.nil? @porciones = porciones end # Devuelve el valor nutricional de un alimento en Kilojulios def valor_nutr_kj grasas.total * Factor::GRASAS_KJ + hidratos.total * Factor::HIDRATOS_KJ + proteinas * Factor::PROTEINAS_KJ end # Devuelve el valor nutricional de un alimento en Kilocalorías def valor_nutr_kcal grasas.total * Factor::GRASAS_KCAL + hidratos.total * Factor::HIDRATOS_KCAL + proteinas * Factor::PROTEINAS_KCAL end # Calcula la cantidad de gramos que tendrá un nutriente por cada una de las # porciones del alimento def por_porcion(nutriente) (nutriente * (gramos / porciones) / '100 g').round(2).abs unless nutriente.nil? end # Cálculo de la Ingesta de Referencia (IR) def IR(nutriente) case nutriente when :valor_energ_kj n = valor_nutr_kj / Factor::VALOR_ENERG_KJ_IR when :valor_energ_kcal n = valor_nutr_kcal / Factor::VALOR_ENERG_KCAL_IR when :grasas n = grasas.total / Factor::GRASAS_IR when :saturadas n = grasas.saturadas / Factor::SATURADAS_IR when :hidratos n = hidratos.total / Factor::HIDRATOS_IR when :azucares n = hidratos.azucares / Factor::AZUCARES_IR when :proteinas n = proteinas / Factor::PROTEINAS_IR when :sal n = sal / Factor::SAL_IR when :vitamina_mineral n = vitamina_mineral / Factor::VITAMINA_MINERAL_IR unless vitamina_mineral.nil? end n.convert_to('%').round(2).abs unless n.nil? end def <=>(other) [sal, proteinas, hidratos, grasas, gramos, fibra_alimentaria, vitamina_mineral, porciones] <=> [other.sal, other.proteinas, other.hidratos, other.grasas, other.gramos, other.fibra_alimentaria, other.vitamina_mineral, other.porciones] end def to_s "\t--> Etiqueta de Información Nutricional de #{nombre} <-- Gramos del producto: #{gramos}\t\t Nº de porciones: #{porciones} \t\t\tPor 100g o 100ml\tIR\t\tPor porcion de #{(gramos / porciones)}\t\tIR Valor energetico\t#{valor_nutr_kj} / #{valor_nutr_kcal}\t#{IR(:valor_energ_kj)}\t\t#{por_porcion(valor_nutr_kj)} / #{por_porcion(valor_nutr_kcal)}\t\t#{por_porcion(IR(:valor_energ_kj))} Grasas\t\t#{grasas.total}\t\t\t#{IR(:grasas)}\t\t#{por_porcion(grasas.total)}\t\t\t\t#{por_porcion(IR(:grasas))} - Saturadas\t\t#{grasas.saturadas}\t\t\t#{IR(:saturadas)}\t\t#{por_porcion(grasas.saturadas)}\t\t\t\t#{por_porcion(IR(:saturadas))} - Monoinsaturadas\t#{grasas.monoinsaturadas}\t\t\t-\t\t#{por_porcion(grasas.monoinsaturadas)}\t\t\t\t- - Polinsaturadas\t#{grasas.polinsaturadas}\t\t\t-\t\t#{por_porcion(grasas.polinsaturadas)}\t\t\t\t- Hidratos\t\t#{hidratos.total}\t\t\t#{IR(:hidratos)}\t\t#{por_porcion(hidratos.total)}\t\t\t\t#{por_porcion(IR(:hidratos))} - Azucares\t\t#{hidratos.azucares}\t\t\t#{IR(:azucares)}\t\t#{por_porcion(hidratos.azucares)}\t\t\t\t#{por_porcion(IR(:azucares))} - Polialcoholes\t\t#{hidratos.polialcoholes}\t\t-\t\t#{por_porcion(hidratos.polialcoholes)}\t\t\t\t- - Almidón\t\t#{hidratos.almidon}\t\t\t-\t\t#{por_porcion(hidratos.almidon)}\t\t\t\t- Fibra alimentaria\t#{fibra_alimentaria}\t\t\t-\t\t#{por_porcion(fibra_alimentaria)}\t\t\t\t- Proteínas\t\t#{proteinas}\t\t\t#{IR(:proteinas)}\t\t#{por_porcion(proteinas)}\t\t\t\t#{por_porcion(IR(:proteinas))} Sal\t\t\t#{sal}\t\t\t#{IR(:sal)}\t\t#{por_porcion(sal)}\t\t\t\t#{por_porcion(IR(:sal))} Vitamina/Mineral\t#{vitamina_mineral}\t\t\t#{IR(:vitamina_mineral)}\t\t#{por_porcion(vitamina_mineral)}\t\t\t\t#{por_porcion(IR(:vitamina_mineral))}" end end