blacklight 6.24.0 → 7.0.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.npmignore +23 -0
  4. data/.rubocop.yml +15 -3
  5. data/.rubocop_todo.yml +242 -379
  6. data/.solr_wrapper.yml +1 -1
  7. data/.travis.yml +20 -24
  8. data/Gemfile +1 -4
  9. data/README.md +21 -4
  10. data/Rakefile +1 -2
  11. data/VERSION +1 -1
  12. data/app/assets/images/blacklight/list.svg +1 -0
  13. data/app/assets/images/blacklight/search.svg +1 -0
  14. data/app/assets/javascripts/blacklight/blacklight.js +496 -56
  15. data/app/assets/stylesheets/blacklight/_balanced_list.scss +7 -12
  16. data/app/assets/stylesheets/blacklight/_blacklight_base.scss +3 -1
  17. data/app/assets/stylesheets/blacklight/_bookmark.scss +1 -13
  18. data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +27 -0
  19. data/app/assets/stylesheets/blacklight/_constraints.scss +17 -25
  20. data/app/assets/stylesheets/blacklight/_controls.scss +8 -16
  21. data/app/assets/stylesheets/blacklight/_facets.scss +74 -92
  22. data/app/assets/stylesheets/blacklight/_header.scss +35 -48
  23. data/app/assets/stylesheets/blacklight/_icons.scss +29 -0
  24. data/app/assets/stylesheets/blacklight/_layout.scss +0 -10
  25. data/app/assets/stylesheets/blacklight/_mixins.scss +15 -0
  26. data/app/assets/stylesheets/blacklight/_modal.scss +9 -17
  27. data/app/assets/stylesheets/blacklight/_pagination.scss +2 -17
  28. data/app/assets/stylesheets/blacklight/_search_history.scss +5 -13
  29. data/app/assets/stylesheets/blacklight/_search_results.scss +9 -8
  30. data/app/assets/stylesheets/blacklight/_twitter_typeahead.scss +1 -2
  31. data/app/builders/blacklight/action_builder.rb +56 -0
  32. data/app/controllers/bookmarks_controller.rb +2 -2
  33. data/app/controllers/catalog_controller.rb +2 -2
  34. data/app/controllers/concerns/blacklight/base.rb +0 -33
  35. data/app/controllers/concerns/blacklight/bookmarks.rb +20 -37
  36. data/app/controllers/concerns/blacklight/catalog.rb +254 -213
  37. data/app/controllers/concerns/blacklight/controller.rb +117 -133
  38. data/app/controllers/concerns/blacklight/default_component_configuration.rb +12 -43
  39. data/app/controllers/concerns/blacklight/search_context.rb +10 -14
  40. data/app/controllers/concerns/blacklight/search_fields.rb +4 -14
  41. data/app/controllers/concerns/blacklight/token_based_user.rb +6 -10
  42. data/app/helpers/blacklight/blacklight_helper_behavior.rb +32 -118
  43. data/app/helpers/blacklight/catalog_helper_behavior.rb +94 -88
  44. data/app/helpers/blacklight/component_helper_behavior.rb +19 -19
  45. data/app/helpers/blacklight/configuration_helper_behavior.rb +25 -54
  46. data/app/helpers/blacklight/facets_helper_behavior.rb +40 -39
  47. data/app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb +9 -11
  48. data/app/helpers/blacklight/icon_helper_behavior.rb +16 -0
  49. data/app/helpers/blacklight/layout_helper_behavior.rb +3 -10
  50. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +6 -6
  51. data/app/helpers/blacklight/render_partials_helper_behavior.rb +195 -0
  52. data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +18 -11
  53. data/app/helpers/blacklight/suggest_helper_behavior.rb +1 -0
  54. data/app/helpers/blacklight/url_helper_behavior.rb +21 -27
  55. data/app/{assets/javascripts → javascript}/blacklight/autocomplete.js +3 -2
  56. data/app/javascript/blacklight/autofocus.js +20 -0
  57. data/app/javascript/blacklight/bookmark_toggle.js +25 -0
  58. data/app/javascript/blacklight/checkbox_submit.js +133 -0
  59. data/app/{assets/javascripts → javascript}/blacklight/collapsable.js +1 -1
  60. data/app/javascript/blacklight/core.js +39 -0
  61. data/app/{assets/javascripts → javascript}/blacklight/facet_load.js +6 -6
  62. data/app/{assets/javascripts/blacklight/ajax_modal.js → javascript/blacklight/modal.js} +63 -63
  63. data/app/{assets/javascripts → javascript}/blacklight/search_context.js +10 -2
  64. data/app/models/blacklight/facet_paginator.rb +3 -3
  65. data/app/models/blacklight/icon.rb +53 -0
  66. data/app/models/blacklight/solr/facet_paginator.rb +3 -3
  67. data/app/models/blacklight/suggest_search.rb +15 -4
  68. data/app/models/bookmark.rb +4 -9
  69. data/app/models/concerns/blacklight/configurable.rb +13 -13
  70. data/app/models/concerns/blacklight/document.rb +8 -42
  71. data/app/models/concerns/blacklight/document/active_model_shim.rb +8 -11
  72. data/app/models/concerns/blacklight/document/cache_key.rb +1 -1
  73. data/app/models/concerns/blacklight/document/dublin_core.rb +2 -2
  74. data/app/models/concerns/blacklight/document/email.rb +1 -1
  75. data/app/models/concerns/blacklight/document/extensions.rb +5 -5
  76. data/app/models/concerns/blacklight/document/semantic_fields.rb +9 -9
  77. data/app/models/concerns/blacklight/document/sms.rb +1 -1
  78. data/app/models/concerns/blacklight/solr/document.rb +7 -8
  79. data/app/models/concerns/blacklight/suggest/response.rb +3 -5
  80. data/app/models/concerns/blacklight/user.rb +6 -6
  81. data/app/models/record_mailer.rb +5 -6
  82. data/app/models/search.rb +4 -7
  83. data/app/presenters/blacklight/field_presenter.rb +5 -5
  84. data/app/presenters/blacklight/index_presenter.rb +34 -71
  85. data/app/presenters/blacklight/json_presenter.rb +7 -4
  86. data/app/presenters/blacklight/link_alternate_presenter.rb +1 -1
  87. data/app/presenters/blacklight/rendering/abstract_step.rb +5 -5
  88. data/app/presenters/blacklight/rendering/helper_method.rb +8 -8
  89. data/app/presenters/blacklight/rendering/join.rb +3 -3
  90. data/app/presenters/blacklight/rendering/link_to_facet.rb +19 -19
  91. data/app/presenters/blacklight/rendering/microdata.rb +3 -3
  92. data/app/presenters/blacklight/rendering/pipeline.rb +5 -5
  93. data/app/presenters/blacklight/search_bar_presenter.rb +37 -0
  94. data/app/presenters/blacklight/show_presenter.rb +20 -69
  95. data/app/presenters/blacklight/thumbnail_presenter.rb +72 -0
  96. data/app/services/blacklight/document_factory.rb +11 -0
  97. data/app/services/blacklight/field_retriever.rb +24 -24
  98. data/app/services/blacklight/search_service.rb +154 -0
  99. data/app/views/blacklight/nav/_bookmark.html.erb +2 -2
  100. data/app/views/blacklight/nav/_search_history.html.erb +1 -1
  101. data/app/views/bookmarks/_tools.html.erb +2 -2
  102. data/app/views/bookmarks/index.html.erb +2 -2
  103. data/app/views/catalog/_bookmark_control.html.erb +26 -10
  104. data/app/views/catalog/_citation.html.erb +18 -23
  105. data/app/views/catalog/_constraints.html.erb +5 -8
  106. data/app/views/catalog/_constraints_element.html.erb +6 -6
  107. data/app/views/catalog/{_document_default.atom.builder → _document.atom.builder} +2 -2
  108. data/app/views/catalog/_document.html.erb +5 -3
  109. data/app/views/catalog/{_document_default.rss.builder → _document.rss.builder} +0 -0
  110. data/app/views/catalog/_document_action.html.erb +2 -1
  111. data/app/views/catalog/_email_form.html.erb +8 -4
  112. data/app/views/catalog/_facet_index_navigation.html.erb +3 -3
  113. data/app/views/catalog/_facet_layout.html.erb +5 -7
  114. data/app/views/catalog/_facet_limit.html.erb +3 -2
  115. data/app/views/catalog/_facet_pagination.html.erb +10 -10
  116. data/app/views/catalog/_facet_pivot.html.erb +2 -2
  117. data/app/views/catalog/_facets.html.erb +8 -12
  118. data/app/views/catalog/{_group_default.html.erb → _group.html.erb} +0 -0
  119. data/app/views/catalog/_home_text.html.erb +32 -36
  120. data/app/views/catalog/_index.html.erb +12 -0
  121. data/app/views/catalog/{_index_header_default.html.erb → _index_header.html.erb} +2 -2
  122. data/app/views/catalog/_per_page_widget.html.erb +6 -7
  123. data/app/views/catalog/_previous_next_doc.html.erb +6 -14
  124. data/app/views/catalog/_search_form.html.erb +12 -8
  125. data/app/views/catalog/_search_header.html.erb +0 -3
  126. data/app/views/catalog/_search_results.html.erb +4 -0
  127. data/app/views/catalog/_show.html.erb +10 -0
  128. data/app/views/catalog/{_show_header_default.html.erb → _show_header.html.erb} +0 -0
  129. data/app/views/catalog/_show_main_content.html.erb +4 -4
  130. data/app/views/catalog/_show_sidebar.html.erb +3 -3
  131. data/app/views/catalog/_show_tools.html.erb +9 -11
  132. data/app/views/catalog/_sms_form.html.erb +8 -4
  133. data/app/views/catalog/_sort_and_per_page.html.erb +3 -3
  134. data/app/views/catalog/_sort_widget.html.erb +7 -7
  135. data/app/views/catalog/_thumbnail.html.erb +5 -0
  136. data/app/views/catalog/_view_type_group.html.erb +2 -2
  137. data/app/views/catalog/citation.html.erb +1 -1
  138. data/app/views/catalog/citation.js.erb +9 -1
  139. data/app/views/catalog/email.html.erb +5 -5
  140. data/app/views/catalog/email_success.html.erb +11 -9
  141. data/app/views/catalog/facet.html.erb +5 -6
  142. data/app/views/catalog/index.atom.builder +10 -15
  143. data/app/views/catalog/index.html.erb +9 -11
  144. data/app/views/catalog/index.json.jbuilder +65 -3
  145. data/app/views/catalog/index.rss.builder +5 -5
  146. data/app/views/catalog/opensearch.xml.builder +10 -10
  147. data/app/views/catalog/show.html.erb +11 -6
  148. data/app/views/catalog/sms.html.erb +2 -3
  149. data/app/views/catalog/sms_success.html.erb +11 -10
  150. data/app/views/kaminari/blacklight/_first_page.html.erb +2 -2
  151. data/app/views/kaminari/blacklight/_gap.html.erb +2 -2
  152. data/app/views/kaminari/blacklight/_last_page.html.erb +2 -2
  153. data/app/views/kaminari/blacklight/_next_page.html.erb +4 -4
  154. data/app/views/kaminari/blacklight/_page.html.erb +3 -3
  155. data/app/views/kaminari/blacklight/_prev_page.html.erb +4 -4
  156. data/app/views/kaminari/blacklight_compact/_paginator.html.erb +4 -4
  157. data/app/views/layouts/blacklight.html.erb +14 -41
  158. data/app/views/layouts/blacklight/base.html.erb +43 -0
  159. data/app/views/layouts/catalog_result.html.erb +11 -0
  160. data/app/views/search_history/index.html.erb +16 -21
  161. data/app/views/{_flash_msg.html.erb → shared/_flash_msg.html.erb} +0 -0
  162. data/app/views/shared/_header_navbar.html.erb +8 -13
  163. data/app/views/shared/_modal.html.erb +6 -0
  164. data/app/views/shared/_user_util_links.html.erb +22 -0
  165. data/blacklight.gemspec +10 -11
  166. data/config/locales/blacklight.de.yml +0 -30
  167. data/config/locales/blacklight.en.yml +1 -27
  168. data/config/locales/blacklight.es.yml +0 -30
  169. data/config/locales/blacklight.fr.yml +0 -30
  170. data/config/locales/blacklight.hu.yml +210 -0
  171. data/config/locales/blacklight.it.yml +0 -30
  172. data/config/locales/blacklight.nl.yml +210 -0
  173. data/config/locales/blacklight.pt-BR.yml +6 -32
  174. data/config/locales/blacklight.sq.yml +1 -28
  175. data/config/locales/blacklight.zh.yml +0 -25
  176. data/config/routes.rb +3 -10
  177. data/db/migrate/20140202020202_create_bookmarks.rb +0 -1
  178. data/db/migrate/20140320000000_add_polymorphic_type_to_bookmarks.rb +1 -1
  179. data/lib/blacklight.rb +4 -5
  180. data/lib/blacklight/abstract_repository.rb +9 -21
  181. data/lib/blacklight/configuration.rb +82 -89
  182. data/lib/blacklight/configuration/context.rb +1 -1
  183. data/lib/blacklight/configuration/facet_field.rb +16 -9
  184. data/lib/blacklight/configuration/field.rb +32 -3
  185. data/lib/blacklight/configuration/fields.rb +41 -48
  186. data/lib/blacklight/configuration/search_field.rb +2 -2
  187. data/lib/blacklight/configuration/sort_field.rb +2 -2
  188. data/lib/blacklight/configuration/view_config.rb +4 -0
  189. data/lib/blacklight/engine.rb +6 -10
  190. data/lib/blacklight/exceptions.rb +4 -7
  191. data/lib/blacklight/nested_open_struct_with_hash_access.rb +107 -0
  192. data/lib/blacklight/open_struct_with_hash_access.rb +49 -0
  193. data/lib/blacklight/parameters.rb +1 -1
  194. data/lib/blacklight/routes/searchable.rb +1 -0
  195. data/lib/blacklight/search_builder.rb +26 -35
  196. data/lib/blacklight/search_state.rb +8 -8
  197. data/lib/blacklight/solr/repository.rb +3 -36
  198. data/lib/blacklight/solr/request.rb +1 -1
  199. data/lib/blacklight/solr/response.rb +29 -30
  200. data/lib/blacklight/solr/response/facets.rb +29 -31
  201. data/lib/blacklight/solr/response/group.rb +3 -3
  202. data/lib/blacklight/solr/response/group_response.rb +1 -1
  203. data/lib/blacklight/solr/response/more_like_this.rb +2 -2
  204. data/lib/blacklight/solr/response/response.rb +2 -2
  205. data/lib/blacklight/solr/response/spelling.rb +3 -3
  206. data/lib/blacklight/solr/search_builder_behavior.rb +25 -29
  207. data/lib/blacklight/version.rb +1 -1
  208. data/lib/generators/blacklight/assets_generator.rb +8 -8
  209. data/lib/generators/blacklight/controller_generator.rb +4 -5
  210. data/lib/generators/blacklight/document_generator.rb +1 -1
  211. data/lib/generators/blacklight/install_generator.rb +18 -21
  212. data/lib/generators/blacklight/search_builder_generator.rb +1 -1
  213. data/lib/generators/blacklight/{solr5_generator.rb → solr_generator.rb} +4 -6
  214. data/lib/generators/blacklight/templates/.solr_wrapper.yml +5 -0
  215. data/lib/generators/blacklight/templates/blacklight.scss +0 -2
  216. data/lib/generators/blacklight/templates/catalog_controller.rb +52 -51
  217. data/{solr → lib/generators/blacklight/templates/solr}/conf/_rest_managed.json +0 -0
  218. data/{solr → lib/generators/blacklight/templates/solr}/conf/admin-extra.html +0 -0
  219. data/{solr → lib/generators/blacklight/templates/solr}/conf/elevate.xml +0 -0
  220. data/{solr → lib/generators/blacklight/templates/solr}/conf/mapping-ISOLatin1Accent.txt +0 -0
  221. data/{solr → lib/generators/blacklight/templates/solr}/conf/protwords.txt +0 -0
  222. data/lib/generators/blacklight/templates/solr/conf/schema.xml +390 -0
  223. data/{solr → lib/generators/blacklight/templates/solr}/conf/scripts.conf +0 -0
  224. data/lib/generators/blacklight/templates/solr/conf/solrconfig.xml +195 -0
  225. data/{solr → lib/generators/blacklight/templates/solr}/conf/spellings.txt +0 -0
  226. data/{solr → lib/generators/blacklight/templates/solr}/conf/stopwords.txt +0 -0
  227. data/{solr → lib/generators/blacklight/templates/solr}/conf/stopwords_en.txt +0 -0
  228. data/{solr → lib/generators/blacklight/templates/solr}/conf/synonyms.txt +0 -0
  229. data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example.xsl +0 -0
  230. data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example_atom.xsl +0 -0
  231. data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example_rss.xsl +0 -0
  232. data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/luke.xsl +0 -0
  233. data/lib/generators/blacklight/test_support_generator.rb +10 -10
  234. data/lib/generators/blacklight/user_generator.rb +3 -6
  235. data/lib/railties/blacklight.rake +19 -14
  236. data/package-lock.json +2057 -0
  237. data/package.json +28 -0
  238. data/spec/controllers/alternate_controller_spec.rb +1 -1
  239. data/spec/controllers/application_controller_spec.rb +1 -1
  240. data/spec/controllers/blacklight/base_spec.rb +1 -1
  241. data/spec/controllers/blacklight/catalog/component_configuration_spec.rb +11 -7
  242. data/spec/controllers/blacklight/facet_spec.rb +1 -1
  243. data/spec/controllers/blacklight/search_fields_spec.rb +1 -13
  244. data/spec/controllers/bookmarks_controller_spec.rb +1 -36
  245. data/spec/controllers/catalog_controller_spec.rb +153 -53
  246. data/spec/controllers/search_history_controller_spec.rb +2 -2
  247. data/spec/features/alternate_controller_spec.rb +1 -1
  248. data/spec/features/autocomplete_spec.rb +2 -2
  249. data/spec/features/bookmarks_spec.rb +10 -10
  250. data/spec/features/did_you_mean_spec.rb +3 -9
  251. data/spec/features/facets_spec.rb +11 -11
  252. data/spec/features/record_view_spec.rb +1 -6
  253. data/spec/features/search_context_spec.rb +2 -2
  254. data/spec/features/search_filters_spec.rb +41 -41
  255. data/spec/features/search_formats_spec.rb +1 -1
  256. data/spec/features/search_history_spec.rb +1 -26
  257. data/spec/features/search_pagination_spec.rb +1 -1
  258. data/spec/features/search_results_spec.rb +3 -4
  259. data/spec/features/search_sort_spec.rb +2 -2
  260. data/spec/features/search_spec.rb +5 -10
  261. data/{solr → spec/fixtures}/sample_solr_documents.yml +688 -688
  262. data/spec/helpers/{configuration_helper_spec.rb → blacklight/configuration_helper_behavior_spec.rb} +70 -65
  263. data/spec/helpers/{facets_helper_spec.rb → blacklight/facets_helper_behavior_spec.rb} +7 -8
  264. data/spec/helpers/{hash_as_hidden_fields_spec.rb → blacklight/hash_as_hidden_fields_behavior_spec.rb} +1 -1
  265. data/spec/helpers/blacklight/icon_helper_behavior_spec.rb +8 -0
  266. data/spec/helpers/{layout_helper_spec.rb → blacklight/layout_helper_behavior_spec.rb} +5 -15
  267. data/spec/helpers/{render_constraints_helper_spec.rb → blacklight/render_constraints_helper_behavior_spec.rb} +2 -3
  268. data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +80 -0
  269. data/spec/helpers/{search_history_constraints_helper_spec.rb → blacklight/search_history_constraints_helper_behavior_spec.rb} +9 -9
  270. data/spec/helpers/{suggest_helper_spec.rb → blacklight/suggest_helper_behavior_spec.rb} +4 -2
  271. data/spec/helpers/{url_helper_spec.rb → blacklight/url_helper_behavior_spec.rb} +11 -15
  272. data/spec/helpers/blacklight_helper_spec.rb +36 -141
  273. data/spec/helpers/catalog_helper_spec.rb +37 -56
  274. data/spec/integration/generators/blacklight/{solr5_generator_spec.rb → solr_generator_spec.rb} +3 -3
  275. data/spec/lib/blacklight/configuration/facet_field_spec.rb +11 -0
  276. data/spec/lib/blacklight/configuration/field_spec.rb +12 -0
  277. data/spec/lib/blacklight/nested_open_struct_with_hash_access_spec.rb +17 -0
  278. data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +153 -0
  279. data/spec/lib/blacklight/parameters_spec.rb +1 -1
  280. data/spec/lib/blacklight/search_state_spec.rb +2 -2
  281. data/spec/lib/blacklight_spec.rb +1 -1
  282. data/spec/lib/tasks/blacklight_task_spec.rb +1 -1
  283. data/spec/models/blacklight/configurable_spec.rb +15 -16
  284. data/spec/models/blacklight/configuration/context_spec.rb +1 -1
  285. data/spec/models/blacklight/configuration_spec.rb +146 -135
  286. data/spec/models/blacklight/document/active_model_shim_spec.rb +11 -1
  287. data/spec/models/blacklight/document/cache_key_spec.rb +1 -1
  288. data/spec/models/blacklight/document/dublin_core_spec.rb +5 -5
  289. data/spec/models/blacklight/document/email_spec.rb +3 -3
  290. data/spec/models/blacklight/document/sms_spec.rb +3 -3
  291. data/spec/models/blacklight/document_spec.rb +3 -16
  292. data/spec/models/blacklight/facet_paginator_spec.rb +1 -1
  293. data/spec/models/blacklight/icon_spec.rb +34 -0
  294. data/spec/models/blacklight/search_builder_spec.rb +33 -27
  295. data/spec/models/blacklight/solr/document_spec.rb +18 -7
  296. data/spec/models/blacklight/solr/facet_paginator_spec.rb +1 -1
  297. data/spec/models/blacklight/solr/repository_spec.rb +32 -27
  298. data/spec/models/blacklight/solr/request_spec.rb +1 -1
  299. data/spec/models/blacklight/solr/response/facets_spec.rb +1 -1
  300. data/spec/models/blacklight/solr/response/group_response_spec.rb +1 -1
  301. data/spec/models/blacklight/solr/response/group_spec.rb +1 -1
  302. data/spec/models/blacklight/solr/response_spec.rb +9 -6
  303. data/spec/models/blacklight/solr/search_builder_spec.rb +35 -48
  304. data/spec/models/blacklight/suggest/response_spec.rb +4 -5
  305. data/spec/models/blacklight/suggest_search_spec.rb +14 -7
  306. data/spec/models/blacklight/user_spec.rb +1 -1
  307. data/spec/models/bookmark_spec.rb +1 -1
  308. data/spec/models/record_mailer_spec.rb +2 -2
  309. data/spec/models/search_spec.rb +1 -1
  310. data/spec/models/solr_document_spec.rb +3 -3
  311. data/spec/presenters/blacklight/search_bar_presenter_spec.rb +72 -0
  312. data/spec/presenters/index_presenter_spec.rb +70 -143
  313. data/spec/presenters/pipeline_spec.rb +4 -4
  314. data/spec/presenters/show_presenter_spec.rb +83 -145
  315. data/spec/presenters/thumbnail_presenter_spec.rb +171 -0
  316. data/spec/routing/catalog_routing_spec.rb +1 -17
  317. data/spec/services/blacklight/search_service_spec.rb +446 -0
  318. data/spec/spec_helper.rb +22 -9
  319. data/spec/test_app_templates/Gemfile.extra +2 -5
  320. data/spec/test_app_templates/lib/generators/test_app_generator.rb +1 -1
  321. data/spec/views/catalog/_constraints.html.erb_spec.rb +1 -3
  322. data/spec/views/catalog/_constraints_element.html.erb_spec.rb +8 -8
  323. data/spec/views/catalog/_document.html.erb_spec.rb +7 -7
  324. data/spec/views/catalog/_document_list.html.erb_spec.rb +1 -1
  325. data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +1 -1
  326. data/spec/views/catalog/_facet_layout.html.erb_spec.rb +6 -6
  327. data/spec/views/catalog/_facets.html.erb_spec.rb +2 -2
  328. data/spec/views/catalog/{_index_default.erb_spec.rb → _index.html.erb_spec.rb} +1 -1
  329. data/spec/views/catalog/{_index_header_default.html.erb_spec.rb → _index_header.html.erb_spec.rb} +4 -4
  330. data/spec/views/catalog/_paginate_compact.html.erb_spec.rb +4 -27
  331. data/spec/views/catalog/_search_header.erb_spec.rb +1 -3
  332. data/spec/views/catalog/{_show_default.erb_spec.rb → _show.html.erb_spec.rb} +1 -1
  333. data/spec/views/catalog/_show_sidebar.erb_spec.rb +3 -3
  334. data/spec/views/catalog/_show_tools.html.erb_spec.rb +3 -3
  335. data/spec/views/catalog/_sort_and_per_page.html.erb_spec.rb +1 -1
  336. data/spec/views/catalog/{_thumbnail_default.erb_spec.rb → _thumbnail.html.erb_spec.rb} +3 -3
  337. data/spec/views/catalog/_view_type_group.html.erb_spec.rb +5 -1
  338. data/spec/views/catalog/email_success.html.erb_spec.rb +9 -0
  339. data/spec/views/catalog/facet.html.erb_spec.rb +1 -1
  340. data/spec/views/catalog/facet.json.jbuilder_spec.rb +1 -1
  341. data/spec/views/catalog/index.atom.builder_spec.rb +2 -2
  342. data/spec/views/catalog/index.html.erb_spec.rb +4 -7
  343. data/spec/views/catalog/index.json.jbuilder_spec.rb +66 -21
  344. data/spec/views/catalog/opensearch.xml.builder_spec.rb +1 -1
  345. data/spec/views/catalog/show.html.erb_spec.rb +2 -2
  346. data/spec/views/catalog/sms_success.html.erb_spec.rb +9 -0
  347. data/spec/views/{_user_util_links.html.erb_spec.rb → shared/_user_util_links.html.erb_spec.rb} +4 -4
  348. data/tasks/blacklight.rake +10 -8
  349. data/template.demo.rb +1 -11
  350. metadata +171 -189
  351. data/app/assets/javascripts/blacklight/autofocus.js +0 -16
  352. data/app/assets/javascripts/blacklight/bookmark_toggle.js +0 -23
  353. data/app/assets/javascripts/blacklight/checkbox_submit.js +0 -139
  354. data/app/assets/javascripts/blacklight/core.js +0 -30
  355. data/app/controllers/concerns/blacklight/request_builders.rb +0 -77
  356. data/app/controllers/concerns/blacklight/saved_searches.rb +0 -70
  357. data/app/controllers/concerns/blacklight/search_helper.rb +0 -161
  358. data/app/controllers/concerns/blacklight/suggest.rb +0 -25
  359. data/app/controllers/saved_searches_controller.rb +0 -4
  360. data/app/controllers/suggest_controller.rb +0 -4
  361. data/app/helpers/blacklight/deprecated_url_helper_behavior.rb +0 -57
  362. data/app/helpers/blacklight/render_partials_helper.rb +0 -205
  363. data/app/helpers/blacklight_configuration_helper.rb +0 -4
  364. data/app/helpers/blacklight_url_helper.rb +0 -4
  365. data/app/helpers/component_helper.rb +0 -4
  366. data/app/helpers/facets_helper.rb +0 -4
  367. data/app/helpers/hash_as_hidden_fields_helper.rb +0 -4
  368. data/app/helpers/layout_helper.rb +0 -4
  369. data/app/helpers/render_constraints_helper.rb +0 -4
  370. data/app/helpers/search_history_constraints_helper.rb +0 -4
  371. data/app/helpers/suggest_helper.rb +0 -4
  372. data/app/models/concerns/blacklight/solr/document/more_like_this.rb +0 -6
  373. data/app/presenters/blacklight/document_presenter.rb +0 -153
  374. data/app/views/_user_util_links.html.erb +0 -26
  375. data/app/views/blacklight/nav/_saved_searches.html.erb +0 -1
  376. data/app/views/catalog/_index_default.html.erb +0 -12
  377. data/app/views/catalog/_show_default.html.erb +0 -10
  378. data/app/views/catalog/_thumbnail_default.html.erb +0 -5
  379. data/app/views/saved_searches/index.html.erb +0 -32
  380. data/app/views/shared/_ajax_modal.html.erb +0 -6
  381. data/lib/blacklight/utils.rb +0 -183
  382. data/lib/generators/blacklight/solr4_generator.rb +0 -31
  383. data/solr/conf/schema.xml +0 -627
  384. data/solr/conf/solrconfig.xml +0 -411
  385. data/spec/controllers/blacklight/search_helper_spec.rb +0 -489
  386. data/spec/controllers/saved_searches_controller_spec.rb +0 -32
  387. data/spec/controllers/suggest_controller_spec.rb +0 -17
  388. data/spec/features/saved_searches_spec.rb +0 -47
  389. data/spec/helpers/deprecated_url_helper_behavior_spec.rb +0 -101
  390. data/spec/lib/blacklight/utils_spec.rb +0 -167
  391. data/spec/models/blacklight/solr/document/more_like_this_spec.rb +0 -18
  392. data/spec/presenters/document_presenter_spec.rb +0 -438
  393. data/spec/support/backport_test.rb +0 -14
@@ -1,411 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8" ?>
2
- <!--
3
- Licensed to the Apache Software Foundation (ASF) under one or more
4
- contributor license agreements. See the NOTICE file distributed with
5
- this work for additional information regarding copyright ownership.
6
- The ASF licenses this file to You under the Apache License, Version 2.0
7
- (the "License"); you may not use this file except in compliance with
8
- the License. You may obtain a copy of the License at
9
-
10
- http://www.apache.org/licenses/LICENSE-2.0
11
-
12
- Unless required by applicable law or agreed to in writing, software
13
- distributed under the License is distributed on an "AS IS" BASIS,
14
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- See the License for the specific language governing permissions and
16
- limitations under the License.
17
- -->
18
-
19
- <!--
20
- This is a stripped down config file used for a simple example...
21
- It is *not* a good example to work from.
22
- -->
23
- <config>
24
-
25
- <!-- Controls what version of Lucene various components of Solr
26
- adhere to. Generally, you want to use the latest version to
27
- get all bug fixes and improvements. It is highly recommended
28
- that you fully re-index after changing this setting as it can
29
- affect both how text is indexed and queried.
30
- -->
31
- <luceneMatchVersion>5.0.0</luceneMatchVersion>
32
-
33
- <lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lib" />
34
- <lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lucene-libs" />
35
-
36
- <directoryFactory name="DirectoryFactory"
37
- class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}">
38
- </directoryFactory>
39
-
40
- <codecFactory class="solr.SchemaCodecFactory"/>
41
-
42
- <schemaFactory class="ClassicIndexSchemaFactory"/>
43
-
44
-
45
- <dataDir>${solr.blacklight-core.data.dir:}</dataDir>
46
-
47
- <requestDispatcher handleSelect="true" >
48
- <requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="2048" />
49
- </requestDispatcher>
50
-
51
- <requestHandler name="/analysis/field" startup="lazy" class="solr.FieldAnalysisRequestHandler" />
52
-
53
- <!-- config for the admin interface -->
54
- <admin>
55
- <defaultQuery>*:*</defaultQuery>
56
- </admin>
57
-
58
- <!-- SearchHandler
59
-
60
- http://wiki.apache.org/solr/SearchHandler
61
-
62
- For processing Search Queries, the primary Request Handler
63
- provided with Solr is "SearchHandler" It delegates to a sequent
64
- of SearchComponents (see below) and supports distributed
65
- queries across multiple shards
66
- -->
67
- <requestHandler name="search" class="solr.SearchHandler" default="true">
68
- <!-- default values for query parameters can be specified, these
69
- will be overridden by parameters in the request
70
- -->
71
- <lst name="defaults">
72
- <str name="defType">dismax</str>
73
- <str name="echoParams">explicit</str>
74
- <int name="rows">10</int>
75
-
76
- <str name="q.alt">*:*</str>
77
- <str name="mm">2&lt;-1 5&lt;-2 6&lt;90%</str>
78
-
79
- <!-- this qf and pf are used by default, if not otherwise specified by
80
- client. The default blacklight_config will use these for the
81
- "keywords" search. See the author_qf/author_pf, title_qf, etc
82
- below, which the default blacklight_config will specify for
83
- those searches. You may also be interested in:
84
- http://wiki.apache.org/solr/LocalParams
85
- -->
86
-
87
- <str name="qf">
88
- title_unstem_search^100000
89
- subtitle_unstem_search^50000
90
- title_t^25000
91
- subtitle_t^10000
92
- title_addl_unstem_search^5000
93
- title_addl_t^2500
94
- title_added_entry_unstem_search^1500
95
- title_added_entry_t^1250
96
- subject_topic_unstem_search^1000
97
- subject_unstem_search^750
98
- subject_topic_facet^625
99
- subject_t^500
100
- author_unstem_search^250
101
- author_addl_unstem_search^250
102
- author_t^100
103
- author_addl_t^50
104
- subject_addl_unstem_search^250
105
- subject_addl_t^50
106
- title_series_unstem_search^25
107
- title_series_t^10
108
- isbn_t
109
- text
110
- </str>
111
- <str name="pf">
112
- title_unstem_search^1000000
113
- subtitle_unstem_search^500000
114
- title_t^250000
115
- subtitle_t^100000
116
- title_addl_unstem_search^50000
117
- title_addl_t^25000
118
- title_added_entry_unstem_search^15000
119
- title_added_entry_t^12500
120
- subject_topic_unstem_search^10000
121
- subject_unstem_search^7500
122
- subject_topic_facet^6250
123
- subject_t^5000
124
- author_unstem_search^2500
125
- author_addl_unstem_search^2500
126
- author_t^1000
127
- author_addl_t^500
128
- subject_addl_unstem_search^2500
129
- subject_addl_t^500
130
- title_series_unstem_search^250
131
- title_series_t^100
132
- text^10
133
- </str>
134
- <str name="author_qf">
135
- author_unstem_search^200
136
- author_addl_unstem_search^50
137
- author_t^20
138
- author_addl_t
139
- </str>
140
- <str name="author_pf">
141
- author_unstem_search^2000
142
- author_addl_unstem_search^500
143
- author_t^200
144
- author_addl_t^10
145
- </str>
146
- <str name="title_qf">
147
- title_unstem_search^50000
148
- subtitle_unstem_search^25000
149
- title_addl_unstem_search^10000
150
- title_t^5000
151
- subtitle_t^2500
152
- title_addl_t^100
153
- title_added_entry_unstem_search^50
154
- title_added_entry_t^10
155
- title_series_unstem_search^5
156
- title_series_t
157
- </str>
158
- <str name="title_pf">
159
- title_unstem_search^500000
160
- subtitle_unstem_search^250000
161
- title_addl_unstem_search^100000
162
- title_t^50000
163
- subtitle_t^25000
164
- title_addl_t^1000
165
- title_added_entry_unstem_search^500
166
- title_added_entry_t^100
167
- title_series_t^50
168
- title_series_unstem_search^10
169
- </str>
170
- <str name="subject_qf">
171
- subject_topic_unstem_search^200
172
- subject_unstem_search^125
173
- subject_topic_facet^100
174
- subject_t^50
175
- subject_addl_unstem_search^10
176
- subject_addl_t
177
- </str>
178
- <str name="subject_pf">
179
- subject_topic_unstem_search^2000
180
- subject_unstem_search^1250
181
- subject_t^1000
182
- subject_topic_facet^500
183
- subject_addl_unstem_search^100
184
- subject_addl_t^10
185
- </str>
186
-
187
- <int name="ps">3</int>
188
- <float name="tie">0.01</float>
189
-
190
- <!-- NOT using marc_display because it is large and will slow things down for search results -->
191
- <str name="fl">
192
- id,
193
- score,
194
- author_display,
195
- author_vern_display,
196
- format,
197
- isbn_t,
198
- language_facet,
199
- lc_callnum_display,
200
- material_type_display,
201
- published_display,
202
- published_vern_display,
203
- pub_date,
204
- title_display,
205
- title_vern_display,
206
- subject_topic_facet,
207
- subject_geo_facet,
208
- subject_era_facet,
209
- subtitle_display,
210
- subtitle_vern_display,
211
- url_fulltext_display,
212
- url_suppl_display,
213
- </str>
214
-
215
- <str name="facet">true</str>
216
- <str name="facet.mincount">1</str>
217
- <str name="facet.field">format</str>
218
- <str name="facet.field">lc_1letter_facet</str>
219
- <str name="facet.field">lc_alpha_facet</str>
220
- <str name="facet.field">lc_b4cutter_facet</str>
221
- <str name="facet.field">language_facet</str>
222
- <str name="facet.field">pub_date</str>
223
- <str name="facet.field">subject_era_facet</str>
224
- <str name="facet.field">subject_geo_facet</str>
225
- <str name="facet.field">subject_topic_facet</str>
226
-
227
- <str name="spellcheck">true</str>
228
- <str name="spellcheck.dictionary">default</str>
229
- <str name="spellcheck.onlyMorePopular">true</str>
230
- <str name="spellcheck.extendedResults">true</str>
231
- <str name="spellcheck.collate">false</str>
232
- <str name="spellcheck.count">5</str>
233
-
234
- </lst>
235
- <!-- In addition to defaults, "appends" params can be specified
236
- to identify values which should be appended to the list of
237
- multi-val params from the query (or the existing "defaults").
238
- -->
239
- <!-- In this example, the param "fq=instock:true" would be appended to
240
- any query time fq params the user may specify, as a mechanism for
241
- partitioning the index, independent of any user selected filtering
242
- that may also be desired (perhaps as a result of faceted searching).
243
-
244
- NOTE: there is *absolutely* nothing a client can do to prevent these
245
- "appends" values from being used, so don't use this mechanism
246
- unless you are sure you always want it.
247
- -->
248
- <!--
249
- <lst name="appends">
250
- <str name="fq">inStock:true</str>
251
- </lst>
252
- -->
253
- <!-- "invariants" are a way of letting the Solr maintainer lock down
254
- the options available to Solr clients. Any params values
255
- specified here are used regardless of what values may be specified
256
- in either the query, the "defaults", or the "appends" params.
257
-
258
- In this example, the facet.field and facet.query params would
259
- be fixed, limiting the facets clients can use. Faceting is
260
- not turned on by default - but if the client does specify
261
- facet=true in the request, these are the only facets they
262
- will be able to see counts for; regardless of what other
263
- facet.field or facet.query params they may specify.
264
-
265
- NOTE: there is *absolutely* nothing a client can do to prevent these
266
- "invariants" values from being used, so don't use this mechanism
267
- unless you are sure you always want it.
268
- -->
269
- <!--
270
- <lst name="invariants">
271
- <str name="facet.field">cat</str>
272
- <str name="facet.field">manu_exact</str>
273
- <str name="facet.query">price:[* TO 500]</str>
274
- <str name="facet.query">price:[500 TO *]</str>
275
- </lst>
276
- -->
277
- <!-- If the default list of SearchComponents is not desired, that
278
- list can either be overridden completely, or components can be
279
- prepended or appended to the default list. (see below)
280
- -->
281
- <!--
282
- <arr name="components">
283
- <str>nameOfCustomComponent1</str>
284
- <str>nameOfCustomComponent2</str>
285
- </arr>
286
- -->
287
- <arr name="last-components">
288
- <str>spellcheck</str>
289
- </arr>
290
-
291
- </requestHandler>
292
-
293
- <!-- for requests to get a single document; use id=666 instead of q=id:666 -->
294
- <requestHandler name="document" class="solr.SearchHandler" >
295
- <lst name="defaults">
296
- <str name="echoParams">all</str>
297
- <str name="fl">*</str>
298
- <str name="rows">1</str>
299
- <str name="q">{!term f=id v=$id}</str> <!-- use id=666 instead of q=id:666 -->
300
- </lst>
301
- </requestHandler>
302
-
303
- <!-- Spell Check
304
-
305
- The spell check component can return a list of alternative spelling
306
- suggestions.
307
-
308
- http://wiki.apache.org/solr/SpellCheckComponent
309
- -->
310
- <searchComponent name="spellcheck" class="solr.SpellCheckComponent">
311
-
312
- <str name="queryAnalyzerFieldType">textSpell</str>
313
-
314
- <!-- Multiple "Spell Checkers" can be declared and used by this
315
- component
316
- -->
317
-
318
- <!-- a spellchecker built from a field of the main index, and
319
- written to disk
320
- -->
321
- <lst name="spellchecker">
322
- <str name="name">default</str>
323
- <str name="field">spell</str>
324
- <str name="spellcheckIndexDir">./spell</str>
325
- <str name="buildOnOptimize">true</str>
326
- </lst>
327
- <lst name="spellchecker">
328
- <str name="name">author</str>
329
- <str name="field">author_spell</str>
330
- <str name="spellcheckIndexDir">./spell_author</str>
331
- <str name="accuracy">0.7</str>
332
- <str name="buildOnOptimize">true</str>
333
- </lst>
334
- <lst name="spellchecker">
335
- <str name="name">subject</str>
336
- <str name="field">subject_spell</str>
337
- <str name="spellcheckIndexDir">./spell_subject</str>
338
- <str name="accuracy">0.7</str>
339
- <str name="buildOnOptimize">true</str>
340
- </lst>
341
- <lst name="spellchecker">
342
- <str name="name">title</str>
343
- <str name="field">title_spell</str>
344
- <str name="spellcheckIndexDir">./spell_title</str>
345
- <str name="accuracy">0.7</str>
346
- <str name="buildOnOptimize">true</str>
347
- </lst>
348
-
349
- <!-- a spellchecker that uses a different distance measure -->
350
- <!--
351
- <lst name="spellchecker">
352
- <str name="name">jarowinkler</str>
353
- <str name="field">spell</str>
354
- <str name="distanceMeasure">
355
- org.apache.lucene.search.spell.JaroWinklerDistance
356
- </str>
357
- <str name="spellcheckIndexDir">spellcheckerJaro</str>
358
- </lst>
359
- -->
360
-
361
- <!-- a spellchecker that use an alternate comparator
362
-
363
- comparatorClass be one of:
364
- 1. score (default)
365
- 2. freq (Frequency first, then score)
366
- 3. A fully qualified class name
367
- -->
368
- <!--
369
- <lst name="spellchecker">
370
- <str name="name">freq</str>
371
- <str name="field">lowerfilt</str>
372
- <str name="spellcheckIndexDir">spellcheckerFreq</str>
373
- <str name="comparatorClass">freq</str>
374
- <str name="buildOnCommit">true</str>
375
- -->
376
-
377
- <!-- A spellchecker that reads the list of words from a file -->
378
- <!--
379
- <lst name="spellchecker">
380
- <str name="classname">solr.FileBasedSpellChecker</str>
381
- <str name="name">file</str>
382
- <str name="sourceLocation">spellings.txt</str>
383
- <str name="characterEncoding">UTF-8</str>
384
- <str name="spellcheckIndexDir">spellcheckerFile</str>
385
- </lst>
386
- -->
387
- </searchComponent>
388
-
389
- <searchComponent name="suggest" class="solr.SuggestComponent">
390
- <lst name="suggester">
391
- <str name="name">mySuggester</str>
392
- <str name="lookupImpl">FuzzyLookupFactory</str>
393
- <str name="suggestAnalyzerFieldType">textSuggest</str>
394
- <str name="buildOnCommit">true</str>
395
- <str name="field">suggest</str>
396
- </lst>
397
- </searchComponent>
398
-
399
- <requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">
400
- <lst name="defaults">
401
- <str name="suggest">true</str>
402
- <str name="suggest.count">5</str>
403
- <str name="suggest.dictionary">mySuggester</str>
404
- </lst>
405
- <arr name="components">
406
- <str>suggest</str>
407
- </arr>
408
- </requestHandler>
409
-
410
- </config>
411
-
@@ -1,489 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # check the methods that do solr requests. Note that we are not testing if
4
- # solr gives "correct" responses, as that's out of scope (it's a part of
5
- # testing the solr code itself). We *are* testing if blacklight code sends
6
- # queries to solr such that it gets appropriate results. When a user does a search,
7
- # do we get data back from solr (i.e. did we properly configure blacklight code
8
- # to talk with solr and get results)? when we do a document request, does
9
- # blacklight code get a single document returned?)
10
- #
11
- describe Blacklight::SearchHelper do
12
-
13
- # SearchHelper is a controller layer mixin, which depends
14
- # on being mixed into a class which has #params (from Rails)
15
- # and #blacklight_config
16
- class SearchHelperTestClass
17
- include Blacklight::SearchHelper
18
-
19
- attr_accessor :blacklight_config, :repository, :search_state
20
-
21
- def initialize blacklight_config, conn, state
22
- self.blacklight_config = blacklight_config
23
- self.repository = Blacklight::Solr::Repository.new(blacklight_config)
24
- self.repository.connection = conn
25
- self.search_state = search_state
26
- end
27
-
28
- def params
29
- {}
30
- end
31
- end
32
-
33
- subject { SearchHelperTestClass.new blacklight_config, blacklight_solr, state }
34
-
35
- let(:blacklight_config) { Blacklight::Configuration.new }
36
- let(:copy_of_catalog_config) { ::CatalogController.blacklight_config.deep_copy }
37
- let(:blacklight_solr) { RSolr.connect(Blacklight.connection_config.except(:adapter)) }
38
- let(:state) { {} }
39
-
40
- before(:each) do
41
- @all_docs_query = ''
42
- @no_docs_query = 'zzzzzzzzzzzz'
43
- @single_word_query = 'include'
44
- @mult_word_query = 'tibetan history'
45
- # f[format][]=Book&f[language_facet][]=English
46
- @single_facet = {:format=>'Book'}
47
- @multi_facets = {:format=>'Book', :language_facet=>'Tibetan'}
48
- @bad_facet = {:format=>'666'}
49
- @subject_search_params = {:commit=>"search", :search_field=>"subject", :action=>"index", :"controller"=>"catalog", :"rows"=>"10", :"q"=>"wome"}
50
- end
51
-
52
- # SPECS FOR SEARCH RESULTS FOR QUERY
53
- describe 'Search Results', :integration => true do
54
-
55
- let(:blacklight_config) { copy_of_catalog_config }
56
- describe 'for a sample query returning results' do
57
-
58
- before do
59
- (@solr_response, @document_list) = subject.search_results(q: @all_docs_query)
60
- end
61
-
62
- it "uses the configured request handler" do
63
- allow(blacklight_config).to receive(:default_solr_params).and_return({:qt => 'custom_request_handler'})
64
- allow(blacklight_solr).to receive(:send_and_receive) do |path, params|
65
- expect(path).to eq 'select'
66
- expect(params[:params]['facet.field']).to eq ["format", "{!ex=pub_date_single}pub_date", "subject_topic_facet", "language_facet", "lc_1letter_facet", "subject_geo_facet", "subject_era_facet"]
67
- expect(params[:params]["facet.query"]).to eq ["pub_date:[#{5.years.ago.year} TO *]", "pub_date:[#{10.years.ago.year} TO *]", "pub_date:[#{25.years.ago.year} TO *]"]
68
- expect(params[:params]).to include('rows' => 10, 'qt'=>"custom_request_handler", 'q'=>"", "f.subject_topic_facet.facet.limit"=>21, 'sort'=>"score desc, pub_date_sort desc, title_sort asc")
69
- end.and_return({'response'=>{'docs'=>[]}})
70
- subject.search_results(q: @all_docs_query)
71
- end
72
-
73
- it 'has a @response.docs list of the same size as @document_list' do
74
- expect(@solr_response.docs).to have(@document_list.length).docs
75
- end
76
-
77
- it 'has @response.docs list representing same documents as SolrDocuments in @document_list' do
78
- @solr_response.docs.each_index do |index|
79
- mash = @solr_response.docs[index]
80
- solr_document = @document_list[index]
81
-
82
- expect(Set.new(mash.keys)).to eq Set.new(solr_document.keys)
83
-
84
- mash.keys.each do |key|
85
- expect(mash[key]).to eq solr_document[key]
86
- end
87
- end
88
- end
89
- end
90
-
91
- describe "for a query returning a grouped response" do
92
- let(:blacklight_config) { copy_of_catalog_config }
93
- before do
94
- blacklight_config.default_solr_params[:group] = true
95
- blacklight_config.default_solr_params[:'group.field'] = 'pub_date_sort'
96
- (@solr_response, @document_list) = subject.search_results(q: @all_docs_query)
97
- end
98
-
99
- it "has an empty document list" do
100
- expect(@document_list).to be_empty
101
- end
102
-
103
- it "returns a grouped response" do
104
- expect(@solr_response).to be_a_kind_of Blacklight::Solr::Response::GroupResponse
105
-
106
- end
107
- end
108
-
109
- describe "for a query returning multiple groups", integration: true do
110
- let(:blacklight_config) { copy_of_catalog_config }
111
-
112
- before do
113
- allow(subject).to receive_messages grouped_key_for_results: 'title_sort'
114
- blacklight_config.default_solr_params[:group] = true
115
- blacklight_config.default_solr_params[:'group.field'] = ['pub_date_sort', 'title_sort']
116
- (@solr_response, @document_list) = subject.search_results(q: @all_docs_query)
117
- end
118
-
119
- it "has an empty document list" do
120
- expect(@document_list).to be_empty
121
- end
122
-
123
- it "returns a grouped response" do
124
- expect(@solr_response).to be_a_kind_of Blacklight::Solr::Response::GroupResponse
125
- expect(@solr_response.group_field).to eq "title_sort"
126
- end
127
- end
128
-
129
-
130
- describe "for All Docs Query and One Facet" do
131
- it 'has results' do
132
- (solr_response, document_list) = subject.search_results(q: @all_docs_query, f: @single_facet)
133
- expect(solr_response.docs).to have(document_list.size).results
134
- expect(solr_response.docs).to have_at_least(1).result
135
- end
136
- # TODO: check that number of these results < number of results for all docs query
137
- # BUT can't: num docs isn't total, it's the num docs in the single SOLR response (e.g. 10)
138
- end
139
-
140
- describe "for Query Without Results and No Facet" do
141
- it 'has no results and not raise error' do
142
- (solr_response, document_list) = subject.search_results(q: @no_docs_query)
143
- expect(document_list).to have(0).results
144
- expect(solr_response.docs).to have(0).results
145
- end
146
- end
147
-
148
- describe "for Query Without Results and One Facet" do
149
- it 'has no results and not raise error' do
150
- (solr_response, document_list) = subject.search_results(q: @no_docs_query, f: @single_facet)
151
- expect(document_list).to have(0).results
152
- expect(solr_response.docs).to have(0).results
153
- end
154
- end
155
-
156
- describe "for All Docs Query and Bad Facet" do
157
- it 'has no results and not raise error' do
158
- (solr_response, document_list) = subject.search_results(q: @all_docs_query, f: @bad_facet)
159
- expect(document_list).to have(0).results
160
- expect(solr_response.docs).to have(0).results
161
- end
162
- end
163
- end # Search Results
164
-
165
-
166
- # SPECS FOR SEARCH RESULTS FOR FACETS
167
- describe 'Facets in Search Results for All Docs Query', :integration => true do
168
-
169
- let(:blacklight_config) { copy_of_catalog_config }
170
-
171
- before do
172
- (solr_response, document_list) = subject.search_results(q: @all_docs_query)
173
- @facets = solr_response.aggregations
174
- end
175
-
176
- it 'has more than one facet' do
177
- expect(@facets).to have_at_least(1).facet
178
- end
179
- it 'has all facets specified in initializer' do
180
- expect(@facets.keys).to include *blacklight_config.facet_fields.keys
181
- expect(@facets.none? { |k, v| v.nil? }).to eq true
182
- end
183
-
184
- it 'has at least one value for each facet' do
185
- @facets.each do |key, facet|
186
- expect(facet.items).to have_at_least(1).hit
187
- end
188
- end
189
- it 'has multiple values for at least one facet' do
190
- has_mult_values = false
191
- @facets.each do |key, facet|
192
- if facet.items.size > 1
193
- has_mult_values = true
194
- break
195
- end
196
- end
197
- expect(has_mult_values).to eq true
198
- end
199
- it 'has all value counts > 0' do
200
- @facets.each do |key, facet|
201
- facet.items.each do |facet_vals|
202
- expect(facet_vals.hits).to be > 0
203
- end
204
- end
205
- end
206
- end # facet specs
207
-
208
-
209
- # SPECS FOR SEARCH RESULTS FOR PAGING
210
- describe 'Paging', :integration => true do
211
- let(:blacklight_config) { copy_of_catalog_config }
212
-
213
- it 'starts with first results by default' do
214
- (solr_response, document_list) = subject.search_results(q: @all_docs_query)
215
- expect(solr_response.params[:start].to_i).to eq 0
216
- end
217
- it 'has number of results (per page) set in initializer, by default' do
218
- (solr_response, document_list) = subject.search_results(q: @all_docs_query)
219
- expect(solr_response.docs).to have(blacklight_config[:default_solr_params][:rows]).items
220
- expect(document_list).to have(blacklight_config[:default_solr_params][:rows]).items
221
- end
222
-
223
- it 'gets number of results per page requested' do
224
- num_results = 3 # non-default value
225
- (solr_response1, document_list1) = subject.search_results(q: @all_docs_query, per_page: num_results)
226
- expect(document_list1).to have(num_results).docs
227
- expect(solr_response1.docs).to have(num_results).docs
228
- end
229
-
230
- it 'gets number of rows requested' do
231
- num_results = 4 # non-default value
232
- (solr_response1, document_list1) = subject.search_results(q: @all_docs_query, rows: num_results)
233
- expect(document_list1).to have(num_results).docs
234
- expect(solr_response1.docs).to have(num_results).docs
235
- end
236
-
237
- it 'skips appropriate number of results when requested - default per page' do
238
- page = 3
239
- (solr_response2, document_list2) = subject.search_results(q: @all_docs_query, page: page)
240
- expect(solr_response2.params[:start].to_i).to eq blacklight_config[:default_solr_params][:rows] * (page-1)
241
- end
242
- it 'skips appropriate number of results when requested - non-default per page' do
243
- page = 3
244
- num_results = 3
245
- (solr_response2a, document_list2a) = subject.search_results(q: @all_docs_query, per_page: num_results, page: page)
246
- expect(solr_response2a.params[:start].to_i).to eq num_results * (page-1)
247
- end
248
-
249
- it 'has no results when prompted for page after last result' do
250
- big = 5000
251
- (solr_response3, document_list3) = subject.search_results(q: @all_docs_query, rows: big, page: big)
252
- expect(document_list3).to have(0).docs
253
- expect(solr_response3.docs).to have(0).docs
254
- end
255
-
256
- it 'shows first results when prompted for page before first result' do
257
- # FIXME: should it show first results, or should it throw an error for view to deal w?
258
- # Solr throws an error for a negative start value
259
- (solr_response4, document_list4) = subject.search_results(q: @all_docs_query, page: '-1')
260
- expect(solr_response4.params[:start].to_i).to eq 0
261
- end
262
- it 'has results available when asked for more than are in response' do
263
- big = 5000
264
- (solr_response5, document_list5) = subject.search_results(q: @all_docs_query, rows: big, page: 1)
265
- expect(solr_response5.docs).to have(document_list5.length).docs
266
- expect(solr_response5.docs).to have_at_least(1).doc
267
- end
268
-
269
- end # page specs
270
-
271
- # SPECS FOR SINGLE DOCUMENT REQUESTS
272
- describe 'Get Document By Id', :integration => true do
273
- before do
274
- @doc_id = '2007020969'
275
- @bad_id = "redrum"
276
- @response2, @document = subject.fetch(@doc_id)
277
- end
278
-
279
- it "raises Blacklight::RecordNotFound for an unknown id" do
280
- expect {
281
- subject.fetch(@bad_id)
282
- }.to raise_error(Blacklight::Exceptions::RecordNotFound)
283
- end
284
-
285
- it "uses a provided document request handler" do
286
- allow(blacklight_config).to receive_messages(:document_solr_request_handler => 'document')
287
- allow(blacklight_solr).to receive(:send_and_receive).with('select', kind_of(Hash)).and_return({'response'=>{'docs'=>[]}})
288
- expect { subject.fetch(@doc_id)}.to raise_error Blacklight::Exceptions::RecordNotFound
289
- end
290
-
291
- it "uses a provided document solr path" do
292
- allow(blacklight_config).to receive_messages(:document_solr_path => 'get')
293
- allow(blacklight_solr).to receive(:send_and_receive).with('get', kind_of(Hash)).and_return({'response'=>{'docs'=>[]}})
294
- expect { subject.fetch(@doc_id)}.to raise_error Blacklight::Exceptions::RecordNotFound
295
- end
296
-
297
- it "has a non-nil result for a known id" do
298
- expect(@document).not_to be_nil
299
- end
300
- it "has a single document in the response for a known id" do
301
- expect(@response2.docs.size).to eq 1
302
- end
303
- it 'has the expected value in the id field' do
304
- expect(@document.id).to eq @doc_id
305
- end
306
- it 'has non-nil values for required fields set in initializer' do
307
- expect(@document.fetch(blacklight_config.view_config(:show).display_type_field)).not_to be_nil
308
- end
309
- end
310
-
311
- describe 'Get multiple documents By Id', integration: true do
312
- let(:doc_id) { '2007020969' }
313
- let(:bad_id) { 'redrum' }
314
- let(:response) { subject.fetch([doc_id]).first }
315
-
316
- before do
317
- blacklight_config.fetch_many_document_params = { fl: 'id,format' }
318
- end
319
-
320
- it 'has the expected value in the id field' do
321
- expect(response.documents.first.id).to eq doc_id
322
- end
323
-
324
- it 'returns all the requested fields' do
325
- expect(response.documents.first['format']).to eq 'Book'
326
- end
327
- end
328
-
329
- # SPECS FOR SPELLING SUGGESTIONS VIA SEARCH
330
- describe "Searches should return spelling suggestions", :integration => true do
331
- it 'search results for just-poor-enough-query term should have (multiple) spelling suggestions' do
332
- (solr_response, document_list) = subject.search_results(q: 'boo')
333
- expect(solr_response.spelling.words).to include('bon')
334
- expect(solr_response.spelling.words).to include('bod') #for multiple suggestions
335
- end
336
-
337
- it 'search results for just-poor-enough-query term should have multiple spelling suggestions' do
338
- (solr_response, document_list) = subject.search_results(q: 'politica')
339
- expect(solr_response.spelling.words).to include('policy') # less freq
340
- expect(solr_response.spelling.words).to include('politics') # more freq
341
- expect(solr_response.spelling.words).to include('political') # more freq
342
- =begin
343
- # when we can have multiple suggestions
344
- expect(solr_response.spelling.words).to_not include('policy') # less freq
345
- solr_response.spelling.words).to include('politics') # more freq
346
- solr_response.spelling.words).to include('political') # more freq
347
- =end
348
- end
349
-
350
- it "title search results for just-poor-enough query term should have spelling suggestions" do
351
- (solr_response, document_list) = subject.search_results(q: 'yehudiyam', qt: 'search', :"spellcheck.dictionary" => "title")
352
- expect(solr_response.spelling.words).to include('yehudiyim')
353
- end
354
-
355
- it "author search results for just-poor-enough-query term should have spelling suggestions" do
356
- (solr_response, document_list) = subject.search_results(q: 'shirma', qt: 'search', :"spellcheck.dictionary" => "author")
357
- expect(solr_response.spelling.words).to include('sharma')
358
- end
359
-
360
- it "subject search results for just-poor-enough-query term should have spelling suggestions" do
361
- (solr_response, document_list) = subject.search_results(q: 'wome', qt: 'search', :"spellcheck.dictionary" => "subject")
362
- expect(solr_response.spelling.words).to include('women')
363
- end
364
-
365
- it 'search results for multiple terms query with just-poor-enough-terms should have spelling suggestions for each term' do
366
- skip
367
- # get_spelling_suggestion("histo politica").should_not be_nil
368
- end
369
-
370
- end
371
-
372
- describe "facet_limit_for" do
373
- let(:blacklight_config) { copy_of_catalog_config }
374
-
375
- it "returns specified value for facet_field specified" do
376
- expect(subject.facet_limit_for("subject_topic_facet")).to eq blacklight_config.facet_fields["subject_topic_facet"].limit
377
- end
378
-
379
- it "facet_limit_hash should return hash with key being facet_field and value being configured limit" do
380
- # facet_limit_hash has been removed from solrhelper in refactor. should it go back?
381
- skip "facet_limit_hash has been removed from solrhelper in refactor. should it go back?"
382
- expect(subject.facet_limit_hash).to eq blacklight_config[:facet][:limits]
383
- end
384
-
385
- it "handles no facet_limits in config" do
386
- blacklight_config.facet_fields = {}
387
- expect(subject.facet_limit_for("subject_topic_facet")).to be_nil
388
- end
389
-
390
- describe "for 'true' configured values" do
391
- let(:blacklight_config) do
392
- Blacklight::Configuration.new do |config|
393
- config.add_facet_field "language_facet", limit: true
394
- end
395
- end
396
- it "returns nil if no @response available" do
397
- expect(subject.facet_limit_for("some_unknown_field")).to be_nil
398
- end
399
- it "gets from @response facet.limit if available" do
400
- @response = instance_double(Blacklight::Solr::Response, aggregations: { "language_facet" => double(limit: nil) })
401
- subject.instance_variable_set(:@response, @response)
402
- blacklight_config.facet_fields['language_facet'].limit = 10
403
- expect(subject.facet_limit_for("language_facet")).to eq 10
404
- end
405
- it "gets the limit from the facet field in @response" do
406
- @response = instance_double(Blacklight::Solr::Response, aggregations: { "language_facet" => double(limit: 16) })
407
- subject.instance_variable_set(:@response, @response)
408
- expect(subject.facet_limit_for("language_facet")).to eq 15
409
- end
410
- it "defaults to 10" do
411
- expect(subject.facet_limit_for("language_facet")).to eq 10
412
- end
413
- end
414
-
415
- context 'for facet fields with a key that is different from the field name' do
416
- let(:blacklight_config) do
417
- Blacklight::Configuration.new do |config|
418
- config.add_facet_field 'some_key', field: 'x', limit: true
419
- end
420
- end
421
-
422
- it 'gets the limit from the facet field in the @response' do
423
- response = instance_double(Blacklight::Solr::Response, aggregations: { 'x' => double(limit: 16) })
424
- subject.instance_variable_set(:@response, response)
425
- expect(subject.facet_limit_for('some_key')).to eq 15
426
- end
427
- end
428
- end
429
-
430
- # TODO: more complex queries! phrases, offset into search results, non-latin, boosting(?)
431
- # search within query building (?)
432
- # search + facets (search done first; facet selected first, both selected)
433
-
434
- # TODO: maybe eventually check other types of solr requests
435
- # more like this
436
- # nearby on shelf
437
- it "raises a Blacklight exception if RSolr can't connect to the Solr instance" do
438
- allow(blacklight_solr).to receive(:send_and_receive).and_raise(Errno::ECONNREFUSED)
439
- expect { subject.repository.search }.to raise_exception(/Unable to connect to Solr instance/)
440
- end
441
-
442
- describe "grouped_key_for_results" do
443
- it "pulls the grouped key out of the config" do
444
- blacklight_config.index.group = 'xyz'
445
- expect(subject.grouped_key_for_results).to eq('xyz')
446
- end
447
- end
448
-
449
- describe "#get_previous_and_next_documents_for_search" do
450
- let(:pre_query) { SearchHelperTestClass.new blacklight_config, blacklight_solr, state }
451
- before do
452
- @full_response, @all_docs = pre_query.search_results(q: '', per_page: '100')
453
- end
454
-
455
- it "returns the previous and next documents for a search" do
456
- response, docs = subject.get_previous_and_next_documents_for_search(4, :q => '')
457
-
458
- expect(docs.first.id).to eq @all_docs[3].id
459
- expect(docs.last.id).to eq @all_docs[5].id
460
- end
461
-
462
- it "returns only the next document if the counter is 0" do
463
- response, docs = subject.get_previous_and_next_documents_for_search(0, :q => '')
464
-
465
- expect(docs.first).to be_nil
466
- expect(docs.last.id).to eq @all_docs[1].id
467
- end
468
-
469
- it "returns only the previous document if the counter is the total number of documents" do
470
- response, docs = subject.get_previous_and_next_documents_for_search(@full_response.total - 1, :q => '')
471
- expect(docs.first.id).to eq @all_docs.slice(-2).id
472
- expect(docs.last).to be_nil
473
- end
474
-
475
- it "returns an array of nil values if there is only one result" do
476
- response, docs = subject.get_previous_and_next_documents_for_search(0, :q => 'id:2007020969')
477
- expect(docs.last).to be_nil
478
- expect(docs.first).to be_nil
479
- end
480
-
481
- it 'allows the query parameters to be customized using configuration' do
482
- blacklight_config.document_pagination_params[:fl] = 'id,format'
483
-
484
- response, docs = subject.get_previous_and_next_documents_for_search(0, :q => '')
485
-
486
- expect(docs.last.to_h).to eq @all_docs[1].to_h.slice('id', 'format')
487
- end
488
- end
489
- end