WIP: crear nuevos posts
This commit is contained in:
parent
f7527e7ee3
commit
6aab932269
5 changed files with 51 additions and 6 deletions
|
@ -1,3 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# Este campo representa el archivo donde se almacenan los datos
|
||||
class MetadataPath < MetadataTemplate
|
||||
# :label en este caso es el idioma/colección
|
||||
|
@ -18,7 +20,7 @@ class MetadataPath < MetadataTemplate
|
|||
private
|
||||
|
||||
def ext
|
||||
document.extname || '.markdown'
|
||||
document.extname.blank? ? '.markdown' : document.extname
|
||||
end
|
||||
|
||||
def lang
|
||||
|
|
|
@ -39,6 +39,8 @@ class MetadataSlug < MetadataTemplate
|
|||
private
|
||||
|
||||
def title
|
||||
layout.metadata[:title].try(:value)
|
||||
return if post.title.try(:value).blank?
|
||||
|
||||
post.title.try(:value).blank?
|
||||
end
|
||||
end
|
||||
|
|
|
@ -142,7 +142,7 @@ class Post < OpenStruct
|
|||
def save
|
||||
return false unless valid?
|
||||
# Salir si tenemos que cambiar el nombre del archivo y no pudimos
|
||||
return false if path_changed? && !update_path!
|
||||
return false if !new? && path_changed? && !update_path!
|
||||
return false unless write
|
||||
|
||||
# Vuelve a leer el post para tomar los cambios
|
||||
|
@ -152,9 +152,14 @@ class Post < OpenStruct
|
|||
end
|
||||
alias save! save
|
||||
|
||||
# Lee el documento
|
||||
# Lee el documento a menos que estemos trabajando con un documento en
|
||||
# blanco
|
||||
def read
|
||||
document.read
|
||||
document.read unless new?
|
||||
end
|
||||
|
||||
def new?
|
||||
document.path.blank?
|
||||
end
|
||||
|
||||
# Actualizar la ubicación del archivo si cambió de lugar y si no
|
||||
|
|
|
@ -15,11 +15,39 @@ class PostRelation < Array
|
|||
# Genera un artículo nuevo con los parámetros que le pasemos y lo suma
|
||||
# al array
|
||||
def build(**args)
|
||||
self << Post.new(site: site, **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[symbol]
|
||||
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
|
||||
|
|
|
@ -161,4 +161,12 @@ class PostTest < ActiveSupport::TestCase
|
|||
assert File.exist?(@post.path.absolute)
|
||||
assert File.exist?(@post.path_was)
|
||||
end
|
||||
|
||||
test 'se pueden crear nuevos' do
|
||||
post = @site.posts.build(layout: :post)
|
||||
post.title.value = 'test'
|
||||
|
||||
assert post.new?
|
||||
assert post.save
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue