mirror of
https://0xacab.org/sutty/sutty
synced 2024-11-22 05:06:21 +00:00
feat: poder traer algunas opciones de configuración desde la plantilla #174
This commit is contained in:
parent
453798dcc7
commit
263dce1435
5 changed files with 48 additions and 0 deletions
1
Gemfile
1
Gemfile
|
@ -76,6 +76,7 @@ gem 'webpacker'
|
||||||
gem 'yaml_db', git: 'https://0xacab.org/sutty/yaml_db.git'
|
gem 'yaml_db', git: 'https://0xacab.org/sutty/yaml_db.git'
|
||||||
gem 'kaminari'
|
gem 'kaminari'
|
||||||
gem 'device_detector'
|
gem 'device_detector'
|
||||||
|
gem 'dry-schema'
|
||||||
|
|
||||||
# database
|
# database
|
||||||
gem 'hairtrigger'
|
gem 'hairtrigger'
|
||||||
|
|
|
@ -603,6 +603,7 @@ DEPENDENCIES
|
||||||
distributed-press-api-client (~> 0.3.0rc0)
|
distributed-press-api-client (~> 0.3.0rc0)
|
||||||
dotenv-rails
|
dotenv-rails
|
||||||
down
|
down
|
||||||
|
dry-schema
|
||||||
ed25519
|
ed25519
|
||||||
email_address!
|
email_address!
|
||||||
exception_notification
|
exception_notification
|
||||||
|
|
|
@ -11,6 +11,7 @@ class Site < ApplicationRecord
|
||||||
include Site::BuildStats
|
include Site::BuildStats
|
||||||
include Site::LayoutOrdering
|
include Site::LayoutOrdering
|
||||||
include Site::SocialDistributedPress
|
include Site::SocialDistributedPress
|
||||||
|
include Site::DefaultOptions
|
||||||
include Tienda
|
include Tienda
|
||||||
|
|
||||||
# Cifrar la llave privada que cifra y decifra campos ocultos. Sutty
|
# Cifrar la llave privada que cifra y decifra campos ocultos. Sutty
|
||||||
|
|
44
app/models/site/default_options.rb
Normal file
44
app/models/site/default_options.rb
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'dry-schema'
|
||||||
|
|
||||||
|
class Site
|
||||||
|
# Las opciones por defecto se aplican durante la creación del sitio y
|
||||||
|
# luego se permite a les usuaries modificarlas según quieran. Por el
|
||||||
|
# momento las opciones nuevas que aparezcan no modifican un sitio que
|
||||||
|
# ya existe.
|
||||||
|
module DefaultOptions
|
||||||
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
|
Schema = Dry::Schema.Params do
|
||||||
|
optional(:colaboracion_anonima).value(:bool)
|
||||||
|
optional(:contact).value(:bool)
|
||||||
|
optional(:acepta_invitades).value(:bool)
|
||||||
|
optional(:slugify_mode).value(included_in?: Jekyll::Utils::SLUGIFY_MODES)
|
||||||
|
optional(:pagination).value(:bool)
|
||||||
|
end
|
||||||
|
|
||||||
|
included do
|
||||||
|
validate :validate_options_from_theme!, if: :persisted?
|
||||||
|
|
||||||
|
# @return [Dry::Schema::Result]
|
||||||
|
def options_from_theme
|
||||||
|
@options_from_theme ||= Schema.call(data['sutty'])
|
||||||
|
end
|
||||||
|
|
||||||
|
def update_options_from_theme
|
||||||
|
return true if options_from_theme.to_h.blank?
|
||||||
|
|
||||||
|
update(**options_from_theme.to_h)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def validate_options_from_theme!
|
||||||
|
options_from_theme.errors.each do |error|
|
||||||
|
errors.add(:default_options, "#{error.path.map(&:to_s).join('/')} #{error} (#{error.input})")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -27,6 +27,7 @@ SiteService = Struct.new(:site, :usuarie, :params, keyword_init: true) do
|
||||||
site.locales = [usuarie.lang] + I18n.available_locales
|
site.locales = [usuarie.lang] + I18n.available_locales
|
||||||
|
|
||||||
site.save &&
|
site.save &&
|
||||||
|
site.update_options_from_theme &&
|
||||||
site.config.write &&
|
site.config.write &&
|
||||||
commit_config(action: :create) &&
|
commit_config(action: :create) &&
|
||||||
site.reset.nil? &&
|
site.reset.nil? &&
|
||||||
|
|
Loading…
Reference in a new issue