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
|
end
|
||||||
alias default_lang default_locale
|
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
|
# Trae los datos del directorio _data dentro del sitio
|
||||||
#
|
|
||||||
# XXX: Leer directamente sin pasar por Jekyll
|
|
||||||
def data
|
def data
|
||||||
read
|
unless @jekyll.data.present?
|
||||||
|
@jekyll.reader.read_data
|
||||||
|
|
||||||
# Define los valores por defecto según la llave buscada
|
# Define los valores por defecto según la llave buscada
|
||||||
@jekyll.data.default_proc = proc do |data, key|
|
@jekyll.data.default_proc = proc do |data, key|
|
||||||
|
@ -200,6 +186,7 @@ class Site < ApplicationRecord
|
||||||
when 'layout' then {}
|
when 'layout' then {}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
@jekyll.data
|
@jekyll.data
|
||||||
end
|
end
|
||||||
|
@ -207,7 +194,10 @@ class Site < ApplicationRecord
|
||||||
# Traer las colecciones. Todos los artículos van a estar dentro de
|
# Traer las colecciones. Todos los artículos van a estar dentro de
|
||||||
# colecciones.
|
# colecciones.
|
||||||
def collections
|
def collections
|
||||||
read
|
unless @read
|
||||||
|
@jekyll.reader.read_collections
|
||||||
|
@read = true
|
||||||
|
end
|
||||||
|
|
||||||
@jekyll.collections
|
@jekyll.collections
|
||||||
end
|
end
|
||||||
|
@ -221,8 +211,6 @@ class Site < ApplicationRecord
|
||||||
#
|
#
|
||||||
# @param lang: [String|Symbol] traer los artículos de este idioma
|
# @param lang: [String|Symbol] traer los artículos de este idioma
|
||||||
def posts(lang: nil)
|
def posts(lang: nil)
|
||||||
read
|
|
||||||
|
|
||||||
# Traemos los posts del idioma actual por defecto o el que haya
|
# Traemos los posts del idioma actual por defecto o el que haya
|
||||||
lang ||= locales.include?(I18n.locale) ? I18n.locale : default_locale
|
lang ||= locales.include?(I18n.locale) ? I18n.locale : default_locale
|
||||||
lang = lang.to_sym
|
lang = lang.to_sym
|
||||||
|
|
|
@ -32,31 +32,52 @@ module ActionDispatch
|
||||||
end
|
end
|
||||||
|
|
||||||
# Lazy Loading de Jekyll, deshabilitando la instanciación de elementos
|
# 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...
|
# TODO: Aplicar monkey patches en otro lado...
|
||||||
module Jekyll
|
module Jekyll
|
||||||
Reader.class_eval do
|
Reader.class_eval do
|
||||||
|
# No necesitamos otros posts
|
||||||
def retrieve_posts(_); end
|
def retrieve_posts(_); end
|
||||||
|
|
||||||
|
# No necesitamos otros directorios
|
||||||
def retrieve_dirs(_, _, _); end
|
def retrieve_dirs(_, _, _); end
|
||||||
|
|
||||||
|
# No necesitamos las páginas
|
||||||
def retrieve_pages(_, _); end
|
def retrieve_pages(_, _); end
|
||||||
|
|
||||||
|
# No necesitamos los archivos estáticos
|
||||||
def retrieve_static_files(_, _); end
|
def retrieve_static_files(_, _); end
|
||||||
|
|
||||||
|
# Solo lee los datos
|
||||||
|
def read_data
|
||||||
|
@site.data = DataReader.new(site).read(site.config["data_dir"])
|
||||||
end
|
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
|
ThemeAssetsReader.class_eval do
|
||||||
def read; end
|
def read; end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Prevenir la lectura del documento
|
# Aplazar la lectura del documento
|
||||||
Document.class_eval do
|
Document.class_eval do
|
||||||
alias_method :read!, :read
|
alias_method :read!, :read
|
||||||
def read; end
|
def read; end
|
||||||
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
|
Utils.class_eval do
|
||||||
def parse_date(input, msg = 'Input could not be parsed.')
|
def parse_date(input, msg = 'Input could not be parsed.')
|
||||||
@parse_date_cache ||= {}
|
@parse_date_cache ||= {}
|
||||||
|
@ -66,3 +87,14 @@ module Jekyll
|
||||||
end
|
end
|
||||||
end
|
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