Created
April 3, 2017 23:37
-
-
Save jusk02/62b80205e8b41153487dc2f443f23cb1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Profile | |
include ActiveModel::Model | |
# include ActiveModel::Serializers::JSON | |
include ActiveModel::AttributeMethods | |
include ActiveModel::Dirty | |
# include ActiveModel::Validations | |
def initialize(params= {}) | |
@avatar = params['avatar'] | |
@id = params['id'] | |
@usuarioId = params['usuarioId'] | |
@nombres = apply_object(params['nombres'], "Nombre") | |
@nombres_id_ant = @nombres.id | |
@estadosCiviles = apply_object(params['estadosCiviles'], "EstadoCivil") | |
@estadosCiviles_id_ant = @estadosCiviles.id | |
@datosGenerales = apply_object(params['datosGenerales'], "DatoGeneral") | |
@datosGenerales_id_ant = @datosGenerales.id | |
@datosNacimiento = apply_object(params['datosNacimiento'], "DatoNacimiento") | |
@datosNacimiento_id_ant = @datosNacimiento.id | |
@nacionalidades = apply_object(params['nacionalidades'], "Nacionalidad") | |
@nacionalidades_id_ant = @nacionalidades.id | |
@direcciones = apply_object(params['direcciones'], "Direccion") | |
@direcciones_id_ant = @direcciones.id | |
@identificaciones = apply_object(params['identificaciones'], "Identificacion") | |
@identificaciones_id_ant = @identificaciones.id | |
@entidadesPrestadorasSalud = apply_object(params['entidadesPrestadorasSalud'], "EntidadPrestadoraSalud") | |
@entidadesPrestadorasSalud_id_ant = @entidadesPrestadorasSalud.id | |
# @errors = ActiveModel::Errors.new(self) | |
end | |
define_attribute_methods :avatar, :id, :usuarioId, :nombres, :estadosCiviles,:datosGenerales, :datosNacimiento, :nacionalidades, :direcciones, | |
:identificaciones, :entidadesPrestadorasSalud | |
# #for :Serializers:JSON | |
# def attributes | |
# {'id' => id, 'nombres' => nombres} | |
# end | |
#asigna los atributos tipo objeto de la clase profile que envian en la instancia (initialize) | |
#recibe la clase del objeto y el hash de datos de los atributos del objeto | |
def apply_object(array, klass) | |
#se convierte el string con el nombre de la clase a la constante clase para que pueda llamar los métodos | |
klass = Object.const_get(klass) | |
return klass.new if array.empty? | |
hash = array.last | |
klass.new(hash) | |
end | |
#inicio set y get attributes -necesarios para ActiveModel:Dirty self.changed- | |
def avatar=(val) | |
avatar_will_change! unless val == @avatar | |
@avatar = val | |
end | |
def nombres=(val) | |
val.each do |k,v| | |
#si alguno de los valores de nombres cambia ejecuta nombres_will_change! que identifica que ese atributo cambio de valor | |
if @nombres.send("#{k}") != val[k] | |
nombres_will_change! unless @nombres.send("#{k}").nil? && val[k].empty? | |
break | |
end | |
end | |
val[:perfilId] = @id | |
@nombres = @nombres.assign_params(val) | |
end | |
def estadosCiviles=(val) | |
val.each do |k,v| | |
#si alguno de los valores de estadosCiviles cambia ejecuta estadosCiviles_will_change! que identifica que ese atributo cambio de valor | |
if @estadosCiviles.send("#{k}") != val[k] | |
estadosCiviles_will_change! unless @estadosCiviles.send("#{k}").nil? && val[k].empty? | |
break | |
end | |
end | |
val[:perfilId] = @id | |
@estadosCiviles = @estadosCiviles.assign_params(val) | |
end | |
def datosGenerales=(val) | |
val.each do |k,v| | |
#si alguno de los valores de datosGenerales cambia ejecuta datosGenerales_will_change! que identifica que ese atributo cambio de valor | |
if @datosGenerales.send("#{k}") != val[k] | |
datosGenerales_will_change! unless @datosGenerales.send("#{k}").nil? && val[k].empty? | |
break | |
end | |
end | |
val[:perfilId] = @id | |
@datosGenerales = @datosGenerales.assign_params(val) | |
end | |
def datosNacimiento=(val) | |
val.each do |k,v| | |
#si alguno de los valores de datosNacimiento cambia ejecuta datosNacimiento_will_change! que identifica que ese atributo cambio de valor | |
if @datosNacimiento.send("#{k}") != val[k] | |
datosNacimiento_will_change! unless @datosNacimiento.send("#{k}").nil? && val[k].empty? | |
break | |
end | |
end | |
val[:perfilId] = @id | |
@datosNacimiento = @datosNacimiento.assign_params(val) | |
end | |
def nacionalidades=(val) | |
val.each do |k,v| | |
#si alguno de los valores de nacionalidades cambia ejecuta nacionalidades_will_change! que identifica que ese atributo cambio de valor | |
if @nacionalidades.send("#{k}") != val[k] | |
nacionalidades_will_change! unless @nacionalidades.send("#{k}").nil? && val[k].empty? | |
break | |
end | |
end | |
val[:perfilId] = @id | |
@nacionalidades = @nacionalidades.assign_params(val) | |
end | |
def direcciones=(val) | |
val.each do |k,v| | |
#si alguno de los valores de direcciones cambia ejecuta direcciones_will_change! que identifica que ese atributo cambio de valor | |
if @direcciones.send("#{k}") != val[k] | |
direcciones_will_change! unless @direcciones.send("#{k}").nil? && val[k].empty? | |
break | |
end | |
end | |
val[:perfilId] = @id | |
@direcciones = @direcciones.assign_params(val) | |
end | |
def identificaciones=(val) | |
val.each do |k,v| | |
#si alguno de los valores de identificaciones cambia ejecuta identificaciones_will_change! que identifica que ese atributo cambio de valor | |
if @identificaciones.send("#{k}") != val[k] | |
identificaciones_will_change! unless @identificaciones.send("#{k}").nil? && val[k].empty? | |
break | |
end | |
end | |
val[:perfilId] = @id | |
@identificaciones = @identificaciones.assign_params(val) | |
end | |
def entidadesPrestadorasSalud=(val) | |
val.each do |k,v| | |
#si alguno de los valores de entidadesPrestadorasSalud cambia ejecuta entidadesPrestadorasSalud_will_change! que identifica que ese atributo cambio de valor | |
if @entidadesPrestadorasSalud.send("#{k}") != val[k] | |
entidadesPrestadorasSalud_will_change! unless @entidadesPrestadorasSalud.send("#{k}").nil? && val[k].empty? | |
break | |
end | |
end | |
val[:perfilId] = @id | |
@entidadesPrestadorasSalud = @entidadesPrestadorasSalud.assign_params(val) | |
end | |
def id | |
@id | |
end | |
def avatar | |
@avatar | |
end | |
def nombres | |
@nombres | |
end | |
def estadosCiviles | |
@estadosCiviles | |
end | |
def datosNacimiento | |
@datosNacimiento | |
end | |
def datosGenerales | |
@datosGenerales | |
end | |
def nacionalidades | |
@nacionalidades | |
end | |
def direcciones | |
@direcciones | |
end | |
def identificaciones | |
@identificaciones | |
end | |
def entidadesPrestadorasSalud | |
@entidadesPrestadorasSalud | |
end | |
#fin -necesarios para ActiveModel:Dirty self.changed- | |
def nombrescompletos | |
"#{self.nombres.primerNombre} #{self.nombres.segundoNombre} #{self.nombres.primerApellido} #{self.nombres.segundoApellido}" | |
end | |
#calculo de edad del perfil | |
def age | |
now = Time.now.utc.to_date | |
date_born = self.datosNacimiento.fechaNacimiento | |
return 0 unless date_born.present? | |
date_born = DateTime.parse date_born | |
now.year - date_born.year - ((now.month > date_born.month || (now.month == date_born.month && now.day >= date_born.day)) ? 0 : 1) | |
end | |
#inicio -necesarios para nested form- | |
def nombres_attributes=(attributes) | |
@nombres ||= {} | |
@nombres = Nombre.new(attribute) | |
end | |
def estadosCiviles_attributes=(attributes) | |
@estadosCiviles ||= {} | |
@estadosCiviles =EstadosCivil.new(attributes) | |
end | |
def datosGenerales_attributes=(attributes) | |
@datosGenerales ||= {} | |
attributes[:perfilId] = @id | |
@datosGenerales =DatoGeneral.new(attributes) | |
end | |
def datosNacimiento_attributes=(attributes) | |
@datosNacimiento ||= {} | |
@datosNacimiento =DatoNacimiento.new(attributes) | |
end | |
def nacionalidades_attributes=(attributes) | |
@nacionalidades ||= {} | |
@nacionalidades =Nacionalidad.new(attributes) | |
end | |
def direcciones_attributes=(attributes) | |
@direcciones ||= {} | |
@direcciones =Direccion.new(attributes) | |
end | |
def identificaciones_attributes=(attributes) | |
@identificaciones ||= {} | |
@identificaciones =Identificacion.new(attributes) | |
end | |
def entidadesPrestadorasSalud_attributes=(attributes) | |
@entidadesPrestadorasSalud ||= {} | |
@entidadesPrestadorasSalud =EntidadPrestadoraSalud.new(attributes) | |
end | |
#fin -necesarios para nested form- | |
def self.find(id_perfil,access_token) | |
response = ApiConecction.get("/Perfiles/getUltimoPerfil",access_token,{idUsuario: id_perfil}) | |
data_or_error = response.extract_data_or_message_error_from_response_api | |
@profile = Profile.new(data_or_error['perfil']) if response.successful? | |
@profile | |
end | |
def update(params = {}, access_token) | |
self.nombres = params[:nombres_attributes] | |
self.estadosCiviles = params[:estadosCiviles_attributes] | |
self.datosGenerales = params[:datosGenerales_attributes] | |
self.datosNacimiento = params[:datosNacimiento_attributes] | |
self.nacionalidades = params[:nacionalidades_attributes] | |
self.direcciones = params[:direcciones_attributes] | |
self.identificaciones = params[:identificaciones_attributes] | |
self.entidadesPrestadorasSalud = params[:entidadesPrestadorasSalud_attributes] | |
p self.changed | |
p self.changes | |
send_endpoint(self.changed,access_token) | |
changes_applied | |
end | |
def send_endpoint(endpoints,access_token) | |
endpoints.each do |endpoint| | |
case endpoint | |
when 'nombres' | |
Nombre.new(self.nombres).create(access_token,@nombres_id_ant) | |
when 'estadosCiviles' | |
EstadoCivil.new(self.estadosCiviles).create(access_token,@estadosCiviles_id_ant) | |
when 'datosGenerales' | |
DatoGeneral.new(self.datosGenerales).create(access_token,@datosGenerales_id_ant) | |
when 'datosNacimiento' | |
DatoNacimiento.new(self.datosNacimiento).create(access_token,@datosNacimiento_id_ant) | |
when 'nacionalidades' | |
Nacionalidad.new(self.nacionalidades).create(access_token,@nacionalidades_id_ant) | |
when 'direcciones' | |
Direccion.new(self.direcciones).create(access_token,@direcciones_id_ant) | |
when 'identificaciones' | |
Identificacion.new(self.identificaciones).create(access_token,@identificaciones_id_ant) | |
when 'entidadesPrestadorasSalud' | |
EntidadPrestadoraSalud.new(self.entidadesPrestadorasSalud).create(access_token,@entidadesPrestadorasSalud_id_ant) | |
end | |
end | |
end | |
#para saber si el objeto no es nuevo , lo utiliza el form_for para elegir la ruta del sumbit | |
def persisted? | |
self.id.present? | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment