mirror of
https://0xacab.org/sutty/sutty
synced 2024-11-22 11:56:22 +00:00
50 lines
1.2 KiB
Ruby
50 lines
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# Los valores de este metadato son artículos en otros idiomas
|
|
class MetadataLocales < MetadataHasAndBelongsToMany
|
|
# Todos los valores posibles para cada idioma disponible
|
|
#
|
|
# @return { lang: { title: uuid } }
|
|
def values
|
|
@values ||= other_locales.to_h do |other_locale|
|
|
[
|
|
other_locale,
|
|
posts.where(locale: other_locale).pluck(:title, :layout, :post_id).to_h do |row|
|
|
row.tap do |value|
|
|
value[0] = "#{value[0]} (#{site.layouts[value.delete_at(1)].humanized_name})"
|
|
end
|
|
end
|
|
]
|
|
end
|
|
end
|
|
|
|
# Siempre hay una relación inversa
|
|
#
|
|
# @return [True]
|
|
def inverse?
|
|
true
|
|
end
|
|
|
|
# El campo inverso se llama igual en el otro post
|
|
#
|
|
# @return [Symbol]
|
|
def inverse
|
|
:locales
|
|
end
|
|
|
|
private
|
|
|
|
# Obtiene todos los locales distintos a este post
|
|
#
|
|
# @return [Array]
|
|
def other_locales
|
|
@other_locales ||= site.locales - [locale]
|
|
end
|
|
|
|
# Obtiene todos los posts de los otros locales con el mismo layout
|
|
#
|
|
# @return [IndexedPost::ActiveRecord_AssociationRelation]
|
|
def posts
|
|
site.indexed_posts(locale: other_locales).where(layout: post.layout.value).where.not(post_id: post.uuid.value)
|
|
end
|
|
end
|