blacklight 5.13.1 → 5.14.0
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/.hound.yml +2 -0
- data/.rubocop_todo.yml +5 -0
- data/VERSION +1 -1
- data/app/assets/stylesheets/blacklight/_header.scss +1 -2
- data/app/helpers/blacklight/facets_helper_behavior.rb +16 -2
- data/app/helpers/blacklight/url_helper_behavior.rb +5 -2
- data/app/views/catalog/_facet_pagination.html.erb +2 -2
- data/config/locales/blacklight.fr.yml +0 -10
- data/config/locales/blacklight.it.yml +226 -0
- data/config/locales/blacklight.pt-BR.yml +0 -22
- data/lib/blacklight/configuration.rb +10 -5
- data/lib/blacklight/document.rb +2 -0
- data/lib/blacklight/document/cache_key.rb +23 -0
- data/lib/blacklight/facet.rb +13 -16
- data/lib/blacklight/rails/routes.rb +1 -1
- data/lib/blacklight/request_builders.rb +6 -30
- data/lib/blacklight/search_builder.rb +13 -0
- data/lib/blacklight/search_helper.rb +2 -2
- data/lib/blacklight/solr.rb +0 -2
- data/lib/blacklight/solr/search_builder.rb +2 -1
- data/lib/blacklight/solr/search_builder_behavior.rb +42 -1
- data/lib/blacklight/solr_response/facets.rb +2 -1
- data/spec/helpers/facets_helper_spec.rb +32 -9
- data/spec/lib/blacklight/configuration_spec.rb +30 -7
- data/spec/lib/blacklight/document/cache_key_spec.rb +48 -0
- data/spec/lib/blacklight/facet_spec.rb +1 -1
- data/spec/lib/blacklight/search_builder_spec.rb +11 -1
- data/spec/lib/blacklight/search_helper_spec.rb +0 -72
- data/spec/lib/blacklight/solr/search_builder_spec.rb +65 -1
- data/spec/views/catalog/_constraints_element.html.erb_spec.rb +0 -11
- metadata +7 -10
- data/app/assets/images/blacklight/bg.png +0 -0
- data/app/assets/images/blacklight/border.png +0 -0
- data/app/assets/images/blacklight/bul_sq_gry.gif +0 -0
- data/app/assets/images/blacklight/checkmark.gif +0 -0
- data/app/assets/images/blacklight/magnifying_glass.gif +0 -0
- data/app/assets/images/blacklight/remove.gif +0 -0
- data/app/assets/images/blacklight/separator.gif +0 -0
- data/app/assets/images/blacklight/start_over.gif +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 155a3451e8e922400f8c30a67dd298471dd7c176
|
4
|
+
data.tar.gz: 70525a0b4e6393a968af18a813f05221b691d921
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 90ce5a38742b9a880f307faaef78687bfa169cbd016af562d9824c84652d883bc19aaf59b6ed2333ea4ccdfbcf98937e394592992863bd34a20036346c942e2c
|
7
|
+
data.tar.gz: dbe00471126594db517968998e5c705bb434ae5b1f638e460c74e9ce4f36724e275411ac8ee27d43edaa808ec8e37efecd6d369c7d2e9a069f31126c94bc8205
|
data/.hound.yml
ADDED
data/.rubocop_todo.yml
CHANGED
@@ -24,6 +24,11 @@ Lint/UnusedMethodArgument:
|
|
24
24
|
Lint/UselessAssignment:
|
25
25
|
Enabled: false
|
26
26
|
|
27
|
+
# Offense count: 10
|
28
|
+
# Configuration parameters: CountComments.
|
29
|
+
Metrics/ModuleLength:
|
30
|
+
Max: 212
|
31
|
+
|
27
32
|
# Offense count: 2
|
28
33
|
# Cop supports --auto-correct.
|
29
34
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
5.
|
1
|
+
5.14.0
|
@@ -29,8 +29,7 @@
|
|
29
29
|
border: 0;
|
30
30
|
}
|
31
31
|
.submit-search-text {
|
32
|
-
// hide 'search' label at very small screens
|
33
|
-
// icon should still be there.
|
32
|
+
// hide 'search' label at very small screens
|
34
33
|
@media screen and (max-width: $screen-xs-min ) {
|
35
34
|
// copied from .sr-only, sadly can't seem to use @extend in a media
|
36
35
|
// query like this, have to copy.
|
@@ -9,7 +9,7 @@ module Blacklight::FacetsHelperBehavior
|
|
9
9
|
# @param [Hash] options
|
10
10
|
# @return [Boolean]
|
11
11
|
def has_facet_values? fields = facet_field_names, options = {}
|
12
|
-
facets_from_request(fields).any? { |display_facet| !display_facet.items.empty? }
|
12
|
+
facets_from_request(fields).any? { |display_facet| !display_facet.items.empty? && should_render_facet?(display_facet) }
|
13
13
|
end
|
14
14
|
|
15
15
|
##
|
@@ -123,12 +123,26 @@ module Blacklight::FacetsHelperBehavior
|
|
123
123
|
# @option options [Boolean] :suppress_link display the facet, but don't link to it
|
124
124
|
# @return [String]
|
125
125
|
def render_facet_value(facet_field, item, options ={})
|
126
|
-
path =
|
126
|
+
path = path_for_facet(facet_field, item)
|
127
127
|
content_tag(:span, :class => "facet-label") do
|
128
128
|
link_to_unless(options[:suppress_link], facet_display_value(facet_field, item), path, :class=>"facet_select")
|
129
129
|
end + render_facet_count(item.hits)
|
130
130
|
end
|
131
131
|
|
132
|
+
##
|
133
|
+
# Where should this facet link to?
|
134
|
+
# @param [Blacklight::SolrResponse::Facets::FacetField]
|
135
|
+
# @param [String] facet item
|
136
|
+
# @return [String]
|
137
|
+
def path_for_facet(facet_field, item)
|
138
|
+
facet_config = facet_configuration_for_field(facet_field)
|
139
|
+
if facet_config.url_method
|
140
|
+
path = send(facet_config.url_method, facet_field, item)
|
141
|
+
else
|
142
|
+
path = search_action_path(add_facet_params_and_redirect(facet_field, item))
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
132
146
|
##
|
133
147
|
# Standard display of a SELECTED facet value (e.g. without a link and with a remove button)
|
134
148
|
# @params (see #render_facet_value)
|
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'deprecation'
|
2
|
+
##
|
3
|
+
# URL helper methods
|
2
4
|
module Blacklight::UrlHelperBehavior
|
3
5
|
extend Deprecation
|
4
6
|
self.deprecation_horizon = 'blacklight 6.0'
|
@@ -255,9 +257,10 @@ module Blacklight::UrlHelperBehavior
|
|
255
257
|
|
256
258
|
# Delete any request params from facet-specific action, needed
|
257
259
|
# to redir to index action properly.
|
258
|
-
|
260
|
+
request_keys = blacklight_config.facet_paginator_class.request_keys
|
261
|
+
new_params.except! *request_keys.values
|
259
262
|
|
260
|
-
new_params
|
263
|
+
new_params
|
261
264
|
end
|
262
265
|
|
263
266
|
# copies the current params (or whatever is passed in as the 3rd arg)
|
@@ -1,8 +1,8 @@
|
|
1
1
|
<div class="prev_next_links btn-group pull-left">
|
2
|
-
<%= link_to_previous_page @pagination, raw(t('views.pagination.previous')), :params => params, :param_name =>
|
2
|
+
<%= link_to_previous_page @pagination, raw(t('views.pagination.previous')), :params => params, :param_name => blacklight_config.facet_paginator_class.request_keys[:page], :class => 'btn btn-link', :data => {:ajax_modal => "preserve"} do %>
|
3
3
|
<span class="disabled btn btn-disabled"><%= raw(t('views.pagination.previous')) %></span>
|
4
4
|
<% end %>
|
5
|
-
<%= link_to_next_page @pagination, raw(t('views.pagination.next')), :params => params, :param_name =>
|
5
|
+
<%= link_to_next_page @pagination, raw(t('views.pagination.next')), :params => params, :param_name => blacklight_config.facet_paginator_class.request_keys[:page], :class => 'btn btn-link', :data => {:ajax_modal => "preserve"} do %>
|
6
6
|
|
7
7
|
<span class="disabled btn btn-disabled"><%= raw(t('views.pagination.next')) %></span>
|
8
8
|
<% end %>
|
@@ -48,16 +48,6 @@ fr:
|
|
48
48
|
list_title: 'Vos favoris'
|
49
49
|
delete: 'Supprimer'
|
50
50
|
|
51
|
-
folder:
|
52
|
-
title: 'Panier'
|
53
|
-
add:
|
54
|
-
success: '%{title} a bien été sélectionné.'
|
55
|
-
remove:
|
56
|
-
success: '%{title} a bien été supprimé.'
|
57
|
-
clear:
|
58
|
-
success: 'Panier vide.'
|
59
|
-
no_folder: 'Votre panier est vide'
|
60
|
-
|
61
51
|
saved_searches:
|
62
52
|
add:
|
63
53
|
success: 'Votre recherche a bien été sauvegardée.'
|
@@ -0,0 +1,226 @@
|
|
1
|
+
it:
|
2
|
+
views:
|
3
|
+
pagination:
|
4
|
+
first: '« Pagina iniziale'
|
5
|
+
last: 'Pagina finale »'
|
6
|
+
previous: '« Pagina precedente'
|
7
|
+
next: 'Pagina successiva »'
|
8
|
+
truncate: '…'
|
9
|
+
|
10
|
+
pagination_compact:
|
11
|
+
previous: '« Pagina precedente'
|
12
|
+
next: 'Pagina successiva »'
|
13
|
+
|
14
|
+
blacklight:
|
15
|
+
application_name: 'Blacklight'
|
16
|
+
|
17
|
+
header_links:
|
18
|
+
login: 'Login'
|
19
|
+
logout: 'Log out'
|
20
|
+
bookmarks: 'Preferiti'
|
21
|
+
saved_searches: 'Ricerche salvate'
|
22
|
+
search_history: 'Ricerche effettuate'
|
23
|
+
|
24
|
+
welcome: 'Benvenuti!'
|
25
|
+
and: 'e'
|
26
|
+
or: 'o'
|
27
|
+
|
28
|
+
bookmarks:
|
29
|
+
title: 'Preferiti'
|
30
|
+
no_bookmarks: 'Non è stato salvato nessun preferito.'
|
31
|
+
add:
|
32
|
+
button: 'Preferiti'
|
33
|
+
success:
|
34
|
+
one: 'Pagina aggiunta a preferiti.'
|
35
|
+
other: 'Pagine aggiunte a preferiti.'
|
36
|
+
failure: 'Si è verificato un errore nel salvare i preferiti.'
|
37
|
+
remove:
|
38
|
+
button: 'Togli la pagina dai preferiti'
|
39
|
+
success: 'La pagina è stata tolta dai preferiti.'
|
40
|
+
failure: 'Si è verificato un errore nel togliere la pagina dai preferiti.'
|
41
|
+
action_confirm: 'Vuoi togliere questa pagina dai preferiti?'
|
42
|
+
clear:
|
43
|
+
action_title: 'Cancella tutti i preferiti'
|
44
|
+
action_confirm: 'Vuoi cancellare tutti i preferiti?'
|
45
|
+
success: 'Tutti i preferiti sono stati cancellati.'
|
46
|
+
failure: 'Si è verificato un errore nel cancellare i preferiti.'
|
47
|
+
need_login: 'Effettuare il login per gestire e visualizzare i preferiti.'
|
48
|
+
list_title: 'Preferiti'
|
49
|
+
delete: 'Togli'
|
50
|
+
|
51
|
+
saved_searches:
|
52
|
+
add:
|
53
|
+
success: 'Ricerca salvata.'
|
54
|
+
failure: 'Si è verificato un errore nel salvare la ricerca.'
|
55
|
+
remove:
|
56
|
+
success: 'La ricerca è stata tolta dalla lista.'
|
57
|
+
failure: 'Si è verificato un errore nel togliere la ricerca dalla lista.'
|
58
|
+
clear:
|
59
|
+
action_title: 'Cancella tutte le ricerche salvate'
|
60
|
+
action_confirm: 'Vuoi cancellare tutte le ricerche salvate?'
|
61
|
+
success: 'Tutte le ricerche salvate sono state cancellate.'
|
62
|
+
failure: 'Si è verificato un errore nel cancellare le ricerche salvate.'
|
63
|
+
title: 'Ricerche salvate'
|
64
|
+
need_login: 'Effettuare il login per gestire e visualizzare le ricerche salvate.'
|
65
|
+
no_searches: 'Non è stata salvata nessuna ricerca.'
|
66
|
+
list_title: 'Ricerche salvate'
|
67
|
+
delete: 'cancella'
|
68
|
+
|
69
|
+
search_history:
|
70
|
+
clear:
|
71
|
+
action_title: 'Cancella le ricerche effettuate'
|
72
|
+
action_confirm: 'Vuoi cancellare le ricerche effettuate?'
|
73
|
+
success: 'Le ricerche effettuate sono state cancellate.'
|
74
|
+
failure: 'Si è verificato un errore nel cancellare le ricerche effettuate.'
|
75
|
+
title: 'Ricerche effettuate'
|
76
|
+
no_history: 'Non è stata effettuata nessuna ricerca'
|
77
|
+
recent: 'Ricerche effettuate'
|
78
|
+
forget: 'dimentica'
|
79
|
+
save: 'salva'
|
80
|
+
|
81
|
+
tools:
|
82
|
+
title: 'Strumenti'
|
83
|
+
citation: 'Cita'
|
84
|
+
endnote: 'Esporta in EndNote'
|
85
|
+
refworks: 'Esporta in Refworks'
|
86
|
+
email: 'Invia per e-mail'
|
87
|
+
sms: 'Invia per SMS'
|
88
|
+
clear: 'Cancella'
|
89
|
+
|
90
|
+
citation:
|
91
|
+
mla: 'MLA'
|
92
|
+
apa: 'APA'
|
93
|
+
chicago: 'Chicago'
|
94
|
+
|
95
|
+
email:
|
96
|
+
form:
|
97
|
+
title: 'Invia per e-mail'
|
98
|
+
to: 'E-mail:'
|
99
|
+
message: 'Messaggio:'
|
100
|
+
submit: 'Invia'
|
101
|
+
text:
|
102
|
+
title: 'Titolo: %{value}'
|
103
|
+
author: 'Autore: %{value}'
|
104
|
+
format: 'Formato: %{value}'
|
105
|
+
language: 'Lingua: %{value}'
|
106
|
+
subject:
|
107
|
+
one: 'Numero di scheda: %{title}'
|
108
|
+
other: 'Numeri di scheda'
|
109
|
+
url: 'URL: %{url}'
|
110
|
+
message: 'Messaggio: %{message}'
|
111
|
+
|
112
|
+
success: "Messaggio inviato"
|
113
|
+
|
114
|
+
errors:
|
115
|
+
to:
|
116
|
+
invalid: "L'indirizzo e-mail inserito non è valido"
|
117
|
+
blank: 'Inserisci un destinatario per inviare il messaggio'
|
118
|
+
sms:
|
119
|
+
form:
|
120
|
+
title: 'Invia per SMS'
|
121
|
+
to: 'Numero di telefono:'
|
122
|
+
carrier: 'Operatore'
|
123
|
+
carrier_prompt: "Indicare l'operatore"
|
124
|
+
submit: 'Inviare'
|
125
|
+
text:
|
126
|
+
title: '%{value}'
|
127
|
+
author: ' da %{value}'
|
128
|
+
url: 'Link: %{url}'
|
129
|
+
success: "SMS inviato"
|
130
|
+
errors:
|
131
|
+
to:
|
132
|
+
invalid: 'Inserisci un numero telefonico valido di 10 cifre'
|
133
|
+
blank: "Inserisci il numero di telefono del destinarario per inviare il messaggio"
|
134
|
+
carrier:
|
135
|
+
blank: 'Si richiede la scelta di un operatore'
|
136
|
+
invalid: "L'operatore non è valido"
|
137
|
+
|
138
|
+
back_to_search: 'Torna alla ricerca'
|
139
|
+
back_to_bookmarks: 'Torna ai preferiti'
|
140
|
+
|
141
|
+
search:
|
142
|
+
title: 'Risultati della ricerca per %{application_name}'
|
143
|
+
search_results_header: 'Ricerca'
|
144
|
+
search_results: 'Risultati della ricerca'
|
145
|
+
errors:
|
146
|
+
request_error: "La richiesta non è comprensibile."
|
147
|
+
invalid_solr_id: "Il numero di scheda richiesto non esiste."
|
148
|
+
per_page:
|
149
|
+
label: '%{count}<span class="sr-only"> per pagina</span>'
|
150
|
+
button_label: '%{count} per pagina'
|
151
|
+
title: 'Risultati per pagina'
|
152
|
+
submit: 'Aggiorna'
|
153
|
+
sort:
|
154
|
+
label: 'Ordina per %{field}'
|
155
|
+
submit: 'Ordina i risultati'
|
156
|
+
form:
|
157
|
+
search_field:
|
158
|
+
label: 'Cerca in'
|
159
|
+
title: 'Opzioni di ricerca mirate'
|
160
|
+
post_label: 'per'
|
161
|
+
# i18n key 'q' is deprecated and will be removed in Blacklight 6.0, use 'search.label' and 'search.placeholder'
|
162
|
+
q: 'Ricerca in corso...'
|
163
|
+
search:
|
164
|
+
label: 'cerca per'
|
165
|
+
placeholder: 'Ricerca in corso...'
|
166
|
+
submit: 'Avvia la ricerca'
|
167
|
+
pagination:
|
168
|
+
title: 'Navigazione nei risultati'
|
169
|
+
pagination_info:
|
170
|
+
no_items_found: 'Nessun %{entry_name} trovano'
|
171
|
+
single_item_found: '<strong>1</strong> %{entry_name} trovato'
|
172
|
+
pages:
|
173
|
+
one: '<strong>%{start_num}</strong> - <strong>%{end_num}</strong> di <strong>%{total_num}</strong>'
|
174
|
+
other: '<strong>%{start_num}</strong> - <strong>%{end_num}</strong> di <strong>%{total_num}</strong>'
|
175
|
+
entry_pagination_info:
|
176
|
+
one: '<strong>1 di 1</strong>'
|
177
|
+
other: '<strong>%{current}</strong> di <strong>%{total}</strong>'
|
178
|
+
documents:
|
179
|
+
counter: '%{counter}. '
|
180
|
+
facets:
|
181
|
+
title: 'Affina la ricerca'
|
182
|
+
sort:
|
183
|
+
count: 'Ordina per numero'
|
184
|
+
index: 'Ordina A-Z'
|
185
|
+
count: '%{number}'
|
186
|
+
# i18n key 'more' is deprecated and will be removed in Blacklight 6.0
|
187
|
+
more: 'altri »'
|
188
|
+
more_html: 'altri <span class="sr-only">%{field_name}</span> »'
|
189
|
+
selected:
|
190
|
+
remove: '[cancella]'
|
191
|
+
group:
|
192
|
+
more: 'altri »'
|
193
|
+
filters:
|
194
|
+
title: 'Hai cercato per:'
|
195
|
+
label: '%{label}:'
|
196
|
+
remove:
|
197
|
+
value: 'Cancella il filtro %{value}'
|
198
|
+
label_value: 'Cancella il filtro %{label}: %{value}'
|
199
|
+
start_over: 'Nuova ricerca'
|
200
|
+
index:
|
201
|
+
label: '%{label}:'
|
202
|
+
show:
|
203
|
+
title: '%{document_title} - %{application_name}'
|
204
|
+
label: '%{label}:'
|
205
|
+
rss_feed: 'RSS per i risultati'
|
206
|
+
atom_feed: 'Atom per i risultati'
|
207
|
+
fields:
|
208
|
+
default: 'Parola chiave'
|
209
|
+
bookmarks:
|
210
|
+
present: "Nei preferiti"
|
211
|
+
absent: "Non fra i preferiti"
|
212
|
+
inprogress: "Salvataggio in corso..."
|
213
|
+
zero_results:
|
214
|
+
title: "La ricerca non ha prodotto alcun risultato"
|
215
|
+
modify_search: "Modifica la ricerca"
|
216
|
+
use_fewer_keywords: "Usa meno parole chiave per iniziare, poi raffina la ricerca con i links sulla sinistra."
|
217
|
+
search_fields: "hai cercato in %{search_fields}"
|
218
|
+
search_everything: "prova a cercare in tutti i campi"
|
219
|
+
view_title: "Visualizza i risultati come: "
|
220
|
+
view:
|
221
|
+
list: "Lista"
|
222
|
+
|
223
|
+
entry_name:
|
224
|
+
default: 'termine di ricerca'
|
225
|
+
|
226
|
+
did_you_mean: 'Intendevi digitare: %{options}?'
|
@@ -1,12 +1,4 @@
|
|
1
1
|
pt-BR:
|
2
|
-
active_record:
|
3
|
-
models:
|
4
|
-
feedback: 'Feedback'
|
5
|
-
attributes:
|
6
|
-
feedback:
|
7
|
-
name: 'Seu Nome'
|
8
|
-
email: 'Seu Email'
|
9
|
-
message: 'Sua Mensagem'
|
10
2
|
views:
|
11
3
|
pagination:
|
12
4
|
first: '« primeiro'
|
@@ -34,9 +26,6 @@ pt-BR:
|
|
34
26
|
or: 'ou'
|
35
27
|
|
36
28
|
bookmarks:
|
37
|
-
collection:
|
38
|
-
add:
|
39
|
-
button: 'Adicionar aos Favoritos'
|
40
29
|
title: 'Favoritos'
|
41
30
|
no_bookmarks: 'Você não salvou nenhum Favorito'
|
42
31
|
add:
|
@@ -58,17 +47,6 @@ pt-BR:
|
|
58
47
|
need_login: 'Faça o login para ver ou modificar seus favoritos.'
|
59
48
|
list_title: 'Seus Favoritos'
|
60
49
|
delete: 'Excluir'
|
61
|
-
|
62
|
-
feedback:
|
63
|
-
valid_name: 'Preencha o Nome'
|
64
|
-
valid_email: 'Verifique seu endereço de email'
|
65
|
-
need_message: 'Escreva uma mensagem'
|
66
|
-
submit: 'Enviar!'
|
67
|
-
errors:
|
68
|
-
title: 'Por favor corrija os seguintes erros no formulário:'
|
69
|
-
complete:
|
70
|
-
title: 'Obrigado por seu contato'
|
71
|
-
|
72
50
|
saved_searches:
|
73
51
|
add:
|
74
52
|
success: 'Sua busca foi salva.'
|
@@ -76,6 +76,8 @@ module Blacklight
|
|
76
76
|
document_model: nil,
|
77
77
|
# document presenter class used by helpers and views
|
78
78
|
document_presenter_class: nil,
|
79
|
+
# Class for paginating long lists of facet fields
|
80
|
+
facet_paginator_class: nil,
|
79
81
|
# repository connection configuration
|
80
82
|
connection_config: nil,
|
81
83
|
##
|
@@ -228,6 +230,10 @@ module Blacklight
|
|
228
230
|
Blacklight::Solr::SearchBuilder
|
229
231
|
end
|
230
232
|
|
233
|
+
def facet_paginator_class
|
234
|
+
super || Blacklight::Solr::FacetPaginator
|
235
|
+
end
|
236
|
+
|
231
237
|
def default_per_page
|
232
238
|
super || per_page.first
|
233
239
|
end
|
@@ -334,11 +340,10 @@ module Blacklight
|
|
334
340
|
# too. These model names should not be `#dup`'ed or we might break ActiveModel::Naming.
|
335
341
|
def deep_copy
|
336
342
|
deep_dup.tap do |copy|
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
copy.search_builder_class = self.search_builder_class
|
343
|
+
%w(repository_class response_model document_model document_presenter_class search_builder_class facet_paginator_class).each do |klass|
|
344
|
+
# Don't copy if nil, so as not to prematurely autoload default classes
|
345
|
+
copy.send("#{klass}=", send(klass)) unless fetch(klass.to_sym, nil).nil?
|
346
|
+
end
|
342
347
|
end
|
343
348
|
end
|
344
349
|
alias_method :inheritable_copy, :deep_copy
|
data/lib/blacklight/document.rb
CHANGED
@@ -15,6 +15,7 @@
|
|
15
15
|
module Blacklight::Document
|
16
16
|
autoload :ActiveModelShim, 'blacklight/document/active_model_shim'
|
17
17
|
autoload :SchemaOrg, 'blacklight/document/schema_org'
|
18
|
+
autoload :CacheKey, 'blacklight/document/cache_key'
|
18
19
|
autoload :DublinCore, 'blacklight/document/dublin_core'
|
19
20
|
autoload :Email, 'blacklight/document/email'
|
20
21
|
autoload :SemanticFields, 'blacklight/document/semantic_fields'
|
@@ -25,6 +26,7 @@ module Blacklight::Document
|
|
25
26
|
extend ActiveSupport::Concern
|
26
27
|
include Blacklight::Document::SchemaOrg
|
27
28
|
include Blacklight::Document::SemanticFields
|
29
|
+
include Blacklight::Document::CacheKey
|
28
30
|
include Blacklight::Document::Export
|
29
31
|
|
30
32
|
extend Deprecation
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
# This module provides the cache key which can be used by rails
|
3
|
+
# caching to determine when to expire a particular object's cache
|
4
|
+
# See http://apidock.com/rails/ActiveRecord/Integration/cache_key
|
5
|
+
# This key should be used in conjunction with additional data to
|
6
|
+
# determine when a document can be cached (e.g. for different view
|
7
|
+
# types in search results like gallery and list)
|
8
|
+
module Blacklight::Document::CacheKey
|
9
|
+
def cache_key
|
10
|
+
case
|
11
|
+
when new_record?
|
12
|
+
"#{self.class.model_name.cache_key}/new"
|
13
|
+
when cache_version_value = self[cache_version_key]
|
14
|
+
"#{self.class.model_name.cache_key}/#{id}-#{Array(cache_version_value).join}"
|
15
|
+
else
|
16
|
+
"#{self.class.model_name.cache_key}/#{id}"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def cache_version_key
|
21
|
+
:_version_
|
22
|
+
end
|
23
|
+
end
|
data/lib/blacklight/facet.rb
CHANGED
@@ -1,14 +1,15 @@
|
|
1
|
-
# These are methods that are used at both the view helper and controller layers
|
2
|
-
# They are only dependent on `blacklight_config` and `@response`
|
3
|
-
#
|
4
1
|
module Blacklight
|
2
|
+
# These are methods that are used at both the view helper and controller layers
|
3
|
+
# They are only dependent on `blacklight_config` and `@response`
|
4
|
+
#
|
5
5
|
module Facet
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
def facet_paginator(field_config, display_facet)
|
7
|
+
blacklight_config.facet_paginator_class.new(
|
8
|
+
display_facet.items,
|
9
9
|
sort: display_facet.sort,
|
10
|
-
offset: display_facet.offset,
|
11
|
-
limit: facet_limit_for(field_config.key)
|
10
|
+
offset: display_facet.offset,
|
11
|
+
limit: facet_limit_for(field_config.key)
|
12
|
+
)
|
12
13
|
end
|
13
14
|
|
14
15
|
def facets_from_request(fields = facet_field_names)
|
@@ -20,17 +21,13 @@ module Blacklight
|
|
20
21
|
end
|
21
22
|
|
22
23
|
def facet_configuration_for_field(field)
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
value
|
27
|
-
end
|
28
|
-
f ||= Blacklight::Configuration::FacetField.new(:field => field).normalize!
|
24
|
+
blacklight_config.facet_fields[field] ||
|
25
|
+
blacklight_config.facet_fields.values.find { |v| v.field.to_s == field.to_s } ||
|
26
|
+
Blacklight::Configuration::FacetField.new(field: field).normalize!
|
29
27
|
end
|
30
28
|
|
31
|
-
|
32
29
|
# Get a FacetField object from the @response
|
33
|
-
def facet_by_field_name
|
30
|
+
def facet_by_field_name(field_or_field_name)
|
34
31
|
case field_or_field_name
|
35
32
|
when String, Symbol, Blacklight::Configuration::FacetField
|
36
33
|
facet_field = facet_configuration_for_field(field_or_field_name)
|
@@ -18,7 +18,7 @@ module ActionDispatch::Routing
|
|
18
18
|
private
|
19
19
|
def raise_no_blacklight_secret_key #:nodoc:
|
20
20
|
raise <<-ERROR
|
21
|
-
Blacklight.secret_key was not set.
|
21
|
+
Blacklight.secret_key was not set. If you are using Rails 4.1+, set your app's secret key base (config/secrets.yml) OR add the following to an initializer:
|
22
22
|
|
23
23
|
Blacklight.secret_key = '#{SecureRandom.hex(64)}'
|
24
24
|
|
@@ -23,7 +23,12 @@ module Blacklight
|
|
23
23
|
# CatalogController.include ModuleDefiningNewMethod
|
24
24
|
# CatalogController.search_params_logic += [:new_method]
|
25
25
|
# CatalogController.search_params_logic.delete(:we_dont_want)
|
26
|
-
self.search_params_logic = [
|
26
|
+
self.search_params_logic = [
|
27
|
+
:default_solr_parameters, :add_query_to_solr, :add_facet_fq_to_solr,
|
28
|
+
:add_facetting_to_solr, :add_solr_fields_to_query, :add_paging_to_solr,
|
29
|
+
:add_sorting_to_solr, :add_group_config_to_solr,
|
30
|
+
:add_facet_paging_to_solr
|
31
|
+
]
|
27
32
|
|
28
33
|
if self.respond_to?(:helper_method)
|
29
34
|
helper_method(:facet_limit_for)
|
@@ -111,35 +116,6 @@ module Blacklight
|
|
111
116
|
end
|
112
117
|
deprecation_deprecate :solr_documents_by_field_values_params
|
113
118
|
|
114
|
-
##
|
115
|
-
# Retrieve a facet's paginated values.
|
116
|
-
def solr_facet_params(facet_field, user_params=params || {}, extra_controller_params={})
|
117
|
-
input = user_params.deep_merge(extra_controller_params)
|
118
|
-
facet_config = blacklight_config.facet_fields[facet_field]
|
119
|
-
|
120
|
-
solr_params = {}
|
121
|
-
|
122
|
-
# Now override with our specific things for fetching facet values
|
123
|
-
solr_params[:"facet.field"] = search_builder.with_ex_local_param((facet_config.ex if facet_config.respond_to?(:ex)), facet_field)
|
124
|
-
|
125
|
-
limit = if respond_to?(:facet_list_limit)
|
126
|
-
facet_list_limit.to_s.to_i
|
127
|
-
elsif solr_params["facet.limit"]
|
128
|
-
solr_params["facet.limit"].to_i
|
129
|
-
else
|
130
|
-
20
|
131
|
-
end
|
132
|
-
|
133
|
-
# Need to set as f.facet_field.facet.* to make sure we
|
134
|
-
# override any field-specific default in the solr request handler.
|
135
|
-
solr_params[:"f.#{facet_field}.facet.limit"] = limit + 1
|
136
|
-
solr_params[:"f.#{facet_field}.facet.offset"] = ( input.fetch(Blacklight::Solr::FacetPaginator.request_keys[:page] , 1).to_i - 1 ) * ( limit )
|
137
|
-
solr_params[:"f.#{facet_field}.facet.sort"] = input[ Blacklight::Solr::FacetPaginator.request_keys[:sort] ] if input[ Blacklight::Solr::FacetPaginator.request_keys[:sort] ]
|
138
|
-
solr_params[:rows] = 0
|
139
|
-
|
140
|
-
solr_params
|
141
|
-
end
|
142
|
-
|
143
119
|
##
|
144
120
|
# Opensearch autocomplete parameters for plucking a field's value from the results
|
145
121
|
def solr_opensearch_params(field=nil)
|
@@ -51,6 +51,7 @@ module Blacklight
|
|
51
51
|
builder.start(@start) if @start
|
52
52
|
builder.rows(@rows) if @rows
|
53
53
|
builder.page(@page) if @page
|
54
|
+
builder.facet(@facet) if @facet
|
54
55
|
|
55
56
|
builder
|
56
57
|
end
|
@@ -204,6 +205,18 @@ module Blacklight
|
|
204
205
|
field unless field.blank?
|
205
206
|
end
|
206
207
|
|
208
|
+
# sets the facet that this query pertains to, if it is for the purpose of
|
209
|
+
# facet pagination
|
210
|
+
def facet(facet = nil)
|
211
|
+
if facet
|
212
|
+
params_will_change!
|
213
|
+
@facet = facet
|
214
|
+
self
|
215
|
+
else
|
216
|
+
@facet
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
207
220
|
def search_field
|
208
221
|
blacklight_config.search_fields[blacklight_params[:search_field]]
|
209
222
|
end
|
@@ -159,8 +159,8 @@ module Blacklight::SearchHelper
|
|
159
159
|
# Get the solr response when retrieving only a single facet field
|
160
160
|
# @return [Blacklight::SolrResponse] the solr response
|
161
161
|
def get_facet_field_response(facet_field, user_params = params || {}, extra_controller_params = {})
|
162
|
-
query = search_builder.with(user_params).
|
163
|
-
repository.search(query)
|
162
|
+
query = search_builder.with(user_params).facet(facet_field)
|
163
|
+
repository.search(query.merge(extra_controller_params))
|
164
164
|
end
|
165
165
|
|
166
166
|
# a solr query method
|
data/lib/blacklight/solr.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
module Blacklight::Solr
|
2
|
-
# @deprecated
|
2
|
+
# @deprecated In 6.0 you should have this class generated into your application and Blacklight will
|
3
|
+
# no longer need to provide it.
|
3
4
|
class SearchBuilder < Blacklight::SearchBuilder
|
4
5
|
include Blacklight::Solr::SearchBuilderBehavior
|
5
6
|
end
|
@@ -3,7 +3,12 @@ module Blacklight::Solr
|
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
5
|
included do
|
6
|
-
self.default_processor_chain = [
|
6
|
+
self.default_processor_chain = [
|
7
|
+
:default_solr_parameters, :add_query_to_solr, :add_facet_fq_to_solr,
|
8
|
+
:add_facetting_to_solr, :add_solr_fields_to_query, :add_paging_to_solr,
|
9
|
+
:add_sorting_to_solr, :add_group_config_to_solr,
|
10
|
+
:add_facet_paging_to_solr
|
11
|
+
]
|
7
12
|
end
|
8
13
|
|
9
14
|
####
|
@@ -190,6 +195,38 @@ module Blacklight::Solr
|
|
190
195
|
end
|
191
196
|
end
|
192
197
|
|
198
|
+
def add_facet_paging_to_solr(solr_params)
|
199
|
+
return unless facet.present?
|
200
|
+
|
201
|
+
facet_config = blacklight_config.facet_fields[facet]
|
202
|
+
|
203
|
+
# Now override with our specific things for fetching facet values
|
204
|
+
facet_ex = facet_config.respond_to?(:ex) ? facet_config.ex : nil
|
205
|
+
solr_params[:"facet.field"] = with_ex_local_param(facet_ex, facet)
|
206
|
+
|
207
|
+
limit = if scope.respond_to?(:facet_list_limit)
|
208
|
+
scope.facet_list_limit.to_s.to_i
|
209
|
+
elsif solr_params["facet.limit"]
|
210
|
+
solr_params["facet.limit"].to_i
|
211
|
+
else
|
212
|
+
20
|
213
|
+
end
|
214
|
+
|
215
|
+
page = blacklight_params.fetch(request_keys[:page], 1).to_i
|
216
|
+
offset = (page - 1) * (limit)
|
217
|
+
|
218
|
+
sort = blacklight_params[request_keys[:sort]]
|
219
|
+
|
220
|
+
# Need to set as f.facet_field.facet.* to make sure we
|
221
|
+
# override any field-specific default in the solr request handler.
|
222
|
+
solr_params[:"f.#{facet}.facet.limit"] = limit + 1
|
223
|
+
solr_params[:"f.#{facet}.facet.offset"] = offset
|
224
|
+
if blacklight_params[request_keys[:sort]]
|
225
|
+
solr_params[:"f.#{facet}.facet.sort"] = sort
|
226
|
+
end
|
227
|
+
solr_params[:rows] = 0
|
228
|
+
end
|
229
|
+
|
193
230
|
def with_ex_local_param(ex, value)
|
194
231
|
if ex
|
195
232
|
"{!ex=#{ex}}#{value}"
|
@@ -277,5 +314,9 @@ module Blacklight::Solr
|
|
277
314
|
facet.include_in_request || (facet.include_in_request.nil? && blacklight_config.add_facet_fields_to_solr_request)
|
278
315
|
end
|
279
316
|
end
|
317
|
+
|
318
|
+
def request_keys
|
319
|
+
blacklight_config.facet_paginator_class.request_keys
|
320
|
+
end
|
280
321
|
end
|
281
322
|
end
|
@@ -12,9 +12,9 @@ describe FacetsHelper do
|
|
12
12
|
describe "has_facet_values?" do
|
13
13
|
it "should be true if there are any facets to display" do
|
14
14
|
|
15
|
-
a = double(:items => [1,2])
|
16
|
-
b = double(:items => ['b','c'])
|
17
|
-
empty = double(:items => [])
|
15
|
+
a = double(:items => [1,2], :name => 'a')
|
16
|
+
b = double(:items => ['b','c'], :name => 'b')
|
17
|
+
empty = double(:items => [], :name => 'empty')
|
18
18
|
|
19
19
|
fields = [a,b,empty]
|
20
20
|
expect(helper.has_facet_values?(fields)).to be true
|
@@ -27,6 +27,19 @@ describe FacetsHelper do
|
|
27
27
|
fields = [empty]
|
28
28
|
expect(helper.has_facet_values?(fields)).to be false
|
29
29
|
end
|
30
|
+
|
31
|
+
it "should be false if no facets are displayable" do
|
32
|
+
@config = Blacklight::Configuration.new do |config|
|
33
|
+
config.add_facet_field 'basic_field', :if => false
|
34
|
+
end
|
35
|
+
|
36
|
+
allow(helper).to receive_messages(:blacklight_config => @config)
|
37
|
+
|
38
|
+
a = double(:items => [1,2], :name=>'basic_field')
|
39
|
+
fields = [a]
|
40
|
+
|
41
|
+
expect(helper.has_facet_values?(fields)).to be false
|
42
|
+
end
|
30
43
|
end
|
31
44
|
|
32
45
|
describe "should_render_facet?" do
|
@@ -289,7 +302,7 @@ describe FacetsHelper do
|
|
289
302
|
describe "render_facet_value" do
|
290
303
|
let (:item) { double(:value => 'A', :hits => 10) }
|
291
304
|
before do
|
292
|
-
allow(helper).to receive(:facet_configuration_for_field).with('simple_field').and_return(double(:query => nil, :date => nil, :helper_method => nil, :single => false))
|
305
|
+
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))
|
293
306
|
allow(helper).to receive(:facet_display_value).and_return('Z')
|
294
307
|
allow(helper).to receive(:add_facet_params_and_redirect).and_return({controller:'catalog'})
|
295
308
|
|
@@ -305,6 +318,16 @@ describe FacetsHelper do
|
|
305
318
|
end
|
306
319
|
end
|
307
320
|
|
321
|
+
describe "when :url_method is set" do
|
322
|
+
let(:expected_html) { "<span class=\"facet-label\"><a class=\"facet_select\" href=\"/blabla\">Z</a></span><span class=\"facet-count\">10</span>" }
|
323
|
+
it "should use that method" do
|
324
|
+
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 => :test_method))
|
325
|
+
allow(helper).to receive(:test_method).with('simple_field', item).and_return('/blabla')
|
326
|
+
result = helper.render_facet_value('simple_field', item)
|
327
|
+
expect(result).to be_equivalent_to(expected_html).respecting_element_order
|
328
|
+
end
|
329
|
+
end
|
330
|
+
|
308
331
|
describe "when :suppress_link is set" do
|
309
332
|
let(:expected_html) { "<span class=\"facet-label\">Z</span><span class=\"facet-count\">10</span>" }
|
310
333
|
it "should suppress the link" do
|
@@ -316,12 +339,12 @@ describe FacetsHelper do
|
|
316
339
|
|
317
340
|
describe "#facet_display_value" do
|
318
341
|
it "should just be the facet value for an ordinary facet" do
|
319
|
-
allow(helper).to receive(:facet_configuration_for_field).with('simple_field').and_return(double(:query => nil, :date => nil, :helper_method => nil))
|
342
|
+
allow(helper).to receive(:facet_configuration_for_field).with('simple_field').and_return(double(:query => nil, :date => nil, :helper_method => nil, :url_method => nil))
|
320
343
|
expect(helper.facet_display_value('simple_field', 'asdf')).to eq 'asdf'
|
321
344
|
end
|
322
345
|
|
323
346
|
it "should allow you to pass in a :helper_method argument to the configuration" do
|
324
|
-
allow(helper).to receive(:facet_configuration_for_field).with('helper_field').and_return(double(:query => nil, :date => nil, :helper_method => :my_facet_value_renderer))
|
347
|
+
allow(helper).to receive(:facet_configuration_for_field).with('helper_field').and_return(double(:query => nil, :date => nil, :url_method => nil, :helper_method => :my_facet_value_renderer))
|
325
348
|
|
326
349
|
allow(helper).to receive(:my_facet_value_renderer).with('qwerty').and_return('abc')
|
327
350
|
|
@@ -329,17 +352,17 @@ describe FacetsHelper do
|
|
329
352
|
end
|
330
353
|
|
331
354
|
it "should extract the configuration label for a query facet" do
|
332
|
-
allow(helper).to receive(:facet_configuration_for_field).with('query_facet').and_return(double(:query => { 'query_key' => { :label => 'XYZ'}}, :date => nil, :helper_method => nil))
|
355
|
+
allow(helper).to receive(:facet_configuration_for_field).with('query_facet').and_return(double(:query => { 'query_key' => { :label => 'XYZ'}}, :date => nil, :helper_method => nil, :url_method => nil))
|
333
356
|
expect(helper.facet_display_value('query_facet', 'query_key')).to eq 'XYZ'
|
334
357
|
end
|
335
358
|
|
336
359
|
it "should localize the label for date-type facets" do
|
337
|
-
allow(helper).to receive(:facet_configuration_for_field).with('date_facet').and_return(double('date' => true, :query => nil, :helper_method => nil))
|
360
|
+
allow(helper).to receive(:facet_configuration_for_field).with('date_facet').and_return(double('date' => true, :query => nil, :helper_method => nil, :url_method => nil))
|
338
361
|
expect(helper.facet_display_value('date_facet', '2012-01-01')).to eq 'Sun, 01 Jan 2012 00:00:00 +0000'
|
339
362
|
end
|
340
363
|
|
341
364
|
it "should localize the label for date-type facets with the supplied localization options" do
|
342
|
-
allow(helper).to receive(:facet_configuration_for_field).with('date_facet').and_return(double('date' => { :format => :short }, :query => nil, :helper_method => nil))
|
365
|
+
allow(helper).to receive(:facet_configuration_for_field).with('date_facet').and_return(double('date' => { :format => :short }, :query => nil, :helper_method => nil, :url_method => nil))
|
343
366
|
expect(helper.facet_display_value('date_facet', '2012-01-01')).to eq '01 Jan 00:00'
|
344
367
|
end
|
345
368
|
end
|
@@ -96,14 +96,32 @@ describe "Blacklight::Configuration" do
|
|
96
96
|
expect(@config.facet_fields).to_not include(@mock_facet)
|
97
97
|
end
|
98
98
|
|
99
|
-
|
100
|
-
|
101
|
-
|
99
|
+
context "when model classes are customised" do
|
100
|
+
it "should not dup response_model or document_model" do
|
101
|
+
@config.response_model = Hash
|
102
|
+
@config.document_model = Array
|
102
103
|
|
103
|
-
|
104
|
+
config_copy = @config.inheritable_copy
|
104
105
|
|
105
|
-
|
106
|
-
|
106
|
+
expect(config_copy.response_model).to eq Hash
|
107
|
+
expect(config_copy.document_model).to eq Array
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
context "when model classes are not set" do
|
112
|
+
it "should leave response_model and document_model empty" do
|
113
|
+
config_copy = @config.inheritable_copy
|
114
|
+
|
115
|
+
expect(config_copy.fetch(:response_model, nil)).to be_nil
|
116
|
+
expect(config_copy.fetch(:document_model, nil)).to be_nil
|
117
|
+
end
|
118
|
+
|
119
|
+
it "should return default classes" do
|
120
|
+
config_copy = @config.inheritable_copy
|
121
|
+
|
122
|
+
expect(config_copy.response_model).to eq Blacklight::SolrResponse
|
123
|
+
expect(config_copy.document_model).to eq SolrDocument
|
124
|
+
end
|
107
125
|
end
|
108
126
|
|
109
127
|
it "should provide cloned copies of mutable data structures" do
|
@@ -469,5 +487,10 @@ describe "Blacklight::Configuration" do
|
|
469
487
|
expect(@config.default_search_field.key).to eq 'search_field_2'
|
470
488
|
end
|
471
489
|
end
|
472
|
-
|
490
|
+
|
491
|
+
describe "#facet_paginator_class" do
|
492
|
+
it "should default to Blacklight::Solr::FacetPaginator" do
|
493
|
+
expect(@config.facet_paginator_class).to eq Blacklight::Solr::FacetPaginator
|
494
|
+
end
|
495
|
+
end
|
473
496
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Blacklight::Document::CacheKey do
|
4
|
+
let(:attributes) { {} }
|
5
|
+
let(:subject) { SolrDocument.new(attributes) }
|
6
|
+
it 'SolrDocument includes the module' do
|
7
|
+
expect(subject.class).to include(Blacklight::Document::CacheKey)
|
8
|
+
end
|
9
|
+
|
10
|
+
describe 'new record' do
|
11
|
+
before do
|
12
|
+
allow(subject).to receive_messages(new_record?: true)
|
13
|
+
end
|
14
|
+
it 'provides an acceptable cache key' do
|
15
|
+
expect(subject.cache_key).to eq 'solr_documents/new'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe 'with version' do
|
20
|
+
let(:attributes) { { id: '12345', _version_: '1497353774427013120' } }
|
21
|
+
it 'provides a cache key with the id and version' do
|
22
|
+
expect(subject.cache_key).to eq 'solr_documents/12345-1497353774427013120'
|
23
|
+
end
|
24
|
+
describe 'as array' do
|
25
|
+
let(:attributes) { { id: '12345', _version_: ['1234', '4321'] } }
|
26
|
+
it 'provides a cache key with the id and joined version array' do
|
27
|
+
expect(subject.cache_key).to eq 'solr_documents/12345-12344321'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe 'without version' do
|
33
|
+
let(:attributes) { { id: '12345' } }
|
34
|
+
it 'provides a cache key with just the id' do
|
35
|
+
expect(subject.cache_key).to eq 'solr_documents/12345'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe '#cache_version_key' do
|
40
|
+
let(:attributes) { { id: '12345', another_version_field: '1497353774427013120' } }
|
41
|
+
before do
|
42
|
+
allow(subject).to receive_messages(cache_version_key: :another_version_field)
|
43
|
+
end
|
44
|
+
it 'provides a cache key with the defined field' do
|
45
|
+
expect(subject.cache_key).to eq 'solr_documents/12345-1497353774427013120'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -187,6 +187,16 @@ describe Blacklight::SearchBuilder do
|
|
187
187
|
end
|
188
188
|
end
|
189
189
|
|
190
|
+
describe "#facet" do
|
191
|
+
it "should be nil if no value is set" do
|
192
|
+
expect(subject.facet).to be_nil
|
193
|
+
end
|
194
|
+
|
195
|
+
it "should set facet value" do
|
196
|
+
expect(subject.facet('format').facet).to eq 'format'
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
190
200
|
describe "#search_field" do
|
191
201
|
it "should use the requested search field" do
|
192
202
|
blacklight_config.add_search_field 'x'
|
@@ -240,4 +250,4 @@ describe Blacklight::SearchBuilder do
|
|
240
250
|
end
|
241
251
|
|
242
252
|
end
|
243
|
-
end
|
253
|
+
end
|
@@ -64,78 +64,6 @@ describe Blacklight::SearchHelper do
|
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
67
|
-
describe "solr_facet_params" do
|
68
|
-
before do
|
69
|
-
@facet_field = 'format'
|
70
|
-
@generated_solr_facet_params = subject.solr_facet_params(@facet_field)
|
71
|
-
|
72
|
-
@sort_key = Blacklight::Solr::FacetPaginator.request_keys[:sort]
|
73
|
-
@page_key = Blacklight::Solr::FacetPaginator.request_keys[:page]
|
74
|
-
end
|
75
|
-
let(:blacklight_config) do
|
76
|
-
Blacklight::Configuration.new do |config|
|
77
|
-
config.add_facet_fields_to_solr_request!
|
78
|
-
config.add_facet_field 'format'
|
79
|
-
config.add_facet_field 'format_ordered', :sort => :count
|
80
|
-
config.add_facet_field 'format_limited', :limit => 5
|
81
|
-
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
it 'sets rows to 0' do
|
86
|
-
expect(@generated_solr_facet_params[:rows]).to eq 0
|
87
|
-
end
|
88
|
-
it 'sets facets requested to facet_field argument' do
|
89
|
-
expect(@generated_solr_facet_params["facet.field".to_sym]).to eq @facet_field
|
90
|
-
end
|
91
|
-
it 'defaults offset to 0' do
|
92
|
-
expect(@generated_solr_facet_params[:"f.#{@facet_field}.facet.offset"]).to eq 0
|
93
|
-
end
|
94
|
-
it 'uses offset manually set, and converts it to an integer' do
|
95
|
-
solr_params = subject.solr_facet_params(@facet_field, @page_key => 2)
|
96
|
-
expect(solr_params[:"f.#{@facet_field}.facet.offset"]).to eq 20
|
97
|
-
end
|
98
|
-
it 'defaults limit to 20' do
|
99
|
-
solr_params = subject.solr_facet_params(@facet_field)
|
100
|
-
expect(solr_params[:"f.#{@facet_field}.facet.limit"]).to eq 21
|
101
|
-
end
|
102
|
-
|
103
|
-
describe 'if facet_list_limit is defined in controller' do
|
104
|
-
before do
|
105
|
-
allow(subject).to receive_messages facet_list_limit: 1000
|
106
|
-
end
|
107
|
-
it 'uses controller method for limit' do
|
108
|
-
solr_params = subject.solr_facet_params(@facet_field)
|
109
|
-
expect(solr_params[:"f.#{@facet_field}.facet.limit"]).to eq 1001
|
110
|
-
end
|
111
|
-
|
112
|
-
it 'uses controller method for limit when a ordinary limit is set' do
|
113
|
-
solr_params = subject.solr_facet_params(@facet_field)
|
114
|
-
expect(solr_params[:"f.#{@facet_field}.facet.limit"]).to eq 1001
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
it 'uses the default sort' do
|
119
|
-
solr_params = subject.solr_facet_params(@facet_field)
|
120
|
-
expect(solr_params[:"f.#{@facet_field}.facet.sort"]).to be_blank
|
121
|
-
end
|
122
|
-
|
123
|
-
it 'uses sort provided in the parameters' do
|
124
|
-
solr_params = subject.solr_facet_params(@facet_field, @sort_key => "index")
|
125
|
-
expect(solr_params[:"f.#{@facet_field}.facet.sort"]).to eq 'index'
|
126
|
-
end
|
127
|
-
|
128
|
-
it "comes up with the same params as #solr_search_params to constrain context for facet list" do
|
129
|
-
search_params = {:q => 'tibetan history', :f=> {:format=>'Book', :language_facet=>'Tibetan'}}
|
130
|
-
solr_facet_params = subject.solr_facet_params('format', search_params)
|
131
|
-
|
132
|
-
expect(solr_facet_params).to include :"facet.field" => "format"
|
133
|
-
expect(solr_facet_params).to include :"f.format.facet.limit" => 21
|
134
|
-
expect(solr_facet_params).to include :"f.format.facet.offset" => 0
|
135
|
-
expect(solr_facet_params).to include :"rows" => 0
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
67
|
describe "get_facet_pagination", :integration => true do
|
140
68
|
before do
|
141
69
|
@facet_field = 'format'
|
@@ -553,7 +553,71 @@ describe Blacklight::Solr::SearchBuilder do
|
|
553
553
|
end
|
554
554
|
end
|
555
555
|
end
|
556
|
-
|
556
|
+
|
557
|
+
describe "#add_facet_paging_to_solr" do
|
558
|
+
let(:facet_field) { 'format' }
|
559
|
+
let(:sort_key) { Blacklight::Solr::FacetPaginator.request_keys[:sort] }
|
560
|
+
let(:page_key) { Blacklight::Solr::FacetPaginator.request_keys[:page] }
|
561
|
+
|
562
|
+
let(:blacklight_config) do
|
563
|
+
Blacklight::Configuration.new do |config|
|
564
|
+
config.add_facet_fields_to_solr_request!
|
565
|
+
config.add_facet_field 'format'
|
566
|
+
config.add_facet_field 'format_ordered', sort: :count
|
567
|
+
config.add_facet_field 'format_limited', limit: 5
|
568
|
+
end
|
569
|
+
end
|
570
|
+
|
571
|
+
let(:solr_parameters) do
|
572
|
+
solr_parameters = Blacklight::Solr::Request.new
|
573
|
+
subject.facet(facet_field).add_facet_paging_to_solr(solr_parameters)
|
574
|
+
solr_parameters
|
575
|
+
end
|
576
|
+
|
577
|
+
it 'sets rows to 0' do
|
578
|
+
expect(solr_parameters[:rows]).to eq 0
|
579
|
+
end
|
580
|
+
it 'sets facets requested to facet_field argument' do
|
581
|
+
expect(solr_parameters["facet.field".to_sym]).to eq facet_field
|
582
|
+
end
|
583
|
+
it 'defaults offset to 0' do
|
584
|
+
expect(solr_parameters[:"f.#{facet_field}.facet.offset"]).to eq 0
|
585
|
+
end
|
586
|
+
context 'when offset is manually set' do
|
587
|
+
let(:user_params) { { page_key => 2 } }
|
588
|
+
it 'uses offset manually set, and converts it to an integer' do
|
589
|
+
expect(solr_parameters[:"f.#{facet_field}.facet.offset"]).to eq 20
|
590
|
+
end
|
591
|
+
end
|
592
|
+
it 'defaults limit to 20' do
|
593
|
+
expect(solr_parameters[:"f.#{facet_field}.facet.limit"]).to eq 21
|
594
|
+
end
|
595
|
+
|
596
|
+
context 'when facet_list_limit is defined in scope' do
|
597
|
+
before do
|
598
|
+
allow(context).to receive_messages facet_list_limit: 1000
|
599
|
+
end
|
600
|
+
it 'uses scope method for limit' do
|
601
|
+
expect(solr_parameters[:"f.#{facet_field}.facet.limit"]).to eq 1001
|
602
|
+
end
|
603
|
+
|
604
|
+
it 'uses controller method for limit when a ordinary limit is set' do
|
605
|
+
expect(solr_parameters[:"f.#{facet_field}.facet.limit"]).to eq 1001
|
606
|
+
end
|
607
|
+
end
|
608
|
+
|
609
|
+
it 'uses the default sort' do
|
610
|
+
expect(solr_parameters[:"f.#{facet_field}.facet.sort"]).to be_blank
|
611
|
+
end
|
612
|
+
|
613
|
+
context 'when sort is provided' do
|
614
|
+
let(:user_params) { { sort_key => 'index' } }
|
615
|
+
it 'uses sort provided in the parameters' do
|
616
|
+
expect(solr_parameters[:"f.#{facet_field}.facet.sort"]).to eq 'index'
|
617
|
+
end
|
618
|
+
end
|
619
|
+
end
|
620
|
+
|
557
621
|
describe "#with_tag_ex" do
|
558
622
|
it "should add an !ex local parameter if the facet configuration requests it" do
|
559
623
|
expect(subject.with_ex_local_param("xyz", "some-value")).to eq "{!ex=xyz}some-value"
|
@@ -32,17 +32,6 @@ describe "catalog/_constraints_element.html.erb" do
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
describe "with checkmark suppressed" do
|
36
|
-
before do
|
37
|
-
render :partial => "catalog/constraints_element", :locals => {:label => "my label", :value => "my value", :options => {:check => false}}
|
38
|
-
end
|
39
|
-
it "should not include checkmark" do
|
40
|
-
expect(rendered).to have_selector("span.appliedFilter") do |s|
|
41
|
-
expect(s).to_not have_selector("img[src$='checkmark.gif']")
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
35
|
describe "with custom classes" do
|
47
36
|
before do
|
48
37
|
render :partial => "catalog/constraints_element", :locals => {:label => "my label", :value => "my value", :options => {:classes => ["class1", "class2"]}}
|
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.
|
4
|
+
version: 5.14.0
|
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-
|
20
|
+
date: 2015-07-02 00:00:00.000000000 Z
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
23
23
|
name: rails
|
@@ -245,6 +245,7 @@ extensions: []
|
|
245
245
|
extra_rdoc_files: []
|
246
246
|
files:
|
247
247
|
- ".gitignore"
|
248
|
+
- ".hound.yml"
|
248
249
|
- ".rspec"
|
249
250
|
- ".rubocop.yml"
|
250
251
|
- ".rubocop_hound.yml"
|
@@ -256,15 +257,7 @@ files:
|
|
256
257
|
- README.md
|
257
258
|
- Rakefile
|
258
259
|
- VERSION
|
259
|
-
- app/assets/images/blacklight/bg.png
|
260
|
-
- app/assets/images/blacklight/border.png
|
261
|
-
- app/assets/images/blacklight/bul_sq_gry.gif
|
262
|
-
- app/assets/images/blacklight/checkmark.gif
|
263
260
|
- app/assets/images/blacklight/logo.png
|
264
|
-
- app/assets/images/blacklight/magnifying_glass.gif
|
265
|
-
- app/assets/images/blacklight/remove.gif
|
266
|
-
- app/assets/images/blacklight/separator.gif
|
267
|
-
- app/assets/images/blacklight/start_over.gif
|
268
261
|
- app/assets/images/favicon.ico
|
269
262
|
- app/assets/javascripts/blacklight/ajax_modal.js
|
270
263
|
- app/assets/javascripts/blacklight/autofocus.js
|
@@ -407,6 +400,7 @@ files:
|
|
407
400
|
- config/locales/blacklight.en.yml
|
408
401
|
- config/locales/blacklight.es.yml
|
409
402
|
- config/locales/blacklight.fr.yml
|
403
|
+
- config/locales/blacklight.it.yml
|
410
404
|
- config/locales/blacklight.pt-BR.yml
|
411
405
|
- db/migrate/20140202020201_create_searches.rb
|
412
406
|
- db/migrate/20140202020202_create_bookmarks.rb
|
@@ -431,6 +425,7 @@ files:
|
|
431
425
|
- lib/blacklight/controller.rb
|
432
426
|
- lib/blacklight/document.rb
|
433
427
|
- lib/blacklight/document/active_model_shim.rb
|
428
|
+
- lib/blacklight/document/cache_key.rb
|
434
429
|
- lib/blacklight/document/dublin_core.rb
|
435
430
|
- lib/blacklight/document/email.rb
|
436
431
|
- lib/blacklight/document/export.rb
|
@@ -527,6 +522,7 @@ files:
|
|
527
522
|
- spec/lib/blacklight/catalog/component_configuration_spec.rb
|
528
523
|
- spec/lib/blacklight/configurable_spec.rb
|
529
524
|
- spec/lib/blacklight/configuration_spec.rb
|
525
|
+
- spec/lib/blacklight/document/cache_key_spec.rb
|
530
526
|
- spec/lib/blacklight/document/dublin_core_spec.rb
|
531
527
|
- spec/lib/blacklight/document/email_spec.rb
|
532
528
|
- spec/lib/blacklight/document/sms_spec.rb
|
@@ -648,6 +644,7 @@ test_files:
|
|
648
644
|
- spec/lib/blacklight/catalog/component_configuration_spec.rb
|
649
645
|
- spec/lib/blacklight/configurable_spec.rb
|
650
646
|
- spec/lib/blacklight/configuration_spec.rb
|
647
|
+
- spec/lib/blacklight/document/cache_key_spec.rb
|
651
648
|
- spec/lib/blacklight/document/dublin_core_spec.rb
|
652
649
|
- spec/lib/blacklight/document/email_spec.rb
|
653
650
|
- spec/lib/blacklight/document/sms_spec.rb
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|