Module: Blacklight::Configuration::Fields

Extended by:
ActiveSupport::Concern
Included in:
Blacklight::Configuration
Defined in:
lib/blacklight/configuration/fields.rb

Overview

This mixin provides Blacklight::Configuration with generic solr fields configuration

Defined Under Namespace

Modules: ClassMethods

Instance Method Summary (collapse)

Instance Method Details

- (Object) add_solr_field(config_key, *args, &block)

Add a solr field configuration to the given configuration key

The recommended and strongly encouraged format is a field name, configuration pair, e.g.:

add_solr_field :index_field, 'format', :label => 'Format'

Alternative formats include:

  • a field name and block format:

    add_solr_field :index_field, 'format' do |field|
      field.label = 'Format'
    end
  • a plain block:

    add_solr_field :index_field do |field|
      field.field = 'format'
      field.label = 'Format'
    end
  • a configuration hash:

    add_solr_field :index_field, :field => 'format', :label => 'Format'
  • a Field instance:

    add_solr_field :index_field, IndexField.new(:field => 'format', :label => 'Format')
  • an array of hashes:

    add_solr_field :index_field, [{:field => 'format', :label => 'Format'}, IndexField.new(:field => 'date', :label => 'Date')]

Parameters:

  • String

    config_key

  • Array

    *args



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/blacklight/configuration/fields.rb', line 69

def add_solr_field config_key, *args, &block
  field_config = case args.first
    when String
      field_config_from_key_and_hash(config_key, *args)
    when Symbol
      args[0] = args[0].to_s
      field_config_from_key_and_hash(config_key, *args)
    when Array
      field_config_from_array(config_key, *args)
    else
      field_config_from_field_or_hash(config_key, *args)
  end

  return if field_config.is_a? Array
  
  if block_given?
    yield field_config
  end
      
  field_config.normalize!(self)
  field_config.validate!

  raise "A #{config_key} with the key #{field_config.field} already exists." if self[config_key.pluralize][field_config.field].present?

  self[config_key.pluralize][ field_config.field ] = field_config            
end

- (Object) field_config_from_array(config_key, array_of_fields_or_hashes) (protected)

Add multiple solr fields using a hash or Field instance



106
107
108
109
110
# File 'lib/blacklight/configuration/fields.rb', line 106

def field_config_from_array config_key, array_of_fields_or_hashes
  array_of_fields_or_hashes.map do |field_or_hash| 
    add_solr_field(config_key, field_or_hash)
  end
end

- (Object) field_config_from_field_or_hash(config_key, field_or_hash = {}) (protected)

Add a solr field using a hash or Field instance



113
114
115
# File 'lib/blacklight/configuration/fields.rb', line 113

def field_config_from_field_or_hash config_key, field_or_hash = {}
  hash_arg_to_config(field_or_hash, field_class_from_key(config_key))
end

- (Object) field_config_from_key_and_hash(config_key, solr_field, field_or_hash = {}) (protected)

Add a solr field by a solr field name and hash



98
99
100
101
102
103
# File 'lib/blacklight/configuration/fields.rb', line 98

def field_config_from_key_and_hash config_key, solr_field, field_or_hash = {}
  field_config = field_config_from_field_or_hash(config_key, field_or_hash)
  field_config.field = solr_field

  field_config
end

- (Object) hash_arg_to_config(hash_arg, klass) (protected)

for our add_* methods, takes the optional hash param, and makes it into a specific config OpenStruct, like FacetField or SearchField. Or if the param already was one, that's cool. Or if the param is nil, make an empty one. Second argument is an actual class object.



122
123
124
125
126
127
128
129
130
131
132
133
# File 'lib/blacklight/configuration/fields.rb', line 122

def hash_arg_to_config(hash_arg, klass)
  case hash_arg
  when Hash 
    klass.new(hash_arg)
  when NilClass 
    klass.new
  else 
    # this assumes it already is an element of klass, or acts like one,
    # if not something bad will happen later, that's your problem. 
    hash_arg
  end
end