mirror of
https://0xacab.org/sutty/sutty
synced 2024-11-16 16:31:41 +00:00
fix: leer los archivos de datos correctamente #13428
los archivos de datos se leen con rutas relativas, lo que puede mezclar el cwd en usos concurrentes. depreca la dependencia en jekyll-data además!
This commit is contained in:
parent
e9fd650ba9
commit
e473de6a4e
5 changed files with 59 additions and 20 deletions
2
Gemfile
2
Gemfile
|
@ -52,7 +52,7 @@ gem 'icalendar'
|
||||||
gem 'inline_svg'
|
gem 'inline_svg'
|
||||||
gem 'httparty'
|
gem 'httparty'
|
||||||
gem 'safe_yaml'
|
gem 'safe_yaml'
|
||||||
gem 'jekyll', '~> 4.2'
|
gem 'jekyll', '~> 4.2.0'
|
||||||
gem 'jekyll-data'
|
gem 'jekyll-data'
|
||||||
gem 'jekyll-commonmark'
|
gem 'jekyll-commonmark'
|
||||||
gem 'jekyll-images'
|
gem 'jekyll-images'
|
||||||
|
|
|
@ -284,8 +284,6 @@ GEM
|
||||||
jekyll-commonmark (1.3.2)
|
jekyll-commonmark (1.3.2)
|
||||||
commonmarker (~> 0.14, < 0.22)
|
commonmarker (~> 0.14, < 0.22)
|
||||||
jekyll (>= 3.7, < 5.0)
|
jekyll (>= 3.7, < 5.0)
|
||||||
jekyll-data (1.1.2)
|
|
||||||
jekyll (>= 3.3, < 5.0.0)
|
|
||||||
jekyll-dotenv (0.2.0)
|
jekyll-dotenv (0.2.0)
|
||||||
dotenv (~> 2.7)
|
dotenv (~> 2.7)
|
||||||
jekyll (~> 4)
|
jekyll (~> 4)
|
||||||
|
@ -644,7 +642,6 @@ DEPENDENCIES
|
||||||
jbuilder (~> 2.5)
|
jbuilder (~> 2.5)
|
||||||
jekyll (~> 4.2)
|
jekyll (~> 4.2)
|
||||||
jekyll-commonmark
|
jekyll-commonmark
|
||||||
jekyll-data
|
|
||||||
jekyll-images
|
jekyll-images
|
||||||
jekyll-include-cache
|
jekyll-include-cache
|
||||||
kaminari
|
kaminari
|
||||||
|
|
36
app/lib/jekyll/readers/data_reader_decorator.rb
Normal file
36
app/lib/jekyll/readers/data_reader_decorator.rb
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module Jekyll
|
||||||
|
module Readers
|
||||||
|
# Permite leer datos utilizando rutas absolutas.
|
||||||
|
#
|
||||||
|
# {Jekyll::DataReader} usa {Dir.chdir} con rutas relativas, lo que
|
||||||
|
# en nuestro uso provoca confusiones en el lector de datos.
|
||||||
|
#
|
||||||
|
# Con este módulo, podemos leer todos los archivos usando rutas
|
||||||
|
# absolutas, lo que nos permite reemplazar jekyll-data, que agregaba
|
||||||
|
# código duplicado.
|
||||||
|
module DataReaderDecorator
|
||||||
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
|
included do
|
||||||
|
def read_data_to(dir, data)
|
||||||
|
return unless File.directory?(dir) && !@entry_filter.symlink?(dir)
|
||||||
|
|
||||||
|
Dir.glob(File.join(dir, '*')).each do |path|
|
||||||
|
next if @entry_filter.symlink?(path)
|
||||||
|
|
||||||
|
entry = Pathname.new(path).relative_path_from(dir).to_s
|
||||||
|
|
||||||
|
if File.directory?(path)
|
||||||
|
read_data_to(path, data[sanitize_filename(entry)] = {})
|
||||||
|
else
|
||||||
|
key = sanitize_filename(File.basename(entry, ".*"))
|
||||||
|
data[key] = read_data_file(path)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -375,9 +375,7 @@ class Site < ApplicationRecord
|
||||||
begin
|
begin
|
||||||
install_gems
|
install_gems
|
||||||
|
|
||||||
Jekyll::Site.new(configuration).tap do |site|
|
Jekyll::Site.new(configuration)
|
||||||
site.reader = JekyllData::Reader.new(site) if site.theme
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
String.include CoreExtensions::String::StripTags
|
String.include CoreExtensions::String::StripTags
|
||||||
Jekyll::Document.include CoreExtensions::Jekyll::Document::Path
|
Jekyll::Document.include CoreExtensions::Jekyll::Document::Path
|
||||||
|
Jekyll::DataReader.include Jekyll::Readers::DataReaderDecorator
|
||||||
|
|
||||||
# Definir tags de Liquid que provienen de complementos para que siempre
|
# Definir tags de Liquid que provienen de complementos para que siempre
|
||||||
# devuelvan contenido vacío.
|
# devuelvan contenido vacío.
|
||||||
|
@ -70,9 +71,27 @@ module Jekyll
|
||||||
# No necesitamos los archivos estáticos
|
# No necesitamos los archivos estáticos
|
||||||
def retrieve_static_files(_, _); end
|
def retrieve_static_files(_, _); end
|
||||||
|
|
||||||
# Solo lee los datos
|
# Solo lee los datos, desde la plantilla y luego desde el sitio,
|
||||||
|
# usando rutas absolutas, para evitar el uso confuso de Dir.chdir.
|
||||||
|
#
|
||||||
|
# Reemplaza jekyll-data también!
|
||||||
|
#
|
||||||
|
# @return [Hash]
|
||||||
def read_data
|
def read_data
|
||||||
@site.data = DataReader.new(site).read(site.config['data_dir'])
|
@site.data =
|
||||||
|
begin
|
||||||
|
reader = DataReader.new(site)
|
||||||
|
theme_dir = site.in_theme_dir('_data')
|
||||||
|
data_dir = site.in_source_dir(site.config['data_dir'])
|
||||||
|
|
||||||
|
if theme_dir
|
||||||
|
reader.read_data_to(theme_dir, reader.content)
|
||||||
|
reader.read_data_to(data_dir, reader.content)
|
||||||
|
reader.content
|
||||||
|
else
|
||||||
|
reader.read data_dir
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Lee los layouts
|
# Lee los layouts
|
||||||
|
@ -174,14 +193,3 @@ module PgSearch
|
||||||
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