mirror of
https://0xacab.org/sutty/sutty
synced 2024-11-25 00:36:22 +00:00
53 lines
1.5 KiB
Ruby
53 lines
1.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# Este servicio se encarga de crear artículos y guardarlos en git,
|
|
# asignándoselos a une usuarie
|
|
PostService = Struct.new(:site, :usuarie, :post, :params, keyword_init: true) do
|
|
# Crea un artículo nuevo
|
|
#
|
|
# @return Post
|
|
def create
|
|
# TODO: Implementar layout
|
|
self.post = site.posts.build
|
|
# TODO: No podemos pasar los post_params a build aun porque para
|
|
# saber los parámetros tenemos que haber instanciado el post
|
|
# primero.
|
|
post.update_attributes(post_params) && commit(action: :created)
|
|
|
|
# Devolver el post aunque no se haya salvado para poder rescatar los
|
|
# errores
|
|
post
|
|
end
|
|
|
|
def update
|
|
# TODO: No podemos pasar los post_params a build aun porque para
|
|
# saber los parámetros tenemos que haber instanciado el post
|
|
# primero.
|
|
post.update_attributes(post_params) && commit(action: :updated)
|
|
|
|
# Devolver el post aunque no se haya salvado para poder rescatar los
|
|
# errores
|
|
post
|
|
end
|
|
|
|
def destroy
|
|
post.destroy! && commit(action: :destroyed)
|
|
|
|
post
|
|
end
|
|
|
|
private
|
|
|
|
def commit(action:)
|
|
site.repository.commit(file: post.path.absolute,
|
|
usuarie: usuarie,
|
|
remove: action == :destroyed,
|
|
message: I18n.t("post_service.#{action}",
|
|
title: post.title.value))
|
|
end
|
|
|
|
# Solo permitir cambiar estos atributos de cada articulo
|
|
def post_params
|
|
params.require(:post).permit(post.params)
|
|
end
|
|
end
|