blacklight 6.4.2 → 6.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile +11 -12
- data/VERSION +1 -1
- data/app/assets/stylesheets/blacklight/_twitter_typeahead.scss +1 -1
- data/app/assets/stylesheets/blacklight/blacklight_defaults.scss +1 -0
- data/app/controllers/concerns/blacklight/bookmarks.rb +8 -10
- data/app/controllers/concerns/blacklight/catalog.rb +10 -24
- data/app/helpers/blacklight/catalog_helper_behavior.rb +14 -6
- data/app/models/concerns/blacklight/document/export.rb +16 -18
- data/app/models/search.rb +3 -7
- data/app/views/saved_searches/index.html.erb +1 -1
- data/blacklight.gemspec +1 -1
- data/lib/blacklight/engine.rb +1 -0
- data/spec/controllers/bookmarks_controller_spec.rb +6 -0
- data/spec/controllers/catalog_controller_spec.rb +97 -152
- data/spec/helpers/catalog_helper_spec.rb +36 -0
- data/spec/models/blacklight/configuration_spec.rb +1 -1
- data/spec/support/backport_test.rb +9 -33
- data/template.demo.rb +0 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a6689bf20317b8fb6bee88d3064ce8528fbfe2ec
|
4
|
+
data.tar.gz: 2a83b261f71d22b9959014af71f0cc64736bd228
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0e83db02e3fa34951449c29fcc84ea4e92395d90a914b0432f6a2494c52f12b0032f482fbd5fbd0f309c03457038546f4eee4273f9a26ca39869ccc09af92160
|
7
|
+
data.tar.gz: 6273e3a816b869b90ed3f4eb5e1dffcf2d15786687b806fd45c9b0c61e76894158d4b0a3a741e10fd06c94b865342edcfdb589ba959dfa3cf3857a85e3d53a00
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
@@ -11,10 +11,10 @@ group :test do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
# BEGIN ENGINE_CART BLOCK
|
14
|
-
# engine_cart: 0.
|
15
|
-
# engine_cart stanza: 0.
|
14
|
+
# engine_cart: 0.10.0
|
15
|
+
# engine_cart stanza: 0.10.0
|
16
16
|
# the below comes from engine_cart, a gem used to test this Rails engine gem in the context of a Rails app.
|
17
|
-
file = File.expand_path(
|
17
|
+
file = File.expand_path('Gemfile', ENV['ENGINE_CART_DESTINATION'] || ENV['RAILS_ROOT'] || File.expand_path('.internal_test_app', File.dirname(__FILE__)))
|
18
18
|
if File.exist?(file)
|
19
19
|
begin
|
20
20
|
eval_gemfile file
|
@@ -28,20 +28,19 @@ else
|
|
28
28
|
if ENV['RAILS_VERSION']
|
29
29
|
if ENV['RAILS_VERSION'] == 'edge'
|
30
30
|
gem 'rails', github: 'rails/rails'
|
31
|
-
ENV['ENGINE_CART_RAILS_OPTIONS']=
|
31
|
+
ENV['ENGINE_CART_RAILS_OPTIONS'] = '--edge --skip-turbolinks'
|
32
32
|
else
|
33
33
|
gem 'rails', ENV['RAILS_VERSION']
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
gem '
|
41
|
-
gem '
|
42
|
-
|
43
|
-
gem '
|
44
|
-
gem 'sass-rails', "< 5.0"
|
37
|
+
case ENV['RAILS_VERSION']
|
38
|
+
when /^4.2/
|
39
|
+
gem 'responders', '~> 2.0'
|
40
|
+
gem 'sass-rails', '>= 5.0'
|
41
|
+
gem 'coffee-rails', '~> 4.1.0'
|
42
|
+
when /^4.[01]/
|
43
|
+
gem 'sass-rails', '< 5.0'
|
45
44
|
end
|
46
45
|
end
|
47
46
|
# END ENGINE_CART BLOCK
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
6.
|
1
|
+
6.5.0
|
@@ -15,6 +15,7 @@ module Blacklight::Bookmarks
|
|
15
15
|
|
16
16
|
before_action :verify_user
|
17
17
|
|
18
|
+
blacklight_config.http_method = Blacklight::Engine.config.bookmarks_http_method
|
18
19
|
blacklight_config.add_results_collection_tool(:clear_bookmarks_widget)
|
19
20
|
|
20
21
|
blacklight_config.show.document_actions[:bookmark].if = false if blacklight_config.show.document_actions[:bookmark]
|
@@ -83,7 +84,7 @@ module Blacklight::Bookmarks
|
|
83
84
|
end
|
84
85
|
|
85
86
|
if request.xhr?
|
86
|
-
success ? render(json: { bookmarks: { count: current_or_guest_user.bookmarks.count }}) : render(:
|
87
|
+
success ? render(json: { bookmarks: { count: current_or_guest_user.bookmarks.count }}) : render(plain: "", status: "500")
|
87
88
|
else
|
88
89
|
if @bookmarks.any? && success
|
89
90
|
flash[:notice] = I18n.t('blacklight.bookmarks.add.success', :count => @bookmarks.length)
|
@@ -114,16 +115,13 @@ module Blacklight::Bookmarks
|
|
114
115
|
# Deprecated in Rails 5.0
|
115
116
|
redirect_to :back, notice: I18n.t('blacklight.bookmarks.remove.success')
|
116
117
|
end
|
118
|
+
elsif request.xhr?
|
119
|
+
head 500 # ajaxy request needs no redirect and should not have flash set
|
120
|
+
elsif respond_to? :redirect_back
|
121
|
+
redirect_back fallback_location: bookmarks_path, flash: { error: I18n.t('blacklight.bookmarks.remove.failure') }
|
117
122
|
else
|
118
|
-
|
119
|
-
|
120
|
-
render(:text => "", :status => "500")
|
121
|
-
elsif respond_to? :redirect_back
|
122
|
-
redirect_back fallback_location: bookmarks_path, flash: { error: I18n.t('blacklight.bookmarks.remove.failure') }
|
123
|
-
else
|
124
|
-
# Deprecated in Rails 5.0
|
125
|
-
redirect_to :back, flash: { error: I18n.t('blacklight.bookmarks.remove.failure') }
|
126
|
-
end
|
123
|
+
# Deprecated in Rails 5.0
|
124
|
+
redirect_to :back, flash: { error: I18n.t('blacklight.bookmarks.remove.failure') }
|
127
125
|
end
|
128
126
|
end
|
129
127
|
|
@@ -43,11 +43,9 @@ module Blacklight::Catalog
|
|
43
43
|
# to add responses for formats other than html or json see _Blacklight::Document::Export_
|
44
44
|
def show
|
45
45
|
@response, @document = fetch params[:id]
|
46
|
-
|
47
46
|
respond_to do |format|
|
48
47
|
format.html { setup_next_and_previous_documents }
|
49
48
|
format.json { render json: { response: { document: @document } } }
|
50
|
-
|
51
49
|
additional_export_formats(@document, format)
|
52
50
|
end
|
53
51
|
end
|
@@ -71,15 +69,11 @@ module Blacklight::Catalog
|
|
71
69
|
@facet = blacklight_config.facet_fields[params[:id]]
|
72
70
|
@response = get_facet_field_response(@facet.key, params)
|
73
71
|
@display_facet = @response.aggregations[@facet.key]
|
74
|
-
|
75
72
|
@pagination = facet_paginator(@facet, @display_facet)
|
76
|
-
|
77
|
-
|
78
73
|
respond_to do |format|
|
79
74
|
# Draw the facet selector for users who have javascript disabled:
|
80
75
|
format.html
|
81
76
|
format.json
|
82
|
-
|
83
77
|
# Draw the partial for the "more" facet modal window:
|
84
78
|
format.js { render :layout => false }
|
85
79
|
end
|
@@ -88,12 +82,8 @@ module Blacklight::Catalog
|
|
88
82
|
# method to serve up XML OpenSearch description and JSON autocomplete response
|
89
83
|
def opensearch
|
90
84
|
respond_to do |format|
|
91
|
-
format.xml
|
92
|
-
|
93
|
-
end
|
94
|
-
format.json do
|
95
|
-
render :json => get_opensearch_response
|
96
|
-
end
|
85
|
+
format.xml { render layout: false }
|
86
|
+
format.json { render json: get_opensearch_response }
|
97
87
|
end
|
98
88
|
end
|
99
89
|
|
@@ -107,7 +97,7 @@ module Blacklight::Catalog
|
|
107
97
|
|
108
98
|
##
|
109
99
|
# Check if any search parameters have been set
|
110
|
-
# @return [Boolean]
|
100
|
+
# @return [Boolean]
|
111
101
|
def has_search_parameters?
|
112
102
|
!params[:q].blank? or !params[:f].blank? or !params[:search_field].blank?
|
113
103
|
end
|
@@ -129,13 +119,10 @@ module Blacklight::Catalog
|
|
129
119
|
##
|
130
120
|
# Render additional response formats for the index action, as provided by the
|
131
121
|
# blacklight configuration
|
132
|
-
#
|
133
|
-
#
|
134
|
-
#
|
135
|
-
# config.index.respond_to.txt = Proc.new { render
|
136
|
-
#
|
137
|
-
# Make sure your format has a well known mime-type or is registered in
|
138
|
-
# config/initializers/mime_types.rb
|
122
|
+
# @param [Hash] format
|
123
|
+
# @note Make sure your format has a well known mime-type or is registered in config/initializers/mime_types.rb
|
124
|
+
# @example
|
125
|
+
# config.index.respond_to.txt = Proc.new { render plain: "A list of docs." }
|
139
126
|
def additional_response_formats format
|
140
127
|
blacklight_config.index.respond_to.each do |key, config|
|
141
128
|
format.send key do
|
@@ -160,7 +147,7 @@ module Blacklight::Catalog
|
|
160
147
|
# the document extension framework. See _Blacklight::Document::Export_
|
161
148
|
def additional_export_formats(document, format)
|
162
149
|
document.export_formats.each_key do | format_name |
|
163
|
-
format.send(format_name.to_sym) { render
|
150
|
+
format.send(format_name.to_sym) { render body: document.export_as(format_name), layout: false }
|
164
151
|
end
|
165
152
|
end
|
166
153
|
|
@@ -169,7 +156,6 @@ module Blacklight::Catalog
|
|
169
156
|
def document_export_formats format
|
170
157
|
format.any do
|
171
158
|
format_name = params.fetch(:format, '').to_sym
|
172
|
-
|
173
159
|
if @response.export_formats.include? format_name
|
174
160
|
render_document_export_format format_name
|
175
161
|
else
|
@@ -181,11 +167,11 @@ module Blacklight::Catalog
|
|
181
167
|
##
|
182
168
|
# Render the document export formats for a response
|
183
169
|
# First, try to render an appropriate template (e.g. index.endnote.erb)
|
184
|
-
# If that fails, just concatenate the document export responses with a newline.
|
170
|
+
# If that fails, just concatenate the document export responses with a newline.
|
185
171
|
def render_document_export_format format_name
|
186
172
|
render
|
187
173
|
rescue ActionView::MissingTemplate
|
188
|
-
render
|
174
|
+
render plain: @response.documents.map { |x| x.export_as(format_name) if x.exports_as? format_name }.compact.join("\n"), layout: false
|
189
175
|
end
|
190
176
|
|
191
177
|
# Overrides the Blacklight::Controller provided #search_action_url.
|
@@ -1,12 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
module Blacklight::CatalogHelperBehavior
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
# @param [Hash] options
|
5
|
+
# @option options :route_set the route scope to use when constructing the link
|
6
|
+
def rss_feed_link_tag(options = {})
|
7
|
+
auto_discovery_link_tag(:rss, feed_link_url('rss', options), title: t('blacklight.search.rss_feed'))
|
6
8
|
end
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
+
# @param [Hash] options
|
11
|
+
# @option options :route_set the route scope to use when constructing the link
|
12
|
+
def atom_feed_link_tag(options = {})
|
13
|
+
auto_discovery_link_tag(:atom, feed_link_url('atom', options), title: t('blacklight.search.atom_feed'))
|
10
14
|
end
|
11
15
|
|
12
16
|
##
|
@@ -285,7 +289,11 @@ module Blacklight::CatalogHelperBehavior
|
|
285
289
|
|
286
290
|
private
|
287
291
|
|
288
|
-
|
289
|
-
|
292
|
+
# @param [String] format
|
293
|
+
# @param [Hash] options
|
294
|
+
# @option options :route_set the route scope to use when constructing the link
|
295
|
+
def feed_link_url(format, options = {})
|
296
|
+
scope = options.delete(:route_set) || self
|
297
|
+
scope.url_for search_state.to_h.merge(format: format)
|
290
298
|
end
|
291
299
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
# == Transformation conventions
|
3
3
|
# The main use case for extensions is for transforming a Document to another
|
4
4
|
# format. Either to another type of Ruby object, or to an exportable string in
|
5
|
-
# a certain format.
|
5
|
+
# a certain format.
|
6
6
|
#
|
7
7
|
# The convention for methods contained in extensions that transform to a ruby
|
8
8
|
# object is "to_*". For instance, "to_marc" would return a Ruby Marc object.
|
@@ -20,7 +20,7 @@
|
|
20
20
|
# If an extension advertises what export formats it can provide, than those
|
21
21
|
# formats will automatically be delivered by the Blacklight catalog/show
|
22
22
|
# controller, and potentially automatically advertised in various places
|
23
|
-
# that advertise available formats. (HTML link rel=alternate; Atom
|
23
|
+
# that advertise available formats. (HTML link rel=alternate; Atom
|
24
24
|
# link rel=alterate; etc).
|
25
25
|
#
|
26
26
|
# Export formats are 'registered' by calling the #will_export_as method
|
@@ -40,21 +40,21 @@
|
|
40
40
|
#
|
41
41
|
module Blacklight::Document::Export
|
42
42
|
|
43
|
-
##
|
43
|
+
##
|
44
44
|
# Register exportable formats supported by the individual document.
|
45
45
|
# Usually called by an extension in it's self.extended method, to
|
46
|
-
# register the formats that extension can export.
|
47
|
-
#
|
46
|
+
# register the formats that extension can export.
|
47
|
+
#
|
48
48
|
# some_document.will_export_as(:some_format, "application/type") means
|
49
49
|
# that the document (usually via an extension) has a method
|
50
50
|
# "export_as_some_format" which returns a String of content that
|
51
|
-
# is described by the mime content_type given.
|
52
|
-
#
|
51
|
+
# is described by the mime content_type given.
|
52
|
+
#
|
53
53
|
# The format name should ideally _already_ be registered with
|
54
54
|
# Rails Mime::Type, in your application initializer, representing
|
55
55
|
# the content type given. However, this method will attempt to
|
56
56
|
# register it using Mime::Type.register_alias if it's not previously
|
57
|
-
# registered. This is a bit sketchy though.
|
57
|
+
# registered. This is a bit sketchy though.
|
58
58
|
def will_export_as(short_name, content_type = nil)
|
59
59
|
#Lookup in Rails Mime::Type, register if needed, otherwise take
|
60
60
|
# content-type from registration if needed.
|
@@ -62,34 +62,32 @@ module Blacklight::Document::Export
|
|
62
62
|
content_type ||= Mime[short_name.to_sym]
|
63
63
|
else
|
64
64
|
# not registered, we need to register. Use register_alias to be least
|
65
|
-
# likely to interfere with host app.
|
65
|
+
# likely to interfere with host app.
|
66
66
|
Mime::Type.register_alias(content_type, short_name)
|
67
67
|
end
|
68
68
|
|
69
69
|
export_formats[short_name] = { content_type: content_type }
|
70
70
|
end
|
71
|
-
|
71
|
+
|
72
72
|
# Collects formats that this doc can export as.
|
73
|
-
# Returns a hash, keys are format short-names that can
|
74
|
-
# be exported. Hash includes:
|
75
|
-
# :content-type => mime-content-type
|
76
|
-
# maybe more later
|
77
73
|
# To see if a given export format is supported by this document,
|
78
74
|
# simply call document.export_formats.keys.include?(:my_format)
|
79
|
-
# Then call #export_as! to do the export.
|
75
|
+
# Then call #export_as! to do the export.
|
76
|
+
# @return [Hash{Symbol=>Hash{Symbol=>String}}] keys are format short-names that can be exported, values are Hashes
|
77
|
+
# @example { :marc => { content_type: 'application/marc' } }
|
80
78
|
def export_formats
|
81
79
|
@export_formats ||= {}
|
82
80
|
end
|
83
|
-
|
81
|
+
|
84
82
|
# Call with a format shortname, export_as(:marc), simply returns
|
85
83
|
# #export_as_marc . Later we may expand the design to allow you
|
86
84
|
# to register an arbitrary method name instead of insisting
|
87
85
|
# on the convention, so clients should call this method so
|
88
|
-
# they'll still keep working if we do that.
|
86
|
+
# they'll still keep working if we do that.
|
89
87
|
def export_as(short_name)
|
90
88
|
send("export_as_#{short_name}")
|
91
89
|
end
|
92
|
-
|
90
|
+
|
93
91
|
def exports_as? short_name
|
94
92
|
respond_to? "export_as_#{short_name}"
|
95
93
|
end
|
data/app/models/search.rb
CHANGED
@@ -1,26 +1,22 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
class Search < ActiveRecord::Base
|
3
|
-
|
4
3
|
belongs_to_arguments = { optional: true } if Rails.version >= '5.0.0'
|
5
4
|
|
6
5
|
belongs_to :user, belongs_to_arguments
|
7
6
|
|
8
7
|
serialize :query_params
|
9
8
|
|
10
|
-
if Blacklight::Utils.needs_attr_accessible?
|
11
|
-
attr_accessible :query_params
|
12
|
-
end
|
9
|
+
attr_accessible :query_params if Blacklight::Utils.needs_attr_accessible?
|
13
10
|
|
14
11
|
# A Search instance is considered a saved search if it has a user_id.
|
15
12
|
def saved?
|
16
13
|
self.user_id?
|
17
14
|
end
|
18
|
-
|
15
|
+
|
19
16
|
# delete old, unsaved searches
|
20
17
|
def self.delete_old_searches(days_old)
|
21
18
|
raise ArgumentError, 'days_old is expected to be a number' unless days_old.is_a?(Numeric)
|
22
19
|
raise ArgumentError, 'days_old is expected to be greater than 0' if days_old <= 0
|
23
|
-
self.
|
20
|
+
self.where(['created_at < ? AND user_id IS NULL', Time.zone.today - days_old]).destroy_all
|
24
21
|
end
|
25
|
-
|
26
22
|
end
|
@@ -22,7 +22,7 @@
|
|
22
22
|
<%- @searches.each do |search| -%>
|
23
23
|
<tr>
|
24
24
|
<td><%= link_to_previous_search(search.query_params) %></td>
|
25
|
-
<td><%= button_to t('blacklight.saved_searches.delete'), blacklight.forget_search_path(search.id) %></td>
|
25
|
+
<td><%= button_to t('blacklight.saved_searches.delete'), blacklight.forget_search_path(search.id), :class => 'btn btn-danger' %></td>
|
26
26
|
</tr>
|
27
27
|
<%- end -%>
|
28
28
|
</table>
|
data/blacklight.gemspec
CHANGED
@@ -40,6 +40,6 @@ Gem::Specification.new do |s|
|
|
40
40
|
s.add_development_dependency "rspec-collection_matchers", ">= 1.0"
|
41
41
|
s.add_development_dependency "capybara", '~> 2.6.0'
|
42
42
|
s.add_development_dependency "poltergeist"
|
43
|
-
s.add_development_dependency 'engine_cart', '~> 0.
|
43
|
+
s.add_development_dependency 'engine_cart', '~> 0.10'
|
44
44
|
s.add_development_dependency "equivalent-xml"
|
45
45
|
end
|
data/lib/blacklight/engine.rb
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
describe BookmarksController do
|
4
|
+
describe '#blacklight_config' do
|
5
|
+
it 'uses POST requests for querying solr' do
|
6
|
+
expect(@controller.blacklight_config.http_method).to eq :post
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
4
10
|
# jquery 1.9 ajax does error callback if 200 returns empty body. so use 204 instead.
|
5
11
|
describe "update" do
|
6
12
|
it "has a 200 status code when creating a new one" do
|
@@ -1,9 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
3
2
|
describe CatalogController do
|
3
|
+
let(:doc_id) { '2007020969' }
|
4
|
+
let(:mock_response) { double() }
|
5
|
+
let(:mock_document) { double() }
|
4
6
|
|
5
7
|
describe "index action" do
|
6
|
-
|
8
|
+
context "with format :html" do
|
7
9
|
let(:user_query) { 'history' } # query that will get results
|
8
10
|
|
9
11
|
it "has no search history if no search criteria" do
|
@@ -42,19 +44,18 @@ describe CatalogController do
|
|
42
44
|
page = 2
|
43
45
|
get :index, params: { page: page }
|
44
46
|
expect(assigns(:response).docs).to_not be_empty
|
45
|
-
expect(assigns(:response).params[:start].to_i).to eq (page-1) *
|
47
|
+
expect(assigns(:response).params[:start].to_i).to eq (page-1) * controller.blacklight_config[:default_solr_params][:rows]
|
46
48
|
assert_facets_have_values(assigns(:response).aggregations)
|
47
49
|
end
|
48
50
|
|
49
51
|
it "has no docs or facet values for query without results", :integration => true do
|
50
52
|
get :index, params: { q: 'sadfdsafasdfsadfsadfsadf' } # query for no results
|
51
|
-
|
52
53
|
expect(assigns(:response).docs).to be_empty
|
53
54
|
assigns(:response).aggregations.each do |key, facet|
|
54
55
|
expect(facet.items).to be_empty
|
55
56
|
end
|
56
57
|
end
|
57
|
-
|
58
|
+
|
58
59
|
it "shows 0 results when the user asks for an invalid value to a custom facet query", :integration => true do
|
59
60
|
get :index, params: { f: { example_query_facet_field: 'bogus' } } # bogus custom facet value
|
60
61
|
expect(assigns(:response).docs).to be_empty
|
@@ -66,7 +67,7 @@ describe CatalogController do
|
|
66
67
|
get :index, params: { f: {example_query_facet_field: 'years_5' } } # valid custom facet value with NO results
|
67
68
|
expect(assigns(:response).docs).to be_empty
|
68
69
|
end
|
69
|
-
|
70
|
+
|
70
71
|
it "has a spelling suggestion for an appropriately poor query", :integration => true do
|
71
72
|
get :index, params: { q: 'boo' }
|
72
73
|
expect(assigns(:response).spelling.words).to_not be_nil
|
@@ -80,7 +81,6 @@ describe CatalogController do
|
|
80
81
|
get :index, params: { q: user_query }
|
81
82
|
expect(session[:search]).to_not be_nil
|
82
83
|
expect(session[:search].keys).to include 'id'
|
83
|
-
|
84
84
|
search = Search.find(session[:search]['id'])
|
85
85
|
expect(search.query_params['q']).to eq user_query
|
86
86
|
end
|
@@ -125,8 +125,8 @@ describe CatalogController do
|
|
125
125
|
expect(response).to be_success
|
126
126
|
end
|
127
127
|
let(:json) { JSON.parse(response.body)['response'] }
|
128
|
-
let(:pages)
|
129
|
-
let(:docs)
|
128
|
+
let(:pages) { json["pages"] }
|
129
|
+
let(:docs) { json["docs"] }
|
130
130
|
let(:facets) { json["facets"] }
|
131
131
|
|
132
132
|
it "gets the pages" do
|
@@ -161,8 +161,8 @@ describe CatalogController do
|
|
161
161
|
let(:blacklight_config) { Blacklight::Configuration.new }
|
162
162
|
|
163
163
|
before :each do
|
164
|
-
allow(
|
165
|
-
allow(
|
164
|
+
allow(controller).to receive_messages blacklight_config: blacklight_config
|
165
|
+
allow(controller).to receive_messages search_results: [double, double]
|
166
166
|
end
|
167
167
|
|
168
168
|
it "does not render when the config is false" do
|
@@ -178,33 +178,29 @@ describe CatalogController do
|
|
178
178
|
end
|
179
179
|
|
180
180
|
it "passes a hash to the render call" do
|
181
|
-
blacklight_config.index.respond_to.yaml = {
|
181
|
+
blacklight_config.index.respond_to.yaml = { inline: '', layout: false }
|
182
182
|
get :index, params: { format: 'yaml' }
|
183
183
|
expect(response.body).to be_blank
|
184
184
|
end
|
185
185
|
|
186
186
|
it "evaluates a proc" do
|
187
|
-
blacklight_config.index.respond_to.yaml = lambda { render
|
187
|
+
blacklight_config.index.respond_to.yaml = lambda { render plain: "" }
|
188
188
|
get :index, params: { format: 'yaml' }
|
189
189
|
expect(response.body).to be_empty
|
190
190
|
end
|
191
191
|
|
192
192
|
it "with a symbol, it should call a controller method" do
|
193
193
|
expect(subject).to receive(:render_some_yaml) do
|
194
|
-
subject.
|
194
|
+
subject.head :ok, layout: false
|
195
195
|
end
|
196
|
-
|
197
196
|
blacklight_config.index.respond_to.yaml = :render_some_yaml
|
198
197
|
get :index, params: { format: 'yaml' }
|
199
198
|
expect(response.body).to be_blank
|
200
199
|
end
|
201
200
|
end
|
202
|
-
|
203
201
|
end # describe index action
|
204
202
|
|
205
203
|
describe "track action" do
|
206
|
-
doc_id = '2007020969'
|
207
|
-
|
208
204
|
it "persists the search session id value into session[:search]" do
|
209
205
|
put :track, params: { id: doc_id, counter: 3, search_id: "123" }
|
210
206
|
expect(session[:search]['id']).to eq "123"
|
@@ -214,7 +210,7 @@ describe CatalogController do
|
|
214
210
|
put :track, params: { id: doc_id, counter: 3 }
|
215
211
|
expect(session[:search]['counter']).to eq "3"
|
216
212
|
end
|
217
|
-
|
213
|
+
|
218
214
|
it "records the current per_page setting" do
|
219
215
|
put :track, params: { id: doc_id, counter: 3, per_page: 15 }
|
220
216
|
expect(session[:search]['per_page']).to eq "15"
|
@@ -243,9 +239,6 @@ describe CatalogController do
|
|
243
239
|
|
244
240
|
# SHOW ACTION
|
245
241
|
describe "show action" do
|
246
|
-
|
247
|
-
doc_id = '2007020969'
|
248
|
-
|
249
242
|
describe "with format :html" do
|
250
243
|
it "gets document", :integration => true do
|
251
244
|
get :show, params: { id: doc_id }
|
@@ -261,50 +254,48 @@ describe CatalogController do
|
|
261
254
|
expect(json["response"]["document"].keys).to match_array(["author_t", "opensearch_display", "marc_display", "published_display", "author_display", "lc_callnum_display", "title_t", "pub_date", "pub_date_sort", "subtitle_display", "format", "url_suppl_display", "material_type_display", "title_display", "subject_addl_t", "subject_t", "isbn_t", "id", "title_addl_t", "subject_geo_facet", "subject_topic_facet", "author_addl_t", "language_facet", "subtitle_t", "timestamp"])
|
262
255
|
end
|
263
256
|
end
|
264
|
-
|
257
|
+
|
265
258
|
describe "previous/next documents" do
|
259
|
+
let(:search_session) { { :id => current_search.id } }
|
260
|
+
let(:current_search) { Search.create(:query_params => { :q => ""}) }
|
266
261
|
before do
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
262
|
+
allow(mock_document).to receive_messages(:export_formats => {})
|
263
|
+
allow(controller).to receive_messages(
|
264
|
+
fetch: [mock_response, mock_document],
|
265
|
+
get_previous_and_next_documents_for_search: [double(:total => 5), [double("a"), mock_document, double("b")]],
|
266
|
+
current_search_session: current_search
|
267
|
+
)
|
268
|
+
end
|
269
|
+
it "sets previous document if counter present in session" do
|
270
|
+
session[:search] = search_session.merge('counter' => 2)
|
271
|
+
get :show, params: { id: doc_id }
|
272
|
+
expect(assigns[:previous_document]).to_not be_nil
|
273
|
+
end
|
274
|
+
it "does not set previous or next document if session is blank" do
|
275
|
+
get :show, params: { id: doc_id }
|
276
|
+
expect(assigns[:previous_document]).to be_nil
|
277
|
+
expect(assigns[:next_document]).to be_nil
|
278
|
+
end
|
279
|
+
it "does not set previous or next document if session[:search]['counter'] is nil" do
|
280
|
+
session[:search] = {}
|
281
|
+
get :show, params: { id: doc_id }
|
282
|
+
expect(assigns[:previous_document]).to be_nil
|
283
|
+
expect(assigns[:next_document]).to be_nil
|
284
|
+
end
|
285
|
+
it "sets next document if counter present in session" do
|
286
|
+
session[:search] = search_session.merge('counter' => 2)
|
287
|
+
get :show, params: { id: doc_id }
|
288
|
+
expect(assigns[:next_document]).to_not be_nil
|
277
289
|
end
|
278
|
-
it "sets previous document if counter present in session" do
|
279
|
-
session[:search] = @search_session.merge('counter' => 2)
|
280
|
-
get :show, params: { id: doc_id }
|
281
|
-
expect(assigns[:previous_document]).to_not be_nil
|
282
|
-
end
|
283
|
-
it "does not set previous or next document if session is blank" do
|
284
|
-
get :show, params: { id: doc_id }
|
285
|
-
expect(assigns[:previous_document]).to be_nil
|
286
|
-
expect(assigns[:next_document]).to be_nil
|
287
|
-
end
|
288
|
-
it "does not set previous or next document if session[:search]['counter'] is nil" do
|
289
|
-
session[:search] = {}
|
290
|
-
get :show, params: { id: doc_id }
|
291
|
-
expect(assigns[:previous_document]).to be_nil
|
292
|
-
expect(assigns[:next_document]).to be_nil
|
293
|
-
end
|
294
|
-
it "sets next document if counter present in session" do
|
295
|
-
session[:search] = @search_session.merge('counter' => 2)
|
296
|
-
get :show, params: { id: doc_id }
|
297
|
-
expect(assigns[:next_document]).to_not be_nil
|
298
|
-
end
|
299
290
|
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
291
|
+
it "does not break if solr returns an exception" do
|
292
|
+
allow(controller).to receive(:get_previous_and_next_documents_for_search) {
|
293
|
+
raise Blacklight::Exceptions::InvalidRequest.new "Error"
|
294
|
+
}
|
295
|
+
get :show, params: { id: doc_id }
|
296
|
+
expect(assigns[:previous_document]).to be_nil
|
297
|
+
expect(assigns[:next_document]).to be_nil
|
298
|
+
end
|
308
299
|
end
|
309
300
|
|
310
301
|
# NOTE: status code is always 200 in isolation mode ...
|
@@ -312,96 +303,61 @@ describe CatalogController do
|
|
312
303
|
get :show, params: { id: doc_id }
|
313
304
|
expect(response).to be_success
|
314
305
|
end
|
306
|
+
|
315
307
|
it "renders show.html.erb" do
|
316
|
-
|
317
|
-
|
318
|
-
allow(@mock_document).to receive_messages(:export_formats => {})
|
319
|
-
allow(controller).to receive_messages(fetch: [@mock_response, @mock_document])
|
308
|
+
allow(mock_document).to receive_messages(:export_formats => {})
|
309
|
+
allow(controller).to receive_messages(fetch: [mock_response, mock_document])
|
320
310
|
get :show, params: { id: doc_id }
|
321
311
|
expect(response).to render_template(:show)
|
322
312
|
end
|
323
313
|
|
324
314
|
describe "@document" do
|
325
315
|
before do
|
326
|
-
|
327
|
-
allow(
|
328
|
-
@mock_document = double()
|
329
|
-
allow(controller).to receive_messages(:find => @mock_response )
|
330
|
-
end
|
331
|
-
before(:each) do
|
316
|
+
allow(mock_response).to receive_messages(documents: [SolrDocument.new(id: 'my_fake_doc')])
|
317
|
+
allow(controller).to receive_messages(:find => mock_response )
|
332
318
|
get :show, params: { id: doc_id }
|
333
|
-
@document = assigns[:document]
|
334
319
|
end
|
335
320
|
it "is a SolrDocument" do
|
336
|
-
expect(
|
321
|
+
expect(assigns[:document]).to be_instance_of(SolrDocument)
|
337
322
|
end
|
338
323
|
end
|
339
|
-
|
324
|
+
|
340
325
|
describe "with dynamic export formats" do
|
341
326
|
render_views
|
342
327
|
module FakeExtension
|
343
328
|
def self.extended(document)
|
344
329
|
document.will_export_as(:mock, "application/mock")
|
345
330
|
end
|
346
|
-
|
331
|
+
|
347
332
|
def export_as_mock
|
348
333
|
"mock_export"
|
349
334
|
end
|
350
335
|
end
|
351
|
-
|
352
|
-
before do
|
353
|
-
@mock_response = double()
|
354
|
-
allow(@mock_response).to receive_messages(:docs => [{ :id => 'my_fake_doc' }])
|
355
|
-
@mock_document = double()
|
356
|
-
allow(controller).to receive_messages(find: @mock_response)
|
357
|
-
end
|
358
336
|
|
359
|
-
before
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
ActionController.add_renderer :double do |template, options|
|
364
|
-
send_data "mock_export", :type => Mime::MOCK
|
365
|
-
end
|
337
|
+
before do
|
338
|
+
allow(mock_response).to receive_messages(:documents => [SolrDocument.new(id: 'my_fake_doc')])
|
339
|
+
allow(controller).to receive_messages(:find => mock_response,
|
340
|
+
:get_single_doc_via_search => mock_document)
|
366
341
|
Mime::Type.register "application/mock", :mock
|
367
|
-
|
368
342
|
SolrDocument.use_extension(FakeExtension)
|
369
343
|
end
|
370
|
-
|
371
|
-
before do
|
372
|
-
@mock_response = double()
|
373
|
-
allow(@mock_response).to receive_messages(:documents => [SolrDocument.new(id: 'my_fake_doc')])
|
374
|
-
@mock_document = double()
|
375
|
-
allow(controller).to receive_messages(:find => @mock_response,
|
376
|
-
:get_single_doc_via_search => @mock_document)
|
377
|
-
|
378
|
-
allow(controller).to receive_messages(:find => @mock_response,
|
379
|
-
:get_single_doc_via_search => @mock_document)
|
380
|
-
end
|
381
344
|
|
382
345
|
it "responds to an extension-registered format properly" do
|
383
346
|
get :show, params: { id: doc_id, format: 'mock' }
|
384
347
|
expect(response).to be_success
|
385
348
|
expect(response.body).to match /mock_export/
|
386
349
|
end
|
387
|
-
|
388
350
|
|
389
|
-
after
|
390
|
-
# remove the fake extension
|
391
|
-
SolrDocument.registered_extensions.pop
|
351
|
+
after do
|
352
|
+
SolrDocument.registered_extensions.pop # remove the fake extension
|
392
353
|
end
|
393
354
|
end # dynamic export formats
|
394
|
-
|
395
355
|
end # describe show action
|
396
356
|
|
397
357
|
describe "opensearch" do
|
398
358
|
before do
|
399
|
-
|
400
|
-
|
401
|
-
allow(@mock_response).to receive_messages(documents: [SolrDocument.new(id: 'my_fake_doc'), SolrDocument.new(id: 'my_other_doc')])
|
402
|
-
@mock_document = double()
|
403
|
-
allow(controller).to receive_messages(find: @mock_response)
|
404
|
-
|
359
|
+
allow(mock_response).to receive_messages(documents: [SolrDocument.new(id: 'my_fake_doc'), SolrDocument.new(id: 'my_other_doc')])
|
360
|
+
allow(controller).to receive_messages(find: mock_response)
|
405
361
|
end
|
406
362
|
it "returns an opensearch description" do
|
407
363
|
get :opensearch, params: { format: 'xml' }
|
@@ -414,7 +370,6 @@ describe CatalogController do
|
|
414
370
|
end
|
415
371
|
|
416
372
|
describe "email/sms" do
|
417
|
-
doc_id = '2007020969'
|
418
373
|
let(:mock_response) { double(documents: [SolrDocument.new(id: 'my_fake_doc'), SolrDocument.new(id: 'my_other_doc')]) }
|
419
374
|
before do
|
420
375
|
allow(controller).to receive_messages(find: mock_response)
|
@@ -436,10 +391,9 @@ describe CatalogController do
|
|
436
391
|
expect(request.flash[:error]).to be_nil
|
437
392
|
end
|
438
393
|
it "redirects back to the record upon success" do
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
394
|
+
allow(RecordMailer).to receive(:email_record)
|
395
|
+
.with(anything, { :to => 'test_email@projectblacklight.org', :message => 'xyz' }, hash_including(:host => 'test.host'))
|
396
|
+
.and_return double(deliver: nil)
|
443
397
|
post :email, params: { id: doc_id, to: 'test_email@projectblacklight.org', message: 'xyz' }
|
444
398
|
expect(request.flash[:error]).to be_nil
|
445
399
|
expect(request).to redirect_to(solr_document_path(doc_id))
|
@@ -450,6 +404,7 @@ describe CatalogController do
|
|
450
404
|
expect(request.flash[:success]).to eq "Email Sent"
|
451
405
|
end
|
452
406
|
end
|
407
|
+
|
453
408
|
describe "sms" do
|
454
409
|
it "gives error if no phone number is given" do
|
455
410
|
post :sms, params: { id: doc_id, carrier: 'att' }
|
@@ -473,9 +428,10 @@ describe CatalogController do
|
|
473
428
|
expect(request).to redirect_to(solr_document_path(doc_id))
|
474
429
|
end
|
475
430
|
it "sends to the appropriate carrier email address" do
|
476
|
-
|
477
|
-
|
478
|
-
|
431
|
+
expect(RecordMailer)
|
432
|
+
.to receive(:sms_record)
|
433
|
+
.with(anything, { to: '5555555555@txt.att.net' }, hash_including(:host => 'test.host'))
|
434
|
+
.and_return double(:deliver => nil)
|
479
435
|
post :sms, params: { id: doc_id, to: '5555555555', carrier: 'txt.att.net' }
|
480
436
|
end
|
481
437
|
it "redirects back to the record upon success" do
|
@@ -483,7 +439,6 @@ describe CatalogController do
|
|
483
439
|
expect(request.flash[:error]).to eq nil
|
484
440
|
expect(request).to redirect_to(solr_document_path(doc_id))
|
485
441
|
end
|
486
|
-
|
487
442
|
it "renders sms_success template for XHR requests" do
|
488
443
|
post :sms, xhr: true, params: { id: doc_id, to: '5555555555', carrier: 'txt.att.net' }
|
489
444
|
expect(request).to render_template 'sms_success'
|
@@ -494,19 +449,17 @@ describe CatalogController do
|
|
494
449
|
|
495
450
|
describe "errors" do
|
496
451
|
it "returns status 404 for a record that doesn't exist" do
|
497
|
-
|
498
|
-
allow(controller).to receive_messages(:find => @mock_response)
|
452
|
+
allow(controller).to receive_messages(:find => double(documents: []))
|
499
453
|
get :show, params: { id: "987654321" }
|
500
454
|
expect(response.status).to eq 404
|
501
|
-
expect(response.content_type).to eq Mime
|
455
|
+
expect(response.content_type).to eq Mime[:html]
|
502
456
|
end
|
503
|
-
it "returns status 404 for a record that doesn't exist even for non-html format" do
|
504
|
-
@mock_response = double(documents: [])
|
505
|
-
allow(controller).to receive_messages(:find => @mock_response)
|
506
457
|
|
458
|
+
it "returns status 404 for a record that doesn't exist even for non-html format" do
|
459
|
+
allow(controller).to receive_messages(:find => double(documents: []))
|
507
460
|
get :show, params: { id: "987654321", format: "xml" }
|
508
461
|
expect(response.status).to eq 404
|
509
|
-
expect(response.content_type).to eq Mime
|
462
|
+
expect(response.content_type).to eq Mime[:xml]
|
510
463
|
end
|
511
464
|
|
512
465
|
it "redirects the user to the root url for a bad search" do
|
@@ -529,7 +482,6 @@ describe CatalogController do
|
|
529
482
|
allow(controller).to receive(:flash).and_return(:notice => I18n.t('blacklight.search.errors.request_error'))
|
530
483
|
expect { get :index, params: { q: '+' } }.to raise_error Blacklight::Exceptions::InvalidRequest
|
531
484
|
end
|
532
|
-
|
533
485
|
end
|
534
486
|
|
535
487
|
context "without a user authentication provider" do
|
@@ -578,7 +530,6 @@ describe CatalogController do
|
|
578
530
|
session[:history] = []
|
579
531
|
controller.send(:add_to_search_history, double(:id => 1))
|
580
532
|
expect(session[:history]).to have(1).item
|
581
|
-
|
582
533
|
controller.send(:add_to_search_history, double(:id => 2))
|
583
534
|
expect(session[:history]).to have(2).items
|
584
535
|
expect(session[:history].first).to eq 2
|
@@ -587,13 +538,11 @@ describe CatalogController do
|
|
587
538
|
it "removes searches from the list when the list gets too big" do
|
588
539
|
allow(controller).to receive(:blacklight_config).and_return(double(:search_history_window => 5))
|
589
540
|
session[:history] = (0..4).to_a.reverse
|
590
|
-
|
591
541
|
expect(session[:history]).to have(5).items
|
592
542
|
controller.send(:add_to_search_history, double(:id => 5))
|
593
543
|
controller.send(:add_to_search_history, double(:id => 6))
|
594
544
|
controller.send(:add_to_search_history, double(:id => 7))
|
595
545
|
expect(session[:history]).to include(*(3..7).to_a)
|
596
|
-
|
597
546
|
end
|
598
547
|
end
|
599
548
|
|
@@ -654,45 +603,42 @@ describe CatalogController do
|
|
654
603
|
|
655
604
|
describe "#add_show_tools_partial" do
|
656
605
|
before do
|
657
|
-
|
658
|
-
allow(controller).to receive(:perform_like)
|
606
|
+
described_class.add_show_tools_partial(:like, callback: :perform_like, validator: :validate_like_params)
|
659
607
|
allow(controller).to receive(:solr_document_url).and_return('catalog/1')
|
660
|
-
allow(controller).to receive(:action_documents).and_return(
|
608
|
+
allow(controller).to receive(:action_documents).and_return(1)
|
661
609
|
Rails.application.routes.draw do
|
662
610
|
get 'catalog/like', as: :catalog_like
|
663
611
|
end
|
664
612
|
end
|
665
613
|
|
666
614
|
after do
|
667
|
-
|
615
|
+
described_class.blacklight_config.show.document_actions.delete(:like)
|
668
616
|
Rails.application.reload_routes!
|
669
617
|
end
|
670
618
|
|
671
619
|
it "adds the action to a list" do
|
672
|
-
expect(
|
620
|
+
expect(described_class.blacklight_config.show.document_actions).to have_key(:like)
|
673
621
|
end
|
674
622
|
|
675
623
|
it "defines the action method" do
|
676
|
-
expect(controller.respond_to
|
624
|
+
expect(controller).to respond_to(:like)
|
677
625
|
end
|
678
626
|
|
679
627
|
describe "when posting to the action" do
|
680
|
-
|
681
|
-
before do
|
682
|
-
allow(controller).to receive(:validate_like_params).and_return(true)
|
683
|
-
post :like
|
684
|
-
end
|
628
|
+
context 'with valid params' do
|
685
629
|
it "calls the supplied method on post" do
|
686
|
-
expect(controller).to
|
630
|
+
expect(controller).to receive(:validate_like_params).and_return(true)
|
631
|
+
expect(controller).to receive(:perform_like)
|
632
|
+
post :like
|
687
633
|
end
|
688
634
|
end
|
689
635
|
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
|
636
|
+
context "with failure on invalid params" do
|
637
|
+
it "does not call the supplied method" do
|
638
|
+
expect(controller).to receive(:validate_like_params).and_return(false)
|
639
|
+
expect(controller).not_to receive(:perform_like)
|
640
|
+
skip 'Clarify expectations on validator failure: 400? 500? Set a specific error key/msg? Render the same template anyway?'
|
641
|
+
post :like
|
696
642
|
end
|
697
643
|
end
|
698
644
|
end
|
@@ -713,7 +659,6 @@ describe CatalogController do
|
|
713
659
|
end
|
714
660
|
end
|
715
661
|
|
716
|
-
|
717
662
|
# there must be at least one facet, and each facet must have at least one value
|
718
663
|
def assert_facets_have_values(aggregations)
|
719
664
|
expect(aggregations).to_not be_empty
|
@@ -129,6 +129,42 @@ describe CatalogHelper do
|
|
129
129
|
end
|
130
130
|
end
|
131
131
|
|
132
|
+
describe "rss_feed_link_tag" do
|
133
|
+
context "when an alternate scope is passed in" do
|
134
|
+
let(:my_engine) { double("Engine") }
|
135
|
+
let(:query_params) { { controller: 'catalog', action: 'index' } }
|
136
|
+
let(:config) { Blacklight::Configuration.new }
|
137
|
+
let(:search_state) { Blacklight::SearchState.new(query_params, config) }
|
138
|
+
|
139
|
+
it "calls url_for on the engine scope" do
|
140
|
+
allow(helper).to receive(:search_state).and_return search_state
|
141
|
+
expect(my_engine).to receive(:url_for).and_return(url_for(query_params))
|
142
|
+
tag = helper.rss_feed_link_tag(route_set: my_engine)
|
143
|
+
expect(tag).to match /title="RSS for results"/
|
144
|
+
expect(tag).to match /rel="alternate"/
|
145
|
+
expect(tag).to match %r{type="application/rss\+xml"}
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
describe "atom_feed_link_tag" do
|
151
|
+
context "when an alternate scope is passed in" do
|
152
|
+
let(:my_engine) { double("Engine") }
|
153
|
+
let(:query_params) { { controller: 'catalog', action: 'index' } }
|
154
|
+
let(:config) { Blacklight::Configuration.new }
|
155
|
+
let(:search_state) { Blacklight::SearchState.new(query_params, config) }
|
156
|
+
|
157
|
+
it "calls url_for on the engine scope" do
|
158
|
+
allow(helper).to receive(:search_state).and_return search_state
|
159
|
+
expect(my_engine).to receive(:url_for).and_return(url_for(query_params))
|
160
|
+
tag = helper.atom_feed_link_tag(route_set: my_engine)
|
161
|
+
expect(tag).to match /title="Atom for results"/
|
162
|
+
expect(tag).to match /rel="alternate"/
|
163
|
+
expect(tag).to match %r{type="application/atom\+xml"}
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
132
168
|
describe "should_autofocus_on_search_box?" do
|
133
169
|
it "is focused if we're on a catalog-like index page without query or facet parameters" do
|
134
170
|
allow(helper).to receive_messages(controller: CatalogController.new, action_name: "index", has_search_parameters?: false)
|
@@ -68,7 +68,7 @@ describe "Blacklight::Configuration" do
|
|
68
68
|
|
69
69
|
@config.index.respond_to.csv = { :layout => false }
|
70
70
|
|
71
|
-
@config.index.respond_to.yaml = lambda { render
|
71
|
+
@config.index.respond_to.yaml = lambda { render plain: "" }
|
72
72
|
|
73
73
|
expect(@config.index.respond_to.keys).to eq [:xml, :csv, :yaml]
|
74
74
|
end
|
@@ -1,38 +1,14 @@
|
|
1
1
|
# Backport the Rails 5 controller test methods to Rails 4
|
2
2
|
module BackportTest
|
3
|
-
|
4
|
-
(
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
[:delete, :get, :post, :put, :patch].each do |http_action|
|
4
|
+
define_method(http_action) do |*args|
|
5
|
+
(action, rest) = *args
|
6
|
+
rest ||= {}
|
7
|
+
if rest[:xhr]
|
8
|
+
@request.env['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest'
|
9
|
+
@request.env['HTTP_ACCEPT'] ||= [Mime::JS, Mime::HTML, Mime::XML, 'text/xml', Mime::ALL].join(', ')
|
10
|
+
end
|
11
|
+
super(action, rest[:params])
|
8
12
|
end
|
9
|
-
super(action, rest[:params])
|
10
|
-
end
|
11
|
-
|
12
|
-
def get(*args)
|
13
|
-
(action, rest) = *args
|
14
|
-
rest ||= {}
|
15
|
-
if rest[:xhr]
|
16
|
-
@request.env['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest'
|
17
|
-
end
|
18
|
-
super(action, rest[:params])
|
19
|
-
end
|
20
|
-
|
21
|
-
def post(*args)
|
22
|
-
(action, rest) = *args
|
23
|
-
rest ||= {}
|
24
|
-
if rest[:xhr]
|
25
|
-
@request.env['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest'
|
26
|
-
end
|
27
|
-
super(action, rest[:params])
|
28
|
-
end
|
29
|
-
|
30
|
-
def put(*args)
|
31
|
-
(action, rest) = *args
|
32
|
-
rest ||= {}
|
33
|
-
if rest[:xhr]
|
34
|
-
@request.env['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest'
|
35
|
-
end
|
36
|
-
super(action, rest[:params])
|
37
13
|
end
|
38
14
|
end
|
data/template.demo.rb
CHANGED
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.
|
4
|
+
version: 6.5.0
|
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: 2016-08-
|
20
|
+
date: 2016-08-22 00:00:00.000000000 Z
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
23
23
|
name: rails
|
@@ -233,14 +233,14 @@ dependencies:
|
|
233
233
|
requirements:
|
234
234
|
- - "~>"
|
235
235
|
- !ruby/object:Gem::Version
|
236
|
-
version: 0.
|
236
|
+
version: '0.10'
|
237
237
|
type: :development
|
238
238
|
prerelease: false
|
239
239
|
version_requirements: !ruby/object:Gem::Requirement
|
240
240
|
requirements:
|
241
241
|
- - "~>"
|
242
242
|
- !ruby/object:Gem::Version
|
243
|
-
version: 0.
|
243
|
+
version: '0.10'
|
244
244
|
- !ruby/object:Gem::Dependency
|
245
245
|
name: equivalent-xml
|
246
246
|
requirement: !ruby/object:Gem::Requirement
|