require "alimento/alimento_clasificado" module Alimento class Plato attr_accessor :name, :vegetales, :frutas, :integrales, :proteinas, :aceites, :bebidas def initialize(name, &block) @name = name @vegetales = [] @frutas = [] @integrales = [] @proteinas = [] @aceites = [] @bebidas = [] if block_given? if block.arity == 1 yield self else instance_eval(&block) end end end def vegetal( nombre, opcion = {}) veg = procesar(nombre, opcion) vegetales << veg end def fruta( nombre, opcion = {}) frut = procesar(nombre, opcion) frutas << frut end def cereal( nombre, opcion = {}) int = procesar(nombre, opcion) integrales << int end def proteina( nombre, opcion = {}) prot = procesar(nombre, opcion) proteinas << prot end def aceite( nombre, opcion = {}) ac = procesar(nombre, opcion) aceites << ac end def bebida( nombre, opcion = {}) beb = procesar(nombre, opcion) bebidas << beb end def procesar(nombre, opcion) if opcion[:porcion] c_array = opcion[:porcion].split(' ') mult_arr = c_array[0].split('/') if mult_arr.length == 2 mult = mult_arr[0].to_f / mult_arr[1].to_f else mult = mult_arr[0].to_f end h_search = "" c_array.each_with_index {|el, i| if i > 0; h_search = h_search + el + "( |s )"; end } s = @@porcion.keys.grep %r[#{h_search}] prop = @@porcion[s[0]] val_en_std = 0; al = @@tablaAlimento.find { |alimento| alimento.nombre == nombre } val_en_std = al.calcValEn if al val_en_total = mult * prop * (val_en_std.to_f / 100.0) elemento = [nombre, val_en_total] elsif opcion[:gramos] val_en_std = 0; al = @@tablaAlimento.find { |alimento| alimento.nombre == nombre } val_en_std = al.calcValEn if al val_total = (opcion[:gramos] * val_en_std).to_f / 100 elemento = [nombre, val_total] end end def to_s output = @name output << "\n#{'=' * @name.size}" veg = frut = cer = prot = ac = beb = 0 @vegetales.each {|x| veg += x[1]} @frutas.each {|x| frut += x[1]} @integrales.each {|x| cer += x[1]} @proteinas.each {|x| prot += x[1]} @aceites.each {|x| ac += x[1]} @bebidas.each {|x| beb += x[1]} total = veg + frut + cer + prot + ac + beb output << "\n\nVegetales:\t#{veg.round(2)}\t#{(100*veg/total).round(2)}%\n\n " @vegetales.each { |x| output << @@tablaAlimento.find{ |i| x[0] == i.nombre}.to_s; output << "\t#{x[1].round(2)}\n "} output << "\n\nFrutas:\t#{frut.round(2)}\t#{(100*frut/total).round(2)}%\n\n " @frutas.each { |x| output << @@tablaAlimento.find{ |i| x[0] == i.nombre}.to_s; output << "\t#{x[1].round(2)}\n "} output << "\n\nCereales:\t#{cer.round(2)}\t#{(100*cer/total).round(2)}%\n\n " @integrales.each { |x| output << @@tablaAlimento.find{ |i| x[0] == i.nombre}.to_s; output << "\t#{x[1].round(2)}\n "} output << "\n\nProteinas:\t#{prot.round(2)}\t#{(100*prot/total).round(2)}%\n\n " @proteinas.each { |x| output << @@tablaAlimento.find{ |i| x[0] == i.nombre}.to_s; output << "\t#{x[1].round(2)}\n "} output << "\n\nAceites:\t#{ac.round(2)}\t#{(100*ac/total).round(2)}%\n\n " @aceites.each { |x| output << @@tablaAlimento.find{ |i| x[0] == i.nombre}.to_s; output << "\t#{x[1].round(2)}\n "} output << "\n\nBebidas:\t#{beb.round(2)}\t#{(100*beb/total).round(2)}%\n\n " @bebidas.each { |x| output << @@tablaAlimento.find{ |i| x[0] == i.nombre}.to_s; output << "\t#{x[1].round(2)}\n "} output << "\n\nTotal: #{total.round(2)}" output end end end