blacklight 6.0.0.pre1 → 6.0.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/app/assets/javascripts/blacklight/autocomplete.js +32 -0
  4. data/app/assets/javascripts/blacklight/blacklight.js +4 -0
  5. data/app/assets/stylesheets/blacklight/_blacklight_base.scss +1 -0
  6. data/app/assets/stylesheets/blacklight/_twitter_typeahead.scss +30 -0
  7. data/app/controllers/concerns/blacklight/catalog.rb +1 -1
  8. data/app/controllers/concerns/blacklight/controller.rb +4 -4
  9. data/app/controllers/concerns/blacklight/suggest.rb +24 -0
  10. data/app/controllers/concerns/blacklight/suggest_search.rb +33 -0
  11. data/app/controllers/suggest_controller.rb +3 -0
  12. data/app/helpers/blacklight/facets_helper_behavior.rb +2 -2
  13. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +2 -2
  14. data/app/helpers/blacklight/suggest_helper_behavior.rb +10 -0
  15. data/app/helpers/blacklight/url_helper_behavior.rb +2 -2
  16. data/app/helpers/suggest_helper.rb +3 -0
  17. data/app/models/concerns/blacklight/suggest/response.rb +26 -0
  18. data/app/views/catalog/_per_page_widget.html.erb +1 -1
  19. data/app/views/catalog/_search_form.html.erb +2 -2
  20. data/app/views/catalog/_sort_widget.html.erb +1 -1
  21. data/app/views/catalog/_zero_results.html.erb +1 -1
  22. data/blacklight.gemspec +1 -0
  23. data/config/routes.rb +1 -0
  24. data/lib/blacklight.rb +8 -4
  25. data/{app/models → lib}/blacklight/abstract_repository.rb +0 -0
  26. data/{app/models → lib}/blacklight/configuration.rb +16 -20
  27. data/{app/models → lib}/blacklight/configuration/context.rb +0 -0
  28. data/{app/models → lib}/blacklight/configuration/facet_field.rb +0 -0
  29. data/{app/models → lib}/blacklight/configuration/field.rb +0 -0
  30. data/{app/models → lib}/blacklight/configuration/fields.rb +0 -0
  31. data/{app/models → lib}/blacklight/configuration/search_field.rb +0 -0
  32. data/{app/models → lib}/blacklight/configuration/solr_field.rb +0 -0
  33. data/{app/models → lib}/blacklight/configuration/sort_field.rb +0 -0
  34. data/{app/models → lib}/blacklight/configuration/tool_config.rb +0 -0
  35. data/{app/models → lib}/blacklight/configuration/view_config.rb +0 -0
  36. data/lib/blacklight/engine.rb +1 -0
  37. data/{app/models → lib}/blacklight/search_builder.rb +0 -0
  38. data/lib/blacklight/{path.rb → search_state.rb} +1 -1
  39. data/lib/blacklight/solr.rb +5 -1
  40. data/{app/models → lib}/blacklight/solr/repository.rb +0 -0
  41. data/{app/models → lib}/blacklight/solr/request.rb +0 -0
  42. data/{app/models → lib}/blacklight/solr/response.rb +10 -9
  43. data/{app/models → lib}/blacklight/solr/response/facets.rb +0 -0
  44. data/{app/models → lib}/blacklight/solr/response/group.rb +0 -0
  45. data/{app/models → lib}/blacklight/solr/response/group_response.rb +0 -0
  46. data/{app/models → lib}/blacklight/solr/response/more_like_this.rb +0 -0
  47. data/{app/models → lib}/blacklight/solr/response/pagination_methods.rb +0 -0
  48. data/{app/models → lib}/blacklight/solr/response/response.rb +0 -0
  49. data/{app/models → lib}/blacklight/solr/response/spelling.rb +0 -0
  50. data/{app/models/concerns → lib}/blacklight/solr/search_builder_behavior.rb +0 -0
  51. data/lib/generators/blacklight/controller_generator.rb +1 -1
  52. data/lib/generators/blacklight/models_generator.rb +1 -1
  53. data/lib/generators/blacklight/templates/catalog_controller.rb +4 -0
  54. data/lib/generators/blacklight/test_support_generator.rb +1 -1
  55. data/solr/conf/schema.xml +14 -1
  56. data/solr/conf/solrconfig.xml +21 -0
  57. data/spec/controllers/blacklight/base_spec.rb +3 -3
  58. data/spec/controllers/blacklight/suggest_search_spec.rb +22 -0
  59. data/spec/controllers/suggest_controller_spec.rb +17 -0
  60. data/spec/helpers/facets_helper_spec.rb +2 -2
  61. data/spec/helpers/render_constraints_helper_spec.rb +1 -1
  62. data/spec/helpers/suggest_helper_spec.rb +41 -0
  63. data/spec/lib/blacklight/{path_spec.rb → search_state_spec.rb} +1 -1
  64. data/spec/models/blacklight/solr/search_builder_spec.rb +12 -7
  65. data/spec/models/blacklight/suggest/response_spec.rb +55 -0
  66. data/spec/support/controller_level_helpers.rb +2 -2
  67. data/tasks/blacklight.rake +2 -2
  68. metadata +58 -29
  69. data/app/models/blacklight/solr/search_builder.rb +0 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c84e27929bc5c308f60b44bf8308bd12fff0f611
4
- data.tar.gz: 9fc7f3e715f61d045128e0eade0ee748f933779c
3
+ metadata.gz: 2d61d1d33a708476cbac51eba384b3ec074e06e0
4
+ data.tar.gz: 9d359464738928145735fb316c3a1dbb8b37fe19
5
5
  SHA512:
6
- metadata.gz: 59a8e9e76e5bf91d854c742d98d357bd22040e9910661f164ea56ca41494dc28d18878533e71acaa0d29b0a272544f9a27af619b3f0b8cf8ca6da46f8c597f87
7
- data.tar.gz: f68961e3673557464a4c67359812097453d707828d020a8cfbd7611a00912cb7c51aa53e80850c04f96bbf0745a3bbac537d7e09f97975dc2d53a803787d6f11
6
+ metadata.gz: 4409c43abb35028561d936081809525f8038f34ac8706a8838281e12396df98e4508a141224ea5db103b2a7b6f3f6206c9a5370c89ff987473426ae3ffda90d1
7
+ data.tar.gz: 6598923fcb1214614d65716faceb7b9da4fb2a540ab2ae91e22389df0fab211978b8e2e6cd11ffd9786afae93f0b3c6a68ae195640388ef00daf8ca80fbebeea
data/VERSION CHANGED
@@ -1 +1 @@
1
- 6.0.0.pre1
1
+ 6.0.0.pre2
@@ -0,0 +1,32 @@
1
+ /*global Bloodhound */
2
+
3
+ Blacklight.onLoad(function() {
4
+ 'use strict';
5
+
6
+ $('[data-autocomplete-enabled="true"]').each(function() {
7
+ var $el = $(this);
8
+ var suggestUrl = $el.data().autocompletePath;
9
+
10
+ var terms = new Bloodhound({
11
+ datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
12
+ queryTokenizer: Bloodhound.tokenizers.whitespace,
13
+ remote: {
14
+ url: suggestUrl + '?q=%QUERY',
15
+ wildcard: '%QUERY'
16
+ }
17
+ });
18
+
19
+ terms.initialize();
20
+
21
+ $el.typeahead({
22
+ hint: true,
23
+ highlight: true,
24
+ minLength: 2
25
+ },
26
+ {
27
+ name: 'terms',
28
+ displayKey: 'term',
29
+ source: terms.ttAdapter()
30
+ });
31
+ });
32
+ });
@@ -11,6 +11,7 @@
11
11
  //= require blacklight/search_context
12
12
  //= require blacklight/collapsable
13
13
  //= require blacklight/facet_load
14
+ //= require blacklight/autocomplete
14
15
  //
15
16
  //Bootstrap JS for providing collapsable tablet/mobile menu/alert boxes
16
17
  //= require bootstrap/transition
@@ -19,6 +20,9 @@
19
20
  //= require bootstrap/alert
20
21
  //= require bootstrap/modal
21
22
 
23
+ // Twitter Typeahead for autocomplete
24
+ //= require twitter/typeahead
25
+
22
26
  /* Blacklight has a Javascript setup meant to support local disabling,
23
27
  modification, and use of Blacklight behaviors.
24
28
 
@@ -20,3 +20,4 @@
20
20
  @import "blacklight/facets";
21
21
  @import "blacklight/search_history";
22
22
  @import "blacklight/modal";
23
+ @import "blacklight/twitter_typeahead";
@@ -0,0 +1,30 @@
1
+ .twitter-typeahead {
2
+ float: left;
3
+ width: 100%;
4
+ z-index: 10000;
5
+
6
+ .tt-input.form-control {
7
+ width: 100%;
8
+ }
9
+
10
+ .tt-hint.form-control {
11
+ width: 100%;
12
+ }
13
+
14
+ .tt-menu {
15
+ @extend .dropdown-menu;
16
+ font-family: $font-family-base;
17
+ width: 100%;
18
+ }
19
+
20
+ .tt-cursor {
21
+ background-color: $dropdown-link-hover-bg;
22
+ color: $dropdown-link-hover-color;
23
+ text-decoration: none;
24
+ }
25
+
26
+ .tt-suggestion {
27
+ font-size: 14px;
28
+ padding: 5px 5px 5px 10px;
29
+ }
30
+ }
@@ -100,7 +100,7 @@ module Blacklight::Catalog
100
100
  end
101
101
 
102
102
  def action_success_redirect_path
103
- blacklight_path.url_for_document(blacklight_config.document_model.new(id: params[:id]))
103
+ search_state.url_for_document(blacklight_config.document_model.new(id: params[:id]))
104
104
  end
105
105
 
106
106
  ##
@@ -24,7 +24,7 @@ module Blacklight::Controller
24
24
  helper_method :has_user_authentication_provider?
25
25
  helper_method :blacklight_config, :blacklight_configuration_context
26
26
  helper_method :search_action_url, :search_action_path, :search_facet_url
27
- helper_method :blacklight_path
27
+ helper_method :search_state
28
28
 
29
29
 
30
30
  # This callback runs when a user first logs in
@@ -64,9 +64,9 @@ module Blacklight::Controller
64
64
  has_user_authentication_provider? and current_user
65
65
  end
66
66
 
67
- # @return [Blacklight::Path] a memoized instance of the parameter state.
68
- def blacklight_path
69
- @blacklight_path ||= Blacklight::Path.new(params, blacklight_config)
67
+ # @return [Blacklight::SearchState] a memoized instance of the parameter state.
68
+ def search_state
69
+ @search_state ||= Blacklight::SearchState.new(params, blacklight_config)
70
70
  end
71
71
 
72
72
  # Default route to the search action (used e.g. in global partials). Override this method
@@ -0,0 +1,24 @@
1
+ module Blacklight
2
+ module Suggest
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ include Blacklight::Configurable
7
+ include Blacklight::SearchHelper
8
+
9
+ copy_blacklight_config_from(CatalogController)
10
+ end
11
+
12
+ def index
13
+ respond_to do |format|
14
+ format.json do
15
+ render json: suggestions_service.suggestions
16
+ end
17
+ end
18
+ end
19
+
20
+ def suggestions_service
21
+ Blacklight::SuggestSearch.new(params, repository).suggestions
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,33 @@
1
+ module Blacklight
2
+ class SuggestSearch
3
+ attr_reader :request_params, :repository
4
+
5
+ ##
6
+ # @param [Hash] params
7
+ def initialize(params, repository)
8
+ @request_params = { q: params[:q] }
9
+ @repository = repository
10
+ end
11
+
12
+ ##
13
+ # For now, only use the q parameter to create a
14
+ # Blacklight::Suggest::Response
15
+ # @return [Blacklight::Suggest::Response]
16
+ def suggestions
17
+ Blacklight::Suggest::Response.new suggest_results, request_params, suggest_handler_path
18
+ end
19
+
20
+ ##
21
+ # Query the suggest handler using RSolr::Client::send_and_receive
22
+ # @return [RSolr::HashWithResponse]
23
+ def suggest_results
24
+ repository.connection.send_and_receive(suggest_handler_path, params: request_params)
25
+ end
26
+
27
+ ##
28
+ # @return [String]
29
+ def suggest_handler_path
30
+ repository.blacklight_config.autocomplete_path
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,3 @@
1
+ class SuggestController < ApplicationController
2
+ include Blacklight::Suggest
3
+ end
@@ -138,7 +138,7 @@ module Blacklight::FacetsHelperBehavior
138
138
  if facet_config.url_method
139
139
  send(facet_config.url_method, facet_field, item)
140
140
  else
141
- search_action_path(blacklight_path.add_facet_params_and_redirect(facet_field, item))
141
+ search_action_path(search_state.add_facet_params_and_redirect(facet_field, item))
142
142
  end
143
143
  end
144
144
 
@@ -146,7 +146,7 @@ module Blacklight::FacetsHelperBehavior
146
146
  # Standard display of a SELECTED facet value (e.g. without a link and with a remove button)
147
147
  # @params (see #render_facet_value)
148
148
  def render_selected_facet_value(facet_field, item)
149
- remove_href = search_action_path(blacklight_path.remove_facet_params(facet_field, item))
149
+ remove_href = search_action_path(search_state.remove_facet_params(facet_field, item))
150
150
  content_tag(:span, class: "facet-label") do
151
151
  content_tag(:span, facet_display_value(facet_field, item), class: "selected") +
152
152
  # remove link
@@ -48,7 +48,7 @@ module Blacklight::RenderConstraintsHelperBehavior
48
48
  # @return [String]
49
49
  def render_constraints_filters(localized_params = params)
50
50
  return "".html_safe unless localized_params[:f]
51
- path = Blacklight::Path.new(localized_params, blacklight_config)
51
+ path = Blacklight::SearchState.new(localized_params, blacklight_config)
52
52
  content = []
53
53
  localized_params[:f].each_pair do |facet,values|
54
54
  content << render_filter_element(facet, values, path)
@@ -61,7 +61,7 @@ module Blacklight::RenderConstraintsHelperBehavior
61
61
  # Render a single facet's constraint
62
62
  # @param [String] facet field
63
63
  # @param [Array<String>] values selected facet values
64
- # @param [Blacklight::Path] path query parameters
64
+ # @param [Blacklight::SearchState] path query parameters
65
65
  # @return [String]
66
66
  def render_filter_element(facet, values, path)
67
67
  facet_config = facet_configuration_for_field(facet)
@@ -0,0 +1,10 @@
1
+ module Blacklight
2
+ module SuggestHelperBehavior
3
+ ##
4
+ # @return [Boolean] should autocomplete be enabled in the UI
5
+ def autocomplete_enabled?
6
+ blacklight_config.autocomplete_enabled.present? &&
7
+ blacklight_config.autocomplete_path.present?
8
+ end
9
+ end
10
+ end
@@ -6,7 +6,7 @@ module Blacklight::UrlHelperBehavior
6
6
  # to provide more interesting routing to
7
7
  # documents
8
8
  def url_for_document(doc, options = {})
9
- blacklight_path.url_for_document(doc, options)
9
+ search_state.url_for_document(doc, options)
10
10
  end
11
11
 
12
12
  # link_to_document(doc, 'VIEW', :counter => 3)
@@ -146,7 +146,7 @@ module Blacklight::UrlHelperBehavior
146
146
  # @param [Blacklight::SolrResponse::Group]
147
147
  # @return [Hash]
148
148
  def add_group_facet_params_and_redirect group
149
- blacklight_path.add_facet_params_and_redirect(group.field, group.key, params)
149
+ search_state.add_facet_params_and_redirect(group.field, group.key, params)
150
150
  end
151
151
 
152
152
  # A URL to refworks export, with an embedded callback URL to this app.
@@ -0,0 +1,3 @@
1
+ module SuggestHelper
2
+ include Blacklight::SuggestHelperBehavior
3
+ end
@@ -0,0 +1,26 @@
1
+ module Blacklight
2
+ module Suggest
3
+ class Response
4
+ attr_reader :response, :request_params, :suggest_path
5
+
6
+ ##
7
+ # Creates a suggest response
8
+ # @param [RSolr::HashWithResponse] response
9
+ # @param [Hash] request_params
10
+ # @param [String] suggest_path
11
+ def initialize(response, request_params, suggest_path)
12
+ @response = response
13
+ @request_params = request_params
14
+ @suggest_path = suggest_path
15
+ end
16
+
17
+ ##
18
+ # Trys the suggestor response to return suggestions if they are
19
+ # present
20
+ # @return [Array]
21
+ def suggestions
22
+ response.try(:[], suggest_path).try(:[], 'mySuggester').try(:[], request_params[:q]).try(:[], 'suggestions') || []
23
+ end
24
+ end
25
+ end
26
+ end
@@ -7,7 +7,7 @@
7
7
  </button>
8
8
  <ul class="dropdown-menu" role="menu">
9
9
  <%- per_page_options_for_select.each do |(label, count)| %>
10
- <li><%= link_to(label, url_for(blacklight_path.params_for_search(per_page: count))) %></li>
10
+ <li><%= link_to(label, url_for(search_state.params_for_search(per_page: count))) %></li>
11
11
  <%- end -%>
12
12
  </ul>
13
13
  </div>
@@ -1,5 +1,5 @@
1
1
  <%= form_tag search_action_url, method: :get, class: 'search-query-form clearfix navbar-form', role: 'search' do %>
2
- <%= render_hash_as_hidden_fields(blacklight_path.params_for_search.except(:q, :search_field, :qt, :page, :utf8)) %>
2
+ <%= render_hash_as_hidden_fields(search_state.params_for_search.except(:q, :search_field, :qt, :page, :utf8)) %>
3
3
  <div class="input-group">
4
4
  <% if search_fields.length > 1 %>
5
5
  <span class="input-group-addon for-search-field">
@@ -11,7 +11,7 @@
11
11
  <% end %>
12
12
 
13
13
  <label for="q" class="sr-only"><%= t('blacklight.search.form.search.label') %></label>
14
- <%= text_field_tag :q, params[:q], placeholder: t('blacklight.search.form.search.placeholder'), class: "search_q q form-control", id: "q", autofocus: should_autofocus_on_search_box? %>
14
+ <%= text_field_tag :q, params[:q], placeholder: t('blacklight.search.form.search.placeholder'), class: "search_q q form-control", id: "q", autofocus: should_autofocus_on_search_box?, data: { autocomplete_enabled: autocomplete_enabled?, autocomplete_path: blacklight.suggest_index_path } %>
15
15
 
16
16
  <span class="input-group-btn">
17
17
  <button type="submit" class="btn btn-primary search-btn" id="search">
@@ -6,7 +6,7 @@
6
6
 
7
7
  <ul class="dropdown-menu" role="menu">
8
8
  <%- active_sort_fields.each do |sort_key, field_config| %>
9
- <li><%= link_to(field_config.label, url_for(blacklight_path.params_for_search(sort: sort_key))) %></li>
9
+ <li><%= link_to(field_config.label, url_for(search_state.params_for_search(sort: sort_key))) %></li>
10
10
  <%- end -%>
11
11
  </ul>
12
12
  </div>
@@ -6,7 +6,7 @@
6
6
 
7
7
  <%- if params[:q] and params[:search_field] and params[:search_field] != blacklight_config.default_search_field.try(:key) -%>
8
8
  <li><%= t 'blacklight.search.zero_results.search_fields', :search_fields => search_field_label(params) %> -
9
- <%= link_to t('blacklight.search.zero_results.search_everything', field: blacklight_config.default_search_field.label), url_for(blacklight_path.params_for_search(search_field: blacklight_config.default_search_field.key)) %>
9
+ <%= link_to t('blacklight.search.zero_results.search_everything', field: blacklight_config.default_search_field.label), url_for(search_state.params_for_search(search_field: blacklight_config.default_search_field.key)) %>
10
10
  </li>
11
11
  <%- end %>
12
12
 
data/blacklight.gemspec CHANGED
@@ -24,6 +24,7 @@ Gem::Specification.new do |s|
24
24
  s.add_dependency "rsolr", "~> 1.0.11" # Library for interacting with rSolr.
25
25
  s.add_dependency "bootstrap-sass", "~> 3.2"
26
26
  s.add_dependency "deprecation"
27
+ s.add_dependency "twitter-typeahead-rails", '~> 0.11'
27
28
 
28
29
  s.add_development_dependency "solr_wrapper"
29
30
  s.add_development_dependency "rspec-rails", "~> 3.0"
data/config/routes.rb CHANGED
@@ -6,4 +6,5 @@ Blacklight::Engine.routes.draw do
6
6
  put "saved_searches/save/:id", :to => "saved_searches#save", :as => "save_search"
7
7
  delete "saved_searches/forget/:id", :to => "saved_searches#forget", :as => "forget_search"
8
8
  post "saved_searches/forget/:id", :to => "saved_searches#forget"
9
+ resources :suggest, only: :index, defaults: { format: 'json' }
9
10
  end
data/lib/blacklight.rb CHANGED
@@ -4,10 +4,14 @@ require 'deprecation'
4
4
  require 'blacklight/utils'
5
5
 
6
6
  module Blacklight
7
- autoload :Exceptions, 'blacklight/exceptions'
8
- autoload :Path, 'blacklight/path'
9
- autoload :Parameters, 'blacklight/parameters'
10
- autoload :Routes, 'blacklight/routes'
7
+ autoload :AbstractRepository, 'blacklight/abstract_repository'
8
+ autoload :Configuration, 'blacklight/configuration'
9
+ autoload :Exceptions, 'blacklight/exceptions'
10
+ autoload :Parameters, 'blacklight/parameters'
11
+ autoload :Routes, 'blacklight/routes'
12
+ autoload :SearchBuilder, 'blacklight/search_builder'
13
+ autoload :SearchState, 'blacklight/search_state'
14
+ autoload :Solr, 'blacklight/solr'
11
15
 
12
16
  extend Deprecation
13
17
 
@@ -3,18 +3,22 @@ module Blacklight
3
3
  # Blacklight::Configuration holds the configuration for a Blacklight::Controller, including
4
4
  # fields to display, facets to show, sort options, and search fields.
5
5
  class Configuration < OpenStructWithHashAccess
6
- extend ActiveSupport::Autoload
7
-
8
- eager_autoload do
9
- autoload :ViewConfig
10
- autoload :ToolConfig
11
- autoload :Fields
12
- autoload :Field
13
- autoload :SolrField
14
- autoload :SearchField
15
- autoload :FacetField
16
- autoload :SortField
17
- end
6
+
7
+
8
+ # Using required_dependency to work around Rails autoloading
9
+ # problems when developing blacklight. Without this, any change
10
+ # to this class breaks other classes in this namespace
11
+
12
+ require_dependency 'blacklight/configuration/context'
13
+ require_dependency 'blacklight/configuration/view_config'
14
+ require_dependency 'blacklight/configuration/tool_config'
15
+ # XXX this isn't very pretty, but it works.
16
+ require_dependency 'blacklight/configuration/fields'
17
+ require_dependency 'blacklight/configuration/field'
18
+ require_dependency 'blacklight/configuration/solr_field'
19
+ require_dependency 'blacklight/configuration/search_field'
20
+ require_dependency 'blacklight/configuration/facet_field'
21
+ require_dependency 'blacklight/configuration/sort_field'
18
22
  include Fields
19
23
 
20
24
  # Set up Blacklight::Configuration.default_values to contain
@@ -208,14 +212,6 @@ module Blacklight
208
212
 
209
213
  def locate_search_builder_class
210
214
  ::SearchBuilder
211
- rescue NameError => e
212
- # If the NameError is a result of the SearchBuilder having a
213
- # NameError (e.g. NoMethodError) within it then raise the error.
214
- raise e if Object.const_defined? "::SearchBuilder"
215
-
216
- # Otherwise the NameError was a result of not being able to find SearchBuilder
217
- Deprecation.warn(Configuration, "Your application is missing the SearchBuilder. Have you run `rails generate blacklight:search_builder`? Falling back to Blacklight::Solr::SearchBuilder")
218
- Blacklight::Solr::SearchBuilder
219
215
  end
220
216
 
221
217
  def facet_paginator_class
@@ -3,6 +3,7 @@ module Blacklight
3
3
  engine_name "blacklight"
4
4
 
5
5
  require 'bootstrap-sass'
6
+ require 'twitter-typeahead-rails'
6
7
 
7
8
  # BlacklightHelper is needed by all helpers, so we inject it
8
9
  # into action view base here.
File without changes
@@ -1,7 +1,7 @@
1
1
  module Blacklight
2
2
  # This class encapsulates the search state as represented by the query
3
3
  # parameters namely: :f, :q, :page, :per_page and, :sort
4
- class Path
4
+ class SearchState
5
5
  include Blacklight::Facet
6
6
  attr_reader :blacklight_config # Must be called blacklight_config, because Blacklight::Facet calls blacklight_config.
7
7
  attr_reader :params
@@ -1,4 +1,8 @@
1
1
  module Blacklight
2
2
  module Solr
3
+ autoload :Repository, 'blacklight/solr/repository'
4
+ autoload :Request, 'blacklight/solr/request'
5
+ autoload :Response, 'blacklight/solr/response'
6
+ autoload :SearchBuilderBehavior, 'blacklight/solr/search_builder_behavior'
3
7
  end
4
- end
8
+ end
File without changes
File without changes
@@ -1,15 +1,16 @@
1
1
  class Blacklight::Solr::Response < HashWithIndifferentAccess
2
2
  extend Deprecation
3
- extend ActiveSupport::Autoload
4
3
 
5
- eager_autoload do
6
- autoload :PaginationMethods
7
- autoload :Spelling
8
- autoload :Facets
9
- autoload :MoreLikeThis
10
- end
11
- autoload :GroupResponse
12
- autoload :Group
4
+ # Using required_dependency to work around Rails autoloading
5
+ # problems when developing blacklight. Without this, any change
6
+ # to this class breaks other classes in this namespace
7
+ require_dependency 'blacklight/solr/response/pagination_methods'
8
+ require_dependency 'blacklight/solr/response/response'
9
+ require_dependency 'blacklight/solr/response/spelling'
10
+ require_dependency 'blacklight/solr/response/facets'
11
+ require_dependency 'blacklight/solr/response/more_like_this'
12
+ require_dependency 'blacklight/solr/response/group_response'
13
+ require_dependency 'blacklight/solr/response/group'
13
14
 
14
15
  include PaginationMethods
15
16
  include Spelling
@@ -29,7 +29,7 @@ module Blacklight
29
29
  end
30
30
 
31
31
  def inject_blacklight_routes
32
- route <<-EOF
32
+ route <<-EOF.strip_heredoc
33
33
  concern :searchable, Blacklight::Routes::Searchable.new
34
34
 
35
35
  resource :catalog, only: [:index], as: 'catalog', path: '/catalog', controller: 'catalog' do
@@ -24,7 +24,7 @@ This generator makes the following changes to your application:
24
24
  end
25
25
 
26
26
  def add_routes
27
- route <<-EOF
27
+ route <<-EOF.strip_heredoc
28
28
  concern :exportable, Blacklight::Routes::Exportable.new
29
29
 
30
30
  resources :solr_documents, only: [:show], path: '/catalog', controller: 'catalog' do
@@ -180,5 +180,9 @@ class <%= controller_name.classify %>Controller < ApplicationController
180
180
  # If there are more than this many search results, no spelling ("did you
181
181
  # mean") suggestion is offered.
182
182
  config.spell_max = 5
183
+
184
+ # Configuration for autocomplete suggestor
185
+ config.autocomplete_enabled = true
186
+ config.autocomplete_path = 'suggest'
183
187
  end
184
188
  end
@@ -15,7 +15,7 @@ Generate blacklight testing configurations for blacklight's own tests, or for bl
15
15
  def alternate_controller
16
16
  copy_file "alternate_controller.rb", "app/controllers/alternate_controller.rb"
17
17
 
18
- routing_code = <<-EOF
18
+ routing_code = <<-EOF.strip_heredoc
19
19
  resource :alternate, controller: 'alternate', only: [:index] do
20
20
  concerns :searchable
21
21
  end
data/solr/conf/schema.xml CHANGED
@@ -314,6 +314,15 @@
314
314
  </analyzer>
315
315
  </fieldType>
316
316
 
317
+ <fieldType class="solr.TextField" name="textSuggest" positionIncrementGap="100">
318
+ <analyzer>
319
+ <tokenizer class="solr.KeywordTokenizerFactory"/>
320
+ <filter class="solr.StandardFilterFactory"/>
321
+ <filter class="solr.LowerCaseFilterFactory"/>
322
+ <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
323
+ </analyzer>
324
+ </fieldType>
325
+
317
326
  <!-- charFilter + WhitespaceTokenizer -->
318
327
  <!--
319
328
  <fieldType name="text_char_norm" class="solr.TextField" positionIncrementGap="100" >
@@ -519,6 +528,7 @@
519
528
  <dynamicField name="*_sort" type="alphaOnlySort" indexed="true" stored="false" multiValued="false" />
520
529
  <dynamicField name="*_unstem_search" type="text_general" indexed="true" stored="false" multiValued="true" />
521
530
  <dynamicField name="*spell" type="textSpell" indexed="true" stored="false" multiValued="true" />
531
+ <dynamicField name="*suggest" type="textSuggest" indexed="true" stored="false" multiValued="true" />
522
532
 
523
533
  <!-- uncomment the following to ignore any fields that don't already match an existing
524
534
  field name or dynamic field, rather than reporting them as an error.
@@ -591,7 +601,10 @@
591
601
  <copyField source="subject_t" dest="opensearch_display"/>
592
602
  <copyField source="subject_addl_t" dest="opensearch_display"/>
593
603
 
594
-
604
+ <!-- for suggestions -->
605
+ <copyField source="*_t" dest="suggest"/>
606
+ <copyField source="*_facet" dest="suggest"/>
607
+
595
608
  <!-- Above, multiple source fields are copied to the [text] field.
596
609
  Another way to map multiple source fields to the same
597
610
  destination field is to use the dynamic field syntax.
@@ -387,5 +387,26 @@
387
387
  -->
388
388
  </searchComponent>
389
389
 
390
+ <searchComponent name="suggest" class="solr.SuggestComponent">
391
+ <lst name="suggester">
392
+ <str name="name">mySuggester</str>
393
+ <str name="lookupImpl">FuzzyLookupFactory</str>
394
+ <str name="suggestAnalyzerFieldType">textSuggest</str>
395
+ <str name="buildOnCommit">true</str>
396
+ <str name="field">suggest</str>
397
+ </lst>
398
+ </searchComponent>
399
+
400
+ <requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">
401
+ <lst name="defaults">
402
+ <str name="suggest">true</str>
403
+ <str name="suggest.count">5</str>
404
+ <str name="suggest.dictionary">mySuggester</str>
405
+ </lst>
406
+ <arr name="components">
407
+ <str>suggest</str>
408
+ </arr>
409
+ </requestHandler>
410
+
390
411
  </config>
391
412
 
@@ -4,13 +4,13 @@ describe Blacklight::Base do
4
4
  let(:controller) { (Class.new(ApplicationController) { include Blacklight::Base }).new }
5
5
  subject { controller}
6
6
 
7
- describe "#blacklight_path" do
7
+ describe "#search_state" do
8
8
  let(:params) { double }
9
9
  before { allow(controller).to receive_messages(params: params) }
10
- subject { controller.send(:blacklight_path) }
10
+ subject { controller.send(:search_state) }
11
11
 
12
12
  it "creates a path object" do
13
- expect(subject).to be_kind_of Blacklight::Path
13
+ expect(subject).to be_kind_of Blacklight::SearchState
14
14
  expect(subject.params).to be params
15
15
  end
16
16
  end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe Blacklight::SuggestSearch do
4
+ let(:params) { {q: 'test'} }
5
+ let(:suggest_path) { 'suggest' }
6
+ let(:connection) { double('connection', send_and_receive: 'sent')}
7
+ let(:repository) { double('repository', connection: connection) }
8
+ let(:suggest_search) { described_class.new(params, repository)}
9
+ describe '#suggestions' do
10
+ it 'returns a Blacklight::Suggest::Response' do
11
+ expect(suggest_search).to receive(:suggest_results).and_return([])
12
+ expect(suggest_search).to receive(:suggest_handler_path).and_return(suggest_path)
13
+ expect(suggest_search.suggestions).to be_an Blacklight::Suggest::Response
14
+ end
15
+ end
16
+ describe '#suggest_results' do
17
+ it 'should call send_and_recieve from a repository connection' do
18
+ expect(suggest_search).to receive(:suggest_handler_path).and_return(suggest_path)
19
+ expect(suggest_search.suggest_results).to eq 'sent'
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe SuggestController do
4
+ routes { Blacklight::Engine.routes }
5
+ describe 'GET index' do
6
+ it 'returns JSON' do
7
+ get :index, format: 'json'
8
+ expect(response.body).to eq [].to_json
9
+ end
10
+ it 'returns suggestions' do
11
+ get :index, format: 'json', q: 'new'
12
+ json = JSON.parse(response.body)
13
+ expect(json.count).to eq 3
14
+ expect(json.first['term']).to eq 'new jersey'
15
+ end
16
+ end
17
+ end
@@ -301,11 +301,11 @@ describe FacetsHelper do
301
301
 
302
302
  describe "render_facet_value" do
303
303
  let(:item) { double(:value => 'A', :hits => 10) }
304
- let(:blacklight_path) { double(add_facet_params_and_redirect: { controller: 'catalog' }) }
304
+ let(:search_state) { double(add_facet_params_and_redirect: { controller: 'catalog' }) }
305
305
  before do
306
306
  allow(helper).to receive(:facet_configuration_for_field).with('simple_field').and_return(double(:query => nil, :date => nil, :helper_method => nil, :single => false, :url_method => nil))
307
307
  allow(helper).to receive(:facet_display_value).and_return('Z')
308
- allow(helper).to receive(:blacklight_path).and_return(blacklight_path)
308
+ allow(helper).to receive(:search_state).and_return(search_state)
309
309
  allow(helper).to receive(:search_action_path) do |*args|
310
310
  search_catalog_path *args
311
311
  end
@@ -34,7 +34,7 @@ describe RenderConstraintsHelper do
34
34
  end
35
35
  subject { helper.render_filter_element('type', ['journal'], path) }
36
36
 
37
- let(:path) { Blacklight::Path.new({:q=>'biz'}, config) }
37
+ let(:path) { Blacklight::SearchState.new({:q=>'biz'}, config) }
38
38
 
39
39
  it "should have a link relative to the current url" do
40
40
  expect(subject).to have_link "Remove constraint Item Type: journal", href: "/catalog?q=biz"
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+
3
+ describe SuggestHelper do
4
+ before do
5
+ allow(helper).to receive(:blacklight_config).and_return(blacklight_config)
6
+ end
7
+ describe '#autocomplete_enabled?' do
8
+ describe 'with autocomplete config' do
9
+ let(:blacklight_config) do
10
+ Blacklight::Configuration.new.configure do |config|
11
+ config.autocomplete_enabled = true
12
+ config.autocomplete_path = 'suggest'
13
+ end
14
+ end
15
+ it 'is enabled' do
16
+ expect(helper.autocomplete_enabled?).to be true
17
+ end
18
+ end
19
+ describe 'without disabled config' do
20
+ let(:blacklight_config) do
21
+ Blacklight::Configuration.new.configure do |config|
22
+ config.autocomplete_enabled = false
23
+ config.autocomplete_path = 'suggest'
24
+ end
25
+ end
26
+ it 'is disabled' do
27
+ expect(helper.autocomplete_enabled?).to be false
28
+ end
29
+ end
30
+ describe 'without path config' do
31
+ let(:blacklight_config) do
32
+ Blacklight::Configuration.new.configure do |config|
33
+ config.autocomplete_enabled = true
34
+ end
35
+ end
36
+ it 'is disabled' do
37
+ expect(helper.autocomplete_enabled?).to be false
38
+ end
39
+ end
40
+ end
41
+ end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Blacklight::Path do
3
+ describe Blacklight::SearchState do
4
4
  let(:blacklight_config) do
5
5
  Blacklight::Configuration.new.configure do |config|
6
6
  config.index.title_field = 'title_display'
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Blacklight::Solr::SearchBuilder do
3
+ describe Blacklight::Solr::SearchBuilderBehavior do
4
4
  let(:single_facet) { { format: 'Book' } }
5
5
  let(:multi_facets) { { format: 'Book', language_facet: 'Tibetan' } }
6
6
  let(:mult_word_query) { 'tibetan history' }
@@ -12,7 +12,12 @@ describe Blacklight::Solr::SearchBuilder do
12
12
 
13
13
  before { allow(context).to receive(:blacklight_config).and_return(blacklight_config) }
14
14
 
15
- let(:search_builder) { described_class.new(context) }
15
+ let(:search_builder_class) do
16
+ Class.new(Blacklight::SearchBuilder) do
17
+ include Blacklight::Solr::SearchBuilderBehavior
18
+ end
19
+ end
20
+ let(:search_builder) { search_builder_class.new(context) }
16
21
 
17
22
  subject { search_builder.with(user_params) }
18
23
 
@@ -20,18 +25,18 @@ describe Blacklight::Solr::SearchBuilder do
20
25
  context "with two arguments" do
21
26
  subject do
22
27
  Deprecation.silence Blacklight::SearchBuilder do
23
- described_class.new true, context
28
+ search_builder_class.new true, context
24
29
  end
25
30
  end
26
31
  it "uses the class-level default_processor_chain" do
27
- expect(subject.processor_chain).to eq described_class.default_processor_chain
32
+ expect(subject.processor_chain).to eq search_builder_class.default_processor_chain
28
33
  end
29
34
  end
30
35
 
31
36
  context "with one arguments" do
32
- subject { described_class.new context }
37
+ subject { search_builder }
33
38
  it "uses the class-level default_processor_chain" do
34
- expect(subject.processor_chain).to eq described_class.default_processor_chain
39
+ expect(subject.processor_chain).to eq search_builder_class.default_processor_chain
35
40
  end
36
41
  end
37
42
  end
@@ -90,7 +95,7 @@ describe Blacklight::Solr::SearchBuilder do
90
95
  end
91
96
 
92
97
  context "when search_params_logic is customized" do
93
- let(:search_builder) { described_class.new(method_chain, context) }
98
+ let(:search_builder) { search_builder_class.new(method_chain, context) }
94
99
  let(:method_chain) { [:add_foo_to_solr_params] }
95
100
 
96
101
  it "allows customization of search_params_logic" do
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+
3
+ describe Blacklight::Suggest::Response do
4
+ let(:empty_response) { described_class.new({}, { q: 'hello' }, 'suggest') }
5
+ let(:full_response) do
6
+ described_class.new(
7
+ {
8
+ 'responseHeader' => {
9
+ 'status' => 200
10
+ },
11
+ 'suggest' => {
12
+ 'mySuggester' => {
13
+ 'new' => {
14
+ 'numFound' => 3,
15
+ 'suggestions' => [
16
+ {
17
+ 'term' => 'new jersey',
18
+ 'weight' => 3,
19
+ 'payload' => ''
20
+ },
21
+ {
22
+ 'term' => 'new jersey bridgeton biography',
23
+ 'weight' => 3,
24
+ 'payload' => ''
25
+ },
26
+ {
27
+ 'term' => 'new jersey bridgeton history',
28
+ 'weight' => 3,
29
+ 'payload' => ''
30
+ }
31
+ ]
32
+ }
33
+ }
34
+ }
35
+ },
36
+ {
37
+ q: 'new'
38
+ },
39
+ 'suggest'
40
+ )
41
+ end
42
+
43
+ describe '#initialize' do
44
+ it 'creates a Blacklight::Suggest::Response' do
45
+ expect(empty_response).to be_an Blacklight::Suggest::Response
46
+ end
47
+ end
48
+ describe '#suggestions' do
49
+ it 'returns an array of suggestions' do
50
+ expect(full_response.suggestions).to be_an Array
51
+ expect(full_response.suggestions.count).to eq 3
52
+ expect(full_response.suggestions.first['term']).to eq 'new jersey'
53
+ end
54
+ end
55
+ end
@@ -2,8 +2,8 @@ module ControllerLevelHelpers
2
2
  module ControllerViewHelpers
3
3
  include Blacklight::Facet
4
4
 
5
- def blacklight_path
6
- @blacklight_path ||= Blacklight::Path.new(params, blacklight_config)
5
+ def search_state
6
+ @search_state ||= Blacklight::SearchState.new(params, blacklight_config)
7
7
  end
8
8
 
9
9
  def blacklight_configuration_context
@@ -42,7 +42,7 @@ namespace :blacklight do
42
42
  end
43
43
 
44
44
  desc 'Run Solr and Blacklight for interactive development'
45
- task :server do
45
+ task :server, [:rails_server_args] do |t, args|
46
46
  if File.exists? EngineCart.destination
47
47
  within_test_app do
48
48
  system "bundle update"
@@ -56,7 +56,7 @@ namespace :blacklight do
56
56
  Rake::Task['blacklight:internal:seed'].invoke
57
57
 
58
58
  within_test_app do
59
- system "bundle exec rails s"
59
+ system "bundle exec rails s #{args[:rails_server_args]}"
60
60
  end
61
61
  end
62
62
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blacklight
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.0.pre1
4
+ version: 6.0.0.pre2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Rochkind
@@ -17,7 +17,7 @@ authors:
17
17
  autorequire:
18
18
  bindir: bin
19
19
  cert_chain: []
20
- date: 2015-11-05 00:00:00.000000000 Z
20
+ date: 2015-11-06 00:00:00.000000000 Z
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
23
23
  name: rails
@@ -123,6 +123,20 @@ dependencies:
123
123
  - - ">="
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: twitter-typeahead-rails
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: '0.11'
133
+ type: :runtime
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: '0.11'
126
140
  - !ruby/object:Gem::Dependency
127
141
  name: solr_wrapper
128
142
  requirement: !ruby/object:Gem::Requirement
@@ -261,6 +275,7 @@ files:
261
275
  - app/assets/images/blacklight/logo.png
262
276
  - app/assets/images/favicon.ico
263
277
  - app/assets/javascripts/blacklight/ajax_modal.js
278
+ - app/assets/javascripts/blacklight/autocomplete.js
264
279
  - app/assets/javascripts/blacklight/autofocus.js
265
280
  - app/assets/javascripts/blacklight/blacklight.js
266
281
  - app/assets/javascripts/blacklight/bookmark_toggle.js
@@ -282,6 +297,7 @@ files:
282
297
  - app/assets/stylesheets/blacklight/_pagination.scss
283
298
  - app/assets/stylesheets/blacklight/_search_history.scss
284
299
  - app/assets/stylesheets/blacklight/_search_results.scss
300
+ - app/assets/stylesheets/blacklight/_twitter_typeahead.scss
285
301
  - app/assets/stylesheets/blacklight/blacklight.scss
286
302
  - app/assets/stylesheets/blacklight/blacklight_defaults.scss
287
303
  - app/controllers/bookmarks_controller.rb
@@ -296,8 +312,11 @@ files:
296
312
  - app/controllers/concerns/blacklight/search_context.rb
297
313
  - app/controllers/concerns/blacklight/search_fields.rb
298
314
  - app/controllers/concerns/blacklight/search_helper.rb
315
+ - app/controllers/concerns/blacklight/suggest.rb
316
+ - app/controllers/concerns/blacklight/suggest_search.rb
299
317
  - app/controllers/saved_searches_controller.rb
300
318
  - app/controllers/search_history_controller.rb
319
+ - app/controllers/suggest_controller.rb
301
320
  - app/helpers/blacklight/blacklight_helper_behavior.rb
302
321
  - app/helpers/blacklight/catalog_helper_behavior.rb
303
322
  - app/helpers/blacklight/component_helper_behavior.rb
@@ -308,6 +327,7 @@ files:
308
327
  - app/helpers/blacklight/render_constraints_helper_behavior.rb
309
328
  - app/helpers/blacklight/render_partials_helper.rb
310
329
  - app/helpers/blacklight/search_history_constraints_helper_behavior.rb
330
+ - app/helpers/blacklight/suggest_helper_behavior.rb
311
331
  - app/helpers/blacklight/url_helper_behavior.rb
312
332
  - app/helpers/blacklight_configuration_helper.rb
313
333
  - app/helpers/blacklight_helper.rb
@@ -319,31 +339,9 @@ files:
319
339
  - app/helpers/layout_helper.rb
320
340
  - app/helpers/render_constraints_helper.rb
321
341
  - app/helpers/search_history_constraints_helper.rb
322
- - app/models/blacklight/abstract_repository.rb
323
- - app/models/blacklight/configuration.rb
324
- - app/models/blacklight/configuration/context.rb
325
- - app/models/blacklight/configuration/facet_field.rb
326
- - app/models/blacklight/configuration/field.rb
327
- - app/models/blacklight/configuration/fields.rb
328
- - app/models/blacklight/configuration/search_field.rb
329
- - app/models/blacklight/configuration/solr_field.rb
330
- - app/models/blacklight/configuration/sort_field.rb
331
- - app/models/blacklight/configuration/tool_config.rb
332
- - app/models/blacklight/configuration/view_config.rb
342
+ - app/helpers/suggest_helper.rb
333
343
  - app/models/blacklight/facet_paginator.rb
334
- - app/models/blacklight/search_builder.rb
335
344
  - app/models/blacklight/solr/facet_paginator.rb
336
- - app/models/blacklight/solr/repository.rb
337
- - app/models/blacklight/solr/request.rb
338
- - app/models/blacklight/solr/response.rb
339
- - app/models/blacklight/solr/response/facets.rb
340
- - app/models/blacklight/solr/response/group.rb
341
- - app/models/blacklight/solr/response/group_response.rb
342
- - app/models/blacklight/solr/response/more_like_this.rb
343
- - app/models/blacklight/solr/response/pagination_methods.rb
344
- - app/models/blacklight/solr/response/response.rb
345
- - app/models/blacklight/solr/response/spelling.rb
346
- - app/models/blacklight/solr/search_builder.rb
347
345
  - app/models/bookmark.rb
348
346
  - app/models/concerns/blacklight/configurable.rb
349
347
  - app/models/concerns/blacklight/document.rb
@@ -364,7 +362,7 @@ files:
364
362
  - app/models/concerns/blacklight/solr/document/more_like_this.rb
365
363
  - app/models/concerns/blacklight/solr/document/schema_org.rb
366
364
  - app/models/concerns/blacklight/solr/document/sms.rb
367
- - app/models/concerns/blacklight/solr/search_builder_behavior.rb
365
+ - app/models/concerns/blacklight/suggest/response.rb
368
366
  - app/models/concerns/blacklight/token_based_user.rb
369
367
  - app/models/concerns/blacklight/user.rb
370
368
  - app/models/record_mailer.rb
@@ -472,14 +470,37 @@ files:
472
470
  - db/migrate/20140202020202_create_bookmarks.rb
473
471
  - db/migrate/20140320000000_add_polymorphic_type_to_bookmarks.rb
474
472
  - lib/blacklight.rb
473
+ - lib/blacklight/abstract_repository.rb
474
+ - lib/blacklight/configuration.rb
475
+ - lib/blacklight/configuration/context.rb
476
+ - lib/blacklight/configuration/facet_field.rb
477
+ - lib/blacklight/configuration/field.rb
478
+ - lib/blacklight/configuration/fields.rb
479
+ - lib/blacklight/configuration/search_field.rb
480
+ - lib/blacklight/configuration/solr_field.rb
481
+ - lib/blacklight/configuration/sort_field.rb
482
+ - lib/blacklight/configuration/tool_config.rb
483
+ - lib/blacklight/configuration/view_config.rb
475
484
  - lib/blacklight/engine.rb
476
485
  - lib/blacklight/exceptions.rb
477
486
  - lib/blacklight/parameters.rb
478
- - lib/blacklight/path.rb
479
487
  - lib/blacklight/routes.rb
480
488
  - lib/blacklight/routes/exportable.rb
481
489
  - lib/blacklight/routes/searchable.rb
490
+ - lib/blacklight/search_builder.rb
491
+ - lib/blacklight/search_state.rb
482
492
  - lib/blacklight/solr.rb
493
+ - lib/blacklight/solr/repository.rb
494
+ - lib/blacklight/solr/request.rb
495
+ - lib/blacklight/solr/response.rb
496
+ - lib/blacklight/solr/response/facets.rb
497
+ - lib/blacklight/solr/response/group.rb
498
+ - lib/blacklight/solr/response/group_response.rb
499
+ - lib/blacklight/solr/response/more_like_this.rb
500
+ - lib/blacklight/solr/response/pagination_methods.rb
501
+ - lib/blacklight/solr/response/response.rb
502
+ - lib/blacklight/solr/response/spelling.rb
503
+ - lib/blacklight/solr/search_builder_behavior.rb
483
504
  - lib/blacklight/utils.rb
484
505
  - lib/blacklight/version.rb
485
506
  - lib/generators/blacklight/assets_generator.rb
@@ -523,10 +544,12 @@ files:
523
544
  - spec/controllers/blacklight/facet_spec.rb
524
545
  - spec/controllers/blacklight/search_fields_spec.rb
525
546
  - spec/controllers/blacklight/search_helper_spec.rb
547
+ - spec/controllers/blacklight/suggest_search_spec.rb
526
548
  - spec/controllers/bookmarks_controller_spec.rb
527
549
  - spec/controllers/catalog_controller_spec.rb
528
550
  - spec/controllers/saved_searches_controller_spec.rb
529
551
  - spec/controllers/search_history_controller_spec.rb
552
+ - spec/controllers/suggest_controller_spec.rb
530
553
  - spec/features/alternate_controller_spec.rb
531
554
  - spec/features/bookmarks_spec.rb
532
555
  - spec/features/did_you_mean_spec.rb
@@ -550,9 +573,10 @@ files:
550
573
  - spec/helpers/layout_helper_spec.rb
551
574
  - spec/helpers/render_constraints_helper_spec.rb
552
575
  - spec/helpers/search_history_constraints_helper_spec.rb
576
+ - spec/helpers/suggest_helper_spec.rb
553
577
  - spec/helpers/url_helper_spec.rb
554
578
  - spec/lib/blacklight/parameters_spec.rb
555
- - spec/lib/blacklight/path_spec.rb
579
+ - spec/lib/blacklight/search_state_spec.rb
556
580
  - spec/lib/blacklight/utils_spec.rb
557
581
  - spec/lib/blacklight_spec.rb
558
582
  - spec/lib/tasks/blacklight_task_spec.rb
@@ -577,6 +601,7 @@ files:
577
601
  - spec/models/blacklight/solr/response/group_spec.rb
578
602
  - spec/models/blacklight/solr/response_spec.rb
579
603
  - spec/models/blacklight/solr/search_builder_spec.rb
604
+ - spec/models/blacklight/suggest/response_spec.rb
580
605
  - spec/models/blacklight/user_spec.rb
581
606
  - spec/models/bookmark_spec.rb
582
607
  - spec/models/record_mailer_spec.rb
@@ -648,10 +673,12 @@ test_files:
648
673
  - spec/controllers/blacklight/facet_spec.rb
649
674
  - spec/controllers/blacklight/search_fields_spec.rb
650
675
  - spec/controllers/blacklight/search_helper_spec.rb
676
+ - spec/controllers/blacklight/suggest_search_spec.rb
651
677
  - spec/controllers/bookmarks_controller_spec.rb
652
678
  - spec/controllers/catalog_controller_spec.rb
653
679
  - spec/controllers/saved_searches_controller_spec.rb
654
680
  - spec/controllers/search_history_controller_spec.rb
681
+ - spec/controllers/suggest_controller_spec.rb
655
682
  - spec/features/alternate_controller_spec.rb
656
683
  - spec/features/bookmarks_spec.rb
657
684
  - spec/features/did_you_mean_spec.rb
@@ -675,9 +702,10 @@ test_files:
675
702
  - spec/helpers/layout_helper_spec.rb
676
703
  - spec/helpers/render_constraints_helper_spec.rb
677
704
  - spec/helpers/search_history_constraints_helper_spec.rb
705
+ - spec/helpers/suggest_helper_spec.rb
678
706
  - spec/helpers/url_helper_spec.rb
679
707
  - spec/lib/blacklight/parameters_spec.rb
680
- - spec/lib/blacklight/path_spec.rb
708
+ - spec/lib/blacklight/search_state_spec.rb
681
709
  - spec/lib/blacklight/utils_spec.rb
682
710
  - spec/lib/blacklight_spec.rb
683
711
  - spec/lib/tasks/blacklight_task_spec.rb
@@ -702,6 +730,7 @@ test_files:
702
730
  - spec/models/blacklight/solr/response/group_spec.rb
703
731
  - spec/models/blacklight/solr/response_spec.rb
704
732
  - spec/models/blacklight/solr/search_builder_spec.rb
733
+ - spec/models/blacklight/suggest/response_spec.rb
705
734
  - spec/models/blacklight/user_spec.rb
706
735
  - spec/models/bookmark_spec.rb
707
736
  - spec/models/record_mailer_spec.rb
@@ -1,7 +0,0 @@
1
- module Blacklight::Solr
2
- # @deprecated In 6.0 you should have this class generated into your application and Blacklight will
3
- # no longer need to provide it.
4
- class SearchBuilder < Blacklight::SearchBuilder
5
- include Blacklight::Solr::SearchBuilderBehavior
6
- end
7
- end