los artículos filtrados también tienen un sitio

This commit is contained in:
f 2020-11-27 20:54:29 -03:00
parent 227e48681e
commit 1fb53168e2

View file

@ -92,11 +92,13 @@ class PostRelation < Array
def where(**args) def where(**args)
return self if args.empty? return self if args.empty?
PostRelation[*select do |post| @where ||= {}
@where[args.hash.to_s] ||= begin
PostRelation.new(site: site).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)
attribute = post.public_send(attr) attribute = post[attr]
# TODO: Si el valor del atributo también es un Array deberíamos # TODO: Si el valor del atributo también es un Array deberíamos
# cruzar ambas. # cruzar ambas.
@ -111,8 +113,9 @@ class PostRelation < Array
end.compact end.compact
# Un Array vacío devuelve true para all? # Un Array vacío devuelve true para all?
!result.empty? && result.all? result.present? && result.all?
end] end)
end
end end
# Como Array#select devolviendo una relación # Como Array#select devolviendo una relación
@ -120,7 +123,7 @@ class PostRelation < Array
# @return [PostRelation] # @return [PostRelation]
alias array_select select alias array_select select
def select(&block) def select(&block)
PostRelation[*array_select(&block)] PostRelation.new(site: site).concat array_select(&block)
end end
# Intenta guardar todos y devuelve true si pudo # Intenta guardar todos y devuelve true si pudo