blacklight 5.12.1 → 5.13.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: abad33ed78f1831cc8ae408d0d19071b667f74be
4
- data.tar.gz: bd713d5fb66e2d1aa49b4fbcac88ff0724b0aedf
3
+ metadata.gz: f1b1cb3c8c840ba192f1b41a34318d44392d616a
4
+ data.tar.gz: 24a3b7ac9557d150777dd508738022c5edf5b376
5
5
  SHA512:
6
- metadata.gz: c9478b659e45b4df5320395ddc301190390a7adb6d031a819761af390f07d5d59853f184381ff96fae5193c867e84b1a6bb19d86e56e9b2619c42639136697a2
7
- data.tar.gz: 37f40ed46cca97a3f5fb1ddb49776e6ff4a41ca2318575d6cfb1f942c8a1e32ef7e2f29f73eac320f3b8d67ccc814aba6dc293e5482bf5062c82710cdd34cad1
6
+ metadata.gz: e5330c09fc2acb28fac501295d13078724d45f98c81d14163e7ce22b5b54e2cdaf8b5435704c0969534b69649db67d5a1f1893905c68c9021d53a508c5494981
7
+ data.tar.gz: 7c3071efa52edb0bd2549351e515fd4b40a87fdca82d25b2a910b6635f68ad2272bfba7cc9bd80ca9c2d5fc67897e50079149ece3b0df370134a8dc7827b1432
data/VERSION CHANGED
@@ -1 +1 @@
1
- 5.12.1
1
+ 5.13.0
@@ -266,23 +266,29 @@ module Blacklight::BlacklightHelperBehavior
266
266
  ##
267
267
  # Render the document "heading" (title) in a content tag
268
268
  # @overload render_document_heading(tag)
269
+ # @params [Symbol] tag
269
270
  # @overload render_document_heading(document, options)
270
271
  # @params [SolrDocument] document
271
272
  # @params [Hash] options
272
273
  # @options options [Symbol] :tag
274
+ # @overload render_document_heading(options)
275
+ # @params [Hash] options
276
+ # @options options [Symbol] :tag
273
277
  def render_document_heading(*args)
274
278
  options = args.extract_options!
275
- if args.first.is_a? blacklight_config.document_model
276
- document = args.shift
277
- tag = options[:tag]
279
+
280
+ tag_or_document = args.first
281
+
282
+ if tag_or_document.is_a? String or tag_or_document.is_a? Symbol
283
+ Deprecation.warn(Blacklight::BlacklightHelperBehavior, "#render_document_heading with a tag argument is deprecated; pass e.g. `tag: :h4` instead")
284
+ tag = tag_or_document
285
+ document = @document
278
286
  else
279
- document = nil
280
- tag = args.first || options[:tag]
287
+ tag = options.fetch(:tag, :h4)
288
+ document = tag_or_document || @document
281
289
  end
282
290
 
283
- tag ||= :h4
284
-
285
- content_tag(tag, presenter(document).document_heading, :itemprop => "name")
291
+ content_tag(tag, presenter(document).document_heading, itemprop: "name")
286
292
  end
287
293
 
288
294
  ##
@@ -117,6 +117,15 @@ module Blacklight::CatalogHelperBehavior
117
117
  render :partial => 'show_sidebar'
118
118
  end
119
119
 
120
+ ##
121
+ # Render the main content partial for a document
122
+ #
123
+ # @param [SolrDocument]
124
+ # @return [String]
125
+ def render_document_main_content_partial(document = @document)
126
+ render partial: 'show_main_content'
127
+ end
128
+
120
129
  ##
121
130
  # Should we display the sort and per page widget?
122
131
  #
@@ -0,0 +1,34 @@
1
+ # Methods added to this helper will be available to all templates in the hosting
2
+ # application
3
+ module Blacklight
4
+ # A module for useful methods used in layout configuration
5
+ module LayoutHelperBehavior
6
+ ##
7
+ # Classes added to a document's show content div
8
+ # @return [String]
9
+ def show_content_classes
10
+ "#{main_content_classes} show-document"
11
+ end
12
+
13
+ ##
14
+ # Classes added to a document's sidebar div
15
+ # @return [String]
16
+ def show_sidebar_classes
17
+ sidebar_classes
18
+ end
19
+
20
+ ##
21
+ # Classes used for sizing the main content of a Blacklight page
22
+ # @return [String]
23
+ def main_content_classes
24
+ 'col-md-9 col-sm-8'
25
+ end
26
+
27
+ ##
28
+ # Classes used for sizing the sidebar content of a Blacklight page
29
+ # @return [String]
30
+ def sidebar_classes
31
+ 'col-md-3 col-sm-4'
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,3 @@
1
+ module LayoutHelper
2
+ include Blacklight::LayoutHelperBehavior
3
+ end
@@ -0,0 +1,19 @@
1
+ <%= render 'previous_next_doc' %>
2
+
3
+ <% @page_title = t('blacklight.search.show.title', :document_title => document_show_html_title, :application_name => application_name).html_safe %>
4
+ <% content_for(:head) { render_link_rel_alternates } %>
5
+
6
+ <div id="document" class="document <%= render_document_class %>" itemscope itemtype="<%= @document.itemtype %>">
7
+ <div id="doc_<%= @document.id.to_s.parameterize %>">
8
+ <%= render_document_partials @document, blacklight_config.view_config(:show).partials %>
9
+ </div>
10
+ </div>
11
+
12
+ <% if @document.respond_to?(:export_as_openurl_ctx_kev) %>
13
+ <!--
14
+ // COinS, for Zotero among others.
15
+ // This document_partial_name(@document) business is not quite right,
16
+ // but has been there for a while.
17
+ -->
18
+ <span class="Z3988" title="<%= @document.export_as_openurl_ctx_kev(document_partial_name(@document)) %>"></span>
19
+ <% end %>
@@ -1,8 +1,8 @@
1
- <div id="sidebar" class="col-md-3 col-sm-4">
1
+ <div id="sidebar" class="<%= sidebar_classes %>">
2
2
  <%= render 'search_sidebar' %>
3
3
  </div>
4
4
 
5
- <div id="content" class="col-md-9 col-sm-8">
5
+ <div id="content" class="<%= main_content_classes %>">
6
6
  <% unless has_search_parameters? %>
7
7
  <%# if there are no input/search related params, display the "home" partial -%>
8
8
  <%= render 'home' %>
@@ -1,34 +1,7 @@
1
- <div id="content" class="col-md-9 col-sm-8 show-document">
2
-
3
- <%= render 'previous_next_doc' %>
4
-
5
-
6
- <% @page_title = t('blacklight.search.show.title', :document_title => document_show_html_title, :application_name => application_name).html_safe -%>
7
- <% content_for(:head) { render_link_rel_alternates } -%>
8
- <%# this should be in a partial -%>
9
-
10
- <div id="document" class="document <%= render_document_class %>" itemscope itemtype="<%= @document.itemtype %>">
11
- <div id="doc_<%= @document.id.to_s.parameterize %>">
12
-
13
- <% # bookmark/folder functions -%>
14
- <%= render_document_partials @document, blacklight_config.view_config(:show).partials %>
15
-
16
- </div>
17
- </div>
18
-
19
-
20
-
21
- <% if @document.respond_to?(:export_as_openurl_ctx_kev) %>
22
- <!--
23
- // COinS, for Zotero among others.
24
- // This document_partial_name(@document) business is not quite right,
25
- // but has been there for a while.
26
- -->
27
- <span class="Z3988" title="<%= @document.export_as_openurl_ctx_kev(document_partial_name(@document)) %>"></span>
28
- <% end %>
29
-
1
+ <div id="content" class="<%= show_content_classes %>">
2
+ <%= render_document_main_content_partial %>
30
3
  </div>
31
4
 
32
- <div id="sidebar" class="col-md-3 col-sm-4">
5
+ <div id="sidebar" class="<%= show_sidebar_classes %>">
33
6
  <%= render_document_sidebar_partial %>
34
7
  </div>
@@ -16,10 +16,9 @@ module Blacklight
16
16
  @connection ||= build_connection
17
17
  end
18
18
 
19
-
20
19
  protected
21
20
  def connection_config
22
- @connection_config ||= Blacklight.connection_config
21
+ blacklight_config.connection_config
23
22
  end
24
23
 
25
24
  def logger
@@ -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
+ # repository connection configuration
80
+ connection_config: nil,
79
81
  ##
80
82
  # == Blacklight view configuration
81
83
  ##
@@ -211,6 +213,10 @@ module Blacklight
211
213
  super || Blacklight::SolrRepository
212
214
  end
213
215
 
216
+ def connection_config
217
+ super || Blacklight.connection_config
218
+ end
219
+
214
220
  def search_builder_class
215
221
  super || locate_search_builder_class
216
222
  end
@@ -90,7 +90,7 @@ module Blacklight
90
90
  # @param [Hash] extra_params an optional hash of parameters that should be
91
91
  # added to the query post processing
92
92
  def build_solr_query(user_params, processor_chain, extra_params=nil)
93
- search_builder(processor_chain).with(user_params).query(extra_params)
93
+ search_builder(processor_chain).with(user_params).merge(extra_params)
94
94
  end
95
95
  deprecation_deprecate build_solr_query: :query
96
96
 
@@ -107,7 +107,7 @@ module Blacklight
107
107
  # Retrieve the results for a list of document ids
108
108
  # @deprecated
109
109
  def solr_documents_by_field_values_params(field, values)
110
- search_builder([:add_query_to_solr]).with(q: { field => values}).query(fl: '*')
110
+ search_builder([:add_query_to_solr]).with(q: { field => values}).merge(fl: '*')
111
111
  end
112
112
  deprecation_deprecate :solr_documents_by_field_values_params
113
113
 
@@ -19,11 +19,14 @@ module Blacklight
19
19
 
20
20
  @scope = scope
21
21
  @blacklight_params = {}
22
+ @merged_params = {}
23
+ @reverse_merged_params = {}
22
24
  end
23
25
 
24
26
  ##
25
27
  # Set the parameters to pass through the processor chain
26
28
  def with blacklight_params = {}
29
+ params_will_change!
27
30
  @blacklight_params = blacklight_params.dup
28
31
  self
29
32
  end
@@ -31,6 +34,7 @@ module Blacklight
31
34
  ##
32
35
  # Update the :q (query) parameter
33
36
  def where conditions
37
+ params_will_change!
34
38
  @blacklight_params[:q] = conditions
35
39
  self
36
40
  end
@@ -38,16 +42,63 @@ module Blacklight
38
42
  ##
39
43
  # Append additional processor chain directives
40
44
  def append *addl_processor_chain
41
- self.class.new(processor_chain + addl_processor_chain, scope).with(blacklight_params)
45
+ params_will_change!
46
+ builder = self.class.new(processor_chain + addl_processor_chain, scope)
47
+ .with(blacklight_params)
48
+ .merge(@merged_params)
49
+ .reverse_merge(@reverse_merged_params)
50
+
51
+ builder.start(@start) if @start
52
+ builder.rows(@rows) if @rows
53
+ builder.page(@page) if @page
54
+
55
+ builder
42
56
  end
43
57
 
58
+ ##
59
+ # Merge additional, repository-specific parameters
60
+ def merge extra_params, &block
61
+ if extra_params
62
+ params_will_change!
63
+ @merged_params.merge!(extra_params.to_hash, &block)
64
+ end
65
+ self
66
+ end
67
+
68
+ ##
69
+ # "Reverse merge" additional, repository-specific parameters
70
+ def reverse_merge extra_params, &block
71
+ if extra_params
72
+ params_will_change!
73
+ @reverse_merged_params.reverse_merge!(extra_params.to_hash, &block)
74
+ end
75
+ self
76
+ end
77
+
78
+ delegate :[], :key?, to: :to_hash
79
+
44
80
  # a solr query method
45
81
  # @param [Hash,HashWithIndifferentAccess] extra_controller_params (nil) extra parameters to add to the search
46
82
  # @return [Blacklight::SolrResponse] the solr response object
47
- def query(extra_params = nil)
48
- extra_params ? processed_parameters.merge(extra_params) : processed_parameters
83
+ def to_hash method_extra_params = nil
84
+ unless method_extra_params.nil?
85
+ Deprecation.warn(Blacklight::SearchBuilder, "Calling SearchBuilder#query with extra parameters is deprecated. Use #merge(Hash) instead")
86
+ merge(method_extra_params)
87
+ end
88
+
89
+ if params_need_update?
90
+ @params = processed_parameters.
91
+ reverse_merge(@reverse_merged_params).
92
+ merge(@merged_params).
93
+ tap { self.clear_changes }
94
+ else
95
+ @params
96
+ end
49
97
  end
50
98
 
99
+ alias_method :query, :to_hash
100
+ alias_method :to_h, :to_hash
101
+
51
102
  # @returns a params hash for searching solr.
52
103
  # The CatalogController #index action uses this.
53
104
  # Solr parameters can come from a number of places. From lowest
@@ -82,6 +133,7 @@ module Blacklight
82
133
 
83
134
  def start start = nil
84
135
  if start
136
+ params_will_change!
85
137
  @start = start.to_i
86
138
  self
87
139
  else
@@ -96,6 +148,7 @@ module Blacklight
96
148
 
97
149
  def page page = nil
98
150
  if page
151
+ params_will_change!
99
152
  @page = page.to_i
100
153
  @page = 1 if @page < 1
101
154
  self
@@ -114,6 +167,7 @@ module Blacklight
114
167
 
115
168
  def rows rows = nil
116
169
  if rows
170
+ params_will_change!
117
171
  @rows = rows.to_i
118
172
  @rows = blacklight_config.max_per_page if @rows > blacklight_config.max_per_page
119
173
  self
@@ -135,11 +189,6 @@ module Blacklight
135
189
 
136
190
  alias_method :per, :rows
137
191
 
138
- protected
139
- def request
140
- Blacklight::Solr::Request.new
141
- end
142
-
143
192
  def sort
144
193
  field = if blacklight_params[:sort].blank? and sort_field = blacklight_config.default_sort_field
145
194
  # no sort param provided, use default
@@ -158,7 +207,12 @@ module Blacklight
158
207
  def search_field
159
208
  blacklight_config.search_fields[blacklight_params[:search_field]]
160
209
  end
161
-
210
+
211
+ protected
212
+ def request
213
+ Blacklight::Solr::Request.new
214
+ end
215
+
162
216
  def should_add_field_to_request? field_name, field
163
217
  field.include_in_request || (field.include_in_request.nil? && blacklight_config.add_field_configuration_to_solr_request)
164
218
  end
@@ -166,5 +220,21 @@ module Blacklight
166
220
  def scope
167
221
  @scope
168
222
  end
223
+
224
+ def params_will_change!
225
+ @dirty = true
226
+ end
227
+
228
+ def params_changed?
229
+ !!@dirty
230
+ end
231
+
232
+ def params_need_update?
233
+ params_changed? || @params.nil?
234
+ end
235
+
236
+ def clear_changes
237
+ @dirty = false
238
+ end
169
239
  end
170
240
  end
@@ -78,7 +78,7 @@ module Blacklight::SearchHelper
78
78
  # Returns a two-element array (aka duple) with first the solr response object,
79
79
  # and second an array of SolrDocuments representing the response.docs
80
80
  def get_search_results(user_params = params || {}, extra_controller_params = {})
81
- query = search_builder.with(user_params).query(extra_controller_params)
81
+ query = search_builder.with(user_params).merge(extra_controller_params)
82
82
  response = repository.search(query)
83
83
 
84
84
  case
@@ -102,7 +102,7 @@ module Blacklight::SearchHelper
102
102
  builder.page(user_params[:page]) if user_params[:page]
103
103
  builder.rows(user_params[:per_page] || user_params[:rows]) if user_params[:per_page] or user_params[:rows]
104
104
 
105
- response = repository.search(builder.query)
105
+ response = repository.search(builder)
106
106
 
107
107
  case
108
108
  when (response.grouped? && grouped_key_for_results)
@@ -119,7 +119,7 @@ module Blacklight::SearchHelper
119
119
  # @param [Hash,HashWithIndifferentAccess] extra_controller_params ({}) extra parameters to add to the search
120
120
  # @return [Blacklight::SolrResponse] the solr response object
121
121
  def query_solr(user_params = params || {}, extra_controller_params = {})
122
- query = search_builder.with(user_params).query(extra_controller_params)
122
+ query = search_builder.with(user_params).merge(extra_controller_params)
123
123
  repository.search(query)
124
124
  end
125
125
  deprecation_deprecate :query_solr
@@ -145,7 +145,7 @@ module Blacklight::SearchHelper
145
145
  # @return [Blacklight::SolrResponse, Array<Blacklight::SolrDocument>] the solr response object and a list of solr documents
146
146
  def get_solr_response_for_field_values(field, values, extra_controller_params = {})
147
147
  query = Deprecation.silence(Blacklight::RequestBuilders) do
148
- search_builder.with(params).query(extra_controller_params.merge(solr_documents_by_field_values_params(field, values)))
148
+ search_builder.with(params).merge(extra_controller_params).merge(solr_documents_by_field_values_params(field, values))
149
149
  end
150
150
 
151
151
  solr_response = repository.search(query)
@@ -159,7 +159,7 @@ 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).query(extra_controller_params.merge(solr_facet_params(facet_field, user_params, extra_controller_params)))
162
+ query = search_builder.with(user_params).merge(extra_controller_params).merge(solr_facet_params(facet_field, user_params, extra_controller_params))
163
163
  repository.search(query)
164
164
  end
165
165
 
@@ -191,7 +191,7 @@ module Blacklight::SearchHelper
191
191
  # the Blacklight app-level request params that define the search.
192
192
  # @return [Blacklight::SolrDocument, nil] the found document or nil if not found
193
193
  def get_single_doc_via_search(index, request_params)
194
- query = search_builder.with(request_params).start(index - 1).rows(1).query(fl: "*")
194
+ query = search_builder.with(request_params).start(index - 1).rows(1).merge(fl: "*")
195
195
  response = repository.search(query)
196
196
  response.documents.first
197
197
  end
@@ -202,7 +202,7 @@ module Blacklight::SearchHelper
202
202
  def get_previous_and_next_documents_for_search(index, request_params, extra_controller_params={})
203
203
  p = previous_and_next_document_params(index)
204
204
 
205
- query = search_builder.with(request_params).start(p.delete(:start)).rows(p.delete(:rows)).query(extra_controller_params.merge(p))
205
+ query = search_builder.with(request_params).start(p.delete(:start)).rows(p.delete(:rows)).merge(extra_controller_params).merge(p)
206
206
  response = repository.search(query)
207
207
 
208
208
  document_list = response.documents
@@ -223,7 +223,7 @@ module Blacklight::SearchHelper
223
223
  def get_opensearch_response(field=nil, request_params = params || {}, extra_controller_params={})
224
224
  field ||= blacklight_config.view_config('opensearch').title_field
225
225
 
226
- query = search_builder.with(request_params).query(solr_opensearch_params(field).merge(extra_controller_params))
226
+ query = search_builder.with(request_params).merge(solr_opensearch_params(field)).merge(extra_controller_params)
227
227
  response = repository.search(query)
228
228
 
229
229
  [response.params[:q], response.documents.flat_map {|doc| doc[field] }.uniq]
@@ -273,7 +273,8 @@ module Blacklight::SearchHelper
273
273
  query = search_builder.
274
274
  with(user_params).
275
275
  where(blacklight_config.document_model.unique_key => ids).
276
- query(extra_controller_params.merge(fl: '*'))
276
+ merge(extra_controller_params).
277
+ merge(fl: '*')
277
278
  solr_response = repository.search(query)
278
279
 
279
280
  [solr_response, solr_response.documents]
@@ -12,8 +12,8 @@ module Blacklight
12
12
  # @param [String] document's unique key value
13
13
  # @param [Hash] additional solr query parameters
14
14
  def find id, params = {}
15
- doc_params = params.reverse_merge(qt: blacklight_config.document_solr_request_handler)
16
- .reverse_merge(blacklight_config.default_document_solr_params)
15
+ doc_params = params.reverse_merge(blacklight_config.default_document_solr_params)
16
+ .reverse_merge(qt: blacklight_config.document_solr_request_handler)
17
17
  .merge(blacklight_config.document_unique_id_param => id)
18
18
 
19
19
  solr_response = send_and_receive blacklight_config.document_solr_path || blacklight_config.solr_path, doc_params
@@ -26,7 +26,7 @@ module Blacklight
26
26
  ##
27
27
  # An OpenStruct that responds to common Hash methods
28
28
  class OpenStructWithHashAccess < OpenStruct
29
- delegate :keys, :each, :map, :has_key?, :empty?, :delete, :length, :reject!, :select!, :include, :fetch, :to_json, :as_json, :to => :to_h
29
+ delegate :keys, :each, :map, :has_key?, :key?, :include?, :empty?, :length, :delete, :delete_if, :keep_if, :clear, :reject!, :select!, :replace, :fetch, :to_json, :as_json, to: :to_h
30
30
 
31
31
  if ::RUBY_VERSION < '2.0'
32
32
  def []=(key, value)
@@ -53,6 +53,15 @@ module Blacklight
53
53
  self.class.new to_h.select(*args, &block)
54
54
  end
55
55
 
56
+ def sort_by *args, &block
57
+ self.class.new Hash[to_h.sort_by(*args, &block)]
58
+ end
59
+
60
+ def sort_by! *args, &block
61
+ replace Hash[to_h.sort_by(*args, &block)]
62
+ self
63
+ end
64
+
56
65
  ##
57
66
  # Merge the values of this OpenStruct with another OpenStruct or Hash
58
67
  # @param [Hash,#to_h]
@@ -539,4 +539,37 @@ describe BlacklightHelper do
539
539
  expect(helper.presenter_class).to eq Blacklight::DocumentPresenter
540
540
  end
541
541
  end
542
+
543
+ describe "#render_document_heading" do
544
+ before do
545
+ allow(helper).to receive(:presenter).and_return(double(document_heading: "Heading"))
546
+ end
547
+
548
+ let(:document) { double }
549
+
550
+ it "should accept no arguments and render the document heading" do
551
+ expect(helper.render_document_heading).to have_selector "h4", text: "Heading"
552
+ end
553
+
554
+ it "should accept a tag name and render the document heading" do
555
+ Deprecation.silence(Blacklight::BlacklightHelperBehavior) do
556
+ expect(helper.render_document_heading(:h3)).to have_selector "h3", text: "Heading"
557
+ expect(helper.render_document_heading("h2")).to have_selector "h2", text: "Heading"
558
+ end
559
+ end
560
+
561
+ it "should accept the tag name as an option" do
562
+ expect(helper.render_document_heading tag: "h1").to have_selector "h1", text: "Heading"
563
+ end
564
+
565
+ it "should accept an explicit document argument" do
566
+ allow(helper).to receive(:presenter).with(document).and_return(double(document_heading: "Document Heading"))
567
+ expect(helper.render_document_heading(document)).to have_selector "h4", text: "Document Heading"
568
+ end
569
+
570
+ it "should accept the document with a tag option" do
571
+ allow(helper).to receive(:presenter).with(document).and_return(double(document_heading: "Document Heading"))
572
+ expect(helper.render_document_heading(document, tag: "h3")).to have_selector "h3", text: "Document Heading"
573
+ end
574
+ end
542
575
  end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe LayoutHelper do
4
+ describe '#show_content_classes' do
5
+ it 'returns a string of classes' do
6
+ expect(helper.show_content_classes).to be_an String
7
+ expect(helper.show_content_classes).to eq 'col-md-9 col-sm-8 show-document'
8
+ end
9
+ end
10
+
11
+ describe '#show_sidebar_classes' do
12
+ it 'returns a string of classes' do
13
+ expect(helper.show_sidebar_classes).to be_an String
14
+ expect(helper.show_sidebar_classes).to eq 'col-md-3 col-sm-4'
15
+ end
16
+ end
17
+
18
+ describe '#main_content_classes' do
19
+ it 'returns a string of classes' do
20
+ expect(helper.main_content_classes).to be_an String
21
+ expect(helper.main_content_classes).to eq 'col-md-9 col-sm-8'
22
+ end
23
+ end
24
+
25
+ describe '#sidebar_classes' do
26
+ it 'returns a string of classes' do
27
+ expect(helper.sidebar_classes).to be_an String
28
+ expect(helper.sidebar_classes).to eq 'col-md-3 col-sm-4'
29
+ end
30
+ end
31
+ end
@@ -48,6 +48,18 @@ describe "Blacklight::Configuration" do
48
48
  expect(@config.search_fields).to be_a_kind_of ActiveSupport::OrderedHash
49
49
  expect(@config.sort_fields).to be_a_kind_of ActiveSupport::OrderedHash
50
50
  end
51
+
52
+ end
53
+
54
+ describe "#connection_config" do
55
+ let(:custom_config) { double }
56
+ it "should have the global blacklight configuration" do
57
+ expect(@config.connection_config).to eq Blacklight.connection_config
58
+ end
59
+ it "should be overridable with custom configuration" do
60
+ @config.connection_config = custom_config
61
+ expect(@config.connection_config).to eq custom_config
62
+ end
51
63
  end
52
64
 
53
65
  describe "config.index.respond_to" do
@@ -47,10 +47,51 @@ describe Blacklight::SearchBuilder do
47
47
  end
48
48
  end
49
49
 
50
- describe "#query" do
50
+ describe "#to_hash" do
51
51
  it "should append the extra parameters to the result" do
52
- actual = subject.query({a: 1})
53
- expect(actual).to include a: 1
52
+ Deprecation.silence(Blacklight::SearchBuilder) do
53
+ actual = subject.to_hash({a: 1})
54
+ expect(actual).to include a: 1
55
+ end
56
+ end
57
+
58
+ it "should update if data is changed" do
59
+ subject.merge(q: 'xyz')
60
+ expect(subject.to_hash).to include q: 'xyz'
61
+ subject.merge(q: 'abc')
62
+ expect(subject.to_hash).to include q: 'abc'
63
+ end
64
+ end
65
+
66
+ describe "#merge" do
67
+ let(:processor_chain) { [:pass_through] }
68
+ before do
69
+ allow(subject).to receive(:pass_through) do |req_params|
70
+ req_params.replace subject.blacklight_params
71
+ end
72
+ end
73
+ it "should overwrite the processed parameters" do
74
+ actual = subject.with(q: 'abc').merge(q: 'xyz')
75
+ expect(actual[:q]).to eq 'xyz'
76
+ end
77
+ end
78
+
79
+ describe "#reverse_merge" do
80
+ let(:processor_chain) { [:pass_through] }
81
+ before do
82
+ allow(subject).to receive(:pass_through) do |req_params|
83
+ req_params.replace subject.blacklight_params
84
+ end
85
+ end
86
+
87
+ it "should provide default values for parameters" do
88
+ actual = subject.reverse_merge(a: 1)
89
+ expect(actual[:a]).to eq 1
90
+ end
91
+
92
+ it "should not overwrite the processed parameters" do
93
+ actual = subject.with(q: 'abc').reverse_merge(q: 'xyz')
94
+ expect(actual[:q]).to eq 'abc'
54
95
  end
55
96
  end
56
97
 
@@ -152,4 +193,51 @@ describe Blacklight::SearchBuilder do
152
193
  expect(subject.with(search_field: 'x').send(:search_field)).to eq blacklight_config.search_fields['x']
153
194
  end
154
195
  end
196
+
197
+ describe "#params_changed?" do
198
+ it "should be false" do
199
+ expect(subject.send(:params_changed?)).to eq false
200
+ end
201
+
202
+ it "should be marked as changed when with() changes" do
203
+ subject.with(a: 1)
204
+ expect(subject.send(:params_changed?)).to eq true
205
+ end
206
+
207
+ it "should be marked as changed when where() changes" do
208
+ subject.where(a: 1)
209
+ expect(subject.send(:params_changed?)).to eq true
210
+ end
211
+
212
+ it "should be marked as changed when the processor chain changes" do
213
+ subject.append(:a)
214
+ expect(subject.send(:params_changed?)).to eq true
215
+ end
216
+
217
+ it "should be marked as changed when merged parameters are added" do
218
+ subject.merge(a: 1)
219
+ expect(subject.send(:params_changed?)).to eq true
220
+ end
221
+
222
+ it "should be marked as changed when reverse merged parameters are added" do
223
+ subject.merge(a: 1)
224
+ expect(subject.send(:params_changed?)).to eq true
225
+ end
226
+
227
+ it "should be marked as changed when pagination changes" do
228
+ subject.page(1)
229
+ expect(subject.send(:params_changed?)).to eq true
230
+ end
231
+
232
+ it "should be marked as changed when rows changes" do
233
+ subject.rows(1)
234
+ expect(subject.send(:params_changed?)).to eq true
235
+ end
236
+
237
+ it "should be marked as changed when start offset changes" do
238
+ subject.start(1)
239
+ expect(subject.send(:params_changed?)).to eq true
240
+ end
241
+
242
+ end
155
243
  end
@@ -42,6 +42,13 @@ describe Blacklight::SolrRepository do
42
42
  allow(subject.connection).to receive(:send_and_receive).with('select', hash_including(params: { id: '123', qt: 'abc'})).and_return(mock_response)
43
43
  expect(subject.find("123", {qt: 'abc'})).to be_a_kind_of Blacklight::SolrResponse
44
44
  end
45
+
46
+ it "should use the :qt parameter from the default_document_solr_params" do
47
+ blacklight_config.default_document_solr_params[:qt] = 'abc'
48
+ blacklight_config.document_solr_request_handler = 'xyz'
49
+ allow(subject.connection).to receive(:send_and_receive).with('select', hash_including(params: { id: '123', qt: 'abc'})).and_return(mock_response)
50
+ expect(subject.find("123")).to be_a_kind_of Blacklight::SolrResponse
51
+ end
45
52
 
46
53
  it "should preserve the class of the incoming params" do
47
54
  doc_params = HashWithIndifferentAccess.new
@@ -48,6 +48,50 @@ describe 'Blacklight::Utils' do
48
48
 
49
49
  end
50
50
 
51
+ describe "#key?" do
52
+ subject do
53
+ h = Blacklight::OpenStructWithHashAccess.new
54
+ h[:a] = 1
55
+ h[:b] = 2
56
+ h
57
+ end
58
+
59
+ it "is true if the key exists" do
60
+ expect(subject.key? :a).to eq true
61
+ end
62
+
63
+ it "is false if the key does not exist" do
64
+ expect(subject.key? :c).to eq false
65
+ end
66
+ end
67
+
68
+ describe "#replace" do
69
+ subject { Blacklight::OpenStructWithHashAccess.new a: 1 }
70
+
71
+ it "can use #replace to reorder the hash" do
72
+ subject.replace b: 1
73
+ expect(subject.b).to eq 1
74
+ end
75
+ end
76
+
77
+ describe "#sort_by" do
78
+ subject { Blacklight::OpenStructWithHashAccess.new c: 3, b:1, a: 2 }
79
+
80
+ it "should sort the underlying hash" do
81
+ sorted = subject.sort_by { |k,v| v }
82
+ expect(sorted.keys).to match_array [:b, :a, :c]
83
+ end
84
+ end
85
+
86
+ describe "#sort_by!" do
87
+ subject { Blacklight::OpenStructWithHashAccess.new c: 3, b:1, a: 2 }
88
+
89
+ it "should sort the underlying hash" do
90
+ subject.sort_by! { |k,v| v }
91
+ expect(subject.keys).to match_array [:b, :a, :c]
92
+ end
93
+ end
94
+
51
95
  describe "#merge" do
52
96
 
53
97
  before do
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.12.1
4
+ version: 5.13.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-03-25 00:00:00.000000000 Z
20
+ date: 2015-04-10 00:00:00.000000000 Z
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
23
23
  name: rails
@@ -292,6 +292,7 @@ files:
292
292
  - app/helpers/blacklight/configuration_helper_behavior.rb
293
293
  - app/helpers/blacklight/facets_helper_behavior.rb
294
294
  - app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb
295
+ - app/helpers/blacklight/layout_helper_behavior.rb
295
296
  - app/helpers/blacklight/render_constraints_helper_behavior.rb
296
297
  - app/helpers/blacklight/render_partials_helper.rb
297
298
  - app/helpers/blacklight/search_history_constraints_helper_behavior.rb
@@ -303,6 +304,7 @@ files:
303
304
  - app/helpers/component_helper.rb
304
305
  - app/helpers/facets_helper.rb
305
306
  - app/helpers/hash_as_hidden_fields_helper.rb
307
+ - app/helpers/layout_helper.rb
306
308
  - app/helpers/render_constraints_helper.rb
307
309
  - app/helpers/search_history_constraints_helper.rb
308
310
  - app/models/bookmark.rb
@@ -350,6 +352,7 @@ files:
350
352
  - app/views/catalog/_search_sidebar.html.erb
351
353
  - app/views/catalog/_show_default.html.erb
352
354
  - app/views/catalog/_show_header_default.html.erb
355
+ - app/views/catalog/_show_main_content.html.erb
353
356
  - app/views/catalog/_show_more_like_this.html.erb
354
357
  - app/views/catalog/_show_sidebar.html.erb
355
358
  - app/views/catalog/_show_tools.html.erb
@@ -514,6 +517,7 @@ files:
514
517
  - spec/helpers/configuration_helper_spec.rb
515
518
  - spec/helpers/facets_helper_spec.rb
516
519
  - spec/helpers/hash_as_hidden_fields_spec.rb
520
+ - spec/helpers/layout_helper_spec.rb
517
521
  - spec/helpers/render_constraints_helper_spec.rb
518
522
  - spec/helpers/search_history_constraints_helper_spec.rb
519
523
  - spec/helpers/url_helper_spec.rb
@@ -634,6 +638,7 @@ test_files:
634
638
  - spec/helpers/configuration_helper_spec.rb
635
639
  - spec/helpers/facets_helper_spec.rb
636
640
  - spec/helpers/hash_as_hidden_fields_spec.rb
641
+ - spec/helpers/layout_helper_spec.rb
637
642
  - spec/helpers/render_constraints_helper_spec.rb
638
643
  - spec/helpers/search_history_constraints_helper_spec.rb
639
644
  - spec/helpers/url_helper_spec.rb