blacklight 5.12.1 → 5.13.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 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