blacklight 6.11.0 → 6.11.1

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: 741267e0943b9248b05baca938f10fe8c3454717
4
- data.tar.gz: 333367da063309c42774d31396aadaa17480bc43
3
+ metadata.gz: 8a72b5c9469391daec118e8cfef69fd9960cf687
4
+ data.tar.gz: 1a9a6c9147a770fa9ffaa107d789618b39b2c2fd
5
5
  SHA512:
6
- metadata.gz: 9e86f64f778efb7e43db4b0acd10999bb8c151ba30f59272522354469ad79ba28b04979864d381b2532c478b28fac33e712961bd5ca85aef41a04c0849e1dbe6
7
- data.tar.gz: b6c6bc62fa20aeb936610a14de238f99f39f66cc3597255f7ab8c440897526bd95d6aad5eecb56f43ce50716f3af4eac7700147203cd367c13ab78be7f83d3a7
6
+ metadata.gz: 286d8992abd602981c3603da27a5fe7aa9d7f5796b1b32c4ee63f1afdd66ca3ea50d7a5b15ebf2ea03102b3460a19e5f4ebf0a5a12f2b36772f6971a08cc7f3c
7
+ data.tar.gz: 9d8b1df273e758854c4e79407cd4817a8561e6b1879100855a1db2400d43fc54219e9ef4c41ba5c69074897915328dd54876f252ba702bc5b6734516c7e32f9e
data/VERSION CHANGED
@@ -1 +1 @@
1
- 6.11.0
1
+ 6.11.1
@@ -1,14 +1,14 @@
1
1
  //= require blacklight/core
2
2
 
3
- /*
3
+ /*
4
4
  The ajax_modal plugin can display some interactions inside a Bootstrap
5
- modal window, including some multi-page interactions.
5
+ modal window, including some multi-page interactions.
6
6
 
7
7
  It supports unobtrusive Javascript, where a link or form that would have caused
8
8
  a new page load is changed to display it's results inside a modal dialog,
9
9
  by this plugin. The plugin assumes there is a Bootstrap modal div
10
10
  on the page with id #ajax-modal to use as the modal -- the standard Blacklight
11
- layout provides this.
11
+ layout provides this.
12
12
 
13
13
  To make a link or form have their results display inside a modal, add
14
14
  `data-ajax-modal="trigger"` to the link or form. (Note, form itself not submit input)
@@ -23,18 +23,18 @@
23
23
  the layout when a JS AJAX request is detected, OR the response
24
24
  can include a `<div data-ajax-modal="container">` -- only the contents
25
25
  of the container will be placed inside the modal, the rest of the
26
- page will be ignored.
26
+ page will be ignored.
27
27
 
28
28
  If you'd like to have a link or button that closes the modal,
29
29
  you can just add a `data-dismiss="modal"` to the link,
30
30
  standard Bootstrap convention. But you can also have
31
31
  an href on this link for non-JS contexts, we'll make sure
32
- inside the modal it closes the modal and the link is NOT followed.
32
+ inside the modal it closes the modal and the link is NOT followed.
33
33
 
34
34
  Link or forms inside the modal will ordinarily cause page loads
35
35
  when they are triggered. However, if you'd like their results
36
36
  to stay within the modal, just add `data-ajax-modal="preserve"`
37
- to the link or form.
37
+ to the link or form.
38
38
 
39
39
  Here's an example of what might be returned, demonstrating most of the devices available:
40
40
 
@@ -43,7 +43,7 @@
43
43
  <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
44
44
  <h3 class="modal-title">Request Placed</h3>
45
45
  </div>
46
-
46
+
47
47
  <div class="modal-body">
48
48
  <p>Some message</p>
49
49
  <%= link_to "This result will still be within modal", some_link, :data => {:ajax_modal => "preserve"} %>
@@ -59,22 +59,22 @@
59
59
  One additional feature. If the content returned from the AJAX modal load
60
60
  has an element with `data-ajax-modal=close`, that will trigger the modal
61
61
  to be closed. And if this element includes a node with class "flash_messages",
62
- the flash-messages node will be added to the main page inside #main-flahses.
62
+ the flash-messages node will be added to the main page inside #main-flahses.
63
63
 
64
64
  == Events
65
65
 
66
66
  We'll send out an event 'loaded.blacklight.ajax-modal' with the #ajax-modal
67
67
  dialog as the target, right after content is loaded into the modal but before
68
- it is shown (if not already a shown modal). In an event handler, you can
68
+ it is shown (if not already a shown modal). In an event handler, you can
69
69
  inspect loaded content by looking inside $(this). If you call event.preventDefault(),
70
70
  we won't 'show' the dialog (although it may already have been shown, you may want to
71
- $(this).modal("hide") if you want to ensure hidden/closed.
71
+ $(this).modal("hide") if you want to ensure hidden/closed.
72
72
 
73
- The data-ajax-modal=close behavior is implemented with this event, see for example.
73
+ The data-ajax-modal=close behavior is implemented with this event, see for example.
74
74
  */
75
75
 
76
- // We keep all our data in Blacklight.ajaxModal object.
77
- // Create lazily if someone else created first.
76
+ // We keep all our data in Blacklight.ajaxModal object.
77
+ // Create lazily if someone else created first.
78
78
  if (Blacklight.ajaxModal === undefined) {
79
79
  Blacklight.ajaxModal = {};
80
80
  }
@@ -104,67 +104,57 @@ Blacklight.ajaxModal.modalCloseSelector = "[data-ajax-modal~=close], span.ajax
104
104
 
105
105
  // Called on fatal failure of ajax load, function returns content
106
106
  // to show to user in modal. Right now called only for extreme
107
- // network errors.
107
+ // network errors.
108
108
  Blacklight.ajaxModal.onFailure = function(data) {
109
109
  var contents = "<div class='modal-header'>" +
110
110
  "<button type='button' class='close' data-dismiss='modal' aria-hidden='true'>×</button>" +
111
111
  "Network Error</div>";
112
112
  $(Blacklight.ajaxModal.modalSelector).find('.modal-content').html(contents);
113
- $(Blacklight.ajaxModal.modalSelector).modal('show');
113
+ $(Blacklight.ajaxModal.modalSelector).modal('show');
114
114
  }
115
115
 
116
- Blacklight.ajaxModal.receiveAjax = function (data) {
117
- if (data.readyState == 0) {
118
- // Network error, could not contact server.
119
- Blacklight.ajaxModal.onFailure(data)
120
- }
121
- else {
122
- var contents = data.responseText;
123
-
124
- // does it have a data- selector for container?
125
- // important we don't execute script tags, we shouldn't.
126
- // code modelled off of JQuery ajax.load. https://github.com/jquery/jquery/blob/master/src/ajax/load.js?source=c#L62
127
- var container = $("<div>").
128
- append( jQuery.parseHTML(contents) ).find( Blacklight.ajaxModal.containerSelector ).first();
129
- if (container.size() !== 0) {
130
- contents = container.html();
131
- }
132
-
133
- $(Blacklight.ajaxModal.modalSelector).find('.modal-content').html(contents);
134
-
135
- // send custom event with the modal dialog div as the target
136
- var e = $.Event('loaded.blacklight.ajax-modal')
137
- $(Blacklight.ajaxModal.modalSelector).trigger(e);
138
- // if they did preventDefault, don't show the dialog
139
- if (e.isDefaultPrevented()) return;
140
-
141
- $(Blacklight.ajaxModal.modalSelector).modal('show');
142
- }
116
+ Blacklight.ajaxModal.receiveAjax = function (contents) {
117
+ // does it have a data- selector for container?
118
+ // important we don't execute script tags, we shouldn't.
119
+ // code modelled off of JQuery ajax.load. https://github.com/jquery/jquery/blob/master/src/ajax/load.js?source=c#L62
120
+ var container = $("<div>").
121
+ append( jQuery.parseHTML(contents) ).find( Blacklight.ajaxModal.containerSelector ).first();
122
+ if (container.length !== 0) {
123
+ contents = container.html();
124
+ }
125
+
126
+ $(Blacklight.ajaxModal.modalSelector).find('.modal-content').html(contents);
127
+
128
+ // send custom event with the modal dialog div as the target
129
+ var e = $.Event('loaded.blacklight.blacklight-modal')
130
+ $(Blacklight.ajaxModal.modalSelector).trigger(e);
131
+ // if they did preventDefault, don't show the dialog
132
+ if (e.isDefaultPrevented()) return;
133
+
134
+ $(Blacklight.ajaxModal.modalSelector).modal('show');
143
135
  };
144
136
 
145
137
 
146
138
  Blacklight.ajaxModal.modalAjaxLinkClick = function(e) {
147
139
  e.preventDefault();
148
140
 
149
- var jqxhr = $.ajax({
150
- url: $(this).attr('href'),
151
- dataType: 'script'
152
- });
153
-
154
- jqxhr.always( Blacklight.ajaxModal.receiveAjax );
141
+ $.ajax({
142
+ url: $(this).attr('href')
143
+ })
144
+ .fail(Blacklight.ajaxModal.onFailure)
145
+ .done(Blacklight.ajaxModal.receiveAjax)
155
146
  };
156
147
 
157
148
  Blacklight.ajaxModal.modalAjaxFormSubmit = function(e) {
158
- e.preventDefault();
159
-
160
- var jqxhr = $.ajax({
161
- url: $(this).attr('action'),
162
- data: $(this).serialize(),
163
- type: $(this).attr('method'), //POST',
164
- dataType: 'script'
165
- });
149
+ e.preventDefault();
166
150
 
167
- jqxhr.always(Blacklight.ajaxModal.receiveAjax);
151
+ $.ajax({
152
+ url: $(this).attr('action'),
153
+ data: $(this).serialize(),
154
+ type: $(this).attr('method') // POST
155
+ })
156
+ .fail(Blacklight.ajaxModal.onFailure)
157
+ .done(Blacklight.ajaxModal.receiveAjax)
168
158
  }
169
159
 
170
160
 
@@ -172,14 +162,14 @@ Blacklight.ajaxModal.modalAjaxFormSubmit = function(e) {
172
162
  Blacklight.ajaxModal.setup_modal = function() {
173
163
  // Event indicating blacklight is setting up a modal link,
174
164
  // you can catch it and call e.preventDefault() to abort
175
- // setup.
165
+ // setup.
176
166
  var e = $.Event('setup.blacklight.ajax-modal');
177
167
  $("body").trigger(e);
178
168
  if (e.isDefaultPrevented()) return;
179
169
 
180
170
  // Register both trigger and preserve selectors in ONE event handler, combining
181
171
  // into one selector with a comma, so if something matches BOTH selectors, it
182
- // still only gets the event handler called once.
172
+ // still only gets the event handler called once.
183
173
  $("body").on("click", Blacklight.ajaxModal.triggerLinkSelector + ", " + Blacklight.ajaxModal.preserveLinkSelector,
184
174
  Blacklight.ajaxModal.modalAjaxLinkClick);
185
175
  $("body").on("submit", Blacklight.ajaxModal.triggerFormSelector + ", " + Blacklight.ajaxModal.preserveFormSelector,
@@ -190,7 +180,7 @@ Blacklight.ajaxModal.setup_modal = function() {
190
180
 
191
181
  // we support doing data-dismiss=modal on a <a> with a href for non-ajax
192
182
  // use, we need to suppress following the a's href that's there for
193
- // non-JS contexts.
183
+ // non-JS contexts.
194
184
  $("body ").on("click", Blacklight.ajaxModal.modalSelector + " a[data-dismiss~=modal]", function (e) {
195
185
  e.preventDefault();
196
186
  });
@@ -198,7 +188,7 @@ Blacklight.ajaxModal.setup_modal = function() {
198
188
 
199
189
  // A function used as an event handler on loaded.blacklight.ajax-modal
200
190
  // to catch contained data-ajax-modal=closed directions
201
- Blacklight.ajaxModal.check_close_ajax_modal = function(event) {
191
+ Blacklight.ajaxModal.check_close_ajax_modal = function(event) {
202
192
  if ($(event.target).find(Blacklight.ajaxModal.modalCloseSelector).length) {
203
193
  modal_flashes = $(this).find('.flash_messages');
204
194
 
@@ -207,10 +197,10 @@ Blacklight.ajaxModal.check_close_ajax_modal = function(event) {
207
197
 
208
198
  main_flashes = $('#main-flashes');
209
199
  main_flashes.append(modal_flashes);
210
- modal_flashes.fadeIn(500);
200
+ modal_flashes.fadeIn(500);
211
201
  }
212
202
  }
213
203
 
214
- Blacklight.onLoad(function() {
204
+ Blacklight.onLoad(function() {
215
205
  Blacklight.ajaxModal.setup_modal();
216
206
  });
@@ -71,11 +71,12 @@ module Blacklight::Catalog
71
71
  @display_facet = @response.aggregations[@facet.field]
72
72
  @pagination = facet_paginator(@facet, @display_facet)
73
73
  respond_to do |format|
74
- # Draw the facet selector for users who have javascript disabled:
75
- format.html
74
+ format.html do
75
+ # Draw the partial for the "more" facet modal window:
76
+ return render layout: false if request.xhr?
77
+ # Otherwise draw the facet selector for users who have javascript disabled.
78
+ end
76
79
  format.json
77
- # Draw the partial for the "more" facet modal window:
78
- format.js { render :layout => false }
79
80
  end
80
81
  end
81
82
 
@@ -214,7 +214,11 @@ module Blacklight::CatalogHelperBehavior
214
214
  end
215
215
 
216
216
  if value
217
- if url_options == false || url_options[:suppress_link]
217
+ if url_options == false
218
+ Deprecation.warn(self, "passing false as the second argument to render_thumbnail_tag is deprecated. Use suppress_link: true instead. This behavior will be removed in Blacklight 7")
219
+ url_options = { suppress_link: true }
220
+ end
221
+ if url_options[:suppress_link]
218
222
  value
219
223
  else
220
224
  link_to_document document, value, url_options
@@ -54,7 +54,7 @@ module Blacklight
54
54
 
55
55
  def render_filtered_partials(partials, options={}, &block)
56
56
  content = []
57
- partials.select { |_, config| blacklight_configuration_context.evaluate_if_unless_configuration config, options }.each do |key, config|
57
+ filter_partials(partials, options).each do |key, config|
58
58
  config.key ||= key
59
59
  rendered = render(partial: config.partial || key.to_s, locals: { document_action_config: config }.merge(options))
60
60
  if block_given?
@@ -78,5 +78,15 @@ module Blacklight
78
78
  def render_show_doc_actions(document=@document, options={}, &block)
79
79
  render_filtered_partials(blacklight_config.show.document_actions, { document: document }.merge(options), &block)
80
80
  end
81
+
82
+ def show_doc_actions?(document = @document, options = {})
83
+ filter_partials(blacklight_config.show.document_actions, { document: document }.merge(options)).any?
84
+ end
85
+
86
+ private
87
+
88
+ def filter_partials(partials, options)
89
+ partials.select { |_, config| blacklight_configuration_context.evaluate_if_unless_configuration config, options }
90
+ end
81
91
  end
82
92
  end
@@ -130,7 +130,14 @@ module Blacklight::ConfigurationHelperBehavior
130
130
  should_render_field? config
131
131
  end
132
132
  end
133
-
133
+
134
+ # filter #document_index_views to just views that should display in the view type control
135
+ def document_index_view_controls
136
+ document_index_views.select do |_k, config|
137
+ config.display_control.nil? || blacklight_configuration_context.evaluate_configuration_conditional(config.display_control)
138
+ end
139
+ end
140
+
134
141
  ##
135
142
  # Get the default index view type
136
143
  def default_document_index_view_type
@@ -76,9 +76,9 @@ module Blacklight::UrlHelperBehavior
76
76
  return if document.nil?
77
77
 
78
78
  if respond_to?(controller_tracking_method)
79
- send(controller_tracking_method, params.merge(id: document.id))
79
+ send(controller_tracking_method, params.merge(id: document))
80
80
  else
81
- blacklight.track_search_context_path(params.merge(id: document.id))
81
+ blacklight.track_search_context_path(params.merge(id: document))
82
82
  end
83
83
  end
84
84
 
@@ -37,7 +37,7 @@ module Blacklight::Document
37
37
  extend ActiveModel::Naming
38
38
  include Blacklight::Document::Extensions
39
39
  include GlobalID::Identification
40
- end
40
+ end
41
41
 
42
42
  attr_reader :response, :_source
43
43
  alias_method :solr_response, :response
@@ -69,15 +69,14 @@ module Blacklight::Document
69
69
  end
70
70
 
71
71
  def respond_to_missing? m, *args
72
- return super if m == :to_hash
73
-
72
+ return super if %i(empty? to_hash).include?(m)
74
73
  _source_responds_to?(m, *args) || super
75
74
  end
76
75
 
77
76
  # Helper method to check if value/multi-values exist for a given key.
78
77
  # The value can be a string, or a RegExp
79
78
  # Multiple "values" can be given; only one needs to match.
80
- #
79
+ #
81
80
  # Example:
82
81
  # doc.has?(:location_facet)
83
82
  # doc.has?(:location_facet, 'Clemons')
@@ -141,12 +140,12 @@ module Blacklight::Document
141
140
  module ClassMethods
142
141
  attr_writer :unique_key
143
142
  def unique_key
144
- @unique_key ||= 'id'
143
+ @unique_key ||= 'id'
145
144
  end
146
145
  end
147
-
146
+
148
147
  private
149
-
148
+
150
149
  def _source_responds_to? *args
151
150
  _source && self != _source && _source.respond_to?(*args)
152
151
  end
@@ -34,12 +34,14 @@ module Blacklight::Document
34
34
  # but extensions should call super and modify hash returned, to avoid
35
35
  # unintentionally erasing values provided by other extensions.
36
36
  def to_semantic_values
37
- @semantic_value_hash ||= self.class.field_semantics.each_with_object(Hash.new([])) do |(key, field_name), hash|
38
- value = self[field_name]
37
+ @semantic_value_hash ||= self.class.field_semantics.each_with_object(Hash.new([])) do |(key, field_names), hash|
38
+ ##
39
+ # Handles single string field_name or an array of field_names
40
+ value = Array.wrap(field_names).map { |field_name| self[field_name] }.flatten.compact
39
41
 
40
42
  # Make single and multi-values all arrays, so clients
41
43
  # don't have to know.
42
- hash[key] = Array.wrap(value) unless value.nil?
44
+ hash[key] = value unless value.empty?
43
45
  end
44
46
 
45
47
  @semantic_value_hash ||= {}
@@ -1,24 +1,26 @@
1
- <%-
2
- # Compare with render_document_functions_partial helper, and
3
- # _document_functions partial. BL actually has two groups
4
- # of document-related tools. "document functions" by default
5
- # contains Bookmark functionality shown on both results and
6
- # item view. While "document tools" contains external export type
7
- # functions by default only on detail.
8
-
9
- -%>
10
- <div class="panel panel-default show-tools">
11
- <div class="panel-heading">
12
- <%= t('blacklight.tools.title') %>
13
- </div>
14
-
15
- <div class="panel-body">
16
- <ul class="nav">
17
- <%= render_show_doc_actions @document do |config, inner| %>
18
- <li class="<%= config.key %>">
19
- <%= inner %>
20
- </li>
21
- <% end %>
22
- </ul>
23
- </div>
24
- </div>
1
+ <%-
2
+ # Compare with render_document_functions_partial helper, and
3
+ # _document_functions partial. BL actually has two groups
4
+ # of document-related tools. "document functions" by default
5
+ # contains Bookmark functionality shown on both results and
6
+ # item view. While "document tools" contains external export type
7
+ # functions by default only on detail.
8
+
9
+ -%>
10
+ <% if show_doc_actions? %>
11
+ <div class="panel panel-default show-tools">
12
+ <div class="panel-heading">
13
+ <%= t('blacklight.tools.title') %>
14
+ </div>
15
+
16
+ <div class="panel-body">
17
+ <ul class="nav">
18
+ <%= render_show_doc_actions @document do |config, inner| %>
19
+ <li class="<%= config.key %>">
20
+ <%= inner %>
21
+ </li>
22
+ <% end %>
23
+ </ul>
24
+ </div>
25
+ </div>
26
+ <% end %>
@@ -2,7 +2,7 @@
2
2
  <div class="view-type">
3
3
  <span class="sr-only"><%= t('blacklight.search.view_title') %></span>
4
4
  <div class="view-type-group btn-group">
5
- <% document_index_views.each do |view, config| %>
5
+ <% document_index_view_controls.each do |view, config| %>
6
6
  <%= link_to url_for(search_state.to_h.merge(view: view)), title: view_label(view), class: "btn btn-default view-type-#{ view.to_s.parameterize } #{"active" if document_index_view_type == view}" do %>
7
7
  <%= render_view_type_group_icon view %>
8
8
  <span class="caption"><%= view_label(view) %></span>
@@ -14,7 +14,7 @@ module Blacklight
14
14
  ##
15
15
  # An OpenStruct that responds to common Hash methods
16
16
  class OpenStructWithHashAccess < OpenStruct
17
- 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
17
+ delegate :keys, :each, :map, :has_key?, :key?, :include?, :empty?, :length, :delete, :delete_if, :keep_if, :clear, :reject!, :select!, :replace, :fetch, :to_json, :as_json, :any?, to: :to_h
18
18
 
19
19
  ##
20
20
  # Expose the internal hash
@@ -243,7 +243,7 @@ describe CatalogHelper do
243
243
  it "does not link to the document if the url options are false" do
244
244
  allow(helper).to receive_messages(:blacklight_config => Blacklight::Configuration.new(:index => Blacklight::OpenStructWithHashAccess.new(:thumbnail_method => :xyz) ))
245
245
  allow(helper).to receive_messages(:xyz => "some-thumbnail")
246
-
246
+ expect(Deprecation).to receive(:warn)
247
247
  result = helper.render_thumbnail_tag document, {}, false
248
248
  expect(result).to eq "some-thumbnail"
249
249
  end
@@ -65,6 +65,18 @@ describe BlacklightConfigurationHelper do
65
65
  end
66
66
  end
67
67
 
68
+ describe '#document_index_view_controls' do
69
+ before do
70
+ blacklight_config.view.a
71
+ blacklight_config.view.b.display_control = false
72
+ end
73
+
74
+ it "filters index views to those set to display controls" do
75
+ expect(helper.document_index_view_controls).to have_key :a
76
+ expect(helper.document_index_view_controls).not_to have_key :b
77
+ end
78
+ end
79
+
68
80
  describe "#has_alternative_views?" do
69
81
  subject { helper.has_alternative_views?}
70
82
  describe "with a single view defined" do
@@ -245,7 +245,7 @@ describe BlacklightUrlHelper do
245
245
  end
246
246
 
247
247
  it "converts the counter parameter into a data- attribute" do
248
- allow(helper).to receive(:track_test_path).with(hash_including(id: '123456', counter: 5)).and_return('tracking url')
248
+ allow(helper).to receive(:track_test_path).with(hash_including(id: have_attributes(id: '123456'), counter: 5)).and_return('tracking url')
249
249
 
250
250
  expect(helper.link_to_document(document, :title_display, counter: 5)).to include 'data-context-href="tracking url"'
251
251
  end
@@ -287,12 +287,12 @@ describe BlacklightUrlHelper do
287
287
  describe "#session_tracking_path" do
288
288
  let(:document) { SolrDocument.new(id: 1) }
289
289
  it "determines the correct route for the document class" do
290
- allow(helper).to receive(:track_test_path).with(id: 1).and_return('x')
290
+ allow(helper).to receive(:track_test_path).with(id: have_attributes(id: 1)).and_return('x')
291
291
  expect(helper.session_tracking_path(document)).to eq 'x'
292
292
  end
293
293
 
294
294
  it "passes through tracking parameters" do
295
- allow(helper).to receive(:track_test_path).with(id: 1, x: 1).and_return('x')
295
+ allow(helper).to receive(:track_test_path).with(id: have_attributes(id: 1), x: 1).and_return('x')
296
296
  expect(helper.session_tracking_path(document, x: 1)).to eq 'x'
297
297
  end
298
298
  end
@@ -199,17 +199,23 @@ describe "Blacklight::Solr::Document" do
199
199
  include Blacklight::Solr::Document
200
200
  end
201
201
  before do
202
- MockDocument.field_semantics.merge!( :title => "title_field", :author => "author_field", :something => "something_field" )
203
-
202
+ MockDocument.field_semantics.merge!(
203
+ title: ["title_field", "other_title"],
204
+ author: "author_field",
205
+ something: "something_field"
206
+ )
207
+
204
208
  @doc1 = MockDocument.new(
205
209
  "title_field" => "doc1 title",
210
+ "other_title" => "doc1 title other",
206
211
  "something_field" => ["val1", "val2"],
207
212
  "not_in_list_field" => "weird stuff"
208
213
  )
209
214
  end
210
215
 
211
216
  it "should return complete dictionary based on config'd fields" do
212
- expect(@doc1.to_semantic_values).to eq :title => ["doc1 title"], :something => ["val1", "val2"]
217
+ expect(@doc1.to_semantic_values)
218
+ .to eq title: ["doc1 title", "doc1 title other"], something: ["val1", "val2"]
213
219
  end
214
220
  it "should return empty array for a key without a value" do
215
221
  expect(@doc1.to_semantic_values[:author]).to be_empty
@@ -69,5 +69,17 @@ describe "catalog/_show_tools.html.erb" do
69
69
  render partial: 'catalog/show_tools'
70
70
  expect(rendered).not_to have_selector '.some_action > a[data-ajax-modal="trigger"]', text: "Some action"
71
71
  end
72
+
73
+ context 'without any document actions defined' do
74
+ before do
75
+ document_actions.clear
76
+ end
77
+
78
+ it 'does not display the tools' do
79
+ render partial: 'catalog/show_tools'
80
+
81
+ expect(rendered).to be_blank
82
+ end
83
+ end
72
84
  end
73
85
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blacklight
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.11.0
4
+ version: 6.11.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Rochkind
@@ -17,7 +17,7 @@ authors:
17
17
  autorequire:
18
18
  bindir: exe
19
19
  cert_chain: []
20
- date: 2017-08-10 00:00:00.000000000 Z
20
+ date: 2017-09-08 00:00:00.000000000 Z
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
23
23
  name: rails