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.
Files changed (206) hide show
  1. data/Gemfile +1 -0
  2. data/README.md +1 -1
  3. data/VERSION +1 -1
  4. data/app/assets/javascripts/blacklight/blacklight.js +12 -1
  5. data/app/assets/javascripts/blacklight/bootstrap_dropdowns.js +3 -0
  6. data/app/assets/javascripts/blacklight/checkbox_submit.js +12 -5
  7. data/app/assets/javascripts/blacklight/core.js +0 -1
  8. data/app/assets/javascripts/blacklight/css_dropdowns.js +10 -0
  9. data/app/assets/javascripts/blacklight/facet_expand_contract.js +5 -5
  10. data/app/assets/javascripts/blacklight/lightbox_dialog.js +68 -13
  11. data/app/assets/javascripts/blacklight/select_submit.js +19 -10
  12. data/app/assets/javascripts/improved-modal/bootstrap-modal.js +282 -0
  13. data/app/assets/javascripts/improved-modal/bootstrap-modalmanager.js +353 -0
  14. data/app/assets/stylesheets/blacklight/_blacklight_base.css.scss +16 -5
  15. data/app/assets/stylesheets/blacklight/_bookmark.css.scss +24 -6
  16. data/app/assets/stylesheets/blacklight/_catalog.css.scss +115 -141
  17. data/app/assets/stylesheets/blacklight/_dropdown.css.scss +57 -0
  18. data/app/assets/stylesheets/blacklight/_facets.css.scss +127 -58
  19. data/app/assets/stylesheets/blacklight/_footer.css.scss +20 -0
  20. data/app/assets/stylesheets/blacklight/_header.css.scss +90 -21
  21. data/app/assets/stylesheets/blacklight/_layout.css.scss +10 -9
  22. data/app/assets/stylesheets/blacklight/_modal.css.scss +23 -0
  23. data/app/assets/stylesheets/blacklight/_print.css.scss +0 -7
  24. data/app/assets/stylesheets/blacklight/_responsive.css.scss +3 -0
  25. data/app/assets/stylesheets/blacklight/_search_history.css.scss +2 -4
  26. data/app/assets/stylesheets/blacklight/blacklight.css.scss +0 -1
  27. data/app/assets/stylesheets/blacklight/blacklight_defaults.css.scss +9 -2
  28. data/app/assets/stylesheets/blacklight/responsive_partials/_catalog.css.scss +5 -0
  29. data/app/assets/stylesheets/blacklight/responsive_partials/_facets.css.scss +37 -0
  30. data/app/assets/stylesheets/blacklight/responsive_partials/_header.css.scss +30 -0
  31. data/app/assets/stylesheets/improved-modal/bootstrap-modal.css +199 -0
  32. data/app/controllers/bookmarks_controller.rb +16 -10
  33. data/app/helpers/blacklight/blacklight_helper_behavior.rb +124 -61
  34. data/app/helpers/blacklight/catalog_helper_behavior.rb +5 -3
  35. data/app/helpers/blacklight/facets_helper_behavior.rb +9 -9
  36. data/app/views/_flash_msg.html.erb +9 -4
  37. data/app/views/_user_util_links.html.erb +23 -17
  38. data/app/views/bookmarks/_tools.html.erb +7 -7
  39. data/app/views/bookmarks/index.html.erb +5 -13
  40. data/app/views/catalog/_bookmark_control.html.erb +2 -4
  41. data/app/views/catalog/_bookmark_form.html.erb +1 -1
  42. data/app/views/catalog/_citation.html.erb +21 -20
  43. data/app/views/catalog/_constraints.html.erb +8 -6
  44. data/app/views/catalog/_document_header.html.erb +6 -7
  45. data/app/views/catalog/_document_list.html.erb +1 -7
  46. data/app/views/catalog/_email_form.html.erb +42 -16
  47. data/app/views/catalog/_facet_layout.html.erb +1 -1
  48. data/app/views/catalog/_facet_limit.html.erb +1 -1
  49. data/app/views/catalog/_facet_pagination.html.erb +11 -14
  50. data/app/views/catalog/_facets.html.erb +16 -2
  51. data/app/views/catalog/_home.html.erb +2 -2
  52. data/app/views/catalog/_home_text.html.erb +5 -2
  53. data/app/views/catalog/_index_default.html.erb +2 -2
  54. data/app/views/catalog/_marc_view.html.erb +0 -1
  55. data/app/views/catalog/_paginate_compact.html.erb +5 -0
  56. data/app/views/catalog/_per_page_widget.html.erb +13 -7
  57. data/app/views/catalog/_previous_next_doc.html.erb +14 -4
  58. data/app/views/catalog/_refworks_form.html.erb +2 -2
  59. data/app/views/catalog/_results_pagination.html.erb +4 -1
  60. data/app/views/catalog/_search_form.html.erb +19 -13
  61. data/app/views/catalog/_show_default.html.erb +2 -2
  62. data/app/views/catalog/_show_more_like_this.html.erb +3 -0
  63. data/app/views/catalog/_show_sidebar.html.erb +14 -1
  64. data/app/views/catalog/_show_tools.html.erb +18 -18
  65. data/app/views/catalog/_sms_form.html.erb +35 -10
  66. data/app/views/catalog/_sort_and_per_page.html.erb +5 -3
  67. data/app/views/catalog/_sort_widget.html.erb +12 -6
  68. data/app/views/catalog/citation.html.erb +1 -1
  69. data/app/views/catalog/citation.js.erb +7 -0
  70. data/app/views/catalog/email.html.erb +5 -0
  71. data/app/views/catalog/facet.html.erb +28 -21
  72. data/app/views/catalog/index.html.erb +26 -26
  73. data/app/views/catalog/librarian_view.html.erb +7 -0
  74. data/app/views/catalog/show.html.erb +35 -29
  75. data/app/views/catalog/sms.html.erb +5 -0
  76. data/app/views/kaminari/blacklight/_first_page.html.erb +2 -2
  77. data/app/views/kaminari/blacklight/_gap.html.erb +4 -1
  78. data/app/views/kaminari/blacklight/_last_page.html.erb +2 -2
  79. data/app/views/kaminari/blacklight/_next_page.html.erb +3 -3
  80. data/app/views/kaminari/blacklight/_page.html.erb +4 -3
  81. data/app/views/kaminari/blacklight/_paginator.html.erb +5 -5
  82. data/app/views/kaminari/blacklight/_prev_page.html.erb +3 -3
  83. data/app/views/kaminari/blacklight_compact/_next_page.html.erb +9 -0
  84. data/app/views/kaminari/blacklight_compact/_paginator.html.erb +15 -0
  85. data/app/views/kaminari/blacklight_compact/_prev_page.html.erb +9 -0
  86. data/app/views/layouts/blacklight.html.erb +47 -27
  87. data/app/views/saved_searches/index.html.erb +2 -2
  88. data/app/views/search_history/index.html.erb +12 -7
  89. data/app/views/shared/_footer.html.erb +0 -0
  90. data/app/views/shared/_header_navbar.html.erb +25 -0
  91. data/blacklight.gemspec +2 -5
  92. data/config/locales/blacklight.en.yml +23 -15
  93. data/lib/blacklight.rb +2 -2
  94. data/lib/blacklight/catalog.rb +36 -14
  95. data/lib/blacklight/configuration.rb +10 -2
  96. data/lib/blacklight/mash.rb +151 -0
  97. data/lib/blacklight/solr/document.rb +73 -11
  98. data/lib/blacklight/solr/document/extensions.rb +0 -8
  99. data/lib/blacklight/solr/document/marc_export.rb +7 -2
  100. data/lib/blacklight/solr/document/more_like_this.rb +5 -0
  101. data/lib/blacklight/solr_helper.rb +43 -18
  102. data/lib/blacklight/solr_response.rb +60 -0
  103. data/lib/blacklight/solr_response/facets.rb +58 -0
  104. data/lib/blacklight/solr_response/more_like_this.rb +14 -0
  105. data/lib/blacklight/solr_response/spelling.rb +92 -0
  106. data/lib/generators/blacklight/assets_generator.rb +1 -14
  107. data/lib/generators/blacklight/blacklight_generator.rb +22 -21
  108. data/lib/generators/blacklight/jetty_generator.rb +1 -35
  109. data/{test_support → lib/generators/blacklight/templates}/alternate_controller.rb +0 -0
  110. data/lib/generators/blacklight/templates/blacklight.css.scss +4 -0
  111. data/lib/generators/blacklight/templates/config/SolrMarc/config-test.properties +2 -2
  112. data/lib/generators/blacklight/templates/config/jetty.yml +6 -0
  113. data/lib/generators/blacklight/test_support_generator.rb +35 -0
  114. data/lib/railties/all_tests.rake +5 -23
  115. data/lib/railties/blacklight_cucumber.rake +2 -11
  116. data/lib/railties/blacklight_rspec.rake +2 -12
  117. data/test_support/bin/run-tests.sh +1 -1
  118. data/test_support/bin/setup-test-app.sh +123 -0
  119. data/test_support/bin/test.sh +21 -21
  120. data/test_support/features/bookmarks.feature +9 -3
  121. data/test_support/features/saved_searches.feature +3 -3
  122. data/test_support/features/search.feature +3 -3
  123. data/test_support/features/search_filters.feature +24 -26
  124. data/test_support/features/search_history.feature +9 -10
  125. data/test_support/features/search_sort.feature +4 -6
  126. data/test_support/features/step_definitions/general_steps.rb +0 -4
  127. data/test_support/features/step_definitions/search_result_steps.rb +2 -1
  128. data/test_support/features/step_definitions/search_steps.rb +32 -2
  129. data/test_support/spec/controllers/application_controller_spec.rb +8 -0
  130. data/test_support/spec/controllers/catalog_controller_spec.rb +3 -18
  131. data/test_support/spec/helpers/blacklight_helper_spec.rb +116 -20
  132. data/test_support/spec/helpers/catalog_helper_spec.rb +14 -6
  133. data/test_support/spec/helpers/facets_helper_spec.rb +1 -1
  134. data/test_support/spec/lib/blacklight_solr_document_more_like_this_spec.rb +18 -0
  135. data/test_support/spec/lib/blacklight_solr_document_spec.rb +54 -1
  136. data/test_support/spec/lib/blacklight_solr_response_spec.rb +153 -0
  137. data/test_support/spec/lib/facet_paginator_spec.rb +1 -1
  138. data/test_support/spec/lib/marc_export_spec.rb +14 -6
  139. data/test_support/spec/lib/solr_helper_spec.rb +22 -6
  140. data/test_support/spec/models/solr_docment_spec.rb +1 -4
  141. data/test_support/spec/{features → requests}/alternate_controller_spec.rb +3 -2
  142. data/test_support/spec/views/catalog/_facets.html.erb_spec.rb +20 -4
  143. data/test_support/spec/views/catalog/_show_sidebar.erb_spec.rb +25 -0
  144. metadata +53 -131
  145. data/app/assets/javascripts/blacklight/more_facets.js +0 -16
  146. data/app/assets/javascripts/jquery-1.4.2.min.js +0 -154
  147. data/app/assets/javascripts/jquery-ui-1.8.1.custom.min.js +0 -756
  148. data/app/assets/javascripts/jquery.uiExt.ajaxyDialog.js +0 -180
  149. data/app/assets/stylesheets/blacklight/_formatting.css.scss +0 -164
  150. data/app/assets/stylesheets/blacklight/grids/_susy_grid.css.scss +0 -72
  151. data/app/assets/stylesheets/jquery/ui-lightness/images/ui-anim_basic_16x16.gif +0 -0
  152. data/app/assets/stylesheets/jquery/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  153. data/app/assets/stylesheets/jquery/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  154. data/app/assets/stylesheets/jquery/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
  155. data/app/assets/stylesheets/jquery/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  156. data/app/assets/stylesheets/jquery/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  157. data/app/assets/stylesheets/jquery/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  158. data/app/assets/stylesheets/jquery/ui-lightness/images/ui-bg_gloss-wave_35_558fd0_500x100.png +0 -0
  159. data/app/assets/stylesheets/jquery/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  160. data/app/assets/stylesheets/jquery/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  161. data/app/assets/stylesheets/jquery/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
  162. data/app/assets/stylesheets/jquery/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
  163. data/app/assets/stylesheets/jquery/ui-lightness/images/ui-icons_2e4f81_256x240.png +0 -0
  164. data/app/assets/stylesheets/jquery/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
  165. data/app/assets/stylesheets/jquery/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
  166. data/app/assets/stylesheets/jquery/ui-lightness/jquery-ui-1.8.1.custom.css +0 -486
  167. data/app/models/solr_document.rb +0 -5
  168. data/app/views/catalog/email.erb +0 -1
  169. data/app/views/catalog/sms.erb +0 -1
  170. data/doc/Atom-Responses.md +0 -90
  171. data/doc/Blacklight-3.2-Release-Notes-and-Upgrade-Guide.md +0 -191
  172. data/doc/Blacklight-3.3-release-notes-and-upgrade-guide.md +0 -37
  173. data/doc/Blacklight-3.4-release-notes-and-upgrade-guide.md +0 -27
  174. data/doc/Blacklight-3.5-release-notes-and-upgrade-guide.md +0 -44
  175. data/doc/Blacklight-3.6-release-notes-and-upgrade-guide.md +0 -25
  176. data/doc/Blacklight-3.7-release-notes-and-upgrade-guide.md +0 -78
  177. data/doc/Blacklight-3.8-release-notes-and-upgrade-guide.md +0 -11
  178. data/doc/Blacklight-Add-ons.md +0 -28
  179. data/doc/Blacklight-configuration.md +0 -301
  180. data/doc/Blacklight-on-Heroku.md +0 -135
  181. data/doc/Community-principles.md +0 -44
  182. data/doc/Configuring-and-Customizing-Blacklight.md +0 -271
  183. data/doc/Contributing-to-Blacklight.md +0 -25
  184. data/doc/Examples.md +0 -62
  185. data/doc/Extending-or-Modifying-Blacklight-Search-Behavior.md +0 -141
  186. data/doc/Home.md +0 -77
  187. data/doc/How-to-release-a-version.md +0 -37
  188. data/doc/Indexing-your-data-into-solr.md +0 -5
  189. data/doc/Integration-with-Rails-Footnotes.md +0 -20
  190. data/doc/Pagination.md +0 -38
  191. data/doc/Providing-your-own-view-templates.md +0 -109
  192. data/doc/Quickstart.md +0 -116
  193. data/doc/README.md +0 -77
  194. data/doc/README_SOLR.md +0 -245
  195. data/doc/Release-Notes-And-Upgrade-Guides.md +0 -14
  196. data/doc/Sunspot-for-indexing.md +0 -46
  197. data/doc/User-Authentication.md +0 -60
  198. data/doc/testing.md +0 -115
  199. data/lib/generators/blacklight/solr_conf_generator.rb +0 -26
  200. data/lib/generators/blacklight/templates/assets/standard.css.scss +0 -59
  201. data/lib/generators/blacklight/templates/config/blacklight_config.rb +0 -3
  202. data/lib/generators/blacklight/templates/config/compass.rb +0 -2
  203. data/lib/generators/blacklight/templates/solr_conf/schema.xml +0 -689
  204. data/lib/generators/blacklight/templates/solr_conf/solrconfig.xml +0 -1846
  205. data/lib/solrmarc.log.1 +0 -849
  206. data/test_support/spec/controllers/bookmarks_controller_spec.rb +0 -48
@@ -0,0 +1,5 @@
1
+ module Blacklight::Solr::Document::MoreLikeThis
2
+ def more_like_this
3
+ solr_response.more_like(self).map { |doc| SolrDocument.new(doc, solr_response) }
4
+ end
5
+ end
@@ -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
- response = Blacklight.solr.find(*args)
86
- force_to_utf8(response)
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[:start] = solr_params[:rows].to_i * (user_params[:page].to_i - 1)
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
- solr_response = find(blacklight_config.solr_request_handler, self.solr_search_params(user_params).merge(extra_controller_params))
362
- document_list = solr_response.docs.collect {|doc| SolrDocument.new(doc, solr_response)}
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}#get_search_results (#{'%.1f' % ((Time.now.to_f - bench_start.to_f)*1000)}ms)")
387
+ Rails.logger.debug("Solr fetch: #{self.class}#query_solr (#{'%.1f' % ((Time.now.to_f - bench_start.to_f)*1000)}ms)")
365
388
 
366
- return [solr_response, document_list]
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
- solr_response = find((blacklight_config.document_solr_request_handler || blacklight_config.solr_request_handler), solr_doc_params(id).merge(extra_controller_params))
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.solr_request_handler, self.solr_search_params().merge(solr_params) )
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.solr_request_handler, solr_params)
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.solr_request_handler, solr_params)
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.solr_request_handler, solr_params)
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
- unless IO.read("app/assets/stylesheets/application.css").include?("Blacklight")
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/initializers/blacklight_config.rb which you should then modify for your instance
18
- 4. Creates config/solr.yml with a default solr configuration that should work with standard marc records
19
- 5. Creates congig/SolrMarc/... with settings for SolrMarc
20
- 6. Creates a number of public assets, including images, stylesheets, and javascript
21
- 7. Adds a solr_marc.jar file to your lib/ directory
22
- 9. Injects behavior into your user application_controller.rb
23
- 9. Injects behavior into your user model
24
- 10. Creates a blacklight catalog controller in your /app/controllers directory
25
- 11. Creates a blacklight document in your /app/models directory
26
- 12. Adds Blacklight routes to your ./config/routes.rb
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.3"
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)