# 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 ||= site.locales.map do |locale| [locale, posts.where(lang: locale).map do |post| [title(post), post.uuid.value] end.to_h] end.to_h 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.reject do |other_locale| other_locale.to_s == locale end 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