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,27 +92,30 @@ class PostRelation < Array
def where(**args) def where(**args)
return self if args.empty? return self if args.empty?
PostRelation[*select do |post| @where ||= {}
result = args.map do |attr, value| @where[args.hash.to_s] ||= begin
next unless post.attribute?(attr) PostRelation.new(site: site).concat(select do |post|
result = args.map do |attr, value|
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.
case value case value
when Array then value.include? attribute.value when Array then value.include? attribute.value
else else
case attribute.value case attribute.value
when Array then attribute.value.include? value when Array then attribute.value.include? value
else attribute.value == value else attribute.value == value
end
end end
end 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