# frozen_string_literal: true # La relación de un sitio con sus artículos, esto nos permite generar # artículos como si estuviésemos usando ActiveRecord. class PostRelation < Array # No necesitamos cambiar el sitio attr_reader :site def initialize(site:) @site = site # Proseguimos la inicialización sin valores por defecto super() end # Genera un artículo nuevo con los parámetros que le pasemos y lo suma # al array def build(**args) args[:document] ||= build_document args[:lang] ||= I18n.locale args[:layout] = build_layout(args[:layout]) post = Post.new(site: site, **args) self << post post end # Intenta guardar todos y devuelve true si pudo def save_all map(&:save).all? end private def build_layout(layout = :post) return layout if layout.is_a? Layout site.layouts[layout] end # Devuelve una colección Jekyll que hace pasar el documento def build_collection Jekyll::Collection.new(site.jekyll, 'posts') end # Un documento borrador con algunas propiedades por defecto def build_document doc = Jekyll::Document.new('', site: site.jekyll, collection: build_collection) doc.data['date'] = Date.today.to_time doc end end