blacklight 6.0.0.pre1 → 6.0.0.pre2

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 (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