blacklight_oai_provider 5.0.0 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +1 -0
  3. data/.solr_wrapper +1 -1
  4. data/.travis.yml +21 -11
  5. data/Gemfile +3 -0
  6. data/README.md +12 -20
  7. data/Rakefile +0 -2
  8. data/VERSION +1 -1
  9. data/app/controllers/concerns/blacklight_oai_provider/controller.rb +8 -3
  10. data/app/models/concerns/blacklight_oai_provider/solr_document.rb +1 -1
  11. data/blacklight_oai_provider.gemspec +5 -11
  12. data/lib/blacklight_oai_provider.rb +0 -14
  13. data/lib/blacklight_oai_provider/engine.rb +0 -9
  14. data/lib/blacklight_oai_provider/routes.rb +5 -9
  15. data/lib/blacklight_oai_provider/solr_document_provider.rb +3 -2
  16. data/lib/blacklight_oai_provider/solr_document_wrapper.rb +18 -18
  17. data/lib/blacklight_oai_provider/solr_set.rb +5 -3
  18. data/lib/generators/blacklight_oai_provider/install_generator.rb +12 -0
  19. data/lib/railties/blacklight_oai_provider.rake +1 -1
  20. data/solr/conf/schema.xml +322 -563
  21. data/solr/conf/solrconfig.xml +55 -182
  22. data/solr/sample_solr_documents.yml +722 -722
  23. data/spec/controllers/catalog_controller_spec.rb +0 -1
  24. data/spec/lib/blacklight_oai_provider/solr_document_provider_spec.rb +50 -0
  25. data/spec/lib/blacklight_oai_provider/solr_document_wrapper_spec.rb +1 -1
  26. data/spec/lib/blacklight_oai_provider/solr_set_spec.rb +7 -7
  27. data/spec/requests/get_record_spec.rb +10 -0
  28. data/spec/requests/list_identifiers_spec.rb +4 -4
  29. data/spec/requests/list_records_spec.rb +5 -5
  30. data/spec/requests/list_sets_spec.rb +7 -7
  31. data/spec/spec_helper.rb +2 -11
  32. data/spec/test_app_templates/lib/generators/test_app_generator.rb +37 -23
  33. data/spec/test_app_templates/templates/catalog_controller.rb +196 -0
  34. metadata +22 -52
@@ -31,7 +31,6 @@ describe CatalogController do
31
31
 
32
32
  it 'return corrext document configuration' do
33
33
  expect(controller.oai_config[:document][:limit]).to be 25
34
- expect(controller.oai_config[:document][:model]).to be_a Class
35
34
  end
36
35
  end
37
36
 
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe BlacklightOaiProvider::SolrDocumentProvider do
4
+ subject(:provider) { described_class.new(controller, options) }
5
+
6
+ let(:options) { {} }
7
+ let(:controller) { CatalogController.new }
8
+
9
+ describe '#initialize' do
10
+ let(:view_context) { instance_double("ViewContext") }
11
+
12
+ before do
13
+ allow(controller).to receive(:view_context).and_return(view_context)
14
+ allow(view_context).to receive(:oai_catalog_url).and_return(:some_path)
15
+ allow(view_context).to receive(:application_name).and_return(:some_name)
16
+ end
17
+
18
+ context 'with no options provided' do
19
+ it 'sets the default repository name and url' do
20
+ expect(provider.url).to eq :some_path
21
+ expect(provider.name).to eq :some_name
22
+ end
23
+ end
24
+
25
+ context 'with options provided' do
26
+ let(:options) { { provider: { repository_url: '/my/custom/path', repository_name: 'My Custom Name' } } }
27
+
28
+ it 'uses the repository name and url set into the options' do
29
+ expect(provider.url).to eq '/my/custom/path'
30
+ expect(provider.name).to eq 'My Custom Name'
31
+ end
32
+ end
33
+
34
+ context 'with Procs provided as option values' do
35
+ let(:options) do
36
+ {
37
+ provider: {
38
+ repository_name: ->(kontroller) { "Hello #{kontroller.__id__}" },
39
+ repository_url: ->(kontroller) { "Hello #{kontroller.view_context.oai_catalog_url}" }
40
+ }
41
+ }
42
+ end
43
+
44
+ it 'call()-s the Proc to set the option value' do
45
+ expect(provider.name).to eq "Hello #{controller.__id__}"
46
+ expect(provider.url).to eq "Hello #{controller.view_context.oai_catalog_url}"
47
+ end
48
+ end
49
+ end
50
+ end
@@ -38,7 +38,7 @@ RSpec.describe BlacklightOaiProvider::SolrDocumentWrapper do
38
38
 
39
39
  describe '#latest' do
40
40
  it 'returns the latest timestamp of all the records' do
41
- expect(wrapper.latest).to eq Time.parse('2014-03-03 18:42:53.056000000 +0000').utc
41
+ expect(wrapper.latest).to eq Time.parse('2015-02-03 18:42:53.056000000 +0000').utc
42
42
  end
43
43
  end
44
44
 
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  RSpec.describe BlacklightOaiProvider::SolrSet do
4
4
  let(:controller) { CatalogController.new }
5
5
  let(:fields) do
6
- [{ label: 'language', solr_field: 'language_facet' }]
6
+ [{ label: 'language', solr_field: 'language_ssim' }]
7
7
  end
8
8
 
9
9
  before do
@@ -23,7 +23,7 @@ RSpec.describe BlacklightOaiProvider::SolrSet do
23
23
  context 'with multiple fields' do
24
24
  let(:fields) do
25
25
  [
26
- { label: 'language', solr_field: 'language_facet' },
26
+ { label: 'language', solr_field: 'language_ssim' },
27
27
  { solr_field: 'format' }
28
28
  ]
29
29
  end
@@ -35,7 +35,7 @@ RSpec.describe BlacklightOaiProvider::SolrSet do
35
35
 
36
36
  context 'for a field with no values' do
37
37
  let(:fields) do
38
- [{ label: 'author', solr_field: 'author_display' }]
38
+ [{ label: 'author', solr_field: 'author_ts' }]
39
39
  end
40
40
 
41
41
  it 'returns nil' do
@@ -45,12 +45,12 @@ RSpec.describe BlacklightOaiProvider::SolrSet do
45
45
 
46
46
  context 'for a field with facet config limit' do
47
47
  let(:fields) do
48
- [{ label: 'lc_alpha', solr_field: 'lc_alpha_facet' }]
48
+ [{ label: 'lc_alpha', solr_field: 'lc_alpha_ssim' }]
49
49
  end
50
50
 
51
51
  before do
52
52
  CatalogController.configure_blacklight do |config|
53
- config.add_facet_field 'lc_alpha_facet', label: 'lc_alpha', limit: 2
53
+ config.add_facet_field 'lc_alpha_ssim', label: 'lc_alpha', limit: 2
54
54
  end
55
55
  end
56
56
 
@@ -65,7 +65,7 @@ RSpec.describe BlacklightOaiProvider::SolrSet do
65
65
  let(:spec) { 'language:Hebrew' }
66
66
 
67
67
  it 'returns the filter query' do
68
- expect(described_class.from_spec(spec)).to eq 'language_facet:"Hebrew"'
68
+ expect(described_class.from_spec(spec)).to eq 'language_ssim:"Hebrew"'
69
69
  end
70
70
  end
71
71
 
@@ -94,7 +94,7 @@ RSpec.describe BlacklightOaiProvider::SolrSet do
94
94
  end
95
95
 
96
96
  it 'gets solr field' do
97
- expect(set.solr_field).to eql 'language_facet'
97
+ expect(set.solr_field).to eql 'language_ssim'
98
98
  end
99
99
  end
100
100
  end
@@ -51,4 +51,14 @@ describe 'OIA-PMH GetRecord Request' do
51
51
  it 'contains format' do
52
52
  expect(xml.at_xpath('//xmlns:metadata/oai_dc:dc/dc:format', namespaces).text).to eql 'Book'
53
53
  end
54
+
55
+ context 'when identifier has slashes' do
56
+ before do
57
+ get '/catalog/oai?verb=GetRecord&identifier=oai:test:fe/gh/00313831&metadataPrefix=oai_dc'
58
+ end
59
+
60
+ it 'retrieves record' do
61
+ expect(xml.at_xpath('//xmlns:GetRecord/xmlns:record/xmlns:header/xmlns:identifier').text).to eql 'oai:test:fe/gh/00313831'
62
+ end
63
+ end
54
64
  end
@@ -18,7 +18,7 @@ describe 'OIA-PMH ListIdentifiers Request' do
18
18
  end
19
19
 
20
20
  it 'contains resumptionToken' do
21
- expect(xml.at_xpath('//xmlns:resumptionToken').text).to eql 'oai_dc.f(2014-02-03T18:42:53Z).u(2014-03-03T18:42:53Z).t(30):25'
21
+ expect(xml.at_xpath('//xmlns:resumptionToken').text).to eql 'oai_dc.f(2014-02-03T18:42:53Z).u(2015-02-03T18:42:53Z).t(30):25'
22
22
  end
23
23
  end
24
24
 
@@ -27,8 +27,8 @@ describe 'OIA-PMH ListIdentifiers Request' do
27
27
  get '/catalog/oai?verb=ListIdentifiers&resumptionToken=oai_dc.f(2014-02-03T18:42:53Z).u(2014-03-03T18:42:53Z).t(30):25'
28
28
  end
29
29
 
30
- it 'returns 5 records' do
31
- expect(xml.xpath('//xmlns:ListIdentifiers/xmlns:header').count).to be 5
30
+ it 'returns 4 records' do
31
+ expect(xml.xpath('//xmlns:ListIdentifiers/xmlns:header').count).to be 4
32
32
  end
33
33
 
34
34
  it 'first record has identifier and timestamp' do
@@ -57,7 +57,7 @@ describe 'OIA-PMH ListIdentifiers Request' do
57
57
 
58
58
  context 'with different timestamp_field' do
59
59
  before :all do
60
- SolrDocument.timestamp_key = "record_creation_dt"
60
+ SolrDocument.timestamp_key = "record_creation_dtsi"
61
61
  end
62
62
 
63
63
  before do
@@ -24,7 +24,7 @@ describe 'OIA-PMH ListRecords Request' do
24
24
  end
25
25
 
26
26
  it 'contains resumptionToken' do
27
- expect(xml.at_xpath('//xmlns:resumptionToken').text).to eql 'oai_dc.f(2014-02-03T18:42:53Z).u(2014-03-03T18:42:53Z).t(30):25'
27
+ expect(xml.at_xpath('//xmlns:resumptionToken').text).to eql 'oai_dc.f(2014-02-03T18:42:53Z).u(2015-02-03T18:42:53Z).t(30):25'
28
28
  end
29
29
 
30
30
  context 'for record' do
@@ -73,8 +73,8 @@ describe 'OIA-PMH ListRecords Request' do
73
73
  get '/catalog/oai?verb=ListRecords&resumptionToken=oai_dc.f(2014-02-03T18:42:53Z).u(2014-02-03T18:42:53Z).t(29):25'
74
74
  end
75
75
 
76
- it 'returns 4 records' do
77
- expect(xml.xpath('//xmlns:ListRecords/xmlns:record/xmlns:header').count).to be 4
76
+ it 'returns 3 records' do
77
+ expect(xml.xpath('//xmlns:ListRecords/xmlns:record/xmlns:header').count).to be 3
78
78
  end
79
79
 
80
80
  it 'first record has oai_dc metadata element' do
@@ -112,14 +112,14 @@ describe 'OIA-PMH ListRecords Request' do
112
112
  it 'only records from the set are returned' do
113
113
  params = { verb: 'ListRecords', metadataPrefix: 'oai_dc', set: 'language:Japanese' }
114
114
 
115
- get oai_provider_path(params)
115
+ get oai_catalog_path(params)
116
116
  expect(xml.xpath('//xmlns:record').count).to be 2
117
117
  end
118
118
  end
119
119
 
120
120
  context 'throws noRecordsMatch error' do
121
121
  before do
122
- get '/catalog/oai?verb=ListRecords&metadataPrefix=oai_dc&from=2015-01-01'
122
+ get '/catalog/oai?verb=ListRecords&metadataPrefix=oai_dc&from=2016-01-01'
123
123
  end
124
124
 
125
125
  it 'returns no records error' do
@@ -27,7 +27,7 @@ RSpec.describe 'OAI-PMH ListSets Request' do
27
27
 
28
28
  context 'without set configuration' do
29
29
  it 'shows that no sets exist' do
30
- get oai_provider_path(verb: 'ListSets')
30
+ get oai_catalog_path(verb: 'ListSets')
31
31
  expect(xml.xpath('//xmlns:error').text).to eql 'This repository does not support sets.'
32
32
  end
33
33
  end
@@ -36,18 +36,18 @@ RSpec.describe 'OAI-PMH ListSets Request' do
36
36
  let(:test_oai_config) { old_config }
37
37
 
38
38
  it 'shows all sets' do
39
- get oai_provider_path(verb: 'ListSets')
39
+ get oai_catalog_path(verb: 'ListSets')
40
40
  expect(xml.xpath('//xmlns:set').count).to be 12
41
41
  end
42
42
 
43
43
  it 'contains english set' do
44
- get oai_provider_path(verb: 'ListSets')
44
+ get oai_catalog_path(verb: 'ListSets')
45
45
  expect(xml.xpath('//xmlns:set//xmlns:setSpec').map(&:text)).to include 'language:English'
46
46
  expect(xml.xpath('//xmlns:set//xmlns:setName').map(&:text)).to include 'Language: English'
47
47
  end
48
48
 
49
49
  it 'shows the correct verb' do
50
- get oai_provider_path(verb: 'ListSets')
50
+ get oai_catalog_path(verb: 'ListSets')
51
51
  expect(xml.at_xpath('//xmlns:request').attribute('verb').value).to eql 'ListSets'
52
52
  end
53
53
  end
@@ -57,7 +57,7 @@ RSpec.describe 'OAI-PMH ListSets Request' do
57
57
  {
58
58
  document: {
59
59
  set_fields: [
60
- { label: 'subject', solr_field: 'subject_topic_facet',
60
+ { label: 'subject', solr_field: 'subject_ssim',
61
61
  description: "Subject topic set using FAST subjects" }
62
62
  ]
63
63
  }
@@ -65,7 +65,7 @@ RSpec.describe 'OAI-PMH ListSets Request' do
65
65
  end
66
66
 
67
67
  it 'shows set description' do
68
- get oai_provider_path(verb: 'ListSets')
68
+ get oai_catalog_path(verb: 'ListSets')
69
69
  expect(
70
70
  xml.at_xpath('//xmlns:set/xmlns:setDescription/oai_dc:dc/dc:description', namespaces).text
71
71
  ).to eql 'Subject topic set using FAST subjects'
@@ -92,7 +92,7 @@ RSpec.describe 'OAI-PMH ListSets Request' do
92
92
  end
93
93
 
94
94
  it "shows correct description" do
95
- get oai_provider_path(verb: 'ListSets')
95
+ get oai_catalog_path(verb: 'ListSets')
96
96
  expect(
97
97
  xml.at_xpath('//xmlns:set/xmlns:setDescription/oai_dc:dc/dc:description', namespaces).text
98
98
  ).to eql 'This is a format set containing records with the value of Book.'
@@ -6,18 +6,9 @@ EngineCart.load_application!
6
6
  require 'rspec/rails'
7
7
  require 'capybara/rspec'
8
8
  require 'selenium-webdriver'
9
+ require 'webdrivers'
9
10
 
10
- Capybara.javascript_driver = :headless_chrome
11
-
12
- Capybara.register_driver :headless_chrome do |app|
13
- capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
14
- chromeOptions: { args: %w[headless disable-gpu] }
15
- )
16
-
17
- Capybara::Selenium::Driver.new(app,
18
- browser: :chrome,
19
- desired_capabilities: capabilities)
20
- end
11
+ Capybara.javascript_driver = :selenium_chrome_headless
21
12
 
22
13
  RSpec.configure do |config|
23
14
  config.infer_spec_type_from_file_location!
@@ -13,6 +13,17 @@ class TestAppGenerator < Rails::Generators::Base
13
13
  generate 'blacklight:install', '--devise'
14
14
  end
15
15
 
16
+ def change_migrations_if_rails_4_2
17
+ return unless Rails.version =~ /^4.2.*/
18
+
19
+ say_status('warning', 'OVERRIDING BLACKLIGHT MIGRATION FOR RAILS 4.2', :yellow)
20
+ migrations = Rails.root.join('db', 'migrate', '*.rb')
21
+ Dir.glob(migrations).each do |m|
22
+ text = File.read(m).gsub(/ActiveRecord::Migration\[[\d\.]+\]/, 'ActiveRecord::Migration')
23
+ File.open(m, 'w').write(text)
24
+ end
25
+ end
26
+
16
27
  # Add favicon.ico to asset path
17
28
  # ADD THIS LINE Rails.application.config.assets.precompile += %w( favicon.ico )
18
29
  # TO config/assets.rb
@@ -34,6 +45,10 @@ class TestAppGenerator < Rails::Generators::Base
34
45
  end
35
46
  end
36
47
 
48
+ def overwrite_catalog_controller
49
+ copy_file "templates/catalog_controller.rb", "app/controllers/catalog_controller.rb", force: true
50
+ end
51
+
37
52
  def install_engine
38
53
  say_status("warning", "GENERATING BL OAI PLUGIN", :yellow)
39
54
 
@@ -43,17 +58,17 @@ class TestAppGenerator < Rails::Generators::Base
43
58
  def add_test_blacklight_oai_config
44
59
  say_status("warning", "ADDING BL OIA-PMH CONFIG")
45
60
 
46
- insert_into_file "app/controllers/catalog_controller.rb", after: " config.default_solr_params = { \n" do
47
- " :fl => '*',\n"
61
+ insert_into_file "app/controllers/catalog_controller.rb", after: "config.default_solr_params = {" do
62
+ "\n fl: '*',\n"
48
63
  end
49
64
 
50
65
  insert_into_file "app/controllers/catalog_controller.rb", after: " configure_blacklight do |config|\n" do
51
66
  <<-CONFIG
52
67
  config.default_document_solr_params = {
53
- :qt => 'search',
54
- :fl => '*',
55
- :rows => 1,
56
- :q => '{!raw f=id v=$id}'
68
+ qt: 'search',
69
+ fl: '*',
70
+ rows: 1,
71
+ q: '{!raw f=id v=$id}'
57
72
  }
58
73
  CONFIG
59
74
  end
@@ -61,20 +76,19 @@ class TestAppGenerator < Rails::Generators::Base
61
76
  insert_into_file "app/controllers/catalog_controller.rb", after: "configure_blacklight do |config|\n" do
62
77
  <<-CONFIG
63
78
  config.oai = {
64
- :provider => {
65
- :repository_name => 'Test Repository',
66
- :repository_url => 'http://localhost/catalog/oai',
67
- :record_prefix => 'oai:test',
68
- :admin_email => 'root@localhost',
69
- :deletion_support => 'persistent',
70
- :sample_id => '109660'
79
+ provider: {
80
+ repository_name: 'Test Repository',
81
+ repository_url: 'http://localhost/catalog/oai',
82
+ record_prefix: 'oai:test',
83
+ admin_email: 'root@localhost',
84
+ deletion_support: 'persistent',
85
+ sample_id: '109660'
71
86
  },
72
- :document => {
73
- :model => SolrDocument,
74
- :set_fields => [
75
- { label: 'language', solr_field: 'language_facet' }
87
+ document: {
88
+ set_fields: [
89
+ { label: 'language', solr_field: 'language_ssim' }
76
90
  ],
77
- :limit => 25
91
+ limit: 25
78
92
  }
79
93
  }
80
94
  CONFIG
@@ -83,12 +97,12 @@ class TestAppGenerator < Rails::Generators::Base
83
97
  insert_into_file "app/models/solr_document.rb", after: "include BlacklightOaiProvider::SolrDocument\n" do
84
98
  <<-CONFIG
85
99
  field_semantics.merge!(
86
- title: "title_display",
87
- creator: "author_display",
88
- date: "pub_date",
89
- subject: "subject_topic_facet",
100
+ title: "title_tsim",
101
+ date: "pub_date_ssim",
102
+ subject: "subject_ssim",
103
+ creator: "author_tsim",
90
104
  format: "format",
91
- language: "language_facet"
105
+ language: "language_ssim",
92
106
  )
93
107
  CONFIG
94
108
  end
@@ -0,0 +1,196 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CatalogController < ApplicationController
4
+ include Blacklight::Catalog
5
+ include BlacklightOaiProvider::Controller
6
+
7
+ configure_blacklight do |config|
8
+ ## Class for sending and receiving requests from a search index
9
+ # config.repository_class = Blacklight::Solr::Repository
10
+ #
11
+ ## Class for converting Blacklight's url parameters to into request parameters for the search index
12
+ # config.search_builder_class = ::SearchBuilder
13
+ #
14
+ ## Model that maps search index responses to the blacklight response model
15
+ # config.response_model = Blacklight::Solr::Response
16
+
17
+ ## Default parameters to send to solr for all search-like requests. See also SearchBuilder#processed_parameters
18
+ config.default_solr_params = {
19
+ rows: 10
20
+ }
21
+
22
+ # solr path which will be added to solr base url before the other solr params.
23
+ # config.solr_path = 'select'
24
+
25
+ # items to show per page, each number in the array represent another option to choose from.
26
+ # config.per_page = [10,20,50,100]
27
+
28
+ ## Default parameters to send on single-document requests to Solr. These settings are the Blackligt defaults (see SearchHelper#solr_doc_params) or
29
+ ## parameters included in the Blacklight-jetty document requestHandler.
30
+ #
31
+ # config.default_document_solr_params = {
32
+ # qt: 'document',
33
+ # ## These are hard-coded in the blacklight 'document' requestHandler
34
+ # # fl: '*',
35
+ # # rows: 1,
36
+ # # q: '{!term f=id v=$id}'
37
+ # }
38
+
39
+ # solr field configuration for search results/index views
40
+ config.index.title_field = 'title_tsim'
41
+ config.index.display_type_field = 'format'
42
+ # config.index.thumbnail_field = 'thumbnail_path_ss'
43
+
44
+ # solr field configuration for document/show views
45
+ # config.show.title_field = 'title_ssim'
46
+ # config.show.display_type_field = 'format'
47
+ # config.show.thumbnail_field = 'thumbnail_path_ss'
48
+
49
+ # solr fields that will be treated as facets by the blacklight application
50
+ # The ordering of the field names is the order of the display
51
+ #
52
+ # Setting a limit will trigger Blacklight's 'more' facet values link.
53
+ # * If left unset, then all facet values returned by solr will be displayed.
54
+ # * If set to an integer, then "f.somefield.facet.limit" will be added to
55
+ # solr request, with actual solr request being +1 your configured limit --
56
+ # you configure the number of items you actually want _ssimed_ in a page.
57
+ # * If set to 'true', then no additional parameters will be sent to solr,
58
+ # but any 'sniffed' request limit parameters will be used for paging, with
59
+ # paging at requested limit -1. Can sniff from facet.limit or
60
+ # f.specific_field.facet.limit solr request params. This 'true' config
61
+ # can be used if you set limits in :default_solr_params, or as defaults
62
+ # on the solr side in the request handler itself. Request handler defaults
63
+ # sniffing requires solr requests to be made with "echoParams=all", for
64
+ # app code to actually have it echo'd back to see it.
65
+ #
66
+ # :show may be set to false if you don't want the facet to be drawn in the
67
+ # facet bar
68
+ #
69
+ # set :index_range to true if you want the facet pagination view to have facet prefix-based navigation
70
+ # (useful when user clicks "more" on a large facet and wants to navigate alphabetically across a large set of results)
71
+ # :index_range can be an array or range of prefixes that will be used to create the navigation (note: It is case sensitive when searching values)
72
+
73
+ config.add_facet_field 'format', label: 'Format'
74
+ config.add_facet_field 'pub_date_ssim', label: 'Publication Year', single: true
75
+ config.add_facet_field 'subject_tsim', label: 'Topic', limit: 20, index_range: 'A'..'Z'
76
+ config.add_facet_field 'language_ssim', label: 'Language', limit: true
77
+ config.add_facet_field 'lc_1letter_ssim', label: 'Call Number'
78
+ config.add_facet_field 'subject_geo_ssim', label: 'Region'
79
+ config.add_facet_field 'subject_era_ssim', label: 'Era'
80
+
81
+ config.add_facet_field 'example_pivot_field', label: 'Pivot Field', pivot: %w[format language_ssim]
82
+
83
+ config.add_facet_field 'example_query_facet_field', label: 'Publish Date', query: {
84
+ years_5: { label: 'within 5 Years', fq: "pub_date_ssim:[#{Time.zone.now.year - 5} TO *]" },
85
+ years_10: { label: 'within 10 Years', fq: "pub_date_ssim:[#{Time.zone.now.year - 10} TO *]" },
86
+ years_25: { label: 'within 25 Years', fq: "pub_date_ssim:[#{Time.zone.now.year - 25} TO *]" }
87
+ }
88
+
89
+ # Have BL send all facet field names to Solr, which has been the default
90
+ # previously. Simply remove these lines if you'd rather use Solr request
91
+ # handler defaults, or have no facets.
92
+ config.add_facet_fields_to_solr_request!
93
+
94
+ # solr fields to be displayed in the index (search results) view
95
+ # The ordering of the field names is the order of the display
96
+ config.add_index_field 'title_tsim', label: 'Title'
97
+ config.add_index_field 'title_vern_tsim', label: 'Title'
98
+ config.add_index_field 'author_tsim', label: 'Author'
99
+ config.add_index_field 'author_vern_tsim', label: 'Author'
100
+ config.add_index_field 'format', label: 'Format'
101
+ config.add_index_field 'language_ssim', label: 'Language'
102
+ config.add_index_field 'published_ssim', label: 'Published'
103
+ config.add_index_field 'published_vern_ssim', label: 'Published'
104
+ config.add_index_field 'lc_callnum_ssim', label: 'Call number'
105
+
106
+ # solr fields to be displayed in the show (single result) view
107
+ # The ordering of the field names is the order of the display
108
+ config.add_show_field 'title_ssim', label: 'Title'
109
+ config.add_show_field 'title_vern_ssim', label: 'Title'
110
+ config.add_show_field 'subtitle_tsim', label: 'Subtitle'
111
+ config.add_show_field 'subtitle_vern_tsim', label: 'Subtitle'
112
+ config.add_show_field 'author_tsim', label: 'Author'
113
+ config.add_show_field 'author_vern_tsim', label: 'Author'
114
+ config.add_show_field 'format', label: 'Format'
115
+ config.add_show_field 'url_fulltext_ssim', label: 'URL'
116
+ config.add_show_field 'url_suppl_ssim', label: 'More Information'
117
+ config.add_show_field 'language_ssim', label: 'Language'
118
+ config.add_show_field 'published_ssim', label: 'Published'
119
+ config.add_show_field 'published_vern_ssim', label: 'Published'
120
+ config.add_show_field 'lc_callnum_ssim', label: 'Call number'
121
+ config.add_show_field 'isbn_ssim', label: 'ISBN'
122
+
123
+ # "fielded" search configuration. Used by pulldown among other places.
124
+ # For supported keys in hash, see rdoc for Blacklight::SearchFields
125
+ #
126
+ # Search fields will inherit the :qt solr request handler from
127
+ # config[:default_solr_parameters], OR can specify a different one
128
+ # with a :qt key/value. Below examples inherit, except for subject
129
+ # that specifies the same :qt as default for our own internal
130
+ # testing purposes.
131
+ #
132
+ # The :key is what will be used to identify this BL search field internally,
133
+ # as well as in URLs -- so changing it after deployment may break bookmarked
134
+ # urls. A display label will be automatically calculated from the :key,
135
+ # or can be specified manually to be different.
136
+
137
+ # This one uses all the defaults set by the solr request handler. Which
138
+ # solr request handler? The one set in config[:default_solr_parameters][:qt],
139
+ # since we aren't specifying it otherwise.
140
+
141
+ config.add_search_field 'all_fields', label: 'All Fields'
142
+
143
+ # Now we see how to over-ride Solr request handler defaults, in this
144
+ # case for a BL "search field", which is really a dismax aggregate
145
+ # of Solr search fields.
146
+
147
+ config.add_search_field('title') do |field|
148
+ # solr_parameters hash are sent to Solr as ordinary url query params.
149
+ field.solr_parameters = {
150
+ 'spellcheck.dictionary': 'title',
151
+ qf: '${title_qf}',
152
+ pf: '${title_pf}'
153
+ }
154
+ end
155
+
156
+ config.add_search_field('author') do |field|
157
+ field.solr_parameters = {
158
+ 'spellcheck.dictionary': 'author',
159
+ qf: '${author_qf}',
160
+ pf: '${author_pf}'
161
+ }
162
+ end
163
+
164
+ # Specifying a :qt only to show it's possible, and so our internal automated
165
+ # tests can test it. In this case it's the same as
166
+ # config[:default_solr_parameters][:qt], so isn't actually neccesary.
167
+ config.add_search_field('subject') do |field|
168
+ field.qt = 'search'
169
+ field.solr_parameters = {
170
+ 'spellcheck.dictionary': 'subject',
171
+ qf: '${subject_qf}',
172
+ pf: '${subject_pf}'
173
+ }
174
+ end
175
+
176
+ # "sort results by" select (pulldown)
177
+ # label in pulldown is followed by the name of the SOLR field to sort by and
178
+ # whether the sort is ascending or descending (it must be asc or desc
179
+ # except in the relevancy case).
180
+ config.add_sort_field 'score desc, pub_date_ssim desc, title_si asc', label: 'relevance'
181
+ config.add_sort_field 'pub_date_ssim desc, title_si asc', label: 'year'
182
+ config.add_sort_field 'author_si asc, title_si asc', label: 'author'
183
+ config.add_sort_field 'title_si asc, pub_date_ssim desc', label: 'title'
184
+
185
+ # If there are more than this many search results, no spelling ("did you
186
+ # mean") suggestion is offered.
187
+ config.spell_max = 5
188
+
189
+ # Configuration for autocomplete suggestor
190
+ config.autocomplete_enabled = true
191
+ config.autocomplete_path = 'suggest'
192
+ # if the name of the solr.SuggestComponent provided in your solrcongig.xml is not the
193
+ # default 'mySuggester', uncomment and provide it below
194
+ # config.autocomplete_suggester = 'mySuggester'
195
+ end
196
+ end