los autocompletados pueden tener un nivel mas
This commit is contained in:
parent
9c06220f9b
commit
6d3a3739b3
1 changed files with 22 additions and 4 deletions
|
@ -4,6 +4,8 @@ class Post
|
||||||
class TemplateField
|
class TemplateField
|
||||||
attr_reader :post, :contents, :key
|
attr_reader :post, :contents, :key
|
||||||
|
|
||||||
|
STRING_VALUES = %w[string text url number email].freeze
|
||||||
|
|
||||||
def initialize(post, key, contents)
|
def initialize(post, key, contents)
|
||||||
@post = post
|
@post = post
|
||||||
@key = key
|
@key = key
|
||||||
|
@ -79,7 +81,9 @@ class Post
|
||||||
|
|
||||||
# Convierte el campo en un parámetro
|
# Convierte el campo en un parámetro
|
||||||
def to_param
|
def to_param
|
||||||
if array?
|
if nested?
|
||||||
|
{ key.to_sym => {} }
|
||||||
|
elsif array?
|
||||||
{ key.to_sym => [] }
|
{ key.to_sym => [] }
|
||||||
else
|
else
|
||||||
key.to_sym
|
key.to_sym
|
||||||
|
@ -157,7 +161,7 @@ class Post
|
||||||
|
|
||||||
# Obtiene los valores posibles para el campo de la plantilla
|
# Obtiene los valores posibles para el campo de la plantilla
|
||||||
def values
|
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
|
# Para obtener los valores posibles, hay que procesar la string y
|
||||||
# convertirla a parametros
|
# convertirla a parametros
|
||||||
|
@ -175,15 +179,29 @@ class Post
|
||||||
# Procesar el valor
|
# Procesar el valor
|
||||||
if values.is_a?(String)
|
if values.is_a?(String)
|
||||||
value = values.split(':', 2).map do |v|
|
value = values.split(':', 2).map do |v|
|
||||||
collection, attr = v.split('/', 2)
|
collection, attr, subattr = v.split('/', 3)
|
||||||
|
|
||||||
if collection == 'site'
|
if collection == 'site'
|
||||||
# TODO puede ser peligroso permitir acceder a cualquier
|
# TODO puede ser peligroso permitir acceder a cualquier
|
||||||
# atributo de site? No estamos trayendo nada fuera de
|
# atributo de site? No estamos trayendo nada fuera de
|
||||||
# lo normal
|
# lo normal
|
||||||
post.site.send(attr.to_sym)
|
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
|
else
|
||||||
post.site.everything_of(attr, lang: collection)
|
tv[subattr]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
post.site.everything_of(attr, lang: collection).compact
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue