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,267 +3,323 @@ module Blacklight::Catalog
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  include Blacklight::Base
6
- include Blacklight::DefaultComponentConfiguration
7
6
  include Blacklight::Facet
8
7
 
9
8
  # The following code is executed when someone includes blacklight::catalog in their
10
9
  # own controller.
11
10
  included do
12
- helper_method :sms_mappings, :has_search_parameters?
11
+ if respond_to? :helper_method
12
+ helper_method :sms_mappings, :has_search_parameters?, :facet_limit_for
13
+ end
13
14
 
14
- helper Blacklight::Facet
15
+ helper Blacklight::Facet if respond_to? :helper
15
16
 
16
- # When an action raises Blacklight::Exceptions::RecordNotFound, handle
17
- # the exception appropriately.
18
- rescue_from Blacklight::Exceptions::RecordNotFound, with: :invalid_document_id_error
17
+ # The index action will more than likely throw this one.
18
+ # Example: when the standard query parser is used, and a user submits a "bad" query.
19
+ rescue_from Blacklight::Exceptions::InvalidRequest, with: :handle_request_error
19
20
 
20
21
  record_search_parameters
21
22
  end
22
23
 
23
- # get search results from the solr index
24
- def index
25
- (@response, @document_list) = search_results(params)
26
-
27
- respond_to do |format|
28
- format.html { store_preferred_view }
29
- format.rss { render :layout => false }
30
- format.atom { render :layout => false }
31
- format.json do
32
- @presenter = Blacklight::JsonPresenter.new(@response,
33
- @document_list,
34
- facets_from_request,
35
- blacklight_config)
36
- end
37
- additional_response_formats(format)
38
- document_export_formats(format)
39
- end
40
- end
24
+ # get search results from the solr index
25
+ def index
26
+ (@response, deprecated_document_list) = search_service.search_results
27
+
28
+ @document_list = ActiveSupport::Deprecation::DeprecatedObjectProxy.new(deprecated_document_list, 'The @document_list instance variable is deprecated; use @response.documents instead.')
41
29
 
42
- # get a single document from the index
43
- # to add responses for formats other than html or json see _Blacklight::Document::Export_
44
- def show
45
- @response, @document = fetch params[:id]
46
- respond_to do |format|
47
- format.html { setup_next_and_previous_documents }
48
- format.json { render json: { response: { document: @document } } }
49
- additional_export_formats(@document, format)
30
+ respond_to do |format|
31
+ format.html { store_preferred_view }
32
+ format.rss { render layout: false }
33
+ format.atom { render layout: false }
34
+ format.json do
35
+ @presenter = Blacklight::JsonPresenter.new(@response,
36
+ blacklight_config)
50
37
  end
38
+ additional_response_formats(format)
39
+ document_export_formats(format)
51
40
  end
41
+ end
52
42
 
53
- # updates the search counter (allows the show view to paginate)
54
- def track
55
- search_session['counter'] = params[:counter]
56
- search_session['id'] = params[:search_id]
57
- search_session['per_page'] = params[:per_page]
43
+ # get a single document from the index
44
+ # to add responses for formats other than html or json see _Blacklight::Document::Export_
45
+ def show
46
+ deprecated_response, @document = search_service.fetch(params[:id])
47
+ @response = ActiveSupport::Deprecation::DeprecatedObjectProxy.new(deprecated_response, 'The @response instance variable is deprecated; use @document.response instead.')
58
48
 
59
- if params[:redirect] and (params[:redirect].starts_with?('/') or params[:redirect] =~ URI.regexp)
60
- path = URI.parse(params[:redirect]).path
61
- redirect_to path, status: 303
62
- else
63
- redirect_to blacklight_config.document_model.new(id: params[:id]), status: 303
64
- end
49
+ respond_to do |format|
50
+ format.html { @search_context = setup_next_and_previous_documents }
51
+ format.json
52
+ additional_export_formats(@document, format)
65
53
  end
54
+ end
66
55
 
67
- # displays values and pagination links for a single facet field
68
- def facet
69
- @facet = blacklight_config.facet_fields[params[:id]]
70
- raise ActionController::RoutingError, 'Not Found' unless @facet
71
- @response = get_facet_field_response(@facet.key, params)
72
- @display_facet = @response.aggregations[@facet.field]
73
- @pagination = facet_paginator(@facet, @display_facet)
74
- respond_to do |format|
75
- format.html do
76
- # Draw the partial for the "more" facet modal window:
77
- return render layout: false if request.xhr?
78
- # Otherwise draw the facet selector for users who have javascript disabled.
79
- end
80
- format.json
81
- end
82
- end
56
+ # get a single document from the index
57
+ def raw
58
+ raise(ActionController::RoutingError, 'Not Found') unless blacklight_config.raw_endpoint.enabled
83
59
 
84
- # method to serve up XML OpenSearch description and JSON autocomplete response
85
- def opensearch
86
- respond_to do |format|
87
- format.xml { render layout: false }
88
- format.json { render json: get_opensearch_response }
89
- end
60
+ _, @document = search_service.fetch(params[:id])
61
+ render json: @document
62
+ end
63
+
64
+ # updates the search counter (allows the show view to paginate)
65
+ def track
66
+ search_session['counter'] = params[:counter]
67
+ search_session['id'] = params[:search_id]
68
+ search_session['per_page'] = params[:per_page]
69
+
70
+ if params[:redirect] && (params[:redirect].starts_with?('/') || params[:redirect] =~ URI::DEFAULT_PARSER.make_regexp)
71
+ uri = URI.parse(params[:redirect])
72
+ path = uri.query ? "#{uri.path}?#{uri.query}" : uri.path
73
+ redirect_to path, status: 303
74
+ else
75
+ redirect_to({ action: :show, id: params[:id] }, status: 303)
90
76
  end
77
+ end
91
78
 
92
- def action_documents
93
- fetch(Array(params[:id]))
79
+ # displays values and pagination links for a single facet field
80
+ def facet
81
+ @facet = blacklight_config.facet_fields[params[:id]]
82
+ raise ActionController::RoutingError, 'Not Found' unless @facet
83
+
84
+ @response = search_service.facet_field_response(@facet.key)
85
+ @display_facet = @response.aggregations[@facet.field]
86
+ @pagination = facet_paginator(@facet, @display_facet)
87
+ respond_to do |format|
88
+ format.html do
89
+ # Draw the partial for the "more" facet modal window:
90
+ return render layout: false if request.xhr?
91
+ # Otherwise draw the facet selector for users who have javascript disabled.
92
+ end
93
+ format.json
94
94
  end
95
+ end
95
96
 
96
- def action_success_redirect_path
97
- search_state.url_for_document(blacklight_config.document_model.new(id: params[:id]))
97
+ # method to serve up XML OpenSearch description and JSON autocomplete response
98
+ def opensearch
99
+ respond_to do |format|
100
+ format.xml { render layout: false }
101
+ format.json { render json: search_service.opensearch_response }
98
102
  end
103
+ end
99
104
 
100
- ##
101
- # Check if any search parameters have been set
102
- # @return [Boolean]
103
- def has_search_parameters?
104
- !params[:q].blank? or !params[:f].blank? or !params[:search_field].blank?
105
+ def suggest
106
+ respond_to do |format|
107
+ format.json do
108
+ render json: suggestions_service.suggestions
109
+ end
105
110
  end
111
+ end
106
112
 
107
- protected
113
+ # @return [Array] first value is a Blacklight::Solr::Response and the second
114
+ # is a list of documents
115
+ def action_documents
116
+ search_service.fetch(Array(params[:id]))
117
+ end
108
118
 
109
- #
110
- # non-routable methods ->
111
- #
119
+ def action_success_redirect_path
120
+ search_state.url_for_document(blacklight_config.document_model.new(id: params[:id]))
121
+ end
112
122
 
113
- ##
114
- # If the params specify a view, then store it in the session. If the params
115
- # do not specifiy the view, set the view parameter to the value stored in the
116
- # session. This enables a user with a session to do subsequent searches and have
117
- # them default to the last used view.
118
- def store_preferred_view
119
- session[:preferred_view] = params[:view] if params[:view]
120
- end
123
+ ##
124
+ # Check if any search parameters have been set
125
+ # @return [Boolean]
126
+ def has_search_parameters?
127
+ !params[:q].blank? || !params[:f].blank? || !params[:search_field].blank?
128
+ end
121
129
 
122
- ##
123
- # Render additional response formats for the index action, as provided by the
124
- # blacklight configuration
125
- # @param [Hash] format
126
- # @note Make sure your format has a well known mime-type or is registered in config/initializers/mime_types.rb
127
- # @example
128
- # config.index.respond_to.txt = Proc.new { render plain: "A list of docs." }
129
- def additional_response_formats format
130
- blacklight_config.index.respond_to.each do |key, config|
131
- format.send key do
132
- case config
133
- when false
134
- raise ActionController::RoutingError, 'Not Found'
135
- when Hash
136
- render config
137
- when Proc
138
- instance_exec(&config)
139
- when Symbol, String
140
- send config
141
- else
142
- render({})
143
- end
144
- end
130
+ DEFAULT_FACET_LIMIT = 10
131
+
132
+ # Look up facet limit for given facet_field. Will look at config, and
133
+ # if config is 'true' will look up from Solr @response if available. If
134
+ # no limit is available, returns nil. Used from #add_facetting_to_solr
135
+ # to supply f.fieldname.facet.limit values in solr request (no @response
136
+ # available), and used in display (with @response available) to create
137
+ # a facet paginator with the right limit.
138
+ def facet_limit_for(facet_field)
139
+ facet = blacklight_config.facet_fields[facet_field]
140
+ return if facet.blank?
141
+
142
+ if facet.limit && @response && @response.aggregations[facet.field]
143
+ limit = @response.aggregations[facet.field].limit
144
+
145
+ if limit.nil? # we didn't get or a set a limit, so infer one.
146
+ facet.limit if facet.limit != true
147
+ elsif limit == -1 # limit -1 is solr-speak for unlimited
148
+ nil
149
+ else
150
+ limit.to_i - 1 # we added 1 to find out if we needed to paginate
145
151
  end
152
+ elsif facet.limit
153
+ facet.limit == true ? DEFAULT_FACET_LIMIT : facet.limit
146
154
  end
155
+ end
147
156
 
148
- ##
149
- # Render additional export formats for the show action, as provided by
150
- # the document extension framework. See _Blacklight::Document::Export_
151
- def additional_export_formats(document, format)
152
- document.export_formats.each_key do | format_name |
153
- format.send(format_name.to_sym) { render body: document.export_as(format_name), layout: false }
154
- end
155
- end
157
+ private
158
+
159
+ #
160
+ # non-routable methods ->
161
+ #
162
+
163
+ def render_sms_action?(_config, _options)
164
+ sms_mappings.present?
165
+ end
166
+
167
+ def search_service
168
+ search_service_class.new(config: blacklight_config, user_params: search_state.to_h)
169
+ end
156
170
 
157
- ##
158
- # Try to render a response from the document export formats available
159
- def document_export_formats format
160
- format.any do
161
- format_name = params.fetch(:format, '').to_sym
162
- if @response.export_formats.include? format_name
163
- render_document_export_format format_name
171
+ ##
172
+ # If the params specify a view, then store it in the session. If the params
173
+ # do not specifiy the view, set the view parameter to the value stored in the
174
+ # session. This enables a user with a session to do subsequent searches and have
175
+ # them default to the last used view.
176
+ def store_preferred_view
177
+ session[:preferred_view] = params[:view] if params[:view]
178
+ end
179
+
180
+ ##
181
+ # Render additional response formats for the index action, as provided by the
182
+ # blacklight configuration
183
+ # @param [Hash] format
184
+ # @note Make sure your format has a well known mime-type or is registered in config/initializers/mime_types.rb
185
+ # @example
186
+ # config.index.respond_to.txt = Proc.new { render plain: "A list of docs." }
187
+ def additional_response_formats format
188
+ blacklight_config.index.respond_to.each do |key, config|
189
+ format.send key do
190
+ case config
191
+ when false
192
+ raise ActionController::RoutingError, 'Not Found'
193
+ when Hash
194
+ render config
195
+ when Proc
196
+ instance_exec(&config)
197
+ when Symbol, String
198
+ send config
164
199
  else
165
- raise ActionController::UnknownFormat
200
+ render({})
166
201
  end
167
202
  end
168
203
  end
204
+ end
169
205
 
170
- ##
171
- # Render the document export formats for a response
172
- # First, try to render an appropriate template (e.g. index.endnote.erb)
173
- # If that fails, just concatenate the document export responses with a newline.
174
- def render_document_export_format format_name
175
- render
176
- rescue ActionView::MissingTemplate
177
- render plain: @response.documents.map { |x| x.export_as(format_name) if x.exports_as? format_name }.compact.join("\n"), layout: false
206
+ ##
207
+ # Render additional export formats for the show action, as provided by
208
+ # the document extension framework. See _Blacklight::Document::Export_
209
+ def additional_export_formats(document, format)
210
+ document.export_formats.each_key do |format_name|
211
+ format.send(format_name.to_sym) { render body: document.export_as(format_name), layout: false }
178
212
  end
213
+ end
179
214
 
180
- # Overrides the Blacklight::Controller provided #search_action_url.
181
- # By default, any search action from a Blacklight::Catalog controller
182
- # should use the current controller when constructing the route.
183
- def search_action_url options = {}
184
- url_for(options.reverse_merge(action: 'index'))
215
+ ##
216
+ # Try to render a response from the document export formats available
217
+ def document_export_formats format
218
+ format.any do
219
+ format_name = params.fetch(:format, '').to_sym
220
+ if @response.export_formats.include? format_name
221
+ render_document_export_format format_name
222
+ else
223
+ raise ActionController::UnknownFormat
224
+ end
185
225
  end
226
+ end
186
227
 
187
- # Email Action (this will render the appropriate view on GET requests and process the form and send the email on POST requests)
188
- def email_action documents
189
- mail = RecordMailer.email_record(documents, {:to => params[:to], :message => params[:message]}, url_options)
190
- if mail.respond_to? :deliver_now
191
- mail.deliver_now
192
- else
193
- mail.deliver
194
- end
195
- end
196
-
197
- # SMS action (this will render the appropriate view on GET requests and process the form and send the email on POST requests)
198
- def sms_action documents
199
- to = "#{params[:to].gsub(/[^\d]/, '')}@#{params[:carrier]}"
200
- mail = RecordMailer.sms_record(documents, { :to => to }, url_options)
201
- if mail.respond_to? :deliver_now
202
- mail.deliver_now
203
- else
204
- mail.deliver
205
- end
206
- end
207
-
208
- def validate_sms_params
209
- if params[:to].blank?
210
- flash[:error] = I18n.t('blacklight.sms.errors.to.blank')
211
- elsif params[:carrier].blank?
212
- flash[:error] = I18n.t('blacklight.sms.errors.carrier.blank')
213
- elsif params[:to].gsub(/[^\d]/, '').length != 10
214
- flash[:error] = I18n.t('blacklight.sms.errors.to.invalid', :to => params[:to])
215
- elsif !sms_mappings.values.include?(params[:carrier])
216
- flash[:error] = I18n.t('blacklight.sms.errors.carrier.invalid')
217
- end
228
+ ##
229
+ # Render the document export formats for a response
230
+ # First, try to render an appropriate template (e.g. index.endnote.erb)
231
+ # If that fails, just concatenate the document export responses with a newline.
232
+ def render_document_export_format format_name
233
+ render
234
+ rescue ActionView::MissingTemplate
235
+ render plain: @response.documents.map { |x| x.export_as(format_name) if x.exports_as? format_name }.compact.join("\n"), layout: false
236
+ end
218
237
 
219
- flash[:error].blank?
220
- end
238
+ # Overrides the Blacklight::Controller provided #search_action_url.
239
+ # By default, any search action from a Blacklight::Catalog controller
240
+ # should use the current controller when constructing the route.
241
+ def search_action_url options = {}
242
+ url_for(options.reverse_merge(action: 'index'))
243
+ end
221
244
 
222
- def sms_mappings
223
- Blacklight::Engine.config.sms_mappings
245
+ # Email Action (this will render the appropriate view on GET requests and process the form and send the email on POST requests)
246
+ def email_action documents
247
+ mail = RecordMailer.email_record(documents, { to: params[:to], message: params[:message] }, url_options)
248
+ if mail.respond_to? :deliver_now
249
+ mail.deliver_now
250
+ else
251
+ mail.deliver
224
252
  end
253
+ end
225
254
 
226
- def validate_email_params
227
- if params[:to].blank?
228
- flash[:error] = I18n.t('blacklight.email.errors.to.blank')
229
- elsif !params[:to].match(Blacklight::Engine.config.email_regexp)
230
- flash[:error] = I18n.t('blacklight.email.errors.to.invalid', :to => params[:to])
231
- end
255
+ # SMS action (this will render the appropriate view on GET requests and process the form and send the email on POST requests)
256
+ def sms_action documents
257
+ to = "#{params[:to].gsub(/[^\d]/, '')}@#{params[:carrier]}"
258
+ mail = RecordMailer.sms_record(documents, { to: to }, url_options)
259
+ if mail.respond_to? :deliver_now
260
+ mail.deliver_now
261
+ else
262
+ mail.deliver
263
+ end
264
+ end
232
265
 
233
- flash[:error].blank?
266
+ def validate_sms_params
267
+ if params[:to].blank?
268
+ flash[:error] = I18n.t('blacklight.sms.errors.to.blank')
269
+ elsif params[:carrier].blank?
270
+ flash[:error] = I18n.t('blacklight.sms.errors.carrier.blank')
271
+ elsif params[:to].gsub(/[^\d]/, '').length != 10
272
+ flash[:error] = I18n.t('blacklight.sms.errors.to.invalid', to: params[:to])
273
+ elsif !sms_mappings.value?(params[:carrier])
274
+ flash[:error] = I18n.t('blacklight.sms.errors.carrier.invalid')
234
275
  end
235
276
 
236
- ##
237
- # when a request for /catalog/BAD_SOLR_ID is made, this method is executed.
238
- # Just returns a 404 response, but you can override locally in your own
239
- # CatalogController to do something else -- older BL displayed a Catalog#inde
240
- # page with a flash message and a 404 status.
241
- def invalid_document_id_error(exception)
242
- raise exception unless Pathname.new("#{Rails.root}/public/404.html").exist?
243
-
244
- error_info = {
245
- "status" => "404",
246
- "error" => "#{exception.class}: #{exception.message}"
247
- }
248
-
249
- respond_to do |format|
250
- format.xml { render :xml => error_info, :status => 404 }
251
- format.json { render :json => error_info, :status => 404 }
252
-
253
- # default to HTML response, even for other non-HTML formats we don't
254
- # neccesarily know about, seems to be consistent with what Rails4 does
255
- # by default with uncaught ActiveRecord::RecordNotFound in production
256
- format.any do
257
- # use standard, possibly locally overridden, 404.html file. Even for
258
- # possibly non-html formats, this is consistent with what Rails does
259
- # on raising an ActiveRecord::RecordNotFound. Rails.root IS needed
260
- # for it to work under testing, without worrying about CWD.
261
- render :file => "#{Rails.root}/public/404.html", :status => 404, :layout => false, :content_type => 'text/html'
262
- end
263
- end
277
+ flash[:error].blank?
278
+ end
279
+
280
+ def sms_mappings
281
+ Blacklight::Engine.config.sms_mappings
282
+ end
283
+
284
+ def validate_email_params
285
+ if params[:to].blank?
286
+ flash[:error] = I18n.t('blacklight.email.errors.to.blank')
287
+ elsif !params[:to].match(Blacklight::Engine.config.email_regexp)
288
+ flash[:error] = I18n.t('blacklight.email.errors.to.invalid', to: params[:to])
264
289
  end
265
290
 
266
- def start_new_search_session?
267
- action_name == "index"
291
+ flash[:error].blank?
292
+ end
293
+
294
+ def start_new_search_session?
295
+ action_name == "index"
296
+ end
297
+
298
+ def suggestions_service
299
+ Blacklight::SuggestSearch.new(params, search_service.repository).suggestions
300
+ end
301
+
302
+ def determine_layout
303
+ action_name == 'show' ? 'catalog_result' : super
304
+ end
305
+
306
+ # when a method throws a Blacklight::Exceptions::InvalidRequest, this method is executed.
307
+ def handle_request_error(exception)
308
+ # Rails own code will catch and give usual Rails error page with stack trace
309
+ raise exception if Rails.env.development? || Rails.env.test?
310
+
311
+ flash_notice = I18n.t('blacklight.search.errors.request_error')
312
+
313
+ # If there are errors coming from the index page, we want to trap those sensibly
314
+
315
+ if flash[:notice] == flash_notice
316
+ logger.error "Cowardly aborting rsolr_request_error exception handling, because we redirected to a page that raises another exception"
317
+ raise exception
268
318
  end
319
+
320
+ logger.error exception
321
+
322
+ flash[:notice] = flash_notice
323
+ redirect_to search_action_url
324
+ end
269
325
  end