5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-11-25 16:36:21 +00:00
panel/app/models/metadata_related_posts.rb

53 lines
1.2 KiB
Ruby
Raw Permalink Normal View History

2020-01-28 21:05:59 +00:00
# frozen_string_literal: true
# Devuelve una lista de títulos y UUID de todos los posts del mismo
# idioma que el actual, para usar con input-map.js
class MetadataRelatedPosts < MetadataArray
# Genera un Hash de { title (schema) => uuid } para usar en
# options_for_select
#
2020-11-07 23:51:00 +00:00
# @return [Hash]
2020-01-28 21:05:59 +00:00
def values
@values ||= posts.pluck(:title, :created_at, :layout, :post_id).to_h do |row|
row.tap do |value|
value[0] = "#{value[0]} #{value.delete_at(1).strftime('%F')} (#{site.layouts[value.delete_at(1)].humanized_name})"
end
2023-10-06 20:30:37 +00:00
end
2020-01-28 21:05:59 +00:00
end
2020-08-20 23:38:31 +00:00
# Las relaciones nunca son privadas
def private?
false
end
def indexable?
false
end
def indexable_values
posts.where(post_id: value).pluck(:title)
end
2020-01-28 21:05:59 +00:00
private
# Obtiene todos los posts menos el actual y opcionalmente los filtra
#
# @return [IndexedPost::ActiveRecord_AssociationRelation]
def posts
site.indexed_posts.where(locale: locale).where.not(post_id: post.uuid.value).where(filter)
2020-01-28 21:05:59 +00:00
end
# Encuentra el filtro desde el esquema del atributo
#
# @return [Hash,nil]
def filter
layout.metadata.dig(name, 'filter')&.to_h&.symbolize_keys
end
2021-02-11 19:16:25 +00:00
def sanitize(uuid)
super(uuid.map do |u|
u.to_s.gsub(/[^a-f0-9\-]/i, '')
end)
end
2020-01-28 21:05:59 +00:00
end