Merge branch 'lectura-de-jekyll' into 'rails'
optimizar la lectura de datos desde jekyll See merge request sutty/sutty!25
This commit is contained in:
commit
f2981a6a45
2 changed files with 47 additions and 27 deletions
|
@ -175,24 +175,10 @@ class Site < ApplicationRecord
|
|||
end
|
||||
alias default_lang default_locale
|
||||
|
||||
def read?
|
||||
@read ||= false
|
||||
end
|
||||
|
||||
# Lee el sitio y todos los artículos
|
||||
def read
|
||||
# No hacer nada si ya se leyó antes
|
||||
return if read?
|
||||
|
||||
@jekyll.read
|
||||
@read = true
|
||||
end
|
||||
|
||||
# Trae los datos del directorio _data dentro del sitio
|
||||
#
|
||||
# XXX: Leer directamente sin pasar por Jekyll
|
||||
def data
|
||||
read
|
||||
unless @jekyll.data.present?
|
||||
@jekyll.reader.read_data
|
||||
|
||||
# Define los valores por defecto según la llave buscada
|
||||
@jekyll.data.default_proc = proc do |data, key|
|
||||
|
@ -200,6 +186,7 @@ class Site < ApplicationRecord
|
|||
when 'layout' then {}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@jekyll.data
|
||||
end
|
||||
|
@ -207,7 +194,10 @@ class Site < ApplicationRecord
|
|||
# Traer las colecciones. Todos los artículos van a estar dentro de
|
||||
# colecciones.
|
||||
def collections
|
||||
read
|
||||
unless @read
|
||||
@jekyll.reader.read_collections
|
||||
@read = true
|
||||
end
|
||||
|
||||
@jekyll.collections
|
||||
end
|
||||
|
@ -221,8 +211,6 @@ class Site < ApplicationRecord
|
|||
#
|
||||
# @param lang: [String|Symbol] traer los artículos de este idioma
|
||||
def posts(lang: nil)
|
||||
read
|
||||
|
||||
# Traemos los posts del idioma actual por defecto o el que haya
|
||||
lang ||= locales.include?(I18n.locale) ? I18n.locale : default_locale
|
||||
lang = lang.to_sym
|
||||
|
|
|
@ -32,31 +32,52 @@ module ActionDispatch
|
|||
end
|
||||
|
||||
# Lazy Loading de Jekyll, deshabilitando la instanciación de elementos
|
||||
# que no necesitamos
|
||||
# que no necesitamos. Esto permite que podamos leer el sitio por partes
|
||||
# en lugar de todo junto.
|
||||
#
|
||||
# TODO: Aplicar monkey patches en otro lado...
|
||||
module Jekyll
|
||||
Reader.class_eval do
|
||||
# No necesitamos otros posts
|
||||
def retrieve_posts(_); end
|
||||
|
||||
# No necesitamos otros directorios
|
||||
def retrieve_dirs(_, _, _); end
|
||||
|
||||
# No necesitamos las páginas
|
||||
def retrieve_pages(_, _); end
|
||||
|
||||
# No necesitamos los archivos estáticos
|
||||
def retrieve_static_files(_, _); end
|
||||
|
||||
# Solo lee los datos
|
||||
def read_data
|
||||
@site.data = DataReader.new(site).read(site.config["data_dir"])
|
||||
end
|
||||
|
||||
# Lee todos los artículos del sitio
|
||||
def read_collections
|
||||
read_directories
|
||||
read_included_excludes
|
||||
sort_files!
|
||||
CollectionReader.new(site).read
|
||||
end
|
||||
end
|
||||
|
||||
# No necesitamos los archivos de la plantilla
|
||||
ThemeAssetsReader.class_eval do
|
||||
def read; end
|
||||
end
|
||||
|
||||
# Prevenir la lectura del documento
|
||||
# Aplazar la lectura del documento
|
||||
Document.class_eval do
|
||||
alias_method :read!, :read
|
||||
def read; end
|
||||
end
|
||||
|
||||
# https://github.com/jekyll/jekyll/pull/8425
|
||||
# Prevenir la instanciación de Time
|
||||
#
|
||||
# @see {https://github.com/jekyll/jekyll/pull/8425}
|
||||
Utils.class_eval do
|
||||
def parse_date(input, msg = 'Input could not be parsed.')
|
||||
@parse_date_cache ||= {}
|
||||
|
@ -66,3 +87,14 @@ module Jekyll
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
# JekyllData::Reader del plugin jekyll-data modifica Jekyll::Site#reader
|
||||
# para también leer los datos que vienen en el theme.
|
||||
module JekyllData
|
||||
Reader.class_eval do
|
||||
def read_data
|
||||
super
|
||||
read_theme_data
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue