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
@@ -5,34 +5,27 @@ module Blacklight
5
5
  # query parameters appropriate for search index. It does so by evaluating a
6
6
  # chain of processing methods to populate a result hash (see {#to_hash}).
7
7
  class SearchBuilder
8
- extend Deprecation
9
8
  class_attribute :default_processor_chain
10
9
  self.default_processor_chain = []
11
10
 
12
11
  attr_reader :processor_chain, :blacklight_params
13
12
 
14
-
15
13
  # @overload initialize(scope)
16
- # @param [Object] scope scope the scope where the filter methods reside in.
14
+ # @param [Object] scope scope the scope where the filter methods reside in.
17
15
  # @overload initialize(processor_chain, scope)
18
16
  # @param [List<Symbol>,TrueClass] processor_chain options a list of filter methods to run or true, to use the default methods
19
- # @param [Object] scope scope the scope where the filter methods reside in.
17
+ # @param [Object] scope the scope where the filter methods reside in.
20
18
  def initialize(*options)
21
- @scope = case options.size
19
+ case options.size
22
20
  when 1
23
- options.first
21
+ @processor_chain = default_processor_chain.dup
22
+ @scope = options.first
24
23
  when 2
25
- if options.first == true
26
- Deprecation.warn Blacklight::SearchBuilder, "SearchBuilder#initialize now takes only one parameter, the scope. Passing `true' will be removed in Blacklight 7"
27
- else
28
- @processor_chain = options.first
29
- end
30
- options.last
24
+ @processor_chain, @scope = options
31
25
  else
32
26
  raise ArgumentError, "wrong number of arguments. (#{options.size} for 1..2)"
33
27
  end
34
28
 
35
- @processor_chain ||= default_processor_chain.dup
36
29
  @blacklight_params = {}
37
30
  @merged_params = {}
38
31
  @reverse_merged_params = {}
@@ -116,10 +109,11 @@ module Blacklight
116
109
  # @return [Blacklight::Solr::Response] the solr response object
117
110
  def to_hash
118
111
  return @params unless params_need_update?
119
- @params = processed_parameters.
120
- reverse_merge(@reverse_merged_params).
121
- merge(@merged_params).
122
- tap { self.clear_changes }
112
+
113
+ @params = processed_parameters
114
+ .reverse_merge(@reverse_merged_params)
115
+ .merge(@merged_params)
116
+ .tap { clear_changes }
123
117
  end
124
118
 
125
119
  alias_method :query, :to_hash
@@ -197,7 +191,7 @@ module Blacklight
197
191
  end
198
192
  @rows ||= begin
199
193
  # user-provided parameters should override any default row
200
- r = [:rows, :per_page].map {|k| blacklight_params[k] }.reject(&:blank?).first
194
+ r = [:rows, :per_page].map { |k| blacklight_params[k] }.reject(&:blank?).first
201
195
  r ||= blacklight_config.default_per_page
202
196
  # ensure we don't excede the max page size
203
197
  r.nil? ? nil : [r, blacklight_config.max_per_page].map(&:to_i).min
@@ -221,36 +215,35 @@ module Blacklight
221
215
  @facet
222
216
  end
223
217
 
218
+ # Decode the user provided 'sort' parameter into a sort string that can be
219
+ # passed to the search. This sanitizes the input by ensuring only
220
+ # configured search values are passed through to the search.
221
+ # @return [String] the field/fields to sort by
224
222
  def sort
225
223
  sort_field = if blacklight_params[:sort].blank?
226
- # no sort param provided, use default
227
- blacklight_config.default_sort_field
228
- else
229
- # check for sort field key
230
- blacklight_config.sort_fields[blacklight_params[:sort]]
231
- end
232
-
233
- field = if sort_field.present?
234
- sort_field.sort
235
- else
236
- # just pass the key through
237
- blacklight_params[:sort]
238
- end
239
-
240
- field unless field.blank?
224
+ # no sort param provided, use default
225
+ blacklight_config.default_sort_field
226
+ else
227
+ # check for sort field key
228
+ blacklight_config.sort_fields[blacklight_params[:sort]]
229
+ end
230
+ return sort_field.sort if sort_field.present?
231
+
232
+ Blacklight.logger.warn "Invalid sort field: '#{blacklight_params[:sort]}' was provided."
233
+ nil
241
234
  end
242
235
 
243
236
  def search_field
244
237
  blacklight_config.search_fields[blacklight_params[:search_field]]
245
238
  end
246
239
 
247
- protected
240
+ private
248
241
 
249
242
  def request
250
243
  Blacklight::Solr::Request.new
251
244
  end
252
245
 
253
- def should_add_field_to_request? field_name, field
246
+ def should_add_field_to_request? _field_name, field
254
247
  field.include_in_request || (field.include_in_request.nil? && blacklight_config.add_field_configuration_to_solr_request)
255
248
  end
256
249
 
@@ -46,9 +46,9 @@ module Blacklight
46
46
  # to provide more interesting routing to
47
47
  # documents
48
48
  def url_for_document(doc, options = {})
49
- if respond_to?(:blacklight_config) and
50
- blacklight_config.show.route and
51
- (!doc.respond_to?(:to_model) or doc.to_model.is_a? SolrDocument)
49
+ if respond_to?(:blacklight_config) &&
50
+ blacklight_config.show.route &&
51
+ (!doc.respond_to?(:to_model) || doc.to_model.is_a?(SolrDocument))
52
52
  route = blacklight_config.show.route.merge(action: :show, id: doc).merge(options)
53
53
  route[:controller] = params[:controller] if route[:controller] == :current
54
54
  route
@@ -66,7 +66,7 @@ module Blacklight
66
66
 
67
67
  add_facet_param(p, field, item)
68
68
 
69
- if item and item.respond_to?(:fq) and item.fq
69
+ if item && item.respond_to?(:fq) && item.fq
70
70
  Array(item.fq).each do |f, v|
71
71
  add_facet_param(p, f, v)
72
72
  end
@@ -97,6 +97,8 @@ module Blacklight
97
97
  # removes the field value from params[:f]
98
98
  # removes the field if there are no more values in params[:f][field]
99
99
  # removes additional params (page, id, etc..)
100
+ # @param [String] field
101
+ # @param [String] item
100
102
  def remove_facet_params(field, item)
101
103
  if item.respond_to? :field
102
104
  field = item.field
@@ -132,7 +134,7 @@ module Blacklight
132
134
  # @param [Hash] params_to_merge to merge into above
133
135
  # @return [ActionController::Parameters] the current search parameters after being sanitized by Blacklight::Parameters.sanitize
134
136
  # @yield [params] The merged parameters hash before being sanitized
135
- def params_for_search(params_to_merge={}, &block)
137
+ def params_for_search(params_to_merge = {})
136
138
  # params hash we'll return
137
139
  my_params = params.dup.merge(self.class.new(params_to_merge, blacklight_config, controller))
138
140
 
@@ -140,7 +142,7 @@ module Blacklight
140
142
  yield my_params
141
143
  end
142
144
 
143
- if my_params[:page] and (my_params[:per_page] != params[:per_page] or my_params[:sort] != params[:sort] )
145
+ if my_params[:page] && (my_params[:per_page] != params[:per_page] || my_params[:sort] != params[:sort])
144
146
  my_params[:page] = 1
145
147
  end
146
148
 
@@ -165,7 +167,7 @@ module Blacklight
165
167
  item
166
168
  end
167
169
  end
168
-
170
+
169
171
  def add_facet_param(p, field, item)
170
172
  if item.respond_to? :field
171
173
  field = item.field
@@ -180,7 +182,7 @@ module Blacklight
180
182
  p[:f] = (p[:f] || {}).dup # the command above is not deep in rails3, !@#$!@#$
181
183
  p[:f][url_field] = (p[:f][url_field] || []).dup
182
184
 
183
- if facet_config.single and p[:f][url_field].present?
185
+ if facet_config.single && p[:f][url_field].present?
184
186
  p[:f][url_field] = []
185
187
  end
186
188
 
@@ -12,6 +12,7 @@ module Blacklight::Solr
12
12
 
13
13
  solr_response = send_and_receive blacklight_config.document_solr_path || blacklight_config.solr_path, doc_params
14
14
  raise Blacklight::Exceptions::RecordNotFound if solr_response.documents.empty?
15
+
15
16
  solr_response
16
17
  end
17
18
 
@@ -22,8 +23,31 @@ module Blacklight::Solr
22
23
  send_and_receive blacklight_config.solr_path, params.reverse_merge(qt: blacklight_config.qt)
23
24
  end
24
25
 
26
+ # @param [Hash] params
27
+ # @return [Blacklight::Suggest::Response]
28
+ def suggestions(request_params)
29
+ suggest_results = connection.send_and_receive(suggest_handler_path, params: request_params)
30
+ Blacklight::Suggest::Response.new suggest_results, request_params, suggest_handler_path, suggester_name
31
+ end
32
+
33
+ ##
34
+ # Gets a list of available fields
35
+ # @return [Hash]
36
+ def reflect_fields
37
+ send_and_receive('admin/luke', params: { fl: '*', 'json.nl' => 'map' })['fields']
38
+ end
39
+
40
+ ##
41
+ # @return [boolean] true if the repository is reachable
42
+ def ping
43
+ response = connection.send_and_receive 'admin/ping', {}
44
+ Blacklight.logger.info("Ping [#{connection.uri}] returned: '#{response['status']}'")
45
+ response['status'] == "OK"
46
+ end
47
+
25
48
  ##
26
49
  # Execute a solr query
50
+ # TODO: Make this private after we have a way to abstract admin/luke and ping
27
51
  # @see [RSolr::Client#send_and_receive]
28
52
  # @overload find(solr_path, params)
29
53
  # Execute a solr query at the given path with the parameters
@@ -35,12 +59,12 @@ module Blacklight::Solr
35
59
  def send_and_receive(path, solr_params = {})
36
60
  benchmark("Solr fetch", level: :debug) do
37
61
  key = blacklight_config.http_method == :post ? :data : :params
38
- res = connection.send_and_receive(path, {key=>solr_params.to_hash, method: blacklight_config.http_method})
62
+ res = connection.send_and_receive(path, { key => solr_params.to_hash, method: blacklight_config.http_method })
39
63
 
40
64
  solr_response = blacklight_config.response_model.new(res, solr_params, document_model: blacklight_config.document_model, blacklight_config: blacklight_config)
41
65
 
42
66
  Blacklight.logger.debug("Solr query: #{blacklight_config.http_method} #{path} #{solr_params.to_hash.inspect}")
43
- Blacklight.logger.debug("Solr response: #{solr_response.inspect}") if defined?(::BLACKLIGHT_VERBOSE_LOGGING) and ::BLACKLIGHT_VERBOSE_LOGGING
67
+ Blacklight.logger.debug("Solr response: #{solr_response.inspect}") if defined?(::BLACKLIGHT_VERBOSE_LOGGING) && ::BLACKLIGHT_VERBOSE_LOGGING
44
68
  solr_response
45
69
  end
46
70
  rescue Errno::ECONNREFUSED => e
@@ -49,10 +73,20 @@ module Blacklight::Solr
49
73
  raise Blacklight::Exceptions::InvalidRequest, e.message
50
74
  end
51
75
 
52
- protected
76
+ private
53
77
 
54
- def build_connection
55
- RSolr.connect(connection_config.merge(adapter: connection_config[:http_adapter]))
56
- end
78
+ ##
79
+ # @return [String]
80
+ def suggest_handler_path
81
+ blacklight_config.autocomplete_path
82
+ end
83
+
84
+ def suggester_name
85
+ blacklight_config.autocomplete_suggester
86
+ end
87
+
88
+ def build_connection
89
+ RSolr.connect(connection_config.merge(adapter: connection_config[:http_adapter]))
90
+ end
57
91
  end
58
92
  end
@@ -38,6 +38,6 @@ class Blacklight::Solr::Request < ActiveSupport::HashWithIndifferentAccess
38
38
  end
39
39
 
40
40
  def to_hash
41
- reject {|key, value| ARRAY_KEYS.include?(key) && value.blank?}
41
+ reject { |key, value| ARRAY_KEYS.include?(key) && value.blank? }
42
42
  end
43
43
  end
@@ -13,7 +13,7 @@ module Blacklight::Solr::Response::Facets
13
13
 
14
14
  options[:value] = value if value
15
15
  options[:hits] = hits if hits
16
-
16
+
17
17
  super(options)
18
18
  end
19
19
 
@@ -25,7 +25,7 @@ module Blacklight::Solr::Response::Facets
25
25
  table.as_json(props)
26
26
  end
27
27
  end
28
-
28
+
29
29
  # represents a facet; which is a field and its values
30
30
  class FacetField
31
31
  attr_reader :name, :items
@@ -58,14 +58,14 @@ module Blacklight::Solr::Response::Facets
58
58
  def count?
59
59
  sort == 'count'
60
60
  end
61
-
61
+
62
62
  private
63
63
 
64
64
  # Per https://wiki.apache.org/solr/SimpleFacetParameters#facet.limit
65
65
  def solr_default_limit
66
66
  100
67
67
  end
68
-
68
+
69
69
  # Per https://wiki.apache.org/solr/SimpleFacetParameters#facet.sort
70
70
  def solr_default_sort
71
71
  if limit > 0
@@ -74,7 +74,7 @@ module Blacklight::Solr::Response::Facets
74
74
  'index'
75
75
  end
76
76
  end
77
-
77
+
78
78
  # Per https://wiki.apache.org/solr/SimpleFacetParameters#facet.offset
79
79
  def solr_default_offset
80
80
  0
@@ -86,7 +86,7 @@ module Blacklight::Solr::Response::Facets
86
86
  end
87
87
 
88
88
  ##
89
- # Get all the Solr facet data (fields, queries, pivots) as a hash keyed by
89
+ # Get all the Solr facet data (fields, queries, pivots) as a hash keyed by
90
90
  # both the Solr field name and/or by the blacklight field name
91
91
  def aggregations
92
92
  @aggregations ||= {}.merge(facet_field_aggregations).merge(facet_query_aggregations).merge(facet_pivot_aggregations)
@@ -114,7 +114,7 @@ module Blacklight::Solr::Response::Facets
114
114
  def facet_queries
115
115
  @facet_queries ||= facet_counts['facet_queries'] || {}
116
116
  end
117
-
117
+
118
118
  # Returns all of the facet queries
119
119
  def facet_pivot
120
120
  @facet_pivot ||= facet_counts['facet_pivot'] || {}
@@ -123,7 +123,7 @@ module Blacklight::Solr::Response::Facets
123
123
  private
124
124
 
125
125
  ##
126
- # Convert Solr responses of various json.nl flavors to
126
+ # Convert Solr responses of various json.nl flavors to
127
127
  def list_as_hash solr_list
128
128
  # map
129
129
  if solr_list.values.first.is_a? Hash
@@ -131,12 +131,12 @@ module Blacklight::Solr::Response::Facets
131
131
  else
132
132
  solr_list.each_with_object({}) do |(key, values), hash|
133
133
  hash[key] = if values.first.is_a? Array
134
- # arrarr
135
- Hash[values]
136
- else
137
- # flat
138
- Hash[values.each_slice(2).to_a]
139
- end
134
+ # arrarr
135
+ Hash[values]
136
+ else
137
+ # flat
138
+ Hash[values.each_slice(2).to_a]
139
+ end
140
140
  end
141
141
  end
142
142
  end
@@ -164,9 +164,9 @@ module Blacklight::Solr::Response::Facets
164
164
  options)
165
165
 
166
166
  # alias all the possible blacklight config names..
167
- blacklight_config.facet_fields.select { |k,v| v.field == facet_field_name }.each do |key,_|
167
+ blacklight_config.facet_fields.select { |_k, v| v.field == facet_field_name }.each_key do |key|
168
168
  hash[key] = hash[facet_field_name]
169
- end if blacklight_config and !blacklight_config.facet_fields[facet_field_name]
169
+ end if blacklight_config && !blacklight_config.facet_fields[facet_field_name]
170
170
  end
171
171
  end
172
172
 
@@ -193,36 +193,36 @@ module Blacklight::Solr::Response::Facets
193
193
  def facet_query_aggregations
194
194
  return {} unless blacklight_config
195
195
 
196
- blacklight_config.facet_fields.select { |k,v| v.query }.each_with_object({}) do |(field_name, facet_field), hash|
197
- salient_facet_queries = facet_field.query.map { |k, x| x[:fq] }
198
- items = facet_queries.select { |k,v| salient_facet_queries.include?(k) }.reject { |value, hits| hits.zero? }.map do |value,hits|
199
- salient_fields = facet_field.query.select { |key, val| val[:fq] == value }
200
- key = ((salient_fields.keys if salient_fields.respond_to? :keys) || salient_fields.first).first
201
- Blacklight::Solr::Response::Facets::FacetItem.new(value: key, hits: hits, label: facet_field.query[key][:label])
202
- end
196
+ blacklight_config.facet_fields.select { |_k, v| v.query }.each_with_object({}) do |(field_name, facet_field), hash|
197
+ salient_facet_queries = facet_field.query.map { |_k, x| x[:fq] }
198
+ items = facet_queries.select { |k, _v| salient_facet_queries.include?(k) }.reject { |_value, hits| hits.zero? }.map do |value, hits|
199
+ salient_fields = facet_field.query.select { |_key, val| val[:fq] == value }
200
+ key = ((salient_fields.keys if salient_fields.respond_to? :keys) || salient_fields.first).first
201
+ Blacklight::Solr::Response::Facets::FacetItem.new(value: key, hits: hits, label: facet_field.query[key][:label])
202
+ end
203
203
 
204
- hash[field_name] = Blacklight::Solr::Response::Facets::FacetField.new field_name, items
204
+ hash[field_name] = Blacklight::Solr::Response::Facets::FacetField.new field_name, items
205
205
  end
206
206
  end
207
207
 
208
208
  ##
209
- # Convert Solr's facet_pivot response into
209
+ # Convert Solr's facet_pivot response into
210
210
  # a hash of Blacklight::Solr::Response::Facet::FacetField objects
211
211
  def facet_pivot_aggregations
212
212
  facet_pivot.each_with_object({}) do |(field_name, values), hash|
213
- next unless blacklight_config and !blacklight_config.facet_fields[field_name]
213
+ next unless blacklight_config && !blacklight_config.facet_fields[field_name]
214
214
 
215
215
  items = values.map do |lst|
216
216
  construct_pivot_field(lst)
217
217
  end
218
218
 
219
219
  # alias all the possible blacklight config names..
220
- blacklight_config.facet_fields.select { |k,v| v.pivot and v.pivot.join(",") == field_name }.each do |key, _|
220
+ blacklight_config.facet_fields.select { |_k, v| v.pivot && v.pivot.join(",") == field_name }.each_key do |key|
221
221
  hash[key] = Blacklight::Solr::Response::Facets::FacetField.new key, items
222
222
  end
223
223
  end
224
224
  end
225
-
225
+
226
226
  ##
227
227
  # Recursively parse the pivot facet response to build up the full pivot tree
228
228
  def construct_pivot_field lst, parent_fq = {}
@@ -232,6 +232,4 @@ module Blacklight::Solr::Response::Facets
232
232
 
233
233
  Blacklight::Solr::Response::Facets::FacetItem.new(value: lst[:value], hits: lst[:count], field: lst[:field], items: items, fq: parent_fq)
234
234
  end
235
-
236
-
237
- end # end Facets
235
+ end
@@ -3,7 +3,7 @@ class Blacklight::Solr::Response::Group
3
3
  include Blacklight::Solr::Response::PaginationMethods
4
4
 
5
5
  attr_reader :key, :group, :response
6
-
6
+
7
7
  def initialize key, group, response
8
8
  @key = key
9
9
  @group = group
@@ -18,13 +18,13 @@ class Blacklight::Solr::Response::Group
18
18
  def total
19
19
  doclist[:numFound].to_s.to_i
20
20
  end
21
-
21
+
22
22
  def start
23
23
  doclist[:start].to_s.to_i
24
24
  end
25
25
 
26
26
  def docs
27
- doclist[:docs].map {|doc| SolrDocument.new(doc, response)}
27
+ doclist[:docs].map { |doc| SolrDocument.new(doc, response) }
28
28
  end
29
29
 
30
30
  def field
@@ -27,7 +27,7 @@ class Blacklight::Solr::Response::GroupResponse
27
27
  # fall back on the number of facet items for that field?
28
28
  (group["ngroups"] || (response.aggregations[key] || []).length).to_s.to_i
29
29
  end
30
-
30
+
31
31
  def start
32
32
  params[:start].to_s.to_i
33
33
  end
@@ -2,14 +2,14 @@
2
2
  module Blacklight::Solr::Response::MoreLikeThis
3
3
  def more_like document
4
4
  mlt = more_like_this[document.id]
5
- return [] unless mlt and mlt['docs']
5
+ return [] unless mlt && mlt['docs']
6
6
 
7
7
  mlt['docs']
8
8
  end
9
9
 
10
10
  def more_like_this
11
11
  return {} unless self[:moreLikeThis]
12
-
12
+
13
13
  self[:moreLikeThis]
14
14
  end
15
15
  end
@@ -3,12 +3,12 @@ module Blacklight::Solr::Response::Response
3
3
  def response
4
4
  self[:response] || {}
5
5
  end
6
-
6
+
7
7
  # short cut to response['numFound']
8
8
  def total
9
9
  response[:numFound].to_s.to_i
10
10
  end
11
-
11
+
12
12
  def start
13
13
  response[:start].to_s.to_i
14
14
  end
@@ -24,7 +24,7 @@ module Blacklight::Solr::Response::Spelling
24
24
  def words
25
25
  @words ||= begin
26
26
  word_suggestions = []
27
- spellcheck = self.response[:spellcheck]
27
+ spellcheck = response[:spellcheck]
28
28
  if spellcheck && spellcheck[:suggestions]
29
29
  suggestions = spellcheck[:suggestions]
30
30
  unless suggestions.nil?
@@ -43,7 +43,7 @@ module Blacklight::Solr::Response::Spelling
43
43
  suggestions = Hash[*suggestions].except('correctlySpelled', 'collation')
44
44
  end
45
45
 
46
- suggestions.each do |_, term_info|
46
+ suggestions.each_value do |term_info|
47
47
  # term_info is a hash:
48
48
  # numFound =>
49
49
  # startOffset =>
@@ -69,8 +69,9 @@ module Blacklight::Solr::Response::Spelling
69
69
 
70
70
  def collation
71
71
  # FIXME: DRY up with words
72
- spellcheck = self.response[:spellcheck]
72
+ spellcheck = response[:spellcheck]
73
73
  return unless spellcheck && spellcheck[:suggestions]
74
+
74
75
  suggestions = spellcheck[:suggestions]
75
76
 
76
77
  if suggestions.is_a?(Array) && suggestions.index("collation")
@@ -1,17 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
  class Blacklight::Solr::Response < ActiveSupport::HashWithIndifferentAccess
3
- extend Deprecation
4
-
5
- # Using required_dependency to work around Rails autoloading
6
- # problems when developing blacklight. Without this, any change
7
- # to this class breaks other classes in this namespace
8
- require_dependency 'blacklight/solr/response/pagination_methods'
9
- require_dependency 'blacklight/solr/response/response'
10
- require_dependency 'blacklight/solr/response/spelling'
11
- require_dependency 'blacklight/solr/response/facets'
12
- require_dependency 'blacklight/solr/response/more_like_this'
13
- require_dependency 'blacklight/solr/response/group_response'
14
- require_dependency 'blacklight/solr/response/group'
3
+ extend ActiveSupport::Autoload
4
+ eager_autoload do
5
+ autoload :PaginationMethods
6
+ autoload :Response
7
+ autoload :Spelling
8
+ autoload :Facets
9
+ autoload :MoreLikeThis
10
+ autoload :GroupResponse
11
+ autoload :Group
12
+ end
15
13
 
16
14
  include PaginationMethods
17
15
  include Spelling
@@ -20,13 +18,14 @@ class Blacklight::Solr::Response < ActiveSupport::HashWithIndifferentAccess
20
18
  include MoreLikeThis
21
19
 
22
20
  attr_reader :request_params
23
- attr_accessor :document_model, :blacklight_config
21
+ attr_accessor :blacklight_config, :options
22
+ delegate :document_factory, to: :blacklight_config
24
23
 
25
24
  def initialize(data, request_params, options = {})
26
25
  super(force_to_utf8(ActiveSupport::HashWithIndifferentAccess.new(data)))
27
26
  @request_params = ActiveSupport::HashWithIndifferentAccess.new(request_params)
28
- self.document_model = options[:solr_document_model] || options[:document_model] || SolrDocument
29
27
  self.blacklight_config = options[:blacklight_config]
28
+ self.options = options
30
29
  end
31
30
 
32
31
  def header
@@ -50,7 +49,7 @@ class Blacklight::Solr::Response < ActiveSupport::HashWithIndifferentAccess
50
49
  end
51
50
 
52
51
  def documents
53
- @documents ||= (response['docs'] || []).collect{|doc| document_model.new(doc, self) }
52
+ @documents ||= (response['docs'] || []).collect { |doc| document_factory.build(doc, self, options) }
54
53
  end
55
54
  alias_method :docs, :documents
56
55
 
@@ -76,7 +75,7 @@ class Blacklight::Solr::Response < ActiveSupport::HashWithIndifferentAccess
76
75
  end
77
76
 
78
77
  def grouped?
79
- self.key? "grouped"
78
+ key? "grouped"
80
79
  end
81
80
 
82
81
  def export_formats
@@ -85,20 +84,20 @@ class Blacklight::Solr::Response < ActiveSupport::HashWithIndifferentAccess
85
84
 
86
85
  private
87
86
 
88
- def force_to_utf8(value)
89
- case value
90
- when Hash
91
- value.each { |k, v| value[k] = force_to_utf8(v) }
92
- when Array
93
- value.each { |v| force_to_utf8(v) }
94
- when String
95
- if value.encoding != Encoding::UTF_8
96
- Blacklight.logger.warn "Found a non utf-8 value in Blacklight::Solr::Response. \"#{value}\" Encoding is #{value.encoding}"
97
- value.dup.force_encoding('UTF-8')
98
- else
99
- value
100
- end
87
+ def force_to_utf8(value)
88
+ case value
89
+ when Hash
90
+ value.each { |k, v| value[k] = force_to_utf8(v) }
91
+ when Array
92
+ value.each { |v| force_to_utf8(v) }
93
+ when String
94
+ if value.encoding != Encoding::UTF_8
95
+ Blacklight.logger.warn "Found a non utf-8 value in Blacklight::Solr::Response. \"#{value}\" Encoding is #{value.encoding}"
96
+ value.dup.force_encoding('UTF-8')
97
+ else
98
+ value
101
99
  end
102
- value
103
100
  end
101
+ value
102
+ end
104
103
  end