Class: Blacklight::Configuration
- Inherits:
-
OpenStructWithHashAccess
- Object
- OpenStruct
- OpenStructWithHashAccess
- Blacklight::Configuration
- Includes:
- Fields
- Defined in:
- lib/blacklight/configuration.rb,
lib/blacklight/configuration/fields.rb,
lib/blacklight/configuration/context.rb,
lib/blacklight/configuration/view_config.rb,
lib/blacklight/configuration/session_tracking_config.rb
Overview
Blacklight::Configuration holds the configuration for a Blacklight::Controller, including fields to display, facets to show, sort options, and search fields.
Defined Under Namespace
Modules: Fields Classes: Context, DisplayField, FacetField, Field, IndexField, NullDisplayField, NullField, SearchField, SessionTrackingConfig, ShowField, SortField, ToolConfig, ViewConfig
Constant Summary collapse
- BASIC_SEARCH_PARAMETERS =
[:q, :qt, :page, :per_page, :search_field, :sort, :controller, :action, :'facet.page', :'facet.prefix', :'facet.sort', :rows, :format, :view].freeze
- ADVANCED_SEARCH_PARAMETERS =
[{ clause: {} }, :op].freeze
Instance Attribute Summary collapse
- #email_fields ⇒ Hash{Symbol=>Blacklight::Configuration::DisplayField}
- #facet_fields ⇒ Hash{Symbol=>Blacklight::Configuration::FacetField}
- #index_fields ⇒ Hash{Symbol=>Blacklight::Configuration::IndexField}
- #search_fields ⇒ Hash{Symbol=>Blacklight::Configuration::SearchField}
- #show_fields ⇒ Hash{Symbol=>Blacklight::Configuration::ShowField}
- #sms_fields ⇒ Hash{Symbol=>Blacklight::Configuration::DisplayField}
- #sort_fields ⇒ Hash{Symbol=>Blacklight::Configuration::SortField}
Class Method Summary collapse
- .default_configuration(&block) ⇒ Object
- .initialize_default_configuration ⇒ Object
- .initialized_default_configuration? ⇒ Boolean
- .property(key, default: nil) ⇒ Object
Instance Method Summary collapse
- #add_email_field(config_key, hash_or_field_or_array) ⇒ Blacklight::Configuration::DisplayField
- #add_facet_field(config_key, hash_or_field_or_array) ⇒ Blacklight::Configuration::FacetField
-
#add_facet_fields_to_solr_request!(*fields) ⇒ Object
Add any configured facet fields to the default solr parameters hash.
-
#add_field_configuration_to_solr_request!(*fields) ⇒ Object
Add any configured facet fields to the default solr parameters hash.
- #add_index_field(config_key, hash_or_field_or_array) ⇒ Blacklight::Configuration::IndexField
-
#add_nav_action(name, opts = {}) ⇒ Object
Add a partial to the header navbar.
-
#add_results_collection_tool(name, opts = {}) ⇒ Object
Add a tool for the search result list itself.
-
#add_results_document_tool(name, opts = {}) ⇒ Object
Add a partial to the tools for each document in the search results.
- #add_search_field(config_key, hash_or_field_or_array) ⇒ Blacklight::Configuration::SearchField
- #add_show_field(config_key, hash_or_field_or_array) ⇒ Blacklight::Configuration::ShowField
-
#add_show_header_tools_partial(name, opts = {}) ⇒ Object
Add a partial to the show page header when rendering a document.
-
#add_show_tools_partial(name, opts = {}) ⇒ Object
Add a partial to the tools when rendering a document.
- #add_sms_field(config_key, hash_or_field_or_array) ⇒ Blacklight::Configuration::DisplayField
- #add_sort_field(config_key, hash_or_field_or_array) ⇒ Blacklight::Configuration::SortField
-
#build(klass) ⇒ Object
(also: #inheritable_copy)
builds a copy for the provided controller class.
-
#configure {|config| ... } ⇒ Blacklight::Configuration
DSL helper.
-
#deep_copy ⇒ Object
Provide a ‘deep copy’ of Blacklight::Configuration that can be modified without effecting the original Blacklight::Configuration instance.
- #default_per_page ⇒ Integer
-
#default_search_field ⇒ Blacklight::Configuration::SearchField
Returns default search field, used for simpler display in history, etc.
-
#default_sort_field ⇒ Blacklight::Configuration::SortField
Returns default sort field, used for simpler display in history, etc.
- #default_title_field ⇒ String
-
#facet_configuration_for_field(field) ⇒ Blacklight::Configuration::FacetField
Blacklight facet configuration for the solr field.
-
#facet_field_names(group = nil) ⇒ Array<String>
A list of the facet field names from the configuration.
-
#facet_fields_in_group(group) ⇒ Array<Blacklight::Configuration::FacetField>
A list of facet fields.
-
#facet_group_names ⇒ Array<String>
A list of facet groups.
-
#for_display_type(display_type, &_block) ⇒ Object
Add a section of config that only applies to documents with a matching display type.
- #index_fields_for(display_types) ⇒ Object deprecated Deprecated.
-
#initialize(hash = {}) {|_self| ... } ⇒ Configuration
constructor
A new instance of Configuration.
-
#logo_link ⇒ String
The destination for the link around the logo in the header.
- #repository ⇒ Blacklight::Repository
- #show_fields_for(display_types) ⇒ Object deprecated Deprecated.
-
#view_config(view_type = nil, action_name: :index) ⇒ Blacklight::Configuration::ViewConfig
Get a view configuration for the given view type + action.
Methods included from Fields
Methods inherited from OpenStructWithHashAccess
#deep_dup, #deep_transform_values, #merge, #merge!, #reverse_merge, #select, #sort_by, #sort_by!, #to_h, #try
Constructor Details
#initialize(hash = {}) {|_self| ... } ⇒ Configuration
Returns a new instance of Configuration.
376 377 378 379 380 381 382 383 |
# File 'lib/blacklight/configuration.rb', line 376 def initialize(hash = {}) self.class.initialize_default_configuration unless self.class.initialized_default_configuration? super(self.class.default_values.deep_transform_values(&method(:_deep_copy)).merge(hash)) yield(self) if block_given? @view_config ||= {} end |
Instance Attribute Details
#email_fields ⇒ Hash{Symbol=>Blacklight::Configuration::DisplayField}
374 |
# File 'lib/blacklight/configuration.rb', line 374 define_field_access :email_field, Blacklight::Configuration::DisplayField |
#facet_fields ⇒ Hash{Symbol=>Blacklight::Configuration::FacetField}
356 |
# File 'lib/blacklight/configuration.rb', line 356 define_field_access :facet_field, Blacklight::Configuration::FacetField |
#index_fields ⇒ Hash{Symbol=>Blacklight::Configuration::IndexField}
359 |
# File 'lib/blacklight/configuration.rb', line 359 define_field_access :index_field, Blacklight::Configuration::IndexField |
#search_fields ⇒ Hash{Symbol=>Blacklight::Configuration::SearchField}
365 |
# File 'lib/blacklight/configuration.rb', line 365 define_field_access :search_field, Blacklight::Configuration::SearchField |
#show_fields ⇒ Hash{Symbol=>Blacklight::Configuration::ShowField}
362 |
# File 'lib/blacklight/configuration.rb', line 362 define_field_access :show_field, Blacklight::Configuration::ShowField |
#sms_fields ⇒ Hash{Symbol=>Blacklight::Configuration::DisplayField}
371 |
# File 'lib/blacklight/configuration.rb', line 371 define_field_access :sms_field, Blacklight::Configuration::DisplayField |
#sort_fields ⇒ Hash{Symbol=>Blacklight::Configuration::SortField}
368 |
# File 'lib/blacklight/configuration.rb', line 368 define_field_access :sort_field, Blacklight::Configuration::SortField |
Class Method Details
.default_configuration(&block) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/blacklight/configuration.rb', line 16 def default_configuration(&block) @default_configurations ||= [] if block @default_configurations << block block.call if @default_configuration_initialized end @default_configurations end |
.initialize_default_configuration ⇒ Object
28 29 30 31 |
# File 'lib/blacklight/configuration.rb', line 28 def initialize_default_configuration @default_configurations&.map(&:call) @default_configuration_initialized = true end |
.initialized_default_configuration? ⇒ Boolean
33 34 35 |
# File 'lib/blacklight/configuration.rb', line 33 def initialized_default_configuration? @default_configuration_initialized end |
.property(key, default: nil) ⇒ Object
12 13 14 |
# File 'lib/blacklight/configuration.rb', line 12 def property(key, default: nil) default_values[key] = default end |
Instance Method Details
#add_email_field(config_key, options) ⇒ Blacklight::Configuration::DisplayField #add_email_field(config_key, field) ⇒ Blacklight::Configuration::DisplayField #add_email_field(config_key, array) ⇒ Blacklight::Configuration::DisplayField
374 |
# File 'lib/blacklight/configuration.rb', line 374 define_field_access :email_field, Blacklight::Configuration::DisplayField |
#add_facet_field(config_key, options) ⇒ Blacklight::Configuration::FacetField #add_facet_field(config_key, field) ⇒ Blacklight::Configuration::FacetField #add_facet_field(config_key, array) ⇒ Blacklight::Configuration::FacetField
356 |
# File 'lib/blacklight/configuration.rb', line 356 define_field_access :facet_field, Blacklight::Configuration::FacetField |
#add_facet_fields_to_solr_request! ⇒ Object #add_facet_fields_to_solr_request!(field, field, etc) ⇒ Object
Add any configured facet fields to the default solr parameters hash
462 463 464 465 466 467 468 |
# File 'lib/blacklight/configuration.rb', line 462 def add_facet_fields_to_solr_request!(*fields) if fields.empty? self.add_facet_fields_to_solr_request = true else facet_fields.slice(*fields).each_value { |v| v.include_in_request = true } end end |
#add_field_configuration_to_solr_request! ⇒ Object #add_field_configuration_to_solr_request!(field, field, etc) ⇒ Object
Add any configured facet fields to the default solr parameters hash
475 476 477 478 479 480 481 482 483 |
# File 'lib/blacklight/configuration.rb', line 475 def add_field_configuration_to_solr_request!(*fields) if fields.empty? self.add_field_configuration_to_solr_request = true else index_fields.slice(*fields).each_value { |v| v.include_in_request = true } show_fields.slice(*fields).each_value { |v| v.include_in_request = true } facet_fields.slice(*fields).each_value { |v| v.include_in_request = true } end end |
#add_index_field(config_key, options) ⇒ Blacklight::Configuration::IndexField #add_index_field(config_key, field) ⇒ Blacklight::Configuration::IndexField #add_index_field(config_key, array) ⇒ Blacklight::Configuration::IndexField
359 |
# File 'lib/blacklight/configuration.rb', line 359 define_field_access :index_field, Blacklight::Configuration::IndexField |
#add_nav_action(name, opts = {}) ⇒ Object
Add a partial to the header navbar
580 581 582 |
# File 'lib/blacklight/configuration.rb', line 580 def add_nav_action(name, opts = {}) add_action(.partials, name, opts) end |
#add_results_collection_tool(name, opts = {}) ⇒ Object
Add a tool for the search result list itself
568 569 570 |
# File 'lib/blacklight/configuration.rb', line 568 def add_results_collection_tool(name, opts = {}) add_action(index.collection_actions, name, opts) end |
#add_results_document_tool(name, opts = {}) ⇒ Object
Add a partial to the tools for each document in the search results.
574 575 576 |
# File 'lib/blacklight/configuration.rb', line 574 def add_results_document_tool(name, opts = {}) add_action(index.document_actions, name, opts) end |
#add_search_field(config_key, options) ⇒ Blacklight::Configuration::SearchField #add_search_field(config_key, field) ⇒ Blacklight::Configuration::SearchField #add_search_field(config_key, array) ⇒ Blacklight::Configuration::SearchField
365 |
# File 'lib/blacklight/configuration.rb', line 365 define_field_access :search_field, Blacklight::Configuration::SearchField |
#add_show_field(config_key, options) ⇒ Blacklight::Configuration::ShowField #add_show_field(config_key, field) ⇒ Blacklight::Configuration::ShowField #add_show_field(config_key, array) ⇒ Blacklight::Configuration::ShowField
362 |
# File 'lib/blacklight/configuration.rb', line 362 define_field_access :show_field, Blacklight::Configuration::ShowField |
#add_show_header_tools_partial(name, opts = {}) ⇒ Object
Add a partial to the show page header when rendering a document.
557 558 559 560 561 562 |
# File 'lib/blacklight/configuration.rb', line 557 def add_show_header_tools_partial(name, opts = {}) opts[:partial] ||= 'document_action' add_action(show.header_actions, name, opts) klass && ActionBuilder.new(klass, name, opts).build end |
#add_show_tools_partial(name, opts = {}) ⇒ Object
Add a partial to the tools when rendering a document.
542 543 544 545 546 547 |
# File 'lib/blacklight/configuration.rb', line 542 def add_show_tools_partial(name, opts = {}) opts[:partial] ||= 'document_action' add_action(show.document_actions, name, opts) klass && ActionBuilder.new(klass, name, opts).build end |
#add_sms_field(config_key, options) ⇒ Blacklight::Configuration::DisplayField #add_sms_field(config_key, field) ⇒ Blacklight::Configuration::DisplayField #add_sms_field(config_key, array) ⇒ Blacklight::Configuration::DisplayField
371 |
# File 'lib/blacklight/configuration.rb', line 371 define_field_access :sms_field, Blacklight::Configuration::DisplayField |
#add_sort_field(config_key, options) ⇒ Blacklight::Configuration::SortField #add_sort_field(config_key, field) ⇒ Blacklight::Configuration::SortField #add_sort_field(config_key, array) ⇒ Blacklight::Configuration::SortField
368 |
# File 'lib/blacklight/configuration.rb', line 368 define_field_access :sort_field, Blacklight::Configuration::SortField |
#build(klass) ⇒ Object Also known as: inheritable_copy
builds a copy for the provided controller class
496 497 498 499 500 |
# File 'lib/blacklight/configuration.rb', line 496 def build(klass) deep_copy.tap do |conf| conf.klass = klass end end |
#configure {|config| ... } ⇒ Blacklight::Configuration
DSL helper
404 405 406 407 |
# File 'lib/blacklight/configuration.rb', line 404 def configure yield self if block_given? self end |
#deep_copy ⇒ Object
Provide a ‘deep copy’ of Blacklight::Configuration that can be modified without effecting the original Blacklight::Configuration instance.
Note: Rails provides ‘#deep_dup`, but it aggressively `#dup`’s class names too, turning them into anonymous class instances.
490 491 492 |
# File 'lib/blacklight/configuration.rb', line 490 def deep_copy deep_transform_values(&method(:_deep_copy)) end |
#default_per_page ⇒ Integer
396 397 398 |
# File 'lib/blacklight/configuration.rb', line 396 def default_per_page super || per_page.first end |
#default_search_field ⇒ Blacklight::Configuration::SearchField
Returns default search field, used for simpler display in history, etc. if not set, defaults to first defined search field
412 413 414 |
# File 'lib/blacklight/configuration.rb', line 412 def default_search_field @default_search_field ||= super || search_fields.values.find { |f| f.default == true } || search_fields.values.first end |
#default_sort_field ⇒ Blacklight::Configuration::SortField
Returns default sort field, used for simpler display in history, etc. if not set, defaults to first defined sort field
419 420 421 422 |
# File 'lib/blacklight/configuration.rb', line 419 def default_sort_field field = super || sort_fields.values.find { |f| f.default == true } field || sort_fields.values.first end |
#default_title_field ⇒ String
425 426 427 |
# File 'lib/blacklight/configuration.rb', line 425 def default_title_field document_model.unique_key || 'id' end |
#facet_configuration_for_field(field) ⇒ Blacklight::Configuration::FacetField
Returns Blacklight facet configuration for the solr field.
431 432 433 434 435 436 437 438 |
# File 'lib/blacklight/configuration.rb', line 431 def facet_configuration_for_field(field) # short-circuit on the common case, where the solr field name and the blacklight field name are the same. return facet_fields[field] if facet_fields[field] && facet_fields[field].field == field # Find the facet field configuration for the solr field, or provide a default. facet_fields.values.find { |v| v.field.to_s == field.to_s } || FacetField.new(field: field).normalize! end |
#facet_field_names(group = nil) ⇒ Array<String>
Returns a list of the facet field names from the configuration.
442 443 444 |
# File 'lib/blacklight/configuration.rb', line 442 def facet_field_names(group = nil) facet_fields_in_group(group).map(&:field) end |
#facet_fields_in_group(group) ⇒ Array<Blacklight::Configuration::FacetField>
Returns a list of facet fields.
448 449 450 |
# File 'lib/blacklight/configuration.rb', line 448 def facet_fields_in_group(group) facet_fields.values.select { |opts| group == opts[:group] } end |
#facet_group_names ⇒ Array<String>
Returns a list of facet groups.
453 454 455 |
# File 'lib/blacklight/configuration.rb', line 453 def facet_group_names facet_fields.map { |_facet, opts| opts[:group] }.uniq end |
#for_display_type(display_type, &_block) ⇒ Object
Add a section of config that only applies to documents with a matching display type
586 587 588 589 590 591 592 |
# File 'lib/blacklight/configuration.rb', line 586 def for_display_type display_type, &_block fields_for_type[display_type] ||= self.class.new fields_for_type[display_type].tap do |conf| yield(conf) if block_given? end end |
#index_fields_for(display_types) ⇒ Object
Return a list of fields for the index display that should be used for the provided document. This respects any configuration made using for_display_type
598 599 600 601 602 |
# File 'lib/blacklight/configuration.rb', line 598 def index_fields_for(display_types) Array(display_types).inject(index_fields) do |fields, display_type| fields.merge(for_display_type(display_type).index_fields) end end |
#logo_link ⇒ String
Returns The destination for the link around the logo in the header.
391 392 393 |
# File 'lib/blacklight/configuration.rb', line 391 def logo_link super || Rails.application.routes.url_helpers.root_path end |
#repository ⇒ Blacklight::Repository
386 387 388 |
# File 'lib/blacklight/configuration.rb', line 386 def repository repository_class.new(self) end |
#show_fields_for(display_types) ⇒ Object
Return a list of fields for the show page that should be used for the provided document. This respects any configuration made using for_display_type
608 609 610 611 612 |
# File 'lib/blacklight/configuration.rb', line 608 def show_fields_for(display_types) Array(display_types).inject(show_fields) do |fields, display_type| fields.merge(for_display_type(display_type).show_fields) end end |
#view_config(view_type = nil, action_name: :index) ⇒ Blacklight::Configuration::ViewConfig
Get a view configuration for the given view type + action. The effective view configuration is inherited from:
-
the configuration from blacklight_config.view with the key ‘view_type`
-
the configuration from blacklight_config.action_mapping with the key ‘action_name`
-
any parent config for the action map result above
-
the action_mapping default configuration
-
the top-level index/show view configuration
513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 |
# File 'lib/blacklight/configuration.rb', line 513 def view_config(view_type = nil, action_name: :index) view_type &&= view_type.to_sym action_name &&= action_name.to_sym action_name ||= :index if view_type == :show action_name = view_type view_type = nil end @view_config[[view_type, action_name]] ||= if view_type.nil? action_config(action_name) else base_config = action_config(action_name) base_config.merge(view.fetch(view_type, {})) end end |