garantizar que PostRelation siempre usa la misma colección/idioma
This commit is contained in:
parent
6edd9e67a2
commit
737416488b
2 changed files with 9 additions and 7 deletions
|
@ -4,10 +4,11 @@
|
||||||
# artículos como si estuviésemos usando ActiveRecord.
|
# artículos como si estuviésemos usando ActiveRecord.
|
||||||
class PostRelation < Array
|
class PostRelation < Array
|
||||||
# No necesitamos cambiar el sitio
|
# No necesitamos cambiar el sitio
|
||||||
attr_reader :site
|
attr_reader :site, :lang
|
||||||
|
|
||||||
def initialize(site:)
|
def initialize(site:, lang:)
|
||||||
@site = site
|
@site = site
|
||||||
|
@lang = lang
|
||||||
# Proseguimos la inicialización sin valores por defecto
|
# Proseguimos la inicialización sin valores por defecto
|
||||||
super()
|
super()
|
||||||
end
|
end
|
||||||
|
@ -15,7 +16,7 @@ class PostRelation < Array
|
||||||
# Genera un artículo nuevo con los parámetros que le pasemos y lo suma
|
# Genera un artículo nuevo con los parámetros que le pasemos y lo suma
|
||||||
# al array
|
# al array
|
||||||
def build(**args)
|
def build(**args)
|
||||||
args[:lang] ||= I18n.locale
|
args[:lang] = lang
|
||||||
args[:document] ||= build_document(collection: args[:lang])
|
args[:document] ||= build_document(collection: args[:lang])
|
||||||
args[:layout] = build_layout(args[:layout])
|
args[:layout] = build_layout(args[:layout])
|
||||||
|
|
||||||
|
@ -94,7 +95,7 @@ class PostRelation < Array
|
||||||
|
|
||||||
@where ||= {}
|
@where ||= {}
|
||||||
@where[args.hash.to_s] ||= begin
|
@where[args.hash.to_s] ||= begin
|
||||||
PostRelation.new(site: site).concat(select do |post|
|
PostRelation.new(site: site, lang: lang).concat(select do |post|
|
||||||
result = args.map do |attr, value|
|
result = args.map do |attr, value|
|
||||||
next unless post.attribute?(attr)
|
next unless post.attribute?(attr)
|
||||||
|
|
||||||
|
@ -123,7 +124,7 @@ class PostRelation < Array
|
||||||
# @return [PostRelation]
|
# @return [PostRelation]
|
||||||
alias array_select select
|
alias array_select select
|
||||||
def select(&block)
|
def select(&block)
|
||||||
PostRelation.new(site: site).concat array_select(&block)
|
PostRelation.new(site: site, lang: lang).concat array_select(&block)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Intenta guardar todos y devuelve true si pudo
|
# Intenta guardar todos y devuelve true si pudo
|
||||||
|
|
|
@ -225,6 +225,7 @@ class Site < ApplicationRecord
|
||||||
|
|
||||||
# Traemos los posts del idioma actual por defecto
|
# Traemos los posts del idioma actual por defecto
|
||||||
lang ||= I18n.locale
|
lang ||= I18n.locale
|
||||||
|
lang = lang.to_sym
|
||||||
|
|
||||||
# Crea un Struct dinámico con los valores de los locales, si
|
# Crea un Struct dinámico con los valores de los locales, si
|
||||||
# llegamos a pasar un idioma que no existe vamos a tener una
|
# llegamos a pasar un idioma que no existe vamos a tener una
|
||||||
|
@ -233,7 +234,7 @@ class Site < ApplicationRecord
|
||||||
|
|
||||||
return @posts[lang] unless @posts[lang].blank?
|
return @posts[lang] unless @posts[lang].blank?
|
||||||
|
|
||||||
@posts[lang] = PostRelation.new site: self
|
@posts[lang] = PostRelation.new site: self, lang: lang
|
||||||
|
|
||||||
# No fallar si no existe colección para este idioma
|
# No fallar si no existe colección para este idioma
|
||||||
# XXX: queremos fallar silenciosamente?
|
# XXX: queremos fallar silenciosamente?
|
||||||
|
@ -250,7 +251,7 @@ class Site < ApplicationRecord
|
||||||
#
|
#
|
||||||
# @return PostRelation
|
# @return PostRelation
|
||||||
def docs
|
def docs
|
||||||
@docs ||= PostRelation.new(site: self).push(locales.flat_map do |locale|
|
@docs ||= PostRelation.new(site: self, lang: :docs).push(locales.flat_map do |locale|
|
||||||
posts(lang: locale)
|
posts(lang: locale)
|
||||||
end).flatten!
|
end).flatten!
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue