blacklight 3.8.2 → 4.0.0.pre6
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -0
- data/README.md +1 -1
- data/VERSION +1 -1
- data/app/assets/javascripts/blacklight/blacklight.js +12 -1
- data/app/assets/javascripts/blacklight/bootstrap_dropdowns.js +3 -0
- data/app/assets/javascripts/blacklight/checkbox_submit.js +12 -5
- data/app/assets/javascripts/blacklight/core.js +0 -1
- data/app/assets/javascripts/blacklight/css_dropdowns.js +10 -0
- data/app/assets/javascripts/blacklight/facet_expand_contract.js +5 -5
- data/app/assets/javascripts/blacklight/lightbox_dialog.js +68 -13
- data/app/assets/javascripts/blacklight/select_submit.js +19 -10
- data/app/assets/javascripts/improved-modal/bootstrap-modal.js +282 -0
- data/app/assets/javascripts/improved-modal/bootstrap-modalmanager.js +353 -0
- data/app/assets/stylesheets/blacklight/_blacklight_base.css.scss +16 -5
- data/app/assets/stylesheets/blacklight/_bookmark.css.scss +24 -6
- data/app/assets/stylesheets/blacklight/_catalog.css.scss +115 -141
- data/app/assets/stylesheets/blacklight/_dropdown.css.scss +57 -0
- data/app/assets/stylesheets/blacklight/_facets.css.scss +127 -58
- data/app/assets/stylesheets/blacklight/_footer.css.scss +20 -0
- data/app/assets/stylesheets/blacklight/_header.css.scss +90 -21
- data/app/assets/stylesheets/blacklight/_layout.css.scss +10 -9
- data/app/assets/stylesheets/blacklight/_modal.css.scss +23 -0
- data/app/assets/stylesheets/blacklight/_print.css.scss +0 -7
- data/app/assets/stylesheets/blacklight/_responsive.css.scss +3 -0
- data/app/assets/stylesheets/blacklight/_search_history.css.scss +2 -4
- data/app/assets/stylesheets/blacklight/blacklight.css.scss +0 -1
- data/app/assets/stylesheets/blacklight/blacklight_defaults.css.scss +9 -2
- data/app/assets/stylesheets/blacklight/responsive_partials/_catalog.css.scss +5 -0
- data/app/assets/stylesheets/blacklight/responsive_partials/_facets.css.scss +37 -0
- data/app/assets/stylesheets/blacklight/responsive_partials/_header.css.scss +30 -0
- data/app/assets/stylesheets/improved-modal/bootstrap-modal.css +199 -0
- data/app/controllers/bookmarks_controller.rb +16 -10
- data/app/helpers/blacklight/blacklight_helper_behavior.rb +124 -61
- data/app/helpers/blacklight/catalog_helper_behavior.rb +5 -3
- data/app/helpers/blacklight/facets_helper_behavior.rb +9 -9
- data/app/views/_flash_msg.html.erb +9 -4
- data/app/views/_user_util_links.html.erb +23 -17
- data/app/views/bookmarks/_tools.html.erb +7 -7
- data/app/views/bookmarks/index.html.erb +5 -13
- data/app/views/catalog/_bookmark_control.html.erb +2 -4
- data/app/views/catalog/_bookmark_form.html.erb +1 -1
- data/app/views/catalog/_citation.html.erb +21 -20
- data/app/views/catalog/_constraints.html.erb +8 -6
- data/app/views/catalog/_document_header.html.erb +6 -7
- data/app/views/catalog/_document_list.html.erb +1 -7
- data/app/views/catalog/_email_form.html.erb +42 -16
- data/app/views/catalog/_facet_layout.html.erb +1 -1
- data/app/views/catalog/_facet_limit.html.erb +1 -1
- data/app/views/catalog/_facet_pagination.html.erb +11 -14
- data/app/views/catalog/_facets.html.erb +16 -2
- data/app/views/catalog/_home.html.erb +2 -2
- data/app/views/catalog/_home_text.html.erb +5 -2
- data/app/views/catalog/_index_default.html.erb +2 -2
- data/app/views/catalog/_marc_view.html.erb +0 -1
- data/app/views/catalog/_paginate_compact.html.erb +5 -0
- data/app/views/catalog/_per_page_widget.html.erb +13 -7
- data/app/views/catalog/_previous_next_doc.html.erb +14 -4
- data/app/views/catalog/_refworks_form.html.erb +2 -2
- data/app/views/catalog/_results_pagination.html.erb +4 -1
- data/app/views/catalog/_search_form.html.erb +19 -13
- data/app/views/catalog/_show_default.html.erb +2 -2
- data/app/views/catalog/_show_more_like_this.html.erb +3 -0
- data/app/views/catalog/_show_sidebar.html.erb +14 -1
- data/app/views/catalog/_show_tools.html.erb +18 -18
- data/app/views/catalog/_sms_form.html.erb +35 -10
- data/app/views/catalog/_sort_and_per_page.html.erb +5 -3
- data/app/views/catalog/_sort_widget.html.erb +12 -6
- data/app/views/catalog/citation.html.erb +1 -1
- data/app/views/catalog/citation.js.erb +7 -0
- data/app/views/catalog/email.html.erb +5 -0
- data/app/views/catalog/facet.html.erb +28 -21
- data/app/views/catalog/index.html.erb +26 -26
- data/app/views/catalog/librarian_view.html.erb +7 -0
- data/app/views/catalog/show.html.erb +35 -29
- data/app/views/catalog/sms.html.erb +5 -0
- data/app/views/kaminari/blacklight/_first_page.html.erb +2 -2
- data/app/views/kaminari/blacklight/_gap.html.erb +4 -1
- data/app/views/kaminari/blacklight/_last_page.html.erb +2 -2
- data/app/views/kaminari/blacklight/_next_page.html.erb +3 -3
- data/app/views/kaminari/blacklight/_page.html.erb +4 -3
- data/app/views/kaminari/blacklight/_paginator.html.erb +5 -5
- data/app/views/kaminari/blacklight/_prev_page.html.erb +3 -3
- data/app/views/kaminari/blacklight_compact/_next_page.html.erb +9 -0
- data/app/views/kaminari/blacklight_compact/_paginator.html.erb +15 -0
- data/app/views/kaminari/blacklight_compact/_prev_page.html.erb +9 -0
- data/app/views/layouts/blacklight.html.erb +47 -27
- data/app/views/saved_searches/index.html.erb +2 -2
- data/app/views/search_history/index.html.erb +12 -7
- data/app/views/shared/_footer.html.erb +0 -0
- data/app/views/shared/_header_navbar.html.erb +25 -0
- data/blacklight.gemspec +2 -5
- data/config/locales/blacklight.en.yml +23 -15
- data/lib/blacklight.rb +2 -2
- data/lib/blacklight/catalog.rb +36 -14
- data/lib/blacklight/configuration.rb +10 -2
- data/lib/blacklight/mash.rb +151 -0
- data/lib/blacklight/solr/document.rb +73 -11
- data/lib/blacklight/solr/document/extensions.rb +0 -8
- data/lib/blacklight/solr/document/marc_export.rb +7 -2
- data/lib/blacklight/solr/document/more_like_this.rb +5 -0
- data/lib/blacklight/solr_helper.rb +43 -18
- data/lib/blacklight/solr_response.rb +60 -0
- data/lib/blacklight/solr_response/facets.rb +58 -0
- data/lib/blacklight/solr_response/more_like_this.rb +14 -0
- data/lib/blacklight/solr_response/spelling.rb +92 -0
- data/lib/generators/blacklight/assets_generator.rb +1 -14
- data/lib/generators/blacklight/blacklight_generator.rb +22 -21
- data/lib/generators/blacklight/jetty_generator.rb +1 -35
- data/{test_support → lib/generators/blacklight/templates}/alternate_controller.rb +0 -0
- data/lib/generators/blacklight/templates/blacklight.css.scss +4 -0
- data/lib/generators/blacklight/templates/config/SolrMarc/config-test.properties +2 -2
- data/lib/generators/blacklight/templates/config/jetty.yml +6 -0
- data/lib/generators/blacklight/test_support_generator.rb +35 -0
- data/lib/railties/all_tests.rake +5 -23
- data/lib/railties/blacklight_cucumber.rake +2 -11
- data/lib/railties/blacklight_rspec.rake +2 -12
- data/test_support/bin/run-tests.sh +1 -1
- data/test_support/bin/setup-test-app.sh +123 -0
- data/test_support/bin/test.sh +21 -21
- data/test_support/features/bookmarks.feature +9 -3
- data/test_support/features/saved_searches.feature +3 -3
- data/test_support/features/search.feature +3 -3
- data/test_support/features/search_filters.feature +24 -26
- data/test_support/features/search_history.feature +9 -10
- data/test_support/features/search_sort.feature +4 -6
- data/test_support/features/step_definitions/general_steps.rb +0 -4
- data/test_support/features/step_definitions/search_result_steps.rb +2 -1
- data/test_support/features/step_definitions/search_steps.rb +32 -2
- data/test_support/spec/controllers/application_controller_spec.rb +8 -0
- data/test_support/spec/controllers/catalog_controller_spec.rb +3 -18
- data/test_support/spec/helpers/blacklight_helper_spec.rb +116 -20
- data/test_support/spec/helpers/catalog_helper_spec.rb +14 -6
- data/test_support/spec/helpers/facets_helper_spec.rb +1 -1
- data/test_support/spec/lib/blacklight_solr_document_more_like_this_spec.rb +18 -0
- data/test_support/spec/lib/blacklight_solr_document_spec.rb +54 -1
- data/test_support/spec/lib/blacklight_solr_response_spec.rb +153 -0
- data/test_support/spec/lib/facet_paginator_spec.rb +1 -1
- data/test_support/spec/lib/marc_export_spec.rb +14 -6
- data/test_support/spec/lib/solr_helper_spec.rb +22 -6
- data/test_support/spec/models/solr_docment_spec.rb +1 -4
- data/test_support/spec/{features → requests}/alternate_controller_spec.rb +3 -2
- data/test_support/spec/views/catalog/_facets.html.erb_spec.rb +20 -4
- data/test_support/spec/views/catalog/_show_sidebar.erb_spec.rb +25 -0
- metadata +53 -131
- data/app/assets/javascripts/blacklight/more_facets.js +0 -16
- data/app/assets/javascripts/jquery-1.4.2.min.js +0 -154
- data/app/assets/javascripts/jquery-ui-1.8.1.custom.min.js +0 -756
- data/app/assets/javascripts/jquery.uiExt.ajaxyDialog.js +0 -180
- data/app/assets/stylesheets/blacklight/_formatting.css.scss +0 -164
- data/app/assets/stylesheets/blacklight/grids/_susy_grid.css.scss +0 -72
- data/app/assets/stylesheets/jquery/ui-lightness/images/ui-anim_basic_16x16.gif +0 -0
- data/app/assets/stylesheets/jquery/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- data/app/assets/stylesheets/jquery/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- data/app/assets/stylesheets/jquery/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
- data/app/assets/stylesheets/jquery/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- data/app/assets/stylesheets/jquery/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- data/app/assets/stylesheets/jquery/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/app/assets/stylesheets/jquery/ui-lightness/images/ui-bg_gloss-wave_35_558fd0_500x100.png +0 -0
- data/app/assets/stylesheets/jquery/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- data/app/assets/stylesheets/jquery/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- data/app/assets/stylesheets/jquery/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
- data/app/assets/stylesheets/jquery/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
- data/app/assets/stylesheets/jquery/ui-lightness/images/ui-icons_2e4f81_256x240.png +0 -0
- data/app/assets/stylesheets/jquery/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
- data/app/assets/stylesheets/jquery/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
- data/app/assets/stylesheets/jquery/ui-lightness/jquery-ui-1.8.1.custom.css +0 -486
- data/app/models/solr_document.rb +0 -5
- data/app/views/catalog/email.erb +0 -1
- data/app/views/catalog/sms.erb +0 -1
- data/doc/Atom-Responses.md +0 -90
- data/doc/Blacklight-3.2-Release-Notes-and-Upgrade-Guide.md +0 -191
- data/doc/Blacklight-3.3-release-notes-and-upgrade-guide.md +0 -37
- data/doc/Blacklight-3.4-release-notes-and-upgrade-guide.md +0 -27
- data/doc/Blacklight-3.5-release-notes-and-upgrade-guide.md +0 -44
- data/doc/Blacklight-3.6-release-notes-and-upgrade-guide.md +0 -25
- data/doc/Blacklight-3.7-release-notes-and-upgrade-guide.md +0 -78
- data/doc/Blacklight-3.8-release-notes-and-upgrade-guide.md +0 -11
- data/doc/Blacklight-Add-ons.md +0 -28
- data/doc/Blacklight-configuration.md +0 -301
- data/doc/Blacklight-on-Heroku.md +0 -135
- data/doc/Community-principles.md +0 -44
- data/doc/Configuring-and-Customizing-Blacklight.md +0 -271
- data/doc/Contributing-to-Blacklight.md +0 -25
- data/doc/Examples.md +0 -62
- data/doc/Extending-or-Modifying-Blacklight-Search-Behavior.md +0 -141
- data/doc/Home.md +0 -77
- data/doc/How-to-release-a-version.md +0 -37
- data/doc/Indexing-your-data-into-solr.md +0 -5
- data/doc/Integration-with-Rails-Footnotes.md +0 -20
- data/doc/Pagination.md +0 -38
- data/doc/Providing-your-own-view-templates.md +0 -109
- data/doc/Quickstart.md +0 -116
- data/doc/README.md +0 -77
- data/doc/README_SOLR.md +0 -245
- data/doc/Release-Notes-And-Upgrade-Guides.md +0 -14
- data/doc/Sunspot-for-indexing.md +0 -46
- data/doc/User-Authentication.md +0 -60
- data/doc/testing.md +0 -115
- data/lib/generators/blacklight/solr_conf_generator.rb +0 -26
- data/lib/generators/blacklight/templates/assets/standard.css.scss +0 -59
- data/lib/generators/blacklight/templates/config/blacklight_config.rb +0 -3
- data/lib/generators/blacklight/templates/config/compass.rb +0 -2
- data/lib/generators/blacklight/templates/solr_conf/schema.xml +0 -689
- data/lib/generators/blacklight/templates/solr_conf/solrconfig.xml +0 -1846
- data/lib/solrmarc.log.1 +0 -849
- data/test_support/spec/controllers/bookmarks_controller_spec.rb +0 -48
@@ -1,4 +1,5 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
|
+
require File.join(File.dirname(__FILE__), 'mash') unless defined?(Mash)
|
2
3
|
# SolrHelper is a controller layer mixin. It is in the controller scope: request params, session etc.
|
3
4
|
#
|
4
5
|
# NOTE: Be careful when creating variables here as they may be overriding something that already exists.
|
@@ -66,7 +67,7 @@ module Blacklight::SolrHelper
|
|
66
67
|
# CatalogController.include ModuleDefiningNewMethod
|
67
68
|
# CatalogController.solr_search_params_logic += [:new_method]
|
68
69
|
# CatalogController.solr_search_params_logic.delete(:we_dont_want)
|
69
|
-
self.solr_search_params_logic = [:default_solr_parameters , :add_query_to_solr, :add_facet_fq_to_solr, :add_facetting_to_solr, :add_paging_to_solr, :add_sorting_to_solr ]
|
70
|
+
self.solr_search_params_logic = [:default_solr_parameters , :add_query_to_solr, :add_facet_fq_to_solr, :add_facetting_to_solr, :add_solr_fields_to_query, :add_paging_to_solr, :add_sorting_to_solr ]
|
70
71
|
end
|
71
72
|
|
72
73
|
def force_to_utf8(value)
|
@@ -82,8 +83,9 @@ module Blacklight::SolrHelper
|
|
82
83
|
end
|
83
84
|
|
84
85
|
def find(*args)
|
85
|
-
|
86
|
-
|
86
|
+
path = blacklight_config.solr_path
|
87
|
+
response = Blacklight.solr.get(path, :params=> args[1])
|
88
|
+
Blacklight::SolrResponse.new(force_to_utf8(response), args[1])
|
87
89
|
rescue Errno::ECONNREFUSED => e
|
88
90
|
raise Blacklight::Exceptions::ECONNREFUSED.new("Unable to connect to Solr instance using #{Blacklight.solr.inspect}")
|
89
91
|
end
|
@@ -165,11 +167,7 @@ module Blacklight::SolrHelper
|
|
165
167
|
raise Exception.new("To use pagination when no :per_page is supplied in the URL, :rows must be configured in blacklight_config default_solr_params")
|
166
168
|
end
|
167
169
|
|
168
|
-
solr_params[:
|
169
|
-
|
170
|
-
# Solr throws error for negative start. Existing specs say
|
171
|
-
# we say start at 1 in this case.
|
172
|
-
solr_params[:start] = 0 if solr_params[:start].to_i < 0
|
170
|
+
solr_params[:page] = user_params[:page]
|
173
171
|
end
|
174
172
|
|
175
173
|
# limit to MaxPerPage (100). Tests want this to be a string not an integer,
|
@@ -344,6 +342,17 @@ module Blacklight::SolrHelper
|
|
344
342
|
end
|
345
343
|
end
|
346
344
|
|
345
|
+
def add_solr_fields_to_query solr_parameters, user_parameters
|
346
|
+
return unless blacklight_config.add_field_configuration_to_solr_request
|
347
|
+
blacklight_config.index_fields.each do |field_name, field|
|
348
|
+
if field.highlight
|
349
|
+
solr_parameters[:hl] ||= true
|
350
|
+
solr_parameters[:'hl.fl'] ||= []
|
351
|
+
solr_parameters[:'hl.fl'] << field.field
|
352
|
+
end
|
353
|
+
end
|
354
|
+
end
|
355
|
+
|
347
356
|
|
348
357
|
|
349
358
|
# a solr query method
|
@@ -353,17 +362,32 @@ module Blacklight::SolrHelper
|
|
353
362
|
# Returns a two-element array (aka duple) with first the solr response object,
|
354
363
|
# and second an array of SolrDocuments representing the response.docs
|
355
364
|
def get_search_results(user_params = params || {}, extra_controller_params = {})
|
365
|
+
solr_response = query_solr(user_params, extra_controller_params)
|
366
|
+
document_list = solr_response.docs.collect {|doc| SolrDocument.new(doc, solr_response)}
|
367
|
+
return [solr_response, document_list]
|
368
|
+
end
|
356
369
|
|
370
|
+
|
371
|
+
# a solr query method
|
372
|
+
# given a user query,
|
373
|
+
# Returns a solr response object
|
374
|
+
def query_solr(user_params = params || {}, extra_controller_params = {})
|
357
375
|
# In later versions of Rails, the #benchmark method can do timing
|
358
376
|
# better for us.
|
359
377
|
bench_start = Time.now
|
360
|
-
|
361
|
-
|
362
|
-
|
378
|
+
params = self.solr_search_params(user_params).merge(extra_controller_params)
|
379
|
+
params[:qt] ||= blacklight_config.qt
|
380
|
+
path = blacklight_config.solr_path
|
381
|
+
raise "don't set start, use page and rows instead" if params['start'] || params[:start]
|
382
|
+
rows = params.delete(:rows) #only transmit rows once
|
383
|
+
res = Blacklight.solr.paginate(params[:page] || 1, rows, path, :params=>params)
|
384
|
+
solr_response = Blacklight::SolrResponse.new(force_to_utf8(res), params)
|
385
|
+
Rails.logger.debug("Solr query: #{params.inspect}")
|
363
386
|
Rails.logger.debug("Solr response: #{solr_response.inspect}") if defined?(::BLACKLIGHT_VERBOSE_LOGGING) and ::BLACKLIGHT_VERBOSE_LOGGING
|
364
|
-
Rails.logger.debug("Solr fetch: #{self.class}#
|
387
|
+
Rails.logger.debug("Solr fetch: #{self.class}#query_solr (#{'%.1f' % ((Time.now.to_f - bench_start.to_f)*1000)}ms)")
|
365
388
|
|
366
|
-
|
389
|
+
|
390
|
+
solr_response
|
367
391
|
end
|
368
392
|
|
369
393
|
# returns a params hash for finding a single solr document (CatalogController #show action)
|
@@ -384,7 +408,8 @@ module Blacklight::SolrHelper
|
|
384
408
|
# a solr query method
|
385
409
|
# retrieve a solr document, given the doc id
|
386
410
|
def get_solr_response_for_doc_id(id=nil, extra_controller_params={})
|
387
|
-
|
411
|
+
solr_params = solr_doc_params(id).merge(extra_controller_params)
|
412
|
+
solr_response = find((blacklight_config.document_solr_request_handler || blacklight_config.qt), solr_params)
|
388
413
|
raise Blacklight::Exceptions::InvalidSolrID.new if solr_response.docs.empty?
|
389
414
|
document = SolrDocument.new(solr_response.docs.first, solr_response)
|
390
415
|
[solr_response, document]
|
@@ -415,7 +440,7 @@ module Blacklight::SolrHelper
|
|
415
440
|
:spellcheck => 'false'
|
416
441
|
}.merge(extra_solr_params)
|
417
442
|
|
418
|
-
solr_response = find(blacklight_config.
|
443
|
+
solr_response = find(blacklight_config.qt, self.solr_search_params().merge(solr_params) )
|
419
444
|
document_list = solr_response.docs.collect{|doc| SolrDocument.new(doc, solr_response) }
|
420
445
|
[solr_response,document_list]
|
421
446
|
end
|
@@ -464,7 +489,7 @@ module Blacklight::SolrHelper
|
|
464
489
|
solr_params = solr_facet_params(facet_field, user_params, extra_controller_params)
|
465
490
|
|
466
491
|
# Make the solr call
|
467
|
-
response =find(blacklight_config.
|
492
|
+
response =find(blacklight_config.qt, solr_params)
|
468
493
|
|
469
494
|
limit = solr_params[:"f.#{facet_field}.facet.limit"] -1
|
470
495
|
|
@@ -490,7 +515,7 @@ module Blacklight::SolrHelper
|
|
490
515
|
solr_params[:start] = (index - 1) # start at 0 to get 1st doc, 1 to get 2nd.
|
491
516
|
solr_params[:rows] = 1
|
492
517
|
solr_params[:fl] = '*'
|
493
|
-
solr_response = find(blacklight_config.
|
518
|
+
solr_response = find(blacklight_config.qt, solr_params)
|
494
519
|
SolrDocument.new(solr_response.docs.first, solr_response) unless solr_response.docs.empty?
|
495
520
|
end
|
496
521
|
|
@@ -513,7 +538,7 @@ module Blacklight::SolrHelper
|
|
513
538
|
# where the field is the "field" argument passed in.
|
514
539
|
def get_opensearch_response(field=nil, extra_controller_params={})
|
515
540
|
solr_params = solr_opensearch_params().merge(extra_controller_params)
|
516
|
-
response = find(blacklight_config.
|
541
|
+
response = find(blacklight_config.qt, solr_params)
|
517
542
|
a = [solr_params[:q]]
|
518
543
|
a << response.docs.map {|doc| doc[solr_params[:fl]].to_s }
|
519
544
|
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
class Blacklight::SolrResponse < Mash
|
2
|
+
|
3
|
+
autoload :Spelling, 'blacklight/solr_response/spelling'
|
4
|
+
autoload :Facets, 'blacklight/solr_response/facets'
|
5
|
+
autoload :MoreLikeThis, 'blacklight/solr_response/more_like_this'
|
6
|
+
|
7
|
+
attr_reader :request_params
|
8
|
+
def initialize(data, request_params)
|
9
|
+
super(data)
|
10
|
+
@request_params = request_params
|
11
|
+
extend Spelling
|
12
|
+
extend Facets
|
13
|
+
extend Response
|
14
|
+
extend MoreLikeThis
|
15
|
+
end
|
16
|
+
|
17
|
+
def header
|
18
|
+
self['responseHeader']
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
def update(other_hash)
|
23
|
+
other_hash.each_pair { |key, value| self[key] = value }
|
24
|
+
self
|
25
|
+
end
|
26
|
+
|
27
|
+
def params
|
28
|
+
(header and header['params']) ? header['params'] : request_params
|
29
|
+
end
|
30
|
+
|
31
|
+
def rows
|
32
|
+
params[:rows].to_i
|
33
|
+
end
|
34
|
+
|
35
|
+
def docs
|
36
|
+
@docs ||= begin
|
37
|
+
response['docs']
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def spelling
|
42
|
+
self['spelling']
|
43
|
+
end
|
44
|
+
|
45
|
+
module Response
|
46
|
+
def response
|
47
|
+
self[:response]
|
48
|
+
end
|
49
|
+
|
50
|
+
# short cut to response['numFound']
|
51
|
+
def total
|
52
|
+
response[:numFound].to_s.to_i
|
53
|
+
end
|
54
|
+
|
55
|
+
def start
|
56
|
+
response[:start].to_s.to_i
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Blacklight::SolrResponse::Facets
|
2
|
+
|
3
|
+
# represents a facet value; which is a field value and its hit count
|
4
|
+
class FacetItem
|
5
|
+
attr_reader :value, :hits
|
6
|
+
def initialize value, hits
|
7
|
+
@value, @hits = value, hits
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
# represents a facet; which is a field and its values
|
12
|
+
class FacetField
|
13
|
+
attr_reader :name, :items
|
14
|
+
def initialize name, items
|
15
|
+
@name, @items = name, items
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# @response.facets.each do |facet|
|
20
|
+
# facet.name
|
21
|
+
# facet.items
|
22
|
+
# end
|
23
|
+
# "caches" the result in the @facets instance var
|
24
|
+
def facets
|
25
|
+
@facets ||= (
|
26
|
+
facet_fields.map do |(facet_field_name,values_and_hits)|
|
27
|
+
items = []
|
28
|
+
values_and_hits.each_slice(2) do |k,v|
|
29
|
+
items << FacetItem.new(k, v)
|
30
|
+
end
|
31
|
+
FacetField.new(facet_field_name, items)
|
32
|
+
end
|
33
|
+
)
|
34
|
+
end
|
35
|
+
|
36
|
+
# pass in a facet field name and get back a Facet instance
|
37
|
+
def facet_by_field_name(name)
|
38
|
+
@facets_by_field_name ||= {}
|
39
|
+
@facets_by_field_name[name] ||= (
|
40
|
+
facets.detect{|facet|facet.name.to_s == name.to_s}
|
41
|
+
)
|
42
|
+
end
|
43
|
+
|
44
|
+
def facet_counts
|
45
|
+
@facet_counts ||= self['facet_counts'] || {}
|
46
|
+
end
|
47
|
+
|
48
|
+
# Returns the hash of all the facet_fields (ie: {'instock_b' => ['true', 123, 'false', 20]}
|
49
|
+
def facet_fields
|
50
|
+
@facet_fields ||= facet_counts['facet_fields'] || {}
|
51
|
+
end
|
52
|
+
|
53
|
+
# Returns all of the facet queries
|
54
|
+
def facet_queries
|
55
|
+
@facet_queries ||= facet_counts['facet_queries'] || {}
|
56
|
+
end
|
57
|
+
|
58
|
+
end # end Facets
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Blacklight::SolrResponse::MoreLikeThis
|
2
|
+
def more_like document
|
3
|
+
mlt = more_like_this[document.id]
|
4
|
+
return [] unless mlt and mlt['docs']
|
5
|
+
|
6
|
+
mlt['docs']
|
7
|
+
end
|
8
|
+
|
9
|
+
def more_like_this
|
10
|
+
return {} unless self[:moreLikeThis]
|
11
|
+
|
12
|
+
self[:moreLikeThis]
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
# A mixin for making access to the spellcheck component data easy.
|
2
|
+
#
|
3
|
+
# response.spelling.words
|
4
|
+
#
|
5
|
+
module Blacklight::SolrResponse::Spelling
|
6
|
+
|
7
|
+
def spelling
|
8
|
+
@spelling ||= Base.new(self)
|
9
|
+
end
|
10
|
+
|
11
|
+
class Base
|
12
|
+
|
13
|
+
attr :response
|
14
|
+
|
15
|
+
def initialize(response)
|
16
|
+
@response = response
|
17
|
+
end
|
18
|
+
|
19
|
+
# returns an array of spelling suggestion for specific query words,
|
20
|
+
# as provided in the solr response. Only includes words with higher
|
21
|
+
# frequency of occurrence than word in original query.
|
22
|
+
# can't do a full query suggestion because we only get info for each word;
|
23
|
+
# combination of words may not have results.
|
24
|
+
# Thanks to Naomi Dushay!
|
25
|
+
def words
|
26
|
+
@words ||= (
|
27
|
+
word_suggestions = []
|
28
|
+
spellcheck = self.response[:spellcheck]
|
29
|
+
if spellcheck && spellcheck[:suggestions]
|
30
|
+
suggestions = spellcheck[:suggestions]
|
31
|
+
unless suggestions.nil?
|
32
|
+
# suggestions is an array:
|
33
|
+
# (query term)
|
34
|
+
# (hash of term info and term suggestion)
|
35
|
+
# ...
|
36
|
+
# (query term)
|
37
|
+
# (hash of term info and term suggestion)
|
38
|
+
# 'correctlySpelled'
|
39
|
+
# true/false
|
40
|
+
# collation
|
41
|
+
# (suggestion for collation)
|
42
|
+
if suggestions.index("correctlySpelled") #if extended results
|
43
|
+
i_stop = suggestions.index("correctlySpelled")
|
44
|
+
elsif suggestions.index("collation")
|
45
|
+
i_stop = suggestions.index("collation")
|
46
|
+
else
|
47
|
+
i_stop = suggestions.length
|
48
|
+
end
|
49
|
+
# step through array in 2s to get info for each term
|
50
|
+
0.step(i_stop-1, 2) do |i|
|
51
|
+
term = suggestions[i]
|
52
|
+
term_info = suggestions[i+1]
|
53
|
+
# term_info is a hash:
|
54
|
+
# numFound =>
|
55
|
+
# startOffset =>
|
56
|
+
# endOffset =>
|
57
|
+
# origFreq =>
|
58
|
+
# suggestion => [{ frequency =>, word => }] # for extended results
|
59
|
+
# suggestion => ['word'] # for non-extended results
|
60
|
+
origFreq = term_info['origFreq']
|
61
|
+
if suggestions.index("correctlySpelled")
|
62
|
+
word_suggestions << term_info['suggestion'].map do |suggestion|
|
63
|
+
suggestion['word'] if suggestion['freq'] > origFreq
|
64
|
+
end
|
65
|
+
else
|
66
|
+
# only extended suggestions have frequency so we just return all suggestions
|
67
|
+
word_suggestions << term_info['suggestion']
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
word_suggestions.flatten.compact.uniq
|
73
|
+
)
|
74
|
+
end
|
75
|
+
|
76
|
+
def collation
|
77
|
+
# FIXME: DRY up with words
|
78
|
+
spellcheck = self.response[:spellcheck]
|
79
|
+
if spellcheck && spellcheck[:suggestions]
|
80
|
+
suggestions = spellcheck[:suggestions]
|
81
|
+
unless suggestions.nil?
|
82
|
+
if suggestions.index("collation")
|
83
|
+
suggestions[suggestions.index("collation") + 1]
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
|
@@ -17,26 +17,13 @@ module Blacklight
|
|
17
17
|
source_root File.expand_path('../templates', __FILE__)
|
18
18
|
|
19
19
|
def assets
|
20
|
-
|
21
|
-
copy_file('assets/standard.css.scss', 'app/assets/stylesheets/blacklight_themes/standard.css.scss')
|
22
|
-
insert_into_file "app/assets/stylesheets/application.css", :after => "/*" do
|
23
|
-
%q{
|
24
|
-
* Required by Blacklight:
|
25
|
-
*= require 'jquery/ui-lightness/jquery-ui-1.8.1.custom.css'
|
26
|
-
*
|
27
|
-
* This is the default theme. You can modify many of the settings
|
28
|
-
* by editing your local app/assets/stylesheets/blacklight_themes/standard.css
|
29
|
-
*= require 'blacklight_themes/standard'
|
30
|
-
*}
|
31
|
-
end
|
32
|
-
end
|
20
|
+
copy_file "blacklight.css.scss", "app/assets/stylesheets/blacklight.css.scss"
|
33
21
|
|
34
22
|
unless IO.read("app/assets/javascripts/application.js").include?('blacklight/blacklight')
|
35
23
|
insert_into_file "app/assets/javascripts/application.js", :after => "//= require jquery_ujs" do
|
36
24
|
%q{
|
37
25
|
//
|
38
26
|
// Required by Blacklight
|
39
|
-
//= require jquery-ui
|
40
27
|
//= require blacklight/blacklight}
|
41
28
|
end
|
42
29
|
end
|
@@ -14,17 +14,16 @@ class BlacklightGenerator < Rails::Generators::Base
|
|
14
14
|
This generator makes the following changes to your application:
|
15
15
|
1. Creates several database migrations if they do not exist in /db/migrate
|
16
16
|
2. Adds additional mime types to you application in the file '/config/initializers/mime_types.rb'
|
17
|
-
3. Creates config/
|
18
|
-
4. Creates
|
19
|
-
5. Creates
|
20
|
-
6.
|
21
|
-
7.
|
22
|
-
|
23
|
-
9.
|
24
|
-
10. Creates a blacklight
|
25
|
-
11.
|
26
|
-
12.
|
27
|
-
13. Enables internationalization.
|
17
|
+
3. Creates config/solr.yml with a default solr configuration that should work with standard marc records
|
18
|
+
4. Creates congig/SolrMarc/... with settings for SolrMarc
|
19
|
+
5. Creates a number of public assets, including images, stylesheets, and javascript
|
20
|
+
6. Adds a solr_marc.jar file to your lib/ directory
|
21
|
+
7. Injects behavior into your user application_controller.rb
|
22
|
+
8. Injects behavior into your user model
|
23
|
+
9. Creates a blacklight catalog controller in your /app/controllers directory
|
24
|
+
10. Creates a blacklight document in your /app/models directory
|
25
|
+
11. Adds Blacklight routes to your ./config/routes.rb
|
26
|
+
12. Enables internationalization.
|
28
27
|
|
29
28
|
Thank you for Installing Blacklight.
|
30
29
|
"""
|
@@ -65,11 +64,15 @@ EOF
|
|
65
64
|
end
|
66
65
|
end
|
67
66
|
|
67
|
+
def add_unicode_gem
|
68
|
+
gem "unicode", :platforms => [:mri_18, :mri_19] unless defined?(:RUBY_VERSION) and RUBY_VERSION == '2.0.0'
|
69
|
+
end
|
70
|
+
|
68
71
|
# Install Devise?
|
69
72
|
def generate_devise_assets
|
70
73
|
if options[:devise]
|
71
74
|
gem "devise"
|
72
|
-
gem "devise-guests", "~> 0.
|
75
|
+
gem "devise-guests", "~> 0.2"
|
73
76
|
|
74
77
|
Bundler.with_clean_env do
|
75
78
|
run "bundle install"
|
@@ -77,7 +80,6 @@ EOF
|
|
77
80
|
|
78
81
|
generate "devise:install"
|
79
82
|
generate "devise", model_name.classify
|
80
|
-
generate "devise_guests", model_name.classify
|
81
83
|
generate "devise:views"
|
82
84
|
|
83
85
|
# add the #to_s to the model.
|
@@ -97,8 +99,8 @@ EOF
|
|
97
99
|
|
98
100
|
# Copy all files in templates/config directory to host config
|
99
101
|
def create_configuration_files
|
100
|
-
copy_file "config/blacklight_config.rb", "config/initializers/blacklight_config.rb"
|
101
102
|
copy_file "config/solr.yml", "config/solr.yml"
|
103
|
+
copy_file "config/jetty.yml", "config/jetty.yml"
|
102
104
|
directory("config/SolrMarc")
|
103
105
|
end
|
104
106
|
|
@@ -158,12 +160,6 @@ EOF
|
|
158
160
|
end
|
159
161
|
|
160
162
|
def add_sass_configuration
|
161
|
-
gem 'compass-rails', '~> 1.0.0', :group => :assets
|
162
|
-
gem 'compass-susy-plugin', '~> 0.9.0', :group => :assets
|
163
|
-
|
164
|
-
Bundler.with_clean_env do
|
165
|
-
run "bundle install"
|
166
|
-
end
|
167
163
|
|
168
164
|
insert_into_file "config/application.rb", :after => "config.assets.enabled = true" do <<EOF
|
169
165
|
|
@@ -173,9 +169,14 @@ EOF
|
|
173
169
|
EOF
|
174
170
|
end
|
175
171
|
|
176
|
-
copy_file "config/compass.rb", "config/compass.rb"
|
177
172
|
end
|
178
173
|
|
174
|
+
def add_bootstrap_gem
|
175
|
+
# Don't need a version here, because we specify the version in blacklight.gemspec
|
176
|
+
gem 'bootstrap-sass'
|
177
|
+
end
|
178
|
+
|
179
|
+
|
179
180
|
private
|
180
181
|
|
181
182
|
def better_migration_template (file)
|