5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-11-26 12:36:22 +00:00

feat: obtener valores desde la base de datos #7537

This commit is contained in:
f 2023-10-06 09:59:42 -03:00
parent ecf44311ea
commit 84419c05f8
No known key found for this signature in database
3 changed files with 17 additions and 19 deletions

View file

@ -34,6 +34,20 @@ class IndexedPost < ApplicationRecord
scope :in_category, ->(category) { where("front_matter->'categories' ? :category", category: category.to_s) } scope :in_category, ->(category) { where("front_matter->'categories' ? :category", category: category.to_s) }
scope :by_usuarie, ->(usuarie) { where("front_matter->'usuaries' @> :usuarie::jsonb", usuarie: usuarie.to_s) } scope :by_usuarie, ->(usuarie) { where("front_matter->'usuaries' @> :usuarie::jsonb", usuarie: usuarie.to_s) }
# Trae todos los valores únicos para un atributo
#
# @param :attribute [String,Symbol]
# @return [Array]
scope :everything_of, ->(attribute) do
where('front_matter ? :attribute', attribute: attribute)
.pluck(
Arel.sql(
ActiveRecord::Base::sanitize_sql(['front_matter -> :attribute', attribute: attribute])
)
)
.flatten.uniq
end
belongs_to :site belongs_to :site
# La ubicación del Post en el disco # La ubicación del Post en el disco

View file

@ -74,8 +74,10 @@ MetadataTemplate = Struct.new(:site, :document, :name, :label, :type,
# Valores posibles, busca todos los valores actuales en otros # Valores posibles, busca todos los valores actuales en otros
# artículos del mismo sitio # artículos del mismo sitio
#
# @return [Array]
def values def values
site.everything_of(name, lang: lang) site.indexed_posts.everything_of(name)
end end
# Valor actual o por defecto. Al memoizarlo podemos modificarlo # Valor actual o por defecto. Al memoizarlo podemos modificarlo

View file

@ -317,24 +317,6 @@ class Site < ApplicationRecord
end end
end end
# Trae todos los valores disponibles para un campo
#
# TODO: Traer recursivamente, si el campo contiene Hash
#
# TODO: Mover a PostRelation#pluck
#
# @param attr [Symbol|String] El atributo a buscar
# @return Array
def everything_of(attr, lang: nil)
Rails.cache.fetch("#{cache_key_with_version}/everything_of/#{lang}/#{attr}", expires_in: 1.hour) do
attr = attr.to_sym
posts(lang: lang).flat_map do |p|
p[attr].value if p.attribute? attr
end.uniq.compact
end
end
# Poner en la cola de compilación # Poner en la cola de compilación
def enqueue! def enqueue!
update(status: 'enqueued') if waiting? update(status: 'enqueued') if waiting?