blacklight 6.10.1 → 6.11.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 13a1d0a576ef05724c0d14346328fd7650055bde
4
- data.tar.gz: 5698a8f2653b6dca110bc5d7367000bc42c61e96
3
+ metadata.gz: 741267e0943b9248b05baca938f10fe8c3454717
4
+ data.tar.gz: 333367da063309c42774d31396aadaa17480bc43
5
5
  SHA512:
6
- metadata.gz: 9ab3959efcc3a80dc1058ca760252c99f831199aace9019136d34691f5d92d6af4f8d9199657713ef945f149b91341d8845a15716043b8ad2c0e272e3ae15f09
7
- data.tar.gz: 155d327f094f45c424f98c56466606af7057db4b814fe62fb5f5b1ad7da0ce584447e6278d99f66b116f68e29c894559c3e10dafc4994a0a99561d3d19185c4a
6
+ metadata.gz: 9e86f64f778efb7e43db4b0acd10999bb8c151ba30f59272522354469ad79ba28b04979864d381b2532c478b28fac33e712961bd5ca85aef41a04c0849e1dbe6
7
+ data.tar.gz: b6c6bc62fa20aeb936610a14de238f99f39f66cc3597255f7ab8c440897526bd95d6aad5eecb56f43ce50716f3af4eac7700147203cd367c13ab78be7f83d3a7
@@ -86,12 +86,12 @@ Metrics/BlockLength:
86
86
  Metrics/BlockNesting:
87
87
  Max: 4
88
88
 
89
- # Offense count: 2
90
89
  # Configuration parameters: CountComments.
91
90
  Metrics/ClassLength:
92
- Max: 186
91
+ Max: 100
93
92
  Exclude:
94
93
  - 'lib/blacklight/configuration.rb'
94
+ - 'lib/blacklight/search_builder.rb'
95
95
 
96
96
  # Offense count: 20
97
97
  Metrics/CyclomaticComplexity:
data/VERSION CHANGED
@@ -1 +1 @@
1
- 6.10.1
1
+ 6.11.0
@@ -29,7 +29,11 @@ module Blacklight
29
29
  # Pagination parameters for selecting the previous and next documents
30
30
  # out of a result set.
31
31
  def previous_and_next_document_params(index, window = 1)
32
- solr_params = {}
32
+ solr_params = blacklight_config.document_pagination_params.dup
33
+
34
+ if solr_params.empty?
35
+ solr_params[:fl] = '*'
36
+ end
33
37
 
34
38
  if index > 0
35
39
  solr_params[:start] = index - window # get one before
@@ -39,7 +43,6 @@ module Blacklight
39
43
  solr_params[:rows] = 2*window # but there should be one after
40
44
  end
41
45
 
42
- solr_params[:fl] = '*'
43
46
  solr_params[:facet] = false
44
47
  solr_params
45
48
  end
@@ -36,7 +36,9 @@ module Blacklight::SearchContext
36
36
  end
37
37
 
38
38
  def find_search_session
39
- if params[:search_context].present?
39
+ if agent_is_crawler?
40
+ nil
41
+ elsif params[:search_context].present?
40
42
  find_or_initialize_search_session_from_params JSON.parse(params[:search_context])
41
43
  elsif params[:search_id].present?
42
44
  begin
@@ -63,6 +65,16 @@ module Blacklight::SearchContext
63
65
  false
64
66
  end
65
67
 
68
+ ##
69
+ # Determine if the current request is coming from an anonymous bot
70
+ # or search crawler
71
+ #
72
+ def agent_is_crawler?
73
+ crawler_proc = blacklight_config.crawler_detector
74
+ return false if crawler_proc.nil? || current_user.present?
75
+ crawler_proc.call(request)
76
+ end
77
+
66
78
  def find_or_initialize_search_session_from_params params
67
79
  params_copy = params.reject { |k,v| blacklisted_search_session_params.include?(k.to_sym) or v.blank? }
68
80
 
@@ -17,7 +17,10 @@ module Blacklight::BlacklightHelperBehavior
17
17
  #
18
18
  # @return [String] the application name
19
19
  def application_name
20
- return Rails.application.config.application_name if Rails.application.config.respond_to? :application_name
20
+ if Rails.application.config.respond_to? :application_name
21
+ Deprecation.warn(self, "BlacklightHelper#application_name will no longer delegate to config.application_name in version 7.0. Set the i18n for blacklight.application_name instead")
22
+ return Rails.application.config.application_name
23
+ end
21
24
 
22
25
  t('blacklight.application_name')
23
26
  end
@@ -1,5 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
  module Blacklight::ConfigurationHelperBehavior
3
+ extend Deprecation
4
+ self.deprecation_horizon = 'blacklight 7.x'
5
+
3
6
  ##
4
7
  # Index fields to display for a type of document
5
8
  #
@@ -13,6 +16,7 @@ module Blacklight::ConfigurationHelperBehavior
13
16
  def sort_fields
14
17
  active_sort_fields.map { |key, x| [x.label, x.key] }
15
18
  end
19
+ deprecation_deprecate :sort_fields
16
20
 
17
21
  def active_sort_fields
18
22
  blacklight_config.sort_fields.select { |sort_key, field_config| should_render_field?(field_config) }
@@ -1,4 +1,4 @@
1
- <% if show_sort_and_per_page? and !active_sort_fields.blank? %>
1
+ <% if show_sort_and_per_page? and active_sort_fields.many? %>
2
2
  <div id="sort-dropdown" class="btn-group">
3
3
  <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
4
4
  <%= t('blacklight.search.sort.label', :field =>current_sort_field.label) %> <span class="caret"></span>
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
27
27
 
28
28
  s.add_dependency "rails", ">= 4.2", "< 6"
29
29
  s.add_dependency "globalid"
30
+ s.add_dependency "jbuilder"
30
31
  s.add_dependency "nokogiri", "~>1.6" # XML Parser
31
32
  s.add_dependency "kaminari", ">= 0.15" # the pagination (page 1,2,3, etc..) of our search results
32
33
  s.add_dependency "rsolr", ">= 1.0.6", "< 3" # Library for interacting with rSolr.
@@ -56,6 +56,7 @@ module Blacklight
56
56
  #facet: false,
57
57
  #rows: 1
58
58
  },
59
+ document_pagination_params: {},
59
60
  ##
60
61
  # == Response models
61
62
  ## Class for sending and receiving requests from a search index
@@ -137,7 +138,10 @@ module Blacklight
137
138
  # how many searches to save in session history
138
139
  search_history_window: 100,
139
140
  default_facet_limit: 10,
140
- default_more_limit: 20
141
+ default_more_limit: 20,
142
+ # proc for determining whether the session is a crawler/bot
143
+ # ex.: crawler_detector: lambda { |req| req.env['HTTP_USER_AGENT'] =~ /bot/ }
144
+ crawler_detector: nil
141
145
  }
142
146
  end
143
147
  end
@@ -73,10 +73,12 @@ module Blacklight::Solr::Response::Spelling
73
73
  return unless spellcheck && spellcheck[:suggestions]
74
74
  suggestions = spellcheck[:suggestions]
75
75
 
76
- if suggestions.index("collation")
76
+ if suggestions.is_a?(Array) && suggestions.index("collation")
77
+ # solr < 5 response
77
78
  suggestions[suggestions.index("collation") + 1]
78
79
  elsif spellcheck.key?("collations")
79
- spellcheck['collations'].last
80
+ # solr 5+ response
81
+ spellcheck['collations'].last if spellcheck.key?("collations")
80
82
  end
81
83
  end
82
84
  end
@@ -458,5 +458,13 @@ describe Blacklight::SearchHelper do
458
458
  expect(docs.last).to be_nil
459
459
  expect(docs.first).to be_nil
460
460
  end
461
+
462
+ it 'allows the query parameters to be customized using configuration' do
463
+ blacklight_config.document_pagination_params[:fl] = 'id,format'
464
+
465
+ response, docs = subject.get_previous_and_next_documents_for_search(0, :q => '')
466
+
467
+ expect(docs.last.to_h).to eq @all_docs[1].to_h.slice('id', 'format')
468
+ end
461
469
  end
462
470
  end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe "Search History Page" do
4
+
5
+ describe "crawler search" do
6
+ let(:original_proc) { ::CatalogController.blacklight_config.crawler_detector }
7
+
8
+ before do
9
+ ::CatalogController.blacklight_config.crawler_detector = lambda { |req| req.env['HTTP_USER_AGENT'] =~ /Googlebot/ }
10
+ end
11
+
12
+ after do
13
+ ::CatalogController.blacklight_config.crawler_detector = original_proc
14
+ end
15
+
16
+ it "remembers human searches" do
17
+ visit root_path
18
+ fill_in "q", with: 'chicken'
19
+ expect { click_button 'search' }.to change { Search.count }.by(1)
20
+ end
21
+
22
+ it "doesn't remember bot searches" do
23
+ page.driver.header('User-Agent', 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)')
24
+ visit root_path
25
+ fill_in "q", with: 'chicken'
26
+ expect { click_button 'search' }.to_not change { Search.count }
27
+ end
28
+ end
29
+
30
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe "catalog/_sort_widget" do
4
+ let(:blacklight_config) { Blacklight::Configuration.new }
5
+ let(:response) { instance_double(Blacklight::Solr::Response, empty?: false, sort: 'one') }
6
+
7
+ before do
8
+ allow(view).to receive_messages(blacklight_config: blacklight_config)
9
+ assign(:response, response)
10
+ controller.request.path_parameters[:action] = 'index'
11
+ end
12
+
13
+ context 'with no sort fields configured' do
14
+ it 'renders nothing' do
15
+ render
16
+ expect(rendered).to be_blank
17
+ end
18
+ end
19
+
20
+ context 'with a single sort field configured' do
21
+ before do
22
+ blacklight_config.add_sort_field 'one'
23
+ end
24
+ it 'renders nothing' do
25
+ render
26
+ expect(rendered).to be_blank
27
+ end
28
+ end
29
+
30
+ context 'with multiple sort fields configured' do
31
+ before do
32
+ blacklight_config.add_sort_field 'one'
33
+ blacklight_config.add_sort_field 'two'
34
+ end
35
+ it 'renders a dropdown with the various options' do
36
+ render
37
+
38
+ expect(rendered).to have_button 'One'
39
+ expect(rendered).to have_link 'One'
40
+ expect(rendered).to have_link 'Two'
41
+ end
42
+ end
43
+ 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.10.1
4
+ version: 6.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Rochkind
@@ -17,7 +17,7 @@ authors:
17
17
  autorequire:
18
18
  bindir: exe
19
19
  cert_chain: []
20
- date: 2017-06-21 00:00:00.000000000 Z
20
+ date: 2017-08-10 00:00:00.000000000 Z
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
23
23
  name: rails
@@ -53,6 +53,20 @@ dependencies:
53
53
  - - ">="
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: jbuilder
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
56
70
  - !ruby/object:Gem::Dependency
57
71
  name: nokogiri
58
72
  requirement: !ruby/object:Gem::Requirement
@@ -635,6 +649,7 @@ files:
635
649
  - spec/features/record_view_spec.rb
636
650
  - spec/features/saved_searches_spec.rb
637
651
  - spec/features/search_context_spec.rb
652
+ - spec/features/search_crawler_spec.rb
638
653
  - spec/features/search_filters_spec.rb
639
654
  - spec/features/search_formats_spec.rb
640
655
  - spec/features/search_history_spec.rb
@@ -717,6 +732,7 @@ files:
717
732
  - spec/views/catalog/_show_sidebar.erb_spec.rb
718
733
  - spec/views/catalog/_show_tools.html.erb_spec.rb
719
734
  - spec/views/catalog/_sort_and_per_page.html.erb_spec.rb
735
+ - spec/views/catalog/_sort_widget.html.erb_spec.rb
720
736
  - spec/views/catalog/_thumbnail_default.erb_spec.rb
721
737
  - spec/views/catalog/_view_type_group.html.erb_spec.rb
722
738
  - spec/views/catalog/facet.html.erb_spec.rb
@@ -774,6 +790,7 @@ test_files:
774
790
  - spec/features/record_view_spec.rb
775
791
  - spec/features/saved_searches_spec.rb
776
792
  - spec/features/search_context_spec.rb
793
+ - spec/features/search_crawler_spec.rb
777
794
  - spec/features/search_filters_spec.rb
778
795
  - spec/features/search_formats_spec.rb
779
796
  - spec/features/search_history_spec.rb
@@ -856,6 +873,7 @@ test_files:
856
873
  - spec/views/catalog/_show_sidebar.erb_spec.rb
857
874
  - spec/views/catalog/_show_tools.html.erb_spec.rb
858
875
  - spec/views/catalog/_sort_and_per_page.html.erb_spec.rb
876
+ - spec/views/catalog/_sort_widget.html.erb_spec.rb
859
877
  - spec/views/catalog/_thumbnail_default.erb_spec.rb
860
878
  - spec/views/catalog/_view_type_group.html.erb_spec.rb
861
879
  - spec/views/catalog/facet.html.erb_spec.rb