optimizacion: no sumar los atributos todo el tiempo

con esta optimización bajamos 10s en la generación del índice de posts
para observatoriociudad.org y alrededor de medio millón de asignaciones
de variables!
This commit is contained in:
f 2020-01-02 15:08:45 -03:00
parent aa9806d8f6
commit 7467356659
No known key found for this signature in database
GPG key ID: 2AE5A13E321F953D

View file

@ -64,14 +64,6 @@ class Post < OpenStruct
Digest::SHA1.hexdigest id
end
# Levanta un error si al construir el artículo no pasamos un atributo.
def default_attributes_missing(**args)
DEFAULT_ATTRIBUTES.each do |attr|
i18n = I18n.t("exceptions.post.#{attr}_missing")
raise ArgumentError, i18n unless args[attr].present?
end
end
# Solo ejecuta la magia de OpenStruct si el campo existe en la
# plantilla
@ -101,12 +93,16 @@ class Post < OpenStruct
# Detecta si es un atributo válido o no, a partir de la tabla de la
# plantilla
def attribute?(mid)
attrs = DEFAULT_ATTRIBUTES + PRIVATE_ATTRIBUTES + PUBLIC_ATTRIBUTES
if singleton_class.method_defined? :attributes
(attrs + attributes).include? attribute_name(mid)
else
attrs.include? attribute_name(mid)
mid = attribute_name mid
included = DEFAULT_ATTRIBUTES.include?(mid) ||
PRIVATE_ATTRIBUTES.include?(mid) ||
PUBLIC_ATTRIBUTES.include?(mid)
if !included && singleton_class.method_defined?(:attributes)
included = attributes.include? attribute_name(mid)
end
included
end
# Devuelve los strong params para el layout
@ -248,6 +244,15 @@ class Post < OpenStruct
private
# Levanta un error si al construir el artículo no pasamos un atributo.
def default_attributes_missing(**args)
DEFAULT_ATTRIBUTES.each do |attr|
i18n = I18n.t("exceptions.post.#{attr}_missing")
raise ArgumentError, i18n unless args[attr].present?
end
end
def document_usuaries
document.data.fetch('usuaries', [])
end