From b5c3c73501f54fbffcc8e62140640b2dc5acc29c Mon Sep 17 00:00:00 2001 From: Chris Beer Date: Fri, 3 Feb 2023 08:48:43 -0800 Subject: [PATCH 1/2] Move Configuration.default_values to a class attribute; partial backport of #2826 --- lib/blacklight/configuration.rb | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/blacklight/configuration.rb b/lib/blacklight/configuration.rb index e0304d8f86..cdbf8b1549 100644 --- a/lib/blacklight/configuration.rb +++ b/lib/blacklight/configuration.rb @@ -20,15 +20,14 @@ class Configuration < OpenStructWithHashAccess autoload :ShowField end + + class_attribute :default_values, default: {} + # Set up Blacklight::Configuration.default_values to contain the basic, required Blacklight fields class << self def property(key, default: nil) default_values[key] = default end - - def default_values - @default_values ||= {} - end end # === Search request configuration From 158bf778ee18b46664e071f08c349e2c417f895d Mon Sep 17 00:00:00 2001 From: Chris Beer Date: Mon, 19 Dec 2022 12:33:11 -0800 Subject: [PATCH 2/2] Backport Blacklight::Configuration.default_configuration block setup --- lib/blacklight/configuration.rb | 25 +++++++++++++++++++- lib/blacklight/engine.rb | 4 ++++ spec/models/blacklight/configuration_spec.rb | 22 +++++++++++++++++ 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/lib/blacklight/configuration.rb b/lib/blacklight/configuration.rb index cdbf8b1549..df4493194c 100644 --- a/lib/blacklight/configuration.rb +++ b/lib/blacklight/configuration.rb @@ -20,7 +20,6 @@ class Configuration < OpenStructWithHashAccess autoload :ShowField end - class_attribute :default_values, default: {} # Set up Blacklight::Configuration.default_values to contain the basic, required Blacklight fields @@ -28,7 +27,29 @@ class << self def property(key, default: nil) default_values[key] = default end + + def default_configuration(&block) + @default_configurations ||= [] + + if block + @default_configurations << block + + block.call if @default_configuration_initialized + end + + @default_configurations + end + + def initialize_default_configuration + @default_configurations&.map(&:call) + @default_configuration_initialized = true + end + + def initialized_default_configuration? + @default_configuration_initialized + end end + # === Search request configuration # @!attribute http_method @@ -356,6 +377,8 @@ def default_per_page define_field_access :email_field, Blacklight::Configuration::DisplayField def initialize(hash = {}) + self.class.initialize_default_configuration unless self.class.initialized_default_configuration? + super(self.class.default_values.deep_dup.merge(hash)) yield(self) if block_given? diff --git a/lib/blacklight/engine.rb b/lib/blacklight/engine.rb index 3cf0202e09..97bd1c8d5e 100644 --- a/lib/blacklight/engine.rb +++ b/lib/blacklight/engine.rb @@ -14,6 +14,10 @@ class Engine < Rails::Engine end end + config.after_initialize do + Blacklight::Configuration.initialize_default_configuration + end + # This makes our rake tasks visible. rake_tasks do Dir.chdir(File.expand_path(File.join(File.dirname(__FILE__), '..'))) do diff --git a/spec/models/blacklight/configuration_spec.rb b/spec/models/blacklight/configuration_spec.rb index 19f4945cdb..7e2a93bac3 100644 --- a/spec/models/blacklight/configuration_spec.rb +++ b/spec/models/blacklight/configuration_spec.rb @@ -723,4 +723,26 @@ expect { config.view.a = '123' }.to raise_error(FrozenError) end end + + describe '.default_configuration' do + it 'adds additional default configuration properties' do + Blacklight::Configuration.default_configuration do + Blacklight::Configuration.default_values[:a] = '123' + end + + Blacklight::Configuration.default_configuration do + Blacklight::Configuration.default_values[:b] = 'abc' + end + + expect(Blacklight::Configuration.default_values[:a]).to eq '123' + expect(Blacklight::Configuration.default_values[:b]).to eq 'abc' + ensure + # reset the default configuration + Blacklight::Configuration.default_values.delete(:a) + Blacklight::Configuration.default_values.delete(:b) + + Blacklight::Configuration.default_configuration.delete_at(1) + Blacklight::Configuration.default_configuration.delete_at(2) + end + end end