blacklight 5.13.0 → 5.13.1
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +16 -0
- data/.rubocop_hound.yml +1063 -0
- data/.rubocop_todo.yml +253 -0
- data/.travis.yml +7 -9
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/app/helpers/blacklight/blacklight_helper_behavior.rb +9 -13
- data/app/helpers/blacklight/catalog_helper_behavior.rb +14 -3
- data/app/helpers/blacklight/configuration_helper_behavior.rb +1 -1
- data/app/helpers/blacklight/facets_helper_behavior.rb +13 -13
- data/app/helpers/blacklight/render_partials_helper.rb +3 -0
- data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +3 -5
- data/app/helpers/blacklight/url_helper_behavior.rb +1 -1
- data/app/helpers/blacklight_configuration_helper.rb +1 -1
- data/app/helpers/blacklight_url_helper.rb +1 -1
- data/app/helpers/component_helper.rb +1 -1
- data/app/models/bookmark.rb +1 -1
- data/app/models/search.rb +2 -2
- data/app/views/catalog/_bookmark_control.html.erb +1 -1
- data/app/views/catalog/_document_default.atom.builder +2 -2
- data/app/views/catalog/_document_default.rss.builder +3 -3
- data/blacklight.gemspec +1 -1
- data/lib/blacklight.rb +10 -10
- data/lib/blacklight/bookmarks.rb +11 -10
- data/lib/blacklight/catalog.rb +7 -15
- data/lib/blacklight/catalog/component_configuration.rb +1 -1
- data/lib/blacklight/catalog/search_context.rb +1 -1
- data/lib/blacklight/configuration.rb +3 -3
- data/lib/blacklight/configuration/tool_config.rb +1 -1
- data/lib/blacklight/configuration/view_config.rb +1 -1
- data/lib/blacklight/controller.rb +0 -1
- data/lib/blacklight/document/active_model_shim.rb +1 -1
- data/lib/blacklight/document/dublin_core.rb +11 -6
- data/lib/blacklight/document/export.rb +5 -13
- data/lib/blacklight/document/schema_org.rb +1 -1
- data/lib/blacklight/document/semantic_fields.rb +9 -13
- data/lib/blacklight/document_presenter.rb +2 -2
- data/lib/blacklight/engine.rb +11 -0
- data/lib/blacklight/exceptions.rb +2 -2
- data/lib/blacklight/solr/document.rb +1 -2
- data/lib/blacklight/solr/document/more_like_this.rb +1 -1
- data/lib/blacklight/solr/document/schema_org.rb +1 -1
- data/lib/blacklight/solr/facet_paginator.rb +8 -5
- data/lib/blacklight/solr/request.rb +2 -3
- data/lib/blacklight/solr/search_builder_behavior.rb +14 -7
- data/lib/blacklight/solr_repository.rb +3 -3
- data/lib/blacklight/solr_response.rb +1 -1
- data/lib/blacklight/solr_response/group.rb +1 -1
- data/lib/blacklight/solr_response/group_response.rb +1 -1
- data/lib/blacklight/solr_response/more_like_this.rb +1 -1
- data/lib/blacklight/solr_response/pagination_methods.rb +1 -1
- data/lib/blacklight/solr_response/spelling.rb +1 -3
- data/lib/blacklight/token_based_user.rb +1 -3
- data/lib/blacklight/user.rb +1 -1
- data/lib/generators/blacklight/assets_generator.rb +22 -7
- data/lib/railties/blacklight.rake +5 -5
- data/spec/controllers/bookmarks_controller_spec.rb +1 -1
- data/spec/helpers/catalog_helper_spec.rb +3 -3
- data/spec/lib/blacklight/solr_response/facets_spec.rb +2 -2
- data/spec/lib/blacklight/solr_response/group_response_spec.rb +1 -1
- data/spec/lib/blacklight/solr_response/group_spec.rb +1 -1
- metadata +5 -2
@@ -2,7 +2,7 @@
|
|
2
2
|
module Blacklight
|
3
3
|
module Exceptions
|
4
4
|
|
5
|
-
class AccessDenied <
|
5
|
+
class AccessDenied < StandardError
|
6
6
|
end
|
7
7
|
|
8
8
|
# When a request for a single solr document by id
|
@@ -17,7 +17,7 @@ module Blacklight
|
|
17
17
|
class InvalidRequest < StandardError
|
18
18
|
end
|
19
19
|
|
20
|
-
class ExpiredSessionToken <
|
20
|
+
class ExpiredSessionToken < StandardError
|
21
21
|
end
|
22
22
|
|
23
23
|
class ECONNREFUSED < ::Errno::ECONNREFUSED; end
|
@@ -36,8 +36,7 @@ module Blacklight::Solr::Document
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def highlight_field k
|
39
|
-
|
40
|
-
response['highlighting'][self.id][k.to_s].map { |x| x.html_safe }
|
39
|
+
response['highlighting'][self.id][k.to_s].map(&:html_safe) if has_highlight_field? k
|
41
40
|
end
|
42
41
|
|
43
42
|
end
|
@@ -20,11 +20,14 @@ module Blacklight::Solr
|
|
20
20
|
# make sure they do NOT conflict with catalog/index request params,
|
21
21
|
# and need to make them accessible in a list so we can easily
|
22
22
|
# strip em out before redirecting to catalog/index.
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
23
|
+
mattr_accessor :request_keys do
|
24
|
+
{ sort: :'facet.sort', page: :'facet.page' }
|
25
|
+
end
|
26
|
+
|
27
|
+
if Rails.version < "4.1"
|
28
|
+
self.request_keys = { sort: :'facet.sort', page: :'facet.page' }
|
29
|
+
end
|
30
|
+
|
28
31
|
attr_reader :offset, :limit, :sort
|
29
32
|
|
30
33
|
# all_facet_values is a list of facet value objects returned by solr,
|
@@ -2,9 +2,8 @@ class Blacklight::Solr::InvalidParameter < ArgumentError; end
|
|
2
2
|
|
3
3
|
class Blacklight::Solr::Request < HashWithIndifferentAccess
|
4
4
|
|
5
|
-
SINGULAR_KEYS = %
|
6
|
-
|
7
|
-
ARRAY_KEYS = %W{facet.field facet.query facet.pivot fq hl.fl }
|
5
|
+
SINGULAR_KEYS = %w{facet fl q qt rows start spellcheck spellcheck.q sort per_page wt hl group defType}
|
6
|
+
ARRAY_KEYS = %w{facet.field facet.query facet.pivot fq hl.fl}
|
8
7
|
|
9
8
|
def initialize(constructor = {})
|
10
9
|
if constructor.is_a?(Hash)
|
@@ -112,9 +112,7 @@ module Blacklight::Solr
|
|
112
112
|
solr_parameters[:"facet.field"].concat( [blacklight_params["facet.field"], blacklight_params["facets"]].flatten.compact ).uniq!
|
113
113
|
end
|
114
114
|
|
115
|
-
|
116
|
-
facet.include_in_request || (facet.include_in_request.nil? && blacklight_config.add_facet_fields_to_solr_request)
|
117
|
-
}.each do |field_name, facet|
|
115
|
+
facet_fields_to_include_in_request.each do |field_name, facet|
|
118
116
|
solr_parameters[:facet] ||= true
|
119
117
|
|
120
118
|
case
|
@@ -243,17 +241,20 @@ module Blacklight::Solr
|
|
243
241
|
local_params = []
|
244
242
|
local_params << "tag=#{facet_config.tag}" if facet_config and facet_config.tag
|
245
243
|
|
246
|
-
prefix = ""
|
247
244
|
prefix = "{!#{local_params.join(" ")}}" unless local_params.empty?
|
248
245
|
|
249
|
-
|
246
|
+
case
|
250
247
|
when (facet_config and facet_config.query)
|
251
248
|
facet_config.query[value][:fq]
|
252
249
|
when (facet_config and facet_config.date)
|
253
250
|
# in solr 3.2+, this could be replaced by a !term query
|
254
251
|
"#{prefix}#{solr_field}:#{RSolr.solr_escape(value)}"
|
255
|
-
when (value.is_a?(DateTime) or value.is_a?(
|
256
|
-
"#{prefix}#{solr_field}:#{RSolr.solr_escape(value.
|
252
|
+
when (value.is_a?(DateTime) or value.is_a?(Time))
|
253
|
+
"#{prefix}#{solr_field}:#{RSolr.solr_escape(value.utc.strftime("%Y-%m-%dT%H:%M:%SZ"))}"
|
254
|
+
when value.is_a?(Date)
|
255
|
+
# rubocop:disable Rails/Date
|
256
|
+
"#{prefix}#{solr_field}:#{RSolr.solr_escape(value.to_time(:local).strftime("%Y-%m-%dT%H:%M:%SZ"))}"
|
257
|
+
# rubocop:enable Rails/Date
|
257
258
|
when (value.is_a?(TrueClass) or value.is_a?(FalseClass) or value == 'true' or value == 'false'),
|
258
259
|
(value.is_a?(Integer) or (value.to_i.to_s == value if value.respond_to? :to_i)),
|
259
260
|
(value.is_a?(Float) or (value.to_f.to_s == value if value.respond_to? :to_f))
|
@@ -270,5 +271,11 @@ module Blacklight::Solr
|
|
270
271
|
def grouped_key_for_results
|
271
272
|
blacklight_config.index.group
|
272
273
|
end
|
274
|
+
|
275
|
+
def facet_fields_to_include_in_request
|
276
|
+
blacklight_config.facet_fields.select do |field_name,facet|
|
277
|
+
facet.include_in_request || (facet.include_in_request.nil? && blacklight_config.add_facet_fields_to_solr_request)
|
278
|
+
end
|
279
|
+
end
|
273
280
|
end
|
274
281
|
end
|
@@ -41,16 +41,16 @@ module Blacklight
|
|
41
41
|
def send_and_receive(path, solr_params = {})
|
42
42
|
benchmark("Solr fetch", level: :debug) do
|
43
43
|
key = blacklight_config.http_method == :post ? :data : :params
|
44
|
-
res = connection.send_and_receive(path, {key=>solr_params.to_hash, method:blacklight_config.http_method})
|
44
|
+
res = connection.send_and_receive(path, {key=>solr_params.to_hash, method: blacklight_config.http_method})
|
45
45
|
|
46
46
|
solr_response = blacklight_config.response_model.new(res, solr_params, document_model: blacklight_config.document_model, blacklight_config: blacklight_config)
|
47
47
|
|
48
|
-
Blacklight.logger.debug("Solr query: #{solr_params.inspect}")
|
48
|
+
Blacklight.logger.debug("Solr query: #{blacklight_config.http_method} #{path} #{solr_params.to_hash.inspect}")
|
49
49
|
Blacklight.logger.debug("Solr response: #{solr_response.inspect}") if defined?(::BLACKLIGHT_VERBOSE_LOGGING) and ::BLACKLIGHT_VERBOSE_LOGGING
|
50
50
|
solr_response
|
51
51
|
end
|
52
52
|
rescue Errno::ECONNREFUSED => e
|
53
|
-
raise Blacklight::Exceptions::ECONNREFUSED.new("Unable to connect to Solr instance using #{connection.inspect}")
|
53
|
+
raise Blacklight::Exceptions::ECONNREFUSED.new("Unable to connect to Solr instance using #{connection.inspect}: #{e.inspect}")
|
54
54
|
rescue RSolr::Error::Http => e
|
55
55
|
raise Blacklight::Exceptions::InvalidRequest.new(e.message)
|
56
56
|
end
|
@@ -57,10 +57,9 @@ module Blacklight::SolrResponse::Spelling
|
|
57
57
|
# origFreq =>
|
58
58
|
# suggestion => [{ frequency =>, word => }] # for extended results
|
59
59
|
# suggestion => ['word'] # for non-extended results
|
60
|
-
origFreq = term_info['origFreq']
|
61
60
|
if suggestions.index("correctlySpelled")
|
62
61
|
word_suggestions << term_info['suggestion'].map do |suggestion|
|
63
|
-
suggestion['word'] if suggestion['freq'] > origFreq
|
62
|
+
suggestion['word'] if suggestion['freq'] > term_info['origFreq']
|
64
63
|
end
|
65
64
|
else
|
66
65
|
# only extended suggestions have frequency so we just return all suggestions
|
@@ -89,4 +88,3 @@ module Blacklight::SolrResponse::Spelling
|
|
89
88
|
end
|
90
89
|
|
91
90
|
end
|
92
|
-
|
@@ -20,8 +20,6 @@ module Blacklight::TokenBasedUser
|
|
20
20
|
@token_user ||= if params[:encrypted_user_id]
|
21
21
|
user_id = decrypt_user_id params[:encrypted_user_id]
|
22
22
|
User.find(user_id)
|
23
|
-
else
|
24
|
-
nil
|
25
23
|
end
|
26
24
|
end
|
27
25
|
|
@@ -39,7 +37,7 @@ module Blacklight::TokenBasedUser
|
|
39
37
|
# Used for #export action with encrypted user_id, available
|
40
38
|
# as a helper method for views.
|
41
39
|
def encrypt_user_id(user_id)
|
42
|
-
message_encryptor.encrypt_and_sign([user_id, Time.now])
|
40
|
+
message_encryptor.encrypt_and_sign([user_id, Time.zone.now])
|
43
41
|
end
|
44
42
|
|
45
43
|
##
|
data/lib/blacklight/user.rb
CHANGED
@@ -17,7 +17,7 @@ module Blacklight::User
|
|
17
17
|
|
18
18
|
def bookmarks_for_documents documents = []
|
19
19
|
if documents.length > 0
|
20
|
-
bookmarks.where(document_type: documents.first.class.base_class, document_id: documents.map
|
20
|
+
bookmarks.where(document_type: documents.first.class.base_class, document_id: documents.map(&:id))
|
21
21
|
else
|
22
22
|
[]
|
23
23
|
end
|
@@ -6,17 +6,32 @@ module Blacklight
|
|
6
6
|
def assets
|
7
7
|
copy_file "blacklight.css.scss", "app/assets/stylesheets/blacklight.css.scss"
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
return if has_blacklight_assets?
|
10
|
+
|
11
|
+
marker = if turbolinks?
|
12
|
+
'//= require turbolinks'
|
13
|
+
else
|
14
|
+
'//= require jquery_ujs'
|
15
|
+
end
|
16
|
+
|
17
|
+
insert_into_file "app/assets/javascripts/application.js", :after => marker do
|
18
|
+
<<-EOF
|
14
19
|
//
|
15
20
|
// Required by Blacklight
|
16
|
-
//= require blacklight/blacklight
|
17
|
-
|
21
|
+
//= require blacklight/blacklight
|
22
|
+
EOF
|
18
23
|
end
|
19
24
|
|
20
25
|
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def turbolinks?
|
30
|
+
@turbolinks ||= IO.read("app/assets/javascripts/application.js").include?('turbolinks')
|
31
|
+
end
|
32
|
+
|
33
|
+
def has_blacklight_assets?
|
34
|
+
IO.read("app/assets/javascripts/application.js").include?('blacklight/blacklight')
|
35
|
+
end
|
21
36
|
end
|
22
37
|
end
|
@@ -41,7 +41,7 @@ namespace :blacklight do
|
|
41
41
|
response = conn.send_and_receive 'admin/ping', {}
|
42
42
|
puts response['status']
|
43
43
|
errors += 1 unless response['status'] == "OK"
|
44
|
-
rescue
|
44
|
+
rescue => e
|
45
45
|
errors += 1
|
46
46
|
puts e.to_s
|
47
47
|
end
|
@@ -55,7 +55,7 @@ namespace :blacklight do
|
|
55
55
|
controller = args[:controller_name].constantize.new if args[:controller_name]
|
56
56
|
controller ||= CatalogController.new
|
57
57
|
|
58
|
-
puts "[#{controller.class
|
58
|
+
puts "[#{controller.class}]"
|
59
59
|
|
60
60
|
print " - find: "
|
61
61
|
|
@@ -73,7 +73,7 @@ namespace :blacklight do
|
|
73
73
|
puts "\tdoc count: #{response.docs.length}"
|
74
74
|
puts "\tfacet fields: #{response.facets.length}"
|
75
75
|
end
|
76
|
-
rescue
|
76
|
+
rescue => e
|
77
77
|
errors += 1
|
78
78
|
puts e.to_s
|
79
79
|
end
|
@@ -95,7 +95,7 @@ namespace :blacklight do
|
|
95
95
|
puts "\tdoc count: #{docs.length}"
|
96
96
|
puts "\tfacet fields: #{response.facets.length}"
|
97
97
|
end
|
98
|
-
rescue
|
98
|
+
rescue => e
|
99
99
|
errors += 1
|
100
100
|
puts e.to_s
|
101
101
|
end
|
@@ -115,7 +115,7 @@ namespace :blacklight do
|
|
115
115
|
if verbose
|
116
116
|
puts "\tstatus: #{response.header['status']}"
|
117
117
|
end
|
118
|
-
rescue
|
118
|
+
rescue => e
|
119
119
|
errors += 1
|
120
120
|
puts e.to_s
|
121
121
|
end
|
@@ -36,7 +36,7 @@ describe BookmarksController do
|
|
36
36
|
it "has a 500 status code when delete is not success" do
|
37
37
|
bm = double(Bookmark)
|
38
38
|
allow(@controller).to receive_message_chain(:current_or_guest_user, :existing_bookmark_for).and_return(bm)
|
39
|
-
allow(@controller).to receive_message_chain(:current_or_guest_user, :bookmarks, :
|
39
|
+
allow(@controller).to receive_message_chain(:current_or_guest_user, :bookmarks, :find_by).and_return(double('bookmark', delete: nil, destroyed?: false))
|
40
40
|
|
41
41
|
xhr :delete, :destroy, :id => 'pleasekillme', :format => :js
|
42
42
|
|
@@ -305,7 +305,7 @@ describe CatalogHelper do
|
|
305
305
|
end
|
306
306
|
end
|
307
307
|
|
308
|
-
describe "#
|
308
|
+
describe "#bookmarked?" do
|
309
309
|
|
310
310
|
let(:bookmark) { Bookmark.new document: bookmarked_document }
|
311
311
|
let(:bookmarked_document) { SolrDocument.new(id: 'a') }
|
@@ -315,11 +315,11 @@ describe CatalogHelper do
|
|
315
315
|
end
|
316
316
|
|
317
317
|
it "should be bookmarked if the document is in the bookmarks" do
|
318
|
-
expect(helper.
|
318
|
+
expect(helper.bookmarked?(bookmarked_document)).to eq true
|
319
319
|
end
|
320
320
|
|
321
321
|
it "should not be bookmarked if the document is not listed in the bookmarks" do
|
322
|
-
expect(helper.
|
322
|
+
expect(helper.bookmarked?(SolrDocument.new(id: 'b'))).to eq false
|
323
323
|
end
|
324
324
|
end
|
325
325
|
|
@@ -124,7 +124,7 @@ describe Blacklight::SolrResponse::Facets do
|
|
124
124
|
subject { Blacklight::SolrResponse.new(response, {}) }
|
125
125
|
|
126
126
|
it "should mark the facet.missing field with a human-readable label and fq" do
|
127
|
-
missing = subject.aggregations["some_field"].items.
|
127
|
+
missing = subject.aggregations["some_field"].items.find { |i| i.value.nil? }
|
128
128
|
|
129
129
|
expect(missing.label).to eq "[Missing]"
|
130
130
|
expect(missing.fq).to eq "-some_field:[* TO *]"
|
@@ -169,7 +169,7 @@ describe Blacklight::SolrResponse::Facets do
|
|
169
169
|
expect(field.items.size).to eq 2
|
170
170
|
expect(field.items.map { |x| x.value }).to_not include 'field:not_appearing_in_the_config'
|
171
171
|
|
172
|
-
facet_item = field.items.
|
172
|
+
facet_item = field.items.find { |x| x.value == 'a_simple_query' }
|
173
173
|
|
174
174
|
expect(facet_item.value).to eq 'a_simple_query'
|
175
175
|
expect(facet_item.hits).to eq 10
|
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: 5.13.
|
4
|
+
version: 5.13.1
|
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-04-
|
20
|
+
date: 2015-04-16 00:00:00.000000000 Z
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
23
23
|
name: rails
|
@@ -246,6 +246,9 @@ extra_rdoc_files: []
|
|
246
246
|
files:
|
247
247
|
- ".gitignore"
|
248
248
|
- ".rspec"
|
249
|
+
- ".rubocop.yml"
|
250
|
+
- ".rubocop_hound.yml"
|
251
|
+
- ".rubocop_todo.yml"
|
249
252
|
- ".travis.yml"
|
250
253
|
- ".yardopts"
|
251
254
|
- Gemfile
|