diff --git a/lib/blacklight/configuration.rb b/lib/blacklight/configuration.rb index e0304d8f86..df4493194c 100644 --- a/lib/blacklight/configuration.rb +++ b/lib/blacklight/configuration.rb @@ -20,16 +20,36 @@ 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 ||= {} + 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 @@ -357,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