blacklight 6.14.0 → 7.0.0

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 (422) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -0
  3. data/.npmignore +23 -0
  4. data/.rubocop.yml +40 -16
  5. data/.rubocop_todo.yml +479 -375
  6. data/.solr_wrapper.yml +9 -2
  7. data/.travis.yml +27 -20
  8. data/Gemfile +3 -1
  9. data/README.md +22 -5
  10. data/Rakefile +3 -2
  11. data/VERSION +1 -1
  12. data/Vagrantfile +2 -0
  13. data/app/assets/images/blacklight/list.svg +1 -0
  14. data/app/assets/images/blacklight/search.svg +1 -0
  15. data/app/assets/javascripts/blacklight/blacklight.js +497 -57
  16. data/app/assets/stylesheets/blacklight/_balanced_list.scss +7 -12
  17. data/app/assets/stylesheets/blacklight/_blacklight_base.scss +18 -15
  18. data/app/assets/stylesheets/blacklight/_bookmark.scss +1 -13
  19. data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +27 -0
  20. data/app/assets/stylesheets/blacklight/_constraints.scss +17 -25
  21. data/app/assets/stylesheets/blacklight/_controls.scss +8 -16
  22. data/app/assets/stylesheets/blacklight/_facets.scss +64 -93
  23. data/app/assets/stylesheets/blacklight/_header.scss +35 -48
  24. data/app/assets/stylesheets/blacklight/_icons.scss +35 -0
  25. data/app/assets/stylesheets/blacklight/_layout.scss +0 -10
  26. data/app/assets/stylesheets/blacklight/_mixins.scss +15 -0
  27. data/app/assets/stylesheets/blacklight/_modal.scss +9 -17
  28. data/app/assets/stylesheets/blacklight/_pagination.scss +2 -17
  29. data/app/assets/stylesheets/blacklight/_search_form.scss +7 -0
  30. data/app/assets/stylesheets/blacklight/_search_history.scss +5 -13
  31. data/app/assets/stylesheets/blacklight/_search_results.scss +9 -8
  32. data/app/assets/stylesheets/blacklight/_twitter_typeahead.scss +1 -2
  33. data/app/assets/stylesheets/blacklight/blacklight.scss +1 -1
  34. data/app/builders/blacklight/action_builder.rb +57 -0
  35. data/app/controllers/bookmarks_controller.rb +2 -2
  36. data/app/controllers/catalog_controller.rb +2 -2
  37. data/app/controllers/concerns/blacklight/base.rb +0 -33
  38. data/app/controllers/concerns/blacklight/bookmarks.rb +36 -33
  39. data/app/controllers/concerns/blacklight/catalog.rb +266 -210
  40. data/app/controllers/concerns/blacklight/controller.rb +111 -126
  41. data/app/controllers/concerns/blacklight/default_component_configuration.rb +12 -43
  42. data/app/controllers/concerns/blacklight/facet.rb +3 -0
  43. data/app/controllers/concerns/blacklight/search_context.rb +16 -14
  44. data/app/controllers/concerns/blacklight/search_fields.rb +4 -14
  45. data/app/controllers/concerns/blacklight/search_history.rb +1 -6
  46. data/app/controllers/concerns/blacklight/token_based_user.rb +24 -9
  47. data/app/helpers/blacklight/blacklight_helper_behavior.rb +39 -119
  48. data/app/helpers/blacklight/catalog_helper_behavior.rb +94 -88
  49. data/app/helpers/blacklight/component_helper_behavior.rb +21 -19
  50. data/app/helpers/blacklight/configuration_helper_behavior.rb +30 -57
  51. data/app/helpers/blacklight/facets_helper_behavior.rb +55 -51
  52. data/app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb +9 -11
  53. data/app/helpers/blacklight/icon_helper_behavior.rb +18 -0
  54. data/app/helpers/blacklight/layout_helper_behavior.rb +3 -3
  55. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +8 -6
  56. data/app/helpers/blacklight/render_partials_helper_behavior.rb +195 -0
  57. data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +19 -11
  58. data/app/helpers/blacklight/suggest_helper_behavior.rb +1 -0
  59. data/app/helpers/blacklight/url_helper_behavior.rb +50 -41
  60. data/app/{assets/javascripts → javascript}/blacklight/autocomplete.js +3 -2
  61. data/app/javascript/blacklight/bookmark_toggle.js +25 -0
  62. data/app/javascript/blacklight/checkbox_submit.js +134 -0
  63. data/app/{assets/javascripts → javascript}/blacklight/collapsable.js +1 -1
  64. data/app/{assets/javascripts → javascript}/blacklight/core.js +10 -8
  65. data/app/{assets/javascripts → javascript}/blacklight/facet_load.js +6 -6
  66. data/app/{assets/javascripts/blacklight/ajax_modal.js → javascript/blacklight/modal.js} +62 -64
  67. data/app/{assets/javascripts → javascript}/blacklight/search_context.js +10 -3
  68. data/app/models/blacklight/facet_paginator.rb +3 -3
  69. data/app/models/blacklight/icon.rb +56 -0
  70. data/app/models/blacklight/solr/facet_paginator.rb +3 -3
  71. data/app/models/blacklight/suggest_search.rb +4 -15
  72. data/app/models/bookmark.rb +5 -10
  73. data/app/models/concerns/blacklight/configurable.rb +13 -13
  74. data/app/models/concerns/blacklight/document/active_model_shim.rb +13 -11
  75. data/app/models/concerns/blacklight/document/cache_key.rb +1 -1
  76. data/app/models/concerns/blacklight/document/dublin_core.rb +2 -2
  77. data/app/models/concerns/blacklight/document/email.rb +1 -1
  78. data/app/models/concerns/blacklight/document/extensions.rb +5 -5
  79. data/app/models/concerns/blacklight/document/semantic_fields.rb +9 -9
  80. data/app/models/concerns/blacklight/document/sms.rb +1 -1
  81. data/app/models/concerns/blacklight/document.rb +26 -40
  82. data/app/models/concerns/blacklight/solr/document.rb +8 -8
  83. data/app/models/concerns/blacklight/suggest/response.rb +5 -3
  84. data/app/models/concerns/blacklight/user.rb +7 -6
  85. data/app/models/record_mailer.rb +5 -6
  86. data/app/models/search.rb +5 -7
  87. data/app/presenters/blacklight/document_presenter.rb +25 -140
  88. data/app/presenters/blacklight/field_presenter.rb +7 -5
  89. data/app/presenters/blacklight/index_presenter.rb +41 -58
  90. data/app/presenters/blacklight/json_presenter.rb +10 -14
  91. data/app/presenters/blacklight/link_alternate_presenter.rb +3 -1
  92. data/app/presenters/blacklight/rendering/abstract_step.rb +7 -5
  93. data/app/presenters/blacklight/rendering/helper_method.rb +10 -8
  94. data/app/presenters/blacklight/rendering/join.rb +5 -3
  95. data/app/presenters/blacklight/rendering/link_to_facet.rb +23 -19
  96. data/app/presenters/blacklight/rendering/microdata.rb +6 -3
  97. data/app/presenters/blacklight/rendering/pipeline.rb +7 -5
  98. data/app/presenters/blacklight/rendering/terminator.rb +2 -0
  99. data/app/presenters/blacklight/search_bar_presenter.rb +39 -0
  100. data/app/presenters/blacklight/show_presenter.rb +26 -63
  101. data/app/presenters/blacklight/thumbnail_presenter.rb +74 -0
  102. data/app/services/blacklight/document_factory.rb +13 -0
  103. data/app/services/blacklight/field_retriever.rb +26 -24
  104. data/app/services/blacklight/search_service.rb +152 -0
  105. data/app/values/blacklight/types.rb +31 -0
  106. data/app/views/blacklight/nav/_bookmark.html.erb +2 -2
  107. data/app/views/blacklight/nav/_search_history.html.erb +1 -1
  108. data/app/views/bookmarks/_tools.html.erb +2 -2
  109. data/app/views/bookmarks/index.html.erb +12 -13
  110. data/app/views/catalog/_bookmark_control.html.erb +26 -10
  111. data/app/views/catalog/_citation.html.erb +4 -4
  112. data/app/views/catalog/_constraints.html.erb +6 -7
  113. data/app/views/catalog/_constraints_element.html.erb +6 -6
  114. data/app/views/catalog/_did_you_mean.html.erb +1 -1
  115. data/app/views/catalog/{_document_default.atom.builder → _document.atom.builder} +19 -18
  116. data/app/views/catalog/_document.html.erb +5 -3
  117. data/app/views/catalog/{_document_default.rss.builder → _document.rss.builder} +2 -0
  118. data/app/views/catalog/_document_action.html.erb +2 -1
  119. data/app/views/catalog/_email_form.html.erb +8 -4
  120. data/app/views/catalog/_facet_index_navigation.html.erb +5 -4
  121. data/app/views/catalog/_facet_layout.html.erb +6 -10
  122. data/app/views/catalog/_facet_limit.html.erb +3 -2
  123. data/app/views/catalog/_facet_pagination.html.erb +8 -8
  124. data/app/views/catalog/_facet_pivot.html.erb +2 -2
  125. data/app/views/catalog/_facets.html.erb +9 -12
  126. data/app/views/catalog/_field.json.jbuilder +10 -0
  127. data/app/views/catalog/{_group_default.html.erb → _group.html.erb} +1 -1
  128. data/app/views/catalog/_home_text.html.erb +32 -36
  129. data/app/views/catalog/_index.html.erb +10 -0
  130. data/app/views/catalog/{_index_header_default.html.erb → _index_header.html.erb} +3 -3
  131. data/app/views/catalog/_per_page_widget.html.erb +6 -7
  132. data/app/views/catalog/_previous_next_doc.html.erb +6 -14
  133. data/app/views/catalog/_results_pagination.html.erb +2 -2
  134. data/app/views/catalog/_search_form.html.erb +12 -8
  135. data/app/views/catalog/_search_header.html.erb +0 -3
  136. data/app/views/catalog/_search_results.html.erb +6 -2
  137. data/app/views/catalog/_show.html.erb +8 -0
  138. data/app/views/catalog/_show_main_content.html.erb +4 -4
  139. data/app/views/catalog/_show_more_like_this.html.erb +1 -1
  140. data/app/views/catalog/_show_sidebar.html.erb +3 -3
  141. data/app/views/catalog/_show_tools.html.erb +10 -12
  142. data/app/views/catalog/_sms_form.html.erb +8 -4
  143. data/app/views/catalog/_sort_and_per_page.html.erb +3 -3
  144. data/app/views/catalog/_sort_widget.html.erb +7 -7
  145. data/app/views/catalog/_thumbnail.html.erb +5 -0
  146. data/app/views/catalog/_view_type_group.html.erb +2 -2
  147. data/app/views/catalog/_zero_results.html.erb +1 -1
  148. data/app/views/catalog/citation.js.erb +4 -2
  149. data/app/views/catalog/email.html.erb +5 -3
  150. data/app/views/catalog/email_success.html.erb +12 -8
  151. data/app/views/catalog/facet.html.erb +10 -8
  152. data/app/views/catalog/facet.json.jbuilder +2 -0
  153. data/app/views/catalog/index.atom.builder +13 -16
  154. data/app/views/catalog/index.html.erb +9 -11
  155. data/app/views/catalog/index.json.jbuilder +84 -3
  156. data/app/views/catalog/index.rss.builder +7 -5
  157. data/app/views/catalog/opensearch.xml.builder +12 -10
  158. data/app/views/catalog/show.html.erb +11 -6
  159. data/app/views/catalog/show.json.jbuilder +21 -0
  160. data/app/views/catalog/sms.html.erb +3 -1
  161. data/app/views/catalog/sms_success.html.erb +12 -8
  162. data/app/views/kaminari/blacklight/_first_page.html.erb +2 -2
  163. data/app/views/kaminari/blacklight/_gap.html.erb +2 -2
  164. data/app/views/kaminari/blacklight/_last_page.html.erb +2 -2
  165. data/app/views/kaminari/blacklight/_next_page.html.erb +5 -5
  166. data/app/views/kaminari/blacklight/_page.html.erb +5 -3
  167. data/app/views/kaminari/blacklight/_prev_page.html.erb +4 -4
  168. data/app/views/kaminari/blacklight_compact/_paginator.html.erb +4 -4
  169. data/app/views/layouts/blacklight/base.html.erb +35 -0
  170. data/app/views/layouts/blacklight.html.erb +14 -41
  171. data/app/views/layouts/catalog_result.html.erb +11 -0
  172. data/app/views/search_history/index.html.erb +16 -21
  173. data/app/views/shared/_header_navbar.html.erb +8 -13
  174. data/app/views/shared/_modal.html.erb +6 -0
  175. data/app/views/shared/_user_util_links.html.erb +22 -0
  176. data/blacklight.gemspec +10 -11
  177. data/config/i18n-tasks.yml +17 -0
  178. data/config/locales/blacklight.de.yml +71 -82
  179. data/config/locales/blacklight.en.yml +15 -27
  180. data/config/locales/blacklight.es.yml +14 -26
  181. data/config/locales/blacklight.fr.yml +16 -33
  182. data/config/locales/blacklight.hu.yml +212 -0
  183. data/config/locales/blacklight.it.yml +15 -26
  184. data/config/locales/blacklight.nl.yml +212 -0
  185. data/config/locales/blacklight.pt-BR.yml +24 -29
  186. data/config/locales/blacklight.sq.yml +4 -28
  187. data/config/locales/blacklight.zh.yml +3 -25
  188. data/config/routes.rb +2 -10
  189. data/db/migrate/20140202020202_create_bookmarks.rb +0 -1
  190. data/db/migrate/20140320000000_add_polymorphic_type_to_bookmarks.rb +1 -1
  191. data/lib/blacklight/abstract_repository.rb +22 -10
  192. data/lib/blacklight/configuration/context.rb +12 -1
  193. data/lib/blacklight/configuration/facet_field.rb +16 -9
  194. data/lib/blacklight/configuration/field.rb +32 -3
  195. data/lib/blacklight/configuration/fields.rb +61 -58
  196. data/lib/blacklight/configuration/null_field.rb +2 -0
  197. data/lib/blacklight/configuration/search_field.rb +2 -2
  198. data/lib/blacklight/configuration/sort_field.rb +2 -2
  199. data/lib/blacklight/configuration/view_config.rb +4 -0
  200. data/lib/blacklight/configuration.rb +101 -88
  201. data/lib/blacklight/engine.rb +11 -7
  202. data/lib/blacklight/exceptions.rb +4 -7
  203. data/lib/blacklight/{utils.rb → nested_open_struct_with_hash_access.rb} +9 -81
  204. data/lib/blacklight/open_struct_with_hash_access.rb +49 -0
  205. data/lib/blacklight/parameters.rb +1 -1
  206. data/lib/blacklight/routes/exportable.rb +1 -3
  207. data/lib/blacklight/routes/searchable.rb +3 -3
  208. data/lib/blacklight/runtime_registry.rb +2 -0
  209. data/lib/blacklight/search_builder.rb +28 -35
  210. data/lib/blacklight/search_state.rb +10 -8
  211. data/lib/blacklight/solr/repository.rb +40 -6
  212. data/lib/blacklight/solr/request.rb +1 -1
  213. data/lib/blacklight/solr/response/facets.rb +29 -31
  214. data/lib/blacklight/solr/response/group.rb +3 -3
  215. data/lib/blacklight/solr/response/group_response.rb +1 -1
  216. data/lib/blacklight/solr/response/more_like_this.rb +2 -2
  217. data/lib/blacklight/solr/response/response.rb +2 -2
  218. data/lib/blacklight/solr/response/spelling.rb +4 -3
  219. data/lib/blacklight/solr/response.rb +29 -30
  220. data/lib/blacklight/solr/search_builder_behavior.rb +25 -29
  221. data/lib/blacklight/version.rb +1 -1
  222. data/lib/blacklight.rb +10 -8
  223. data/lib/generators/blacklight/assets_generator.rb +18 -12
  224. data/lib/generators/blacklight/controller_generator.rb +4 -5
  225. data/lib/generators/blacklight/document_generator.rb +1 -1
  226. data/lib/generators/blacklight/install_generator.rb +18 -28
  227. data/lib/generators/blacklight/search_builder_generator.rb +1 -1
  228. data/lib/generators/blacklight/{solr5_generator.rb → solr_generator.rb} +12 -6
  229. data/lib/generators/blacklight/templates/.solr_wrapper.yml +5 -0
  230. data/lib/generators/blacklight/templates/alternate_controller.rb +4 -4
  231. data/lib/generators/blacklight/templates/blacklight.scss +0 -2
  232. data/lib/generators/blacklight/templates/catalog_controller.rb +59 -49
  233. data/lib/generators/blacklight/templates/config/blacklight.yml +1 -13
  234. data/lib/generators/blacklight/templates/solr/conf/schema.xml +388 -0
  235. data/lib/generators/blacklight/templates/solr/conf/solrconfig.xml +195 -0
  236. data/lib/generators/blacklight/test_support_generator.rb +10 -10
  237. data/lib/generators/blacklight/user_generator.rb +5 -6
  238. data/lib/railties/blacklight.rake +17 -21
  239. data/package-lock.json +2195 -0
  240. data/package.json +29 -0
  241. data/spec/controllers/alternate_controller_spec.rb +5 -4
  242. data/spec/controllers/application_controller_spec.rb +1 -5
  243. data/spec/controllers/blacklight/base_spec.rb +6 -3
  244. data/spec/controllers/blacklight/catalog/component_configuration_spec.rb +11 -7
  245. data/spec/controllers/blacklight/facet_spec.rb +1 -2
  246. data/spec/controllers/blacklight/search_fields_spec.rb +25 -34
  247. data/spec/controllers/bookmarks_controller_spec.rb +46 -11
  248. data/spec/controllers/catalog_controller_spec.rb +334 -161
  249. data/spec/controllers/search_history_controller_spec.rb +6 -6
  250. data/spec/features/alternate_controller_spec.rb +4 -4
  251. data/spec/features/autocomplete_spec.rb +4 -2
  252. data/spec/features/bookmarks_spec.rb +10 -10
  253. data/spec/features/did_you_mean_spec.rb +7 -12
  254. data/spec/features/facets_spec.rb +29 -17
  255. data/spec/features/record_view_spec.rb +12 -18
  256. data/spec/features/search_context_spec.rb +6 -7
  257. data/spec/features/search_crawler_spec.rb +3 -5
  258. data/spec/features/search_filters_spec.rb +80 -80
  259. data/spec/features/search_formats_spec.rb +1 -1
  260. data/spec/features/search_history_spec.rb +6 -29
  261. data/spec/features/search_pagination_spec.rb +4 -2
  262. data/spec/features/search_results_spec.rb +14 -12
  263. data/spec/features/search_sort_spec.rb +2 -2
  264. data/spec/features/search_spec.rb +8 -9
  265. data/spec/features/sitelinks_search_box.rb +4 -4
  266. data/{solr → spec/fixtures}/sample_solr_documents.yml +688 -688
  267. data/spec/helpers/{configuration_helper_spec.rb → blacklight/configuration_helper_behavior_spec.rb} +97 -92
  268. data/spec/helpers/{facets_helper_spec.rb → blacklight/facets_helper_behavior_spec.rb} +72 -67
  269. data/spec/helpers/{hash_as_hidden_fields_spec.rb → blacklight/hash_as_hidden_fields_behavior_spec.rb} +2 -2
  270. data/spec/helpers/blacklight/icon_helper_behavior_spec.rb +10 -0
  271. data/spec/helpers/{layout_helper_spec.rb → blacklight/layout_helper_behavior_spec.rb} +5 -5
  272. data/spec/helpers/{render_constraints_helper_spec.rb → blacklight/render_constraints_helper_behavior_spec.rb} +10 -6
  273. data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +92 -0
  274. data/spec/helpers/{search_history_constraints_helper_spec.rb → blacklight/search_history_constraints_helper_behavior_spec.rb} +29 -30
  275. data/spec/helpers/{suggest_helper_spec.rb → blacklight/suggest_helper_behavior_spec.rb} +9 -2
  276. data/spec/helpers/{url_helper_spec.rb → blacklight/url_helper_behavior_spec.rb} +56 -54
  277. data/spec/helpers/blacklight_helper_spec.rb +65 -150
  278. data/spec/helpers/catalog_helper_spec.rb +80 -96
  279. data/spec/i18n_spec.rb +18 -0
  280. data/spec/integration/generators/blacklight/{solr5_generator_spec.rb → solr_generator_spec.rb} +21 -13
  281. data/spec/lib/blacklight/configuration/facet_field_spec.rb +13 -0
  282. data/spec/lib/blacklight/configuration/field_spec.rb +15 -0
  283. data/spec/lib/blacklight/nested_open_struct_with_hash_access_spec.rb +17 -0
  284. data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +148 -0
  285. data/spec/lib/blacklight/parameters_spec.rb +4 -2
  286. data/spec/lib/blacklight/search_state_spec.rb +53 -36
  287. data/spec/lib/blacklight_spec.rb +14 -15
  288. data/spec/lib/tasks/blacklight_task_spec.rb +4 -6
  289. data/spec/models/blacklight/configurable_spec.rb +24 -27
  290. data/spec/models/blacklight/configuration/context_spec.rb +9 -10
  291. data/spec/models/blacklight/configuration_spec.rb +248 -223
  292. data/spec/models/blacklight/document/active_model_shim_spec.rb +15 -6
  293. data/spec/models/blacklight/document/cache_key_spec.rb +9 -2
  294. data/spec/models/blacklight/document/dublin_core_spec.rb +17 -20
  295. data/spec/models/blacklight/document/email_spec.rb +10 -10
  296. data/spec/models/blacklight/document/sms_spec.rb +10 -10
  297. data/spec/models/blacklight/document_spec.rb +10 -22
  298. data/spec/models/blacklight/facet_paginator_spec.rb +40 -30
  299. data/spec/models/blacklight/icon_spec.rb +44 -0
  300. data/spec/models/blacklight/search_builder_spec.rb +41 -26
  301. data/spec/models/blacklight/solr/document_spec.rb +224 -216
  302. data/spec/models/blacklight/solr/facet_paginator_spec.rb +6 -4
  303. data/spec/models/blacklight/solr/repository_spec.rb +61 -46
  304. data/spec/models/blacklight/solr/request_spec.rb +17 -18
  305. data/spec/models/blacklight/solr/response/facets_spec.rb +58 -58
  306. data/spec/models/blacklight/solr/response/group_response_spec.rb +16 -22
  307. data/spec/models/blacklight/solr/response/group_spec.rb +18 -25
  308. data/spec/models/blacklight/solr/response_spec.rb +56 -55
  309. data/spec/models/blacklight/solr/search_builder_spec.rb +150 -164
  310. data/spec/models/blacklight/suggest/response_spec.rb +6 -4
  311. data/spec/models/blacklight/suggest_search_spec.rb +9 -16
  312. data/spec/models/blacklight/user_spec.rb +9 -11
  313. data/spec/models/bookmark_spec.rb +7 -6
  314. data/spec/models/record_mailer_spec.rb +23 -21
  315. data/spec/models/search_spec.rb +19 -18
  316. data/spec/models/solr_document_spec.rb +33 -5
  317. data/spec/presenters/blacklight/document_presenter_spec.rb +86 -0
  318. data/spec/presenters/blacklight/index_presenter_spec.rb +186 -0
  319. data/spec/presenters/blacklight/json_presenter_spec.rb +59 -0
  320. data/spec/presenters/blacklight/link_alternate_presenter_spec.rb +3 -0
  321. data/spec/presenters/blacklight/search_bar_presenter_spec.rb +79 -0
  322. data/spec/presenters/blacklight/show_presenter_spec.rb +333 -0
  323. data/spec/presenters/pipeline_spec.rb +18 -11
  324. data/spec/presenters/thumbnail_presenter_spec.rb +174 -0
  325. data/spec/routing/catalog_routing_spec.rb +13 -15
  326. data/spec/services/blacklight/search_service_spec.rb +488 -0
  327. data/spec/spec_helper.rb +20 -19
  328. data/spec/support/features/session_helpers.rb +4 -4
  329. data/spec/support/features.rb +1 -1
  330. data/spec/test_app_templates/Gemfile.extra +2 -4
  331. data/spec/test_app_templates/lib/generators/test_app_generator.rb +12 -13
  332. data/spec/views/catalog/_constraints.html.erb_spec.rb +3 -6
  333. data/spec/views/catalog/_constraints_element.html.erb_spec.rb +17 -13
  334. data/spec/views/catalog/_document.html.erb_spec.rb +11 -11
  335. data/spec/views/catalog/_document_list.html.erb_spec.rb +2 -1
  336. data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +5 -5
  337. data/spec/views/catalog/_facet_layout.html.erb_spec.rb +6 -6
  338. data/spec/views/catalog/_facets.html.erb_spec.rb +10 -12
  339. data/spec/views/catalog/{_index_default.erb_spec.rb → _index.html.erb_spec.rb} +14 -15
  340. data/spec/views/catalog/{_index_header_default.html.erb_spec.rb → _index_header.html.erb_spec.rb} +6 -9
  341. data/spec/views/catalog/_paginate_compact.html.erb_spec.rb +7 -30
  342. data/spec/views/catalog/_search_header.erb_spec.rb +1 -3
  343. data/spec/views/catalog/{_show_default.erb_spec.rb → _show.html.erb_spec.rb} +13 -14
  344. data/spec/views/catalog/_show_sidebar.erb_spec.rb +6 -9
  345. data/spec/views/catalog/_show_tools.html.erb_spec.rb +5 -5
  346. data/spec/views/catalog/_sort_and_per_page.html.erb_spec.rb +1 -2
  347. data/spec/views/catalog/_sort_widget.html.erb_spec.rb +3 -1
  348. data/spec/views/catalog/{_thumbnail_default.erb_spec.rb → _thumbnail.html.erb_spec.rb} +7 -9
  349. data/spec/views/catalog/_view_type_group.html.erb_spec.rb +12 -10
  350. data/spec/views/catalog/email_success.html.erb_spec.rb +8 -0
  351. data/spec/views/catalog/facet.html.erb_spec.rb +4 -3
  352. data/spec/views/catalog/facet.json.jbuilder_spec.rb +3 -2
  353. data/spec/views/catalog/index.atom.builder_spec.rb +11 -6
  354. data/spec/views/catalog/index.html.erb_spec.rb +6 -8
  355. data/spec/views/catalog/index.json.jbuilder_spec.rb +119 -26
  356. data/spec/views/catalog/opensearch.xml.builder_spec.rb +1 -1
  357. data/spec/views/catalog/show.html.erb_spec.rb +8 -8
  358. data/spec/views/catalog/show.json.jbuilder_spec.rb +40 -0
  359. data/spec/views/catalog/sms_success.html.erb_spec.rb +8 -0
  360. data/spec/views/{_user_util_links.html.erb_spec.rb → shared/_user_util_links.html.erb_spec.rb} +4 -7
  361. data/tasks/blacklight.rake +10 -8
  362. data/template.demo.rb +3 -11
  363. metadata +188 -189
  364. data/app/assets/javascripts/blacklight/autofocus.js +0 -16
  365. data/app/assets/javascripts/blacklight/bookmark_toggle.js +0 -23
  366. data/app/assets/javascripts/blacklight/checkbox_submit.js +0 -135
  367. data/app/controllers/concerns/blacklight/request_builders.rb +0 -77
  368. data/app/controllers/concerns/blacklight/saved_searches.rb +0 -70
  369. data/app/controllers/concerns/blacklight/search_helper.rb +0 -155
  370. data/app/controllers/concerns/blacklight/suggest.rb +0 -25
  371. data/app/controllers/saved_searches_controller.rb +0 -4
  372. data/app/controllers/suggest_controller.rb +0 -4
  373. data/app/helpers/blacklight/deprecated_url_helper_behavior.rb +0 -57
  374. data/app/helpers/blacklight/render_partials_helper.rb +0 -205
  375. data/app/helpers/blacklight_configuration_helper.rb +0 -4
  376. data/app/helpers/blacklight_url_helper.rb +0 -4
  377. data/app/helpers/component_helper.rb +0 -4
  378. data/app/helpers/facets_helper.rb +0 -4
  379. data/app/helpers/hash_as_hidden_fields_helper.rb +0 -4
  380. data/app/helpers/layout_helper.rb +0 -4
  381. data/app/helpers/render_constraints_helper.rb +0 -4
  382. data/app/helpers/search_history_constraints_helper.rb +0 -4
  383. data/app/helpers/suggest_helper.rb +0 -4
  384. data/app/models/concerns/blacklight/solr/document/more_like_this.rb +0 -6
  385. data/app/views/_user_util_links.html.erb +0 -26
  386. data/app/views/blacklight/nav/_saved_searches.html.erb +0 -1
  387. data/app/views/catalog/_index_default.html.erb +0 -12
  388. data/app/views/catalog/_show_default.html.erb +0 -10
  389. data/app/views/catalog/_thumbnail_default.html.erb +0 -5
  390. data/app/views/saved_searches/index.html.erb +0 -32
  391. data/app/views/shared/_ajax_modal.html.erb +0 -6
  392. data/lib/generators/blacklight/solr4_generator.rb +0 -31
  393. data/lib/generators/blacklight/templates/config/jetty.yml +0 -13
  394. data/solr/conf/schema.xml +0 -629
  395. data/solr/conf/solrconfig.xml +0 -411
  396. data/spec/controllers/blacklight/search_helper_spec.rb +0 -470
  397. data/spec/controllers/saved_searches_controller_spec.rb +0 -32
  398. data/spec/controllers/suggest_controller_spec.rb +0 -17
  399. data/spec/features/saved_searches_spec.rb +0 -47
  400. data/spec/helpers/deprecated_url_helper_behavior_spec.rb +0 -101
  401. data/spec/lib/blacklight/utils_spec.rb +0 -167
  402. data/spec/models/blacklight/solr/document/more_like_this_spec.rb +0 -18
  403. data/spec/presenters/document_presenter_spec.rb +0 -438
  404. data/spec/presenters/index_presenter_spec.rb +0 -173
  405. data/spec/presenters/show_presenter_spec.rb +0 -313
  406. data/spec/support/backport_test.rb +0 -14
  407. /data/app/views/catalog/{_show_header_default.html.erb → _show_header.html.erb} +0 -0
  408. /data/app/views/{_flash_msg.html.erb → shared/_flash_msg.html.erb} +0 -0
  409. /data/{solr → lib/generators/blacklight/templates/solr}/conf/_rest_managed.json +0 -0
  410. /data/{solr → lib/generators/blacklight/templates/solr}/conf/admin-extra.html +0 -0
  411. /data/{solr → lib/generators/blacklight/templates/solr}/conf/elevate.xml +0 -0
  412. /data/{solr → lib/generators/blacklight/templates/solr}/conf/mapping-ISOLatin1Accent.txt +0 -0
  413. /data/{solr → lib/generators/blacklight/templates/solr}/conf/protwords.txt +0 -0
  414. /data/{solr → lib/generators/blacklight/templates/solr}/conf/scripts.conf +0 -0
  415. /data/{solr → lib/generators/blacklight/templates/solr}/conf/spellings.txt +0 -0
  416. /data/{solr → lib/generators/blacklight/templates/solr}/conf/stopwords.txt +0 -0
  417. /data/{solr → lib/generators/blacklight/templates/solr}/conf/stopwords_en.txt +0 -0
  418. /data/{solr → lib/generators/blacklight/templates/solr}/conf/synonyms.txt +0 -0
  419. /data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example.xsl +0 -0
  420. /data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example_atom.xsl +0 -0
  421. /data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example_rss.xsl +0 -0
  422. /data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/luke.xsl +0 -0
@@ -3,34 +3,39 @@
3
3
  # as this module is mixed-in to the application controller in the hosting app on installation.
4
4
  module Blacklight::Controller
5
5
  extend ActiveSupport::Concern
6
- extend Deprecation
7
- self.deprecation_horizon = 'blacklight 7.x'
8
6
 
9
7
  included do
10
8
  include Blacklight::SearchFields
11
- helper Blacklight::SearchFields
9
+ helper Blacklight::SearchFields if respond_to? :helper
12
10
 
13
11
  include ActiveSupport::Callbacks
14
12
 
15
13
  # now in application.rb file under config.filter_parameters
16
14
  # filter_parameter_logging :password, :password_confirmation
17
- helper_method :current_user_session, :current_user, :current_or_guest_user
18
- after_action :discard_flash_if_xhr
19
15
 
20
16
  # handle basic authorization exception with #access_denied
21
- rescue_from Blacklight::Exceptions::AccessDenied, :with => :access_denied
17
+ rescue_from Blacklight::Exceptions::AccessDenied, with: :access_denied
22
18
 
23
- # extra head content
24
- helper_method :has_user_authentication_provider?
25
- helper_method :blacklight_config, :blacklight_configuration_context
26
- helper_method :search_action_url, :search_action_path, :search_facet_url, :search_facet_path
27
- helper_method :search_state
19
+ if respond_to? :helper_method
20
+ helper_method :current_user_session, :current_user, :current_or_guest_user
28
21
 
29
- # Specify which class to use for the search state. You can subclass SearchState if you
22
+ # extra head content
23
+ helper_method :has_user_authentication_provider?
24
+ helper_method :blacklight_config, :blacklight_configuration_context
25
+ helper_method :search_action_url, :search_action_path, :search_facet_path
26
+ helper_method :search_state
27
+ end
28
+
29
+ # Which class to use for the search state. You can subclass SearchState if you
30
30
  # want to override any of the methods (e.g. SearchState#url_for_document)
31
31
  class_attribute :search_state_class
32
32
  self.search_state_class = Blacklight::SearchState
33
33
 
34
+ # Which class to use for the search service. You can subclass SearchService if you
35
+ # want to override any of the methods (e.g. SearchService#fetch)
36
+ class_attribute :search_service_class
37
+ self.search_service_class = Blacklight::SearchService
38
+
34
39
  # This callback runs when a user first logs in
35
40
 
36
41
  define_callbacks :logging_in_user
@@ -43,140 +48,120 @@ module Blacklight::Controller
43
48
 
44
49
  delegate :blacklight_config, to: :default_catalog_controller
45
50
 
46
- protected
51
+ private
47
52
 
48
- ##
49
- # Context in which to evaluate blacklight configuration conditionals
50
- def blacklight_configuration_context
51
- @blacklight_configuration_context ||= Blacklight::Configuration::Context.new(self)
52
- end
53
+ ##
54
+ # Context in which to evaluate blacklight configuration conditionals
55
+ def blacklight_configuration_context
56
+ @blacklight_configuration_context ||= Blacklight::Configuration::Context.new(self)
57
+ end
53
58
 
54
- ##
55
- # Determine whether to render the bookmarks control
56
- # (Needs to be available globally, as it is used in the navbar)
57
- def render_bookmarks_control?
58
- has_user_authentication_provider? and current_or_guest_user.present?
59
- end
59
+ ##
60
+ # Determine whether to render the bookmarks control
61
+ # (Needs to be available globally, as it is used in the navbar)
62
+ def render_bookmarks_control?
63
+ has_user_authentication_provider? && current_or_guest_user.present?
64
+ end
60
65
 
61
- ##
62
- # Determine whether to render the saved searches link
63
- # (Needs to be available globally, as it is used in the navbar)
64
- def render_saved_searches?
65
- has_user_authentication_provider? and current_user
66
- end
66
+ # @return [Blacklight::SearchState] a memoized instance of the parameter state.
67
+ def search_state
68
+ @search_state ||= search_state_class.new(params, blacklight_config, self)
69
+ end
67
70
 
68
- # @return [Blacklight::SearchState] a memoized instance of the parameter state.
69
- def search_state
70
- @search_state ||= begin
71
- if search_state_class.instance_method(:initialize).arity == -3
72
- search_state_class.new(params, blacklight_config, self)
73
- else
74
- Deprecation.warn(search_state_class, "The constructor for #{search_state_class} now requires a third argument. " \
75
- "Invoking it will 2 arguments is deprecated and will be removed in Blacklight 7.")
76
- search_state_class.new(params, blacklight_config)
77
- end
78
- end
79
- end
71
+ # Default route to the search action (used e.g. in global partials). Override this method
72
+ # in a controller or in your ApplicationController to introduce custom logic for choosing
73
+ # which action the search form should use
74
+ def search_action_url options = {}
75
+ # Rails 4.2 deprecated url helpers accepting string keys for 'controller' or 'action'
76
+ search_catalog_url(options.except(:controller, :action))
77
+ end
80
78
 
81
- # Default route to the search action (used e.g. in global partials). Override this method
82
- # in a controller or in your ApplicationController to introduce custom logic for choosing
83
- # which action the search form should use
84
- def search_action_url options = {}
85
- # Rails 4.2 deprecated url helpers accepting string keys for 'controller' or 'action'
86
- search_catalog_url(options.except(:controller, :action))
79
+ def search_action_path *args
80
+ if args.first.is_a? Hash
81
+ args.first[:only_path] = true if args.first[:only_path].nil?
87
82
  end
88
83
 
89
- def search_action_path *args
90
- if args.first.is_a? Hash
91
- args.first[:only_path] = true
92
- end
84
+ search_action_url(*args)
85
+ end
93
86
 
94
- search_action_url(*args)
95
- end
87
+ def search_facet_path(options = {})
88
+ opts = search_state
89
+ .to_h
90
+ .merge(action: "facet", only_path: true)
91
+ .merge(options)
92
+ .except(:page)
93
+ url_for opts
94
+ end
96
95
 
97
- def search_facet_url options = {}
98
- opts = search_state.to_h.merge(action: "facet").merge(options).except(:page)
99
- url_for opts
100
- end
101
- deprecation_deprecate search_facet_url: 'Use search_facet_path instead.'
96
+ # Returns a list of Searches from the ids in the user's history.
97
+ def searches_from_history
98
+ session[:history].blank? ? ::Search.none : ::Search.where(id: session[:history]).order("updated_at desc")
99
+ end
102
100
 
103
- def search_facet_path(options = {})
104
- Deprecation.silence(Blacklight::Controller) do
105
- search_facet_url(options.merge(only_path: true))
106
- end
101
+ # Should be provided by authentication provider
102
+ # def current_user
103
+ # end
104
+ # def current_or_guest_user
105
+ # end
106
+
107
+ # Here's a stub implementation we'll add if it isn't provided for us
108
+ def current_or_guest_user
109
+ if defined? super
110
+ super
111
+ elsif has_user_authentication_provider?
112
+ current_user
107
113
  end
114
+ end
115
+ alias blacklight_current_or_guest_user current_or_guest_user
108
116
 
109
- # Returns a list of Searches from the ids in the user's history.
110
- def searches_from_history
111
- session[:history].blank? ? Search.none : Search.where(:id => session[:history]).order("updated_at desc")
112
- end
117
+ ##
118
+ #
119
+ #
120
+ def has_user_authentication_provider?
121
+ respond_to? :current_user
122
+ end
113
123
 
114
- # Should be provided by authentication provider
115
- # def current_user
116
- # end
117
- # def current_or_guest_user
118
- # end
119
-
120
- # Here's a stub implementation we'll add if it isn't provided for us
121
- def current_or_guest_user
122
- if defined? super
123
- super
124
- elsif has_user_authentication_provider?
125
- current_user
126
- end
127
- end
128
- alias blacklight_current_or_guest_user current_or_guest_user
124
+ def require_user_authentication_provider
125
+ raise ActionController::RoutingError, 'Not Found' unless has_user_authentication_provider?
126
+ end
129
127
 
130
- ##
131
- # We discard flash messages generated by the xhr requests to avoid
132
- # confusing UX.
133
- def discard_flash_if_xhr
134
- flash.discard if request.xhr?
135
- end
128
+ ##
129
+ # When a user logs in, transfer any saved searches or bookmarks to the current_user
130
+ def transfer_guest_user_actions_to_current_user
131
+ return unless respond_to?(:current_user) && respond_to?(:guest_user) && current_user && guest_user
136
132
 
137
- ##
138
- #
139
- #
140
- def has_user_authentication_provider?
141
- respond_to? :current_user
142
- end
133
+ current_user_searches = current_user.searches.pluck(:query_params)
134
+ current_user_bookmarks = current_user.bookmarks.pluck(:document_id)
143
135
 
144
- def require_user_authentication_provider
145
- raise ActionController::RoutingError, 'Not Found' unless has_user_authentication_provider?
136
+ guest_user.searches.reject { |s| current_user_searches.include?(s.query_params) }.each do |s|
137
+ current_user.searches << s
138
+ s.save!
146
139
  end
147
140
 
148
- ##
149
- # When a user logs in, transfer any saved searches or bookmarks to the current_user
150
- def transfer_guest_user_actions_to_current_user
151
- return unless respond_to? :current_user and respond_to? :guest_user and current_user and guest_user
152
- current_user_searches = current_user.searches.pluck(:query_params)
153
- current_user_bookmarks = current_user.bookmarks.pluck(:document_id)
154
-
155
- guest_user.searches.reject { |s| current_user_searches.include?(s.query_params)}.each do |s|
156
- current_user.searches << s
157
- s.save!
158
- end
159
-
160
- guest_user.bookmarks.reject { |b| current_user_bookmarks.include?(b.document_id)}.each do |b|
161
- current_user.bookmarks << b
162
- b.save!
163
- end
164
-
165
- # let guest_user know we've moved some bookmarks from under it
166
- guest_user.reload if guest_user.persisted?
141
+ guest_user.bookmarks.reject { |b| current_user_bookmarks.include?(b.document_id) }.each do |b|
142
+ current_user.bookmarks << b
143
+ b.save!
167
144
  end
168
145
 
169
- ##
170
- # To handle failed authorization attempts, redirect the user to the
171
- # login form and persist the current request uri as a parameter
172
- def access_denied
173
- # send the user home if the access was previously denied by the same
174
- # request to avoid sending the user back to the login page
175
- # (e.g. protected page -> logout -> returned to protected page -> home)
176
- redirect_to root_url and flash.discard and return if request.referer and request.referer.ends_with? request.fullpath
146
+ # let guest_user know we've moved some bookmarks from under it
147
+ guest_user.reload if guest_user.persisted?
148
+ end
149
+
150
+ ##
151
+ # To handle failed authorization attempts, redirect the user to the
152
+ # login form and persist the current request uri as a parameter
153
+ def access_denied
154
+ # send the user home if the access was previously denied by the same
155
+ # request to avoid sending the user back to the login page
156
+ # (e.g. protected page -> logout -> returned to protected page -> home)
157
+ redirect_to(root_url) && flash.discard && return if request.referer && request.referer.ends_with?(request.fullpath)
177
158
 
178
- redirect_to root_url and return unless has_user_authentication_provider?
159
+ redirect_to(root_url) && return unless has_user_authentication_provider?
179
160
 
180
- redirect_to new_user_session_url(:referer => request.fullpath)
181
- end
161
+ redirect_to new_user_session_url(referer: request.fullpath)
162
+ end
163
+
164
+ def determine_layout
165
+ 'blacklight'
166
+ end
182
167
  end
@@ -4,6 +4,9 @@ module Blacklight
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  included do
7
+ Deprecation.warn(self, "Blacklight::DefaultComponentConfiguration is deprecated and will be removed in the next release." \
8
+ "this means you must call add_results_document_tool, add_results_collection_tool, " \
9
+ "add_show_tools_partial and add_nav_action manually in your config")
7
10
  add_results_document_tool(:bookmark, partial: 'bookmark_control', if: :render_bookmarks_control?)
8
11
 
9
12
  add_results_collection_tool(:sort_widget)
@@ -16,14 +19,9 @@ module Blacklight
16
19
  add_show_tools_partial(:citation)
17
20
 
18
21
  add_nav_action(:bookmark, partial: 'blacklight/nav/bookmark', if: :render_bookmarks_control?)
19
- add_nav_action(:saved_searches, partial: 'blacklight/nav/saved_searches', if: :render_saved_searches?)
20
22
  add_nav_action(:search_history, partial: 'blacklight/nav/search_history')
21
23
  end
22
24
 
23
- def render_sms_action?(_config, _options)
24
- sms_mappings.present?
25
- end
26
-
27
25
  module ClassMethods
28
26
  # YARD will include inline disabling as docs, cannot do multiline inside @!macro. AND this must be separate from doc block.
29
27
  # rubocop:disable Metrics/LineLength
@@ -41,55 +39,26 @@ module Blacklight
41
39
  # @option opts [Symbol] :callback method for further processing of documents, receives Array of documents
42
40
  def add_show_tools_partial(name, opts = {})
43
41
  blacklight_config.add_show_tools_partial(name, opts)
44
-
45
- return if method_defined?(name) || opts[:define_method] == false
46
-
47
- # Define a simple action handler for the tool
48
- define_method name do
49
- @response, @documents = action_documents
50
-
51
- if request.post? && opts[:callback] &&
52
- (opts[:validator].blank? || self.send(opts[:validator]))
53
-
54
- self.send(opts[:callback], @documents)
55
-
56
- flash[:success] ||= I18n.t("blacklight.#{name}.success", default: nil)
57
-
58
- respond_to do |format|
59
- format.html do
60
- return render "#{name}_success", layout: false if request.xhr?
61
- redirect_to action_success_redirect_path
62
- end
63
- end
64
- else
65
- respond_to do |format|
66
- format.html do
67
- return render layout: false if request.xhr?
68
- # Otherwise draw the full page
69
- end
70
- end
71
- end
72
- end
42
+ ActionBuilder.new(self, name, opts).build
73
43
  end
74
44
  # rubocop:enable Metrics/LineLength
75
45
 
46
+ deprecation_deprecate add_show_tools_partial: 'use blacklight_config.add_show_tools_partial instead'
47
+
76
48
  # Add a tool to be displayed for each document in the search results.
77
49
  # @!macro partial_if_unless
78
- def add_results_document_tool(name, opts = {})
79
- blacklight_config.add_results_document_tool(name, opts)
80
- end
50
+ delegate :add_results_document_tool, to: :blacklight_config
51
+ deprecation_deprecate add_results_document_tool: 'use blacklight_config.add_results_document_tool instead'
81
52
 
82
53
  # Add a tool to be displayed for the list of search results themselves.
83
54
  # @!macro partial_if_unless
84
- def add_results_collection_tool(name, opts = {})
85
- blacklight_config.add_results_collection_tool(name, opts)
86
- end
55
+ delegate :add_results_collection_tool, to: :blacklight_config
56
+ deprecation_deprecate add_results_collection_tool: 'use blacklight_config.add_results_collection_tool instead'
87
57
 
88
58
  # Add a partial to the header navbar.
89
59
  # @!macro partial_if_unless
90
- def add_nav_action(name, opts = {})
91
- blacklight_config.add_nav_action(name, opts)
92
- end
60
+ delegate :add_nav_action, to: :blacklight_config
61
+ deprecation_deprecate add_nav_action: 'use blacklight_config.add_nav_action instead'
93
62
  end
94
63
  end
95
64
  end
@@ -16,10 +16,13 @@ module Blacklight
16
16
  )
17
17
  end
18
18
 
19
+ # @param fields [Array<String>] a list of facet field names
20
+ # @return [Array<Solr::Response::Facets::FacetField>]
19
21
  def facets_from_request(fields = facet_field_names)
20
22
  fields.map { |field| facet_by_field_name(field) }.compact
21
23
  end
22
24
 
25
+ # @return [Array<String>] a list of the facet field names from the configuration
23
26
  def facet_field_names
24
27
  blacklight_config.facet_fields.values.map(&:field)
25
28
  end
@@ -2,20 +2,22 @@
2
2
  module Blacklight::SearchContext
3
3
  extend ActiveSupport::Concern
4
4
 
5
- # The following code is executed when someone includes blacklight::catalog::search_session in their
5
+ # The following code is executed when someone includes Blacklight::Catalog::SearchSession in their
6
6
  # own controller.
7
- included do
8
- helper_method :current_search_session, :search_session
7
+ included do
8
+ if respond_to? :helper_method
9
+ helper_method :current_search_session, :search_session
10
+ end
9
11
  end
10
12
 
11
13
  module ClassMethods
12
14
  # Save the submitted search parameters in the search session
13
- def record_search_parameters opts = { only: :index}
15
+ def record_search_parameters opts = { only: :index }
14
16
  before_action :set_current_search_session, opts
15
17
  end
16
18
  end
17
19
 
18
- protected
20
+ private
19
21
 
20
22
  # sets up the session[:search] hash if it doesn't already exist
21
23
  def search_session
@@ -72,17 +74,18 @@ module Blacklight::SearchContext
72
74
  def agent_is_crawler?
73
75
  crawler_proc = blacklight_config.crawler_detector
74
76
  return false if crawler_proc.nil? || current_user.present?
77
+
75
78
  crawler_proc.call(request)
76
79
  end
77
80
 
78
81
  def find_or_initialize_search_session_from_params params
79
- params_copy = params.reject { |k,v| blacklisted_search_session_params.include?(k.to_sym) or v.blank? }
82
+ params_copy = params.reject { |k, v| blacklisted_search_session_params.include?(k.to_sym) || v.blank? }
80
83
 
81
- return if params_copy.reject { |k,v| [:action, :controller].include? k.to_sym }.blank?
84
+ return if params_copy.reject { |k, _v| [:action, :controller].include? k.to_sym }.blank?
82
85
 
83
86
  saved_search = searches_from_history.find { |x| x.query_params == params_copy }
84
87
 
85
- saved_search ||= Search.create(query_params: params_copy).tap do |s|
88
+ saved_search || Search.create(query_params: params_copy).tap do |s|
86
89
  add_to_search_history(s)
87
90
  end
88
91
  end
@@ -94,7 +97,7 @@ module Blacklight::SearchContext
94
97
  session[:history].unshift(search.id)
95
98
 
96
99
  if session[:history].length > blacklight_config.search_history_window
97
- session[:history] = session[:history].slice(0, blacklight_config.search_history_window )
100
+ session[:history] = session[:history].slice(0, blacklight_config.search_history_window)
98
101
  end
99
102
  end
100
103
 
@@ -106,16 +109,15 @@ module Blacklight::SearchContext
106
109
  # calls setup_previous_document then setup_next_document.
107
110
  # used in the show action for single view pagination.
108
111
  def setup_next_and_previous_documents
109
- if search_session['counter'] and current_search_session
112
+ if search_session['counter'] && current_search_session
110
113
  index = search_session['counter'].to_i - 1
111
- response, documents = get_previous_and_next_documents_for_search index, search_state.reset(current_search_session.query_params).to_hash
114
+ response, documents = search_service.previous_and_next_documents_for_search index, search_state.reset(current_search_session.query_params).to_hash
112
115
 
113
116
  search_session['total'] = response.total
114
- @search_context_response = response
115
- @previous_document = documents.first
116
- @next_document = documents.last
117
+ { prev: documents.first, next: documents.last }
117
118
  end
118
119
  rescue Blacklight::Exceptions::InvalidRequest => e
119
120
  logger.warn "Unable to setup next and previous documents: #{e}"
121
+ nil
120
122
  end
121
123
  end
@@ -7,7 +7,7 @@
7
7
  #
8
8
  # = Search Field blacklight_configuration Hash =
9
9
  # [:key]
10
- # "title", required, unique key used in search URLs to specify search_field
10
+ # "title", required, unique key used in search URLs to specify search_field
11
11
  # [:label]
12
12
  # "Title", # user-displayable label, optional, if not supplied :key.titlecase will be used
13
13
  # [:qt]
@@ -18,30 +18,20 @@
18
18
  # { :qf => "$something" } # optional hash of additional parameters that will be passed using Solr LocalParams syntax, that can use dollar sign to reference other solr variables.
19
19
  # [:include_in_simple_select]
20
20
  # false. Defaults to true, but you can set to false to have a search field defined for deep-links or BL extensions, but not actually included in the HTML select for simple search choice.
21
- #
21
+ #
22
22
  # Optionally you can supply a :key, which is what Blacklight will use
23
23
  # to identify this search field in HTTP query params. If no :key is
24
24
  # supplied, one will be computed from the :label. If that will
25
- # result in a collision of keys, you should supply one explicitly.
25
+ # result in a collision of keys, you should supply one explicitly.
26
26
  #
27
27
  ##
28
28
  module Blacklight::SearchFields
29
- extend Deprecation
30
- self.deprecation_horizon = 'blacklight 7.x'
31
-
32
29
  # Looks up search field config list from blacklight_config[:search_fields], and
33
- # 'normalizes' all field config hashes using normalize_config method.
30
+ # 'normalizes' all field config hashes using normalize_config method.
34
31
  def search_field_list
35
32
  blacklight_config.search_fields.values
36
33
  end
37
34
 
38
- # Looks up a search field blacklight_config hash from search_field_list having
39
- # a certain supplied :key.
40
- def search_field_def_for_key(key)
41
- blacklight_config.search_fields[key]
42
- end
43
- deprecation_deprecate search_field_def_for_key: "Use blacklight_config.search_fields[key]"
44
-
45
35
  # Returns default search field, used for simpler display in history, etc.
46
36
  # if not set in blacklight_config, defaults to first field listed in #search_field_list
47
37
  def default_search_field
@@ -21,12 +21,7 @@ module Blacklight
21
21
  flash[:error] = I18n.t('blacklight.search_history.clear.failure')
22
22
  end
23
23
 
24
- if respond_to? :redirect_back
25
- redirect_back fallback_location: blacklight.search_history_path
26
- else
27
- # Deprecated in Rails 5.0
28
- redirect_to :back
29
- end
24
+ redirect_back fallback_location: blacklight.search_history_path
30
25
  end
31
26
  end
32
27
  end
@@ -3,14 +3,16 @@ module Blacklight::TokenBasedUser
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  included do
6
- helper_method :encrypt_user_id
6
+ if respond_to? :helper_method
7
+ helper_method :encrypt_user_id
8
+ end
7
9
 
8
10
  rescue_from Blacklight::Exceptions::ExpiredSessionToken do
9
11
  head :unauthorized
10
12
  end
11
13
  end
12
14
 
13
- protected
15
+ private
14
16
 
15
17
  def token_or_current_or_guest_user
16
18
  token_user || current_or_guest_user
@@ -18,9 +20,9 @@ module Blacklight::TokenBasedUser
18
20
 
19
21
  def token_user
20
22
  @token_user ||= if params[:encrypted_user_id]
21
- user_id = decrypt_user_id params[:encrypted_user_id]
22
- User.find(user_id)
23
- end
23
+ user_id = decrypt_user_id params[:encrypted_user_id]
24
+ User.find(user_id)
25
+ end
24
26
  end
25
27
 
26
28
  # Used for #export action, with encrypted user_id.
@@ -42,21 +44,34 @@ module Blacklight::TokenBasedUser
42
44
  end
43
45
 
44
46
  def export_secret_token
45
- ActiveSupport::KeyGenerator.new(Rails.application.secrets.secret_key_base).generate_key('encrypted user session key')[0..(key_len - 1)]
47
+ secret_key_generator.generate_key('encrypted user session key')[0..(key_len - 1)]
48
+ end
49
+
50
+ def secret_key_generator
51
+ @secret_key_generator ||= begin
52
+ app = Rails.application
53
+
54
+ secret_key_base = if app.respond_to?(:credentials)
55
+ # Rails 5.2+
56
+ app.credentials.secret_key_base
57
+ else
58
+ # Rails <= 5.1
59
+ app.secrets.secret_key_base
60
+ end
61
+ ActiveSupport::KeyGenerator.new(secret_key_base)
62
+ end
46
63
  end
47
64
 
48
65
  def message_encryptor
49
66
  ActiveSupport::MessageEncryptor.new(export_secret_token)
50
67
  end
51
68
 
52
- private
53
-
54
69
  # Ruby 2.4 requires keys of very particular lengths
55
70
  def key_len
56
71
  if ActiveSupport::MessageEncryptor.respond_to? :key_len
57
72
  ActiveSupport::MessageEncryptor.key_len
58
73
  else
59
- 0
74
+ 0
60
75
  end
61
76
  end
62
77
  end