From 6d3a3739b3785620245e9f6d56a3df386dcd2e15 Mon Sep 17 00:00:00 2001 From: f Date: Thu, 21 Jun 2018 14:32:54 -0300 Subject: [PATCH] los autocompletados pueden tener un nivel mas --- app/models/post/template_field.rb | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/app/models/post/template_field.rb b/app/models/post/template_field.rb index c5e7342..e02fed7 100644 --- a/app/models/post/template_field.rb +++ b/app/models/post/template_field.rb @@ -4,6 +4,8 @@ class Post class TemplateField attr_reader :post, :contents, :key + STRING_VALUES = %w[string text url number email].freeze + def initialize(post, key, contents) @post = post @key = key @@ -79,7 +81,9 @@ class Post # Convierte el campo en un parĂ¡metro def to_param - if array? + if nested? + { key.to_sym => {} } + elsif array? { key.to_sym => [] } else key.to_sym @@ -157,7 +161,7 @@ class Post # Obtiene los valores posibles para el campo de la plantilla def values - return '' if %w[string text].include? value + return '' if STRING_VALUES.include? value # Para obtener los valores posibles, hay que procesar la string y # convertirla a parametros @@ -175,15 +179,29 @@ class Post # Procesar el valor if values.is_a?(String) value = values.split(':', 2).map do |v| - collection, attr = v.split('/', 2) + collection, attr, subattr = v.split('/', 3) if collection == 'site' # TODO puede ser peligroso permitir acceder a cualquier # atributo de site? No estamos trayendo nada fuera de # lo normal post.site.send(attr.to_sym) + # Si hay un subatributo, tenemos que averiguar todos los + # valores dentro de el + # TODO volver elegante! + elsif subattr + post.site.everything_of(attr, lang: collection).compact.map do |v| + tv = v.dig('value') + if tv.is_a? Array + tv.map do |sv| + sv[subattr] + end + else + tv[subattr] + end + end else - post.site.everything_of(attr, lang: collection) + post.site.everything_of(attr, lang: collection).compact end end