mirror of
https://0xacab.org/sutty/sutty
synced 2024-11-16 08:31:41 +00:00
feat: leer datos de las plantillas directamente #1849
usando el lockfile de cada repositorio, acceder directamente al directorio de datos usando jekyll-data.
This commit is contained in:
parent
072b01e4d9
commit
47f1a8e530
2 changed files with 51 additions and 18 deletions
|
@ -335,7 +335,10 @@ class Site < ApplicationRecord
|
|||
|
||||
def jekyll
|
||||
run_in_path do
|
||||
@jekyll ||= Jekyll::Site.new(configuration)
|
||||
@jekyll ||=
|
||||
Jekyll::Site.new(configuration).tap do |site|
|
||||
site.reader = JekyllData::Reader.new(site) if site.theme
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -382,9 +385,6 @@ class Site < ApplicationRecord
|
|||
@configuration[unneeded] = [] if @configuration.key? unneeded
|
||||
end
|
||||
|
||||
# Eliminar el theme si no es una gema válida
|
||||
@configuration.delete('theme') unless theme_available?
|
||||
|
||||
# Si estamos usando nuestro propio plugin de i18n, los posts están
|
||||
# en "colecciones"
|
||||
locales.map(&:to_s).each do |i|
|
||||
|
@ -394,20 +394,6 @@ class Site < ApplicationRecord
|
|||
@configuration
|
||||
end
|
||||
|
||||
# Lista los nombres de las plantillas disponibles como gemas,
|
||||
# tomándolas dinámicamente de las que agreguemos en el grupo :themes
|
||||
# del Gemfile.
|
||||
def available_themes
|
||||
@available_themes ||= Bundler.load.current_dependencies.select do |gem|
|
||||
gem.groups.include? :themes
|
||||
end.map(&:name)
|
||||
end
|
||||
|
||||
# Detecta si el tema actual es una gema
|
||||
def theme_available?
|
||||
available_themes.include? design&.gem
|
||||
end
|
||||
|
||||
# Devuelve el dominio actual
|
||||
def self.domain
|
||||
ENV.fetch('SUTTY', 'sutty.nl')
|
||||
|
|
|
@ -37,6 +37,13 @@ end
|
|||
#
|
||||
# TODO: Aplicar monkey patches en otro lado...
|
||||
module Jekyll
|
||||
Site.class_eval do
|
||||
def configure_theme
|
||||
self.theme = nil
|
||||
self.theme = Jekyll::Theme.new(config['theme'], self) unless config['theme'].nil?
|
||||
end
|
||||
end
|
||||
|
||||
Reader.class_eval do
|
||||
# No necesitamos otros posts
|
||||
def retrieve_posts(_); end
|
||||
|
@ -69,6 +76,46 @@ module Jekyll
|
|||
end
|
||||
end
|
||||
|
||||
Theme.class_eval do
|
||||
attr_reader :site
|
||||
|
||||
def initialize(name, site)
|
||||
@name = name.downcase.strip
|
||||
@site = site
|
||||
end
|
||||
|
||||
def root
|
||||
@root ||= begin
|
||||
lockfile = Bundler::LockfileParser.new(File.read(site.in_source_dir('Gemfile.lock')))
|
||||
spec = lockfile.specs.find do |spec|
|
||||
spec.name == name
|
||||
end
|
||||
|
||||
ruby_version = Gem::Version.new(RUBY_VERSION)
|
||||
ruby_version.canonical_segments[2] = 0
|
||||
base_path = Rails.root.join('_storage', 'gems', File.basename(site.source), 'ruby',
|
||||
ruby_version.canonical_segments.join('.'))
|
||||
|
||||
File.realpath(
|
||||
case spec.source
|
||||
when Bundler::Source::Git
|
||||
File.join(base_path, 'bundler', 'gems', spec.source.extension_dir_name)
|
||||
when Bundler::Source::Rubygems
|
||||
File.join(base_path, 'gems', spec.full_name)
|
||||
end
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
def runtime_dependencies
|
||||
[]
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def gemspec; end
|
||||
end
|
||||
|
||||
# No necesitamos los archivos de la plantilla
|
||||
ThemeAssetsReader.class_eval do
|
||||
def read; end
|
||||
|
|
Loading…
Reference in a new issue