Skip to content

Commit

Permalink
Rename RequestBuilders#solr_search_params to #search_params
Browse files Browse the repository at this point in the history
  • Loading branch information
jcoyne committed Dec 16, 2014
1 parent 0b3cb51 commit 966f107
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 44 deletions.
23 changes: 22 additions & 1 deletion lib/blacklight/request_builders.rb
Expand Up @@ -54,6 +54,7 @@ def solr_search_params_logic= logic
end

# @returns a params hash for searching solr.
# @deprecated use #search_params instead
# The CatalogController #index action uses this.
# Solr parameters can come from a number of places. From lowest
# precedence to highest:
Expand All @@ -69,13 +70,33 @@ def solr_search_params_logic= logic
#
# Incoming parameter :f is mapped to :fq solr parameter.
def solr_search_params(user_params = params || {})
search_params(user_params)
end
deprecation_deprecate :solr_search_params

# @returns a Request object for searching the repository.
# The CatalogController #index action uses this.
# Solr parameters can come from a number of places. From lowest
# precedence to highest:
# 1. General defaults in blacklight config (are trumped by)
# 2. defaults for the particular search field identified by params[:search_field] (are trumped by)
# 3. certain parameters directly on input HTTP query params
# * not just any parameter is grabbed willy nilly, only certain ones are allowed by HTTP input)
# * for legacy reasons, qt in http query does not over-ride qt in search field definition default.
# 4. extra parameters passed in as argument.
#
# spellcheck.q will be supplied with the [:q] value unless specifically
# specified otherwise.
#
# Incoming parameter :f is mapped to :fq solr parameter.
def search_params(user_params = params || {})
Blacklight::Solr::Request.new.tap do |solr_parameters|
search_params_logic.each do |method_name|
send(method_name, solr_parameters, user_params)
end
end
end

##
# Retrieve the results for a list of document ids
def solr_document_ids_params(ids = [])
Expand Down
8 changes: 4 additions & 4 deletions lib/blacklight/search_helper.rb
Expand Up @@ -10,7 +10,7 @@
#
# include Blacklight::Catalog
#
# def solr_search_params
# def search_params
# super.merge :per_page=>10
# end
# end
Expand All @@ -25,7 +25,7 @@
# include Blacklight::Catalog
# include LocalSearchHelperExtension
#
# def solr_search_params
# def search_params
# super.merge :per_page=>10
# end
# end
Expand Down Expand Up @@ -101,7 +101,7 @@ def query_solr(user_params = params || {}, extra_controller_params = {})
# given a user query,
# @return [Blacklight::SolrResponse] the solr response object
def query_repository(user_params = params || {}, extra_controller_params = {})
solr_params = self.solr_search_params(user_params).merge(extra_controller_params)
solr_params = self.search_params(user_params).merge(extra_controller_params)

repository.search(solr_params)
end
Expand Down Expand Up @@ -193,7 +193,7 @@ def get_facet_pagination(facet_field, user_params=params || {}, extra_controller
# the Blacklight app-level request params that define the search.
# @return [Blacklight::SolrDocument, nil] the found document or nil if not found
def get_single_doc_via_search(index, request_params)
solr_params = solr_search_params(request_params)
solr_params = search_params(request_params)

solr_params[:start] = (index - 1) # start at 0 to get 1st doc, 1 to get 2nd.
solr_params[:rows] = 1
Expand Down
2 changes: 1 addition & 1 deletion lib/generators/blacklight/templates/catalog_controller.rb
Expand Up @@ -5,7 +5,7 @@ class CatalogController < ApplicationController
include Blacklight::Catalog

configure_blacklight do |config|
## Default parameters to send to solr for all search-like requests. See also SearchHelper#solr_search_params
## Default parameters to send to solr for all search-like requests. See also SearchHelper#search_params
config.default_solr_params = {
:qt => 'search',
:rows => 10
Expand Down
92 changes: 54 additions & 38 deletions spec/lib/blacklight/search_helper_spec.rb
Expand Up @@ -59,28 +59,44 @@ def params
Deprecation.silence(SearchHelperTestClass) do
subject.solr_search_params_logic += [:add_foo_to_solr_params]
end
expect(subject.solr_search_params[:wt]).to eq "TESTING"
expect(subject.search_params[:wt]).to eq "TESTING"
end
end

describe "#search_params_logic" do
it "allows customization of solr_search_params_logic" do
it "allows customization of search_params_logic" do
# Normally you'd include a new module into (eg) your CatalogController
# but a sub-class defininig it directly is simpler for test.
allow(subject).to receive(:add_foo_to_solr_params) do |solr_params, user_params|
solr_params[:wt] = "TESTING"
end
subject.search_params_logic += [:add_foo_to_solr_params]
expect(subject.solr_search_params[:wt]).to eq "TESTING"
expect(subject.search_params[:wt]).to eq "TESTING"
end
end

# SPECS for actual search parameter generation
describe "solr_search_params" do
describe "#solr_search_params" do
it 'should have fq and q set properly' do
Deprecation.silence(Blacklight::RequestBuilders) do
solr_params = subject.solr_search_params(:q => @mult_word_query, :f => @multi_facets)

@multi_facets.each_pair do |facet_field, value_list|
value_list ||= []
value_list = [value_list] unless value_list.respond_to? :each
value_list.each do |value|
expect(solr_params[:fq]).to include("{!raw f=#{facet_field}}#{value}" )
end
end
expect(solr_params[:q]).to eq @mult_word_query
end
end
end

# SPECS for actual search parameter generation
describe "#search_params" do
describe 'for an entirely empty search' do
before do
@produced_params = subject.solr_search_params.with_indifferent_access
@produced_params = subject.search_params.with_indifferent_access
end

let(:blacklight_config) { copy_of_catalog_config }
Expand Down Expand Up @@ -109,15 +125,15 @@ def params

describe "for an empty string search" do
it "should return empty string q in solr parameters" do
solr_params = subject.solr_search_params(:q => "")
solr_params = subject.search_params(:q => "")
expect(solr_params[:q]).to eq ""
expect(solr_params["spellcheck.q"]).to eq ""
end
end

describe "for request params also passed in as argument" do
it "should only have one value for the key 'q' regardless if a symbol or string" do
solr_params = subject.solr_search_params( :q => "some query", 'q' => 'another value' )
solr_params = subject.search_params( :q => "some query", 'q' => 'another value' )
expect(solr_params[:q]).to eq 'some query'
expect(solr_params['q']).to eq 'some query'
end
Expand All @@ -127,7 +143,7 @@ def params
describe "for one facet, no query" do
it "should have proper solr parameters" do

solr_params = subject.solr_search_params(:f => @single_facet)
solr_params = subject.search_params(:f => @single_facet)

expect(solr_params[:q]).to be_blank
expect(solr_params["spellcheck.q"]).to be_blank
Expand All @@ -140,15 +156,15 @@ def params

describe "for an empty facet limit param" do
it "should not add any fq to solr" do
solr_params = subject.solr_search_params(:f => {"format" => [""]})
solr_params = subject.search_params(:f => {"format" => [""]})

expect(solr_params[:fq]).to be_blank
end
end

describe "with Multi Facets, No Query" do
it 'should have fq set properly' do
solr_params = subject.solr_search_params(:f => @multi_facets)
solr_params = subject.search_params(:f => @multi_facets)

@multi_facets.each_pair do |facet_field, value_list|
value_list ||= []
Expand All @@ -163,7 +179,7 @@ def params

describe "with Multi Facets, Multi Word Query" do
it 'should have fq and q set properly' do
solr_params = subject.solr_search_params(:q => @mult_word_query, :f => @multi_facets)
solr_params = subject.search_params(:q => @mult_word_query, :f => @multi_facets)

@multi_facets.each_pair do |facet_field, value_list|
value_list ||= []
Expand Down Expand Up @@ -241,7 +257,7 @@ def params
end

describe "solr parameters for a field search from config (subject)" do
let(:solr_params) { subject.solr_search_params @subject_search_params }
let(:solr_params) { subject.search_params @subject_search_params }
let(:blacklight_config) { copy_of_catalog_config }

it "should look up qt from field definition" do
Expand Down Expand Up @@ -272,7 +288,7 @@ def params
expect(solr_params[:"spellcheck.dictionary"]).to eq "subject"
end
it "should add on :solr_local_parameters using Solr LocalParams style" do
params = subject.solr_search_params( @subject_search_params )
params = subject.search_params( @subject_search_params )

#q == "{!pf=$subject_pf $qf=subject_qf} wome", make sure
#the LocalParams are really there
Expand All @@ -287,7 +303,7 @@ def params
it "should return the correct overriden parameter" do
allow(subject).to receive_messages(params: { qt: 'overridden' })

expect(subject.solr_search_params[:qt]).to eq "overridden"
expect(subject.search_params[:qt]).to eq "overridden"
end
end

Expand Down Expand Up @@ -447,20 +463,20 @@ def params
before do
allow(subject).to receive_messages params: {:search_field => "test_field", :q => "test query", "facet.field" => "extra_facet"}
end

it "should merge parameters from search_field definition" do
solr_params = subject.solr_search_params
solr_params = subject.search_params

expect(solr_params[:qf]).to eq "fieldOne^2.3 fieldTwo fieldThree^0.4"
expect(solr_params[:spellcheck]).to eq 'false'
end
it "should merge empty string parameters from search_field definition" do
expect(subject.solr_search_params[:pf]).to eq ""
expect(subject.search_params[:pf]).to eq ""
end

describe "should respect proper precedence of settings, " do
before do
@produced_params = subject.solr_search_params
@produced_params = subject.search_params
end


Expand Down Expand Up @@ -489,21 +505,21 @@ def params

describe "sorting" do
let(:blacklight_config) { copy_of_catalog_config }
it "should send the default sort parameter to solr" do
expect(subject.solr_search_params[:sort]).to eq 'score desc, pub_date_sort desc, title_sort asc'

it "should send the default sort parameter to solr" do
expect(subject.search_params[:sort]).to eq 'score desc, pub_date_sort desc, title_sort asc'
end

it "should not send a sort parameter to solr if the sort value is blank" do
blacklight_config.sort_fields = {}
blacklight_config.add_sort_field('', :label => 'test')

produced_params = subject.solr_search_params
produced_params = subject.search_params
expect(produced_params).not_to have_key(:sort)
end

it "should pass through user sort parameters" do
produced_params = subject.solr_search_params( :sort => 'solr_test_field desc' )
produced_params = subject.search_params( :sort => 'solr_test_field desc' )
expect(produced_params[:sort]).to eq 'solr_test_field desc'
end
end
Expand All @@ -528,13 +544,13 @@ def params
)
return config
end
before do

before do
allow(subject).to receive_messages params: {:search_field => "custom_author_key", :q => "query"}
end

before do
@result = subject.solr_search_params
@result = subject.search_params
end

it "should pass through ordinary params" do
Expand All @@ -549,7 +565,7 @@ def params
expect(@result[:q]).to include('pf2=$pf2_do_not_escape_or_quote')
end
end

describe "mapping facet.field" do
let(:blacklight_config) do
Blacklight::Configuration.new do |config|
Expand All @@ -559,18 +575,18 @@ def params
end

it "should add single additional facet.field from app" do
solr_params = subject.solr_search_params( "facet.field" => "additional_facet" )
solr_params = subject.search_params( "facet.field" => "additional_facet" )
expect(solr_params[:"facet.field"]).to include("additional_facet")
expect(solr_params[:"facet.field"]).to have(2).fields
end
it "should map multiple facet.field to additional facet.field" do
solr_params = subject.solr_search_params( "facet.field" => ["add_facet1", "add_facet2"] )
solr_params = subject.search_params( "facet.field" => ["add_facet1", "add_facet2"] )
expect(solr_params[:"facet.field"]).to include("add_facet1")
expect(solr_params[:"facet.field"]).to include("add_facet2")
expect(solr_params[:"facet.field"]).to have(3).fields
end
it "should map facets[fields][] to additional facet.field" do
solr_params = subject.solr_search_params( "facets" => ["add_facet1", "add_facet2"] )
solr_params = subject.search_params( "facets" => ["add_facet1", "add_facet2"] )
expect(solr_params[:"facet.field"]).to include("add_facet1")
expect(solr_params[:"facet.field"]).to include("add_facet2")
expect(solr_params[:"facet.field"]).to have(3).fields
Expand Down Expand Up @@ -640,7 +656,7 @@ def params
expect(solr_params[:"f.#{@facet_field}.facet.sort"]).to eq 'index'
end

it "comes up with the same params as #solr_search_params to constrain context for facet list" do
it "comes up with the same params as #search_params to constrain context for facet list" do
search_params = {:q => 'tibetan history', :f=> {:format=>'Book', :language_facet=>'Tibetan'}}
solr_facet_params = subject.solr_facet_params('format', search_params)

Expand All @@ -653,7 +669,7 @@ def params
describe "for facet limit parameters config ed" do
before do
allow(subject).to receive_messages params: {:search_field => "test_field", :q => "test query"}
@generated_params = subject.solr_search_params
@generated_params = subject.search_params
end

let(:blacklight_config) { copy_of_catalog_config }
Expand Down Expand Up @@ -1164,7 +1180,7 @@ def params
expect(subject.facet_limit_for("subject_topic_facet")).to eq blacklight_config.facet_fields["subject_topic_facet"].limit
end
it "should generate proper solr param" do
expect(subject.solr_search_params[:"f.subject_topic_facet.facet.limit"]).to eq 21
expect(subject.search_params[:"f.subject_topic_facet.facet.limit"]).to eq 21
end

it "facet_limit_hash should return hash with key being facet_field and value being configured limit" do
Expand All @@ -1177,7 +1193,7 @@ def params

expect(subject.facet_limit_for("subject_topic_facet")).to be_nil

expect(subject.solr_search_params).not_to have_key(:"f.subject_topic_facet.facet.limit")
expect(subject.search_params).not_to have_key(:"f.subject_topic_facet.facet.limit")
end

describe "for 'true' configured values" do
Expand Down Expand Up @@ -1217,7 +1233,7 @@ def params

it "should enforce max_per_page against all parameters" do
expect(blacklight_config.max_per_page).to eq 123
expect(subject.solr_search_params(:per_page => 98765)[:rows]).to eq 123
expect(subject.search_params(:per_page => 98765)[:rows]).to eq 123
end
end

Expand Down

0 comments on commit 966f107

Please sign in to comment.