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
@@ -1,167 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- describe 'Blacklight::Utils' do
4
- describe Blacklight::OpenStructWithHashAccess do
5
- it "provides hash-like accessors for OpenStruct data" do
6
- a = Blacklight::OpenStructWithHashAccess.new :foo => :bar, :baz => 1
7
-
8
- expect(a[:foo]).to eq :bar
9
- expect(a[:baz]).to eq 1
10
- expect(a[:asdf]).to be_nil
11
- end
12
-
13
- it "provides hash-like writers for OpenStruct data" do
14
- a = Blacklight::OpenStructWithHashAccess.new :foo => :bar, :baz => 1
15
-
16
- a[:asdf] = 'qwerty'
17
- expect(a.asdf).to eq 'qwerty'
18
-
19
- end
20
-
21
- it "treats symbols and strings interchangeably in hash access" do
22
- h = Blacklight::OpenStructWithHashAccess.new
23
-
24
- h["string"] = "value"
25
- expect(h[:string]).to eq "value"
26
- expect(h.string).to eq "value"
27
-
28
- h[:symbol] = "value"
29
- expect(h["symbol"]).to eq "value"
30
- expect(h.symbol).to eq "value"
31
- end
32
-
33
- describe "internal hash table" do
34
- before do
35
- @h = Blacklight::OpenStructWithHashAccess.new
36
- @h[:a] = 1
37
- @h[:b] = 2
38
- end
39
-
40
- it "exposes the internal hash table" do
41
- expect(@h.to_h).to be_a_kind_of(Hash)
42
- expect(@h.to_h[:a]).to eq 1
43
- end
44
-
45
- it "exposes keys" do
46
- expect(@h.keys).to include(:a, :b)
47
- end
48
-
49
- end
50
-
51
- describe "#key?" do
52
- subject do
53
- h = Blacklight::OpenStructWithHashAccess.new
54
- h[:a] = 1
55
- h[:b] = 2
56
- h
57
- end
58
-
59
- it "is true if the key exists" do
60
- expect(subject.key? :a).to eq true
61
- end
62
-
63
- it "is false if the key does not exist" do
64
- expect(subject.key? :c).to eq false
65
- end
66
- end
67
-
68
- describe "#replace" do
69
- subject { Blacklight::OpenStructWithHashAccess.new a: 1 }
70
-
71
- it "can use #replace to reorder the hash" do
72
- subject.replace b: 1
73
- expect(subject.b).to eq 1
74
- end
75
- end
76
-
77
- describe "#sort_by" do
78
- subject { Blacklight::OpenStructWithHashAccess.new c: 3, b:1, a: 2 }
79
-
80
- it "sorts the underlying hash" do
81
- sorted = subject.sort_by { |k,v| v }
82
- expect(sorted.keys).to match_array [:b, :a, :c]
83
- end
84
- end
85
-
86
- describe "#sort_by!" do
87
- subject { Blacklight::OpenStructWithHashAccess.new c: 3, b:1, a: 2 }
88
-
89
- it "sorts the underlying hash" do
90
- subject.sort_by! { |k,v| v }
91
- expect(subject.keys).to match_array [:b, :a, :c]
92
- end
93
- end
94
-
95
- describe "#merge" do
96
-
97
- before do
98
- @h = Blacklight::OpenStructWithHashAccess.new
99
- @h[:a] = 1
100
- @h[:b] = 2
101
- end
102
-
103
- it "merges the object with a hash" do
104
- expect(@h.merge(:a => 'a')[:a]).to eq 'a'
105
- end
106
-
107
- it "merges the object with another struct" do
108
- expect(@h.merge(Blacklight::OpenStructWithHashAccess.new(:a => 'a'))[:a]).to eq 'a'
109
- end
110
- end
111
-
112
-
113
- describe "#merge!" do
114
-
115
- before do
116
- @h = Blacklight::OpenStructWithHashAccess.new
117
- @h[:a] = 1
118
- @h[:b] = 2
119
- end
120
-
121
- it "merges the object with a hash" do
122
- @h.merge!(:a => 'a')
123
- expect(@h[:a]).to eq 'a'
124
- end
125
-
126
- it "merges the object with another struct" do
127
- @h.merge!(Blacklight::OpenStructWithHashAccess.new(:a => 'a'))
128
- expect(@h[:a]).to eq 'a'
129
- end
130
- end
131
-
132
- describe "#to_json" do
133
- subject { Blacklight::OpenStructWithHashAccess.new a: 1, b: 2}
134
-
135
- it "serializes as json" do
136
- expect(subject.to_json).to eq ({a: 1, b:2}).to_json
137
- end
138
- end
139
-
140
- describe "#deep_dup" do
141
- subject { Blacklight::OpenStructWithHashAccess.new a: 1, b: { c: 1} }
142
-
143
- it "duplicates nested hashes" do
144
- copy = subject.deep_dup
145
- copy.a = 2
146
- copy.b[:c] = 2
147
-
148
- expect(subject.a).to eq 1
149
- expect(subject.b[:c]).to eq 1
150
- expect(copy.a).to eq 2
151
- expect(copy.b[:c]).to eq 2
152
- end
153
-
154
- it "preserves the current class" do
155
- expect(Blacklight::NestedOpenStructWithHashAccess.new(Blacklight::NestedOpenStructWithHashAccess).deep_dup).to be_a_kind_of Blacklight::NestedOpenStructWithHashAccess
156
- end
157
-
158
- it "preserves the default proc" do
159
- nested = Blacklight::NestedOpenStructWithHashAccess.new Hash
160
-
161
- copy = nested.deep_dup
162
- copy.a[:b] = 1
163
- expect(copy.a[:b]).to eq 1
164
- end
165
- end
166
- end
167
- end
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- describe Blacklight::Solr::Document::MoreLikeThis do
4
- before(:all) do
5
- @mock_class = Class.new do
6
- include Blacklight::Solr::Document
7
- end
8
- end
9
-
10
- it "should pluck the MoreLikeThis results from the Solr Response" do
11
- mock_solr_response = double(:more_like => [{'id' => 'abc'}])
12
- result = @mock_class.new({:id => '123'}, mock_solr_response).more_like_this
13
- expect(result).to have(1).item
14
- expect(result.first).to be_a_kind_of(@mock_class)
15
- expect(result.first.id).to eq 'abc'
16
- expect(result.first.solr_response).to eq mock_solr_response
17
- end
18
- end
@@ -1,438 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- describe Blacklight::DocumentPresenter do
4
- include Capybara::RSpecMatchers
5
- let(:show_presenter) { Blacklight::ShowPresenter.new(document, request_context, config) }
6
- let(:index_presenter) { Blacklight::IndexPresenter.new(document, request_context, config) }
7
- let(:request_context) { double }
8
- let(:config) { Blacklight::Configuration.new }
9
-
10
- subject { presenter }
11
- let(:presenter) { described_class.new(document, request_context, config) }
12
- let(:parameter_class) { ActionController::Parameters }
13
- let(:params) { parameter_class.new }
14
- let(:search_state) { Blacklight::SearchState.new(params, config) }
15
-
16
- let(:document) do
17
- SolrDocument.new(id: 1,
18
- 'link_to_search_true' => 'x',
19
- 'link_to_search_named' => 'x',
20
- 'qwer' => 'document qwer value',
21
- 'mnbv' => 'document mnbv value')
22
- end
23
-
24
- before do
25
- allow(request_context).to receive(:search_state).and_return(search_state)
26
- allow(Deprecation).to receive(:warn)
27
- end
28
-
29
- describe "link_rel_alternates" do
30
- before do
31
- class MockDocument
32
- include Blacklight::Solr::Document
33
- end
34
-
35
- module MockExtension
36
- def self.extended(document)
37
- document.will_export_as(:weird, "application/weird")
38
- document.will_export_as(:weirder, "application/weirder")
39
- document.will_export_as(:weird_dup, "application/weird")
40
- end
41
- def export_as_weird ; "weird" ; end
42
- def export_as_weirder ; "weirder" ; end
43
- def export_as_weird_dup ; "weird_dup" ; end
44
- end
45
-
46
- MockDocument.use_extension(MockExtension)
47
-
48
- def mock_document_app_helper_url *args
49
- solr_document_url(*args)
50
- end
51
-
52
- allow(request_context).to receive(:polymorphic_url) do |_, opts|
53
- "url.#{opts[:format]}"
54
- end
55
- allow(request_context).to receive(:show_presenter).and_return(show_presenter)
56
- end
57
-
58
- let(:document) { MockDocument.new(id: "MOCK_ID1") }
59
-
60
- context "with no arguments" do
61
- subject { presenter.link_rel_alternates }
62
-
63
- it "generates <link rel=alternate> tags" do
64
- tmp_value = Capybara.ignore_hidden_elements
65
- Capybara.ignore_hidden_elements = false
66
- document.export_formats.each_pair do |format, spec|
67
- expect(subject).to have_selector("link[href$='.#{ format }']") do |matches|
68
- expect(matches).to have(1).match
69
- tag = matches[0]
70
- expect(tag.attributes["rel"].value).to eq "alternate"
71
- expect(tag.attributes["title"].value).to eq format.to_s
72
- expect(tag.attributes["href"].value).to eq mock_document_app_helper_url(document, format: format)
73
- end
74
- end
75
- Capybara.ignore_hidden_elements = tmp_value
76
- end
77
-
78
- it { is_expected.to be_html_safe }
79
- end
80
-
81
- context "with unique: true" do
82
- subject { presenter.link_rel_alternates(unique: true) }
83
-
84
- it "respects unique: true" do
85
- tmp_value = Capybara.ignore_hidden_elements
86
- Capybara.ignore_hidden_elements = false
87
- expect(subject).to have_selector("link[type='application/weird']", count: 1)
88
- Capybara.ignore_hidden_elements = tmp_value
89
- end
90
- end
91
-
92
- context "with exclude" do
93
- subject { presenter.link_rel_alternates(unique: true) }
94
- it "excludes formats from :exclude" do
95
- tmp_value = Capybara.ignore_hidden_elements
96
- Capybara.ignore_hidden_elements = false
97
- expect(subject).to_not have_selector("link[href$='.weird_dup']")
98
- Capybara.ignore_hidden_elements = tmp_value
99
- end
100
- end
101
- end
102
-
103
- describe "render_index_field_value" do
104
- let(:config) do
105
- Blacklight::Configuration.new.configure do |config|
106
- config.add_index_field 'qwer'
107
- config.add_index_field 'asdf', :helper_method => :render_asdf_index_field
108
- config.add_index_field 'link_to_search_true', :link_to_search => true
109
- config.add_index_field 'link_to_search_named', :link_to_search => :some_field
110
- config.add_index_field 'highlight', :highlight => true
111
- config.add_index_field 'solr_doc_accessor', :accessor => true
112
- config.add_index_field 'explicit_accessor', :accessor => :solr_doc_accessor
113
- config.add_index_field 'explicit_accessor_with_arg', :accessor => :solr_doc_accessor_with_arg
114
- config.add_index_field 'alias', field: 'qwer'
115
- config.add_index_field 'with_default', default: 'value'
116
- end
117
- end
118
- before do
119
- allow(request_context).to receive(:index_presenter).and_return(index_presenter)
120
- end
121
- it "checks for an explicit value" do
122
- value = subject.render_index_field_value 'asdf', :value => 'asdf'
123
- expect(value).to eq 'asdf'
124
- end
125
-
126
- it "checks for a helper method to call" do
127
- allow(request_context).to receive(:render_asdf_index_field).and_return('custom asdf value')
128
- value = subject.render_index_field_value 'asdf'
129
- expect(value).to eq 'custom asdf value'
130
- end
131
-
132
- it "checks for a link_to_search" do
133
- allow(request_context).to receive(:search_action_path).with('f' => { 'link_to_search_true' => ['x'] }).and_return('/foo')
134
- allow(request_context).to receive(:link_to).with("x", '/foo').and_return('bar')
135
- value = subject.render_index_field_value 'link_to_search_true'
136
- expect(value).to eq 'bar'
137
- end
138
-
139
- it "checks for a link_to_search with a field name" do
140
- allow(request_context).to receive(:search_action_path).with('f' => { 'some_field' => ['x'] }).and_return('/foo')
141
- allow(request_context).to receive(:link_to).with("x", '/foo').and_return('bar')
142
- value = subject.render_index_field_value 'link_to_search_named'
143
- expect(value).to eq 'bar'
144
- end
145
-
146
- context "when no highlight field is available" do
147
- before do
148
- allow(document).to receive(:has_highlight_field?).and_return(false)
149
- end
150
- let(:value) { subject.render_index_field_value 'highlight' }
151
- it "is blank" do
152
- expect(value).to be_blank
153
- end
154
- end
155
-
156
- it "checks for a highlighted field" do
157
- allow(document).to receive(:has_highlight_field?).and_return(true)
158
- allow(document).to receive(:highlight_field).with('highlight').and_return(['<em>highlight</em>'.html_safe])
159
- value = subject.render_index_field_value 'highlight'
160
- expect(value).to eq '<em>highlight</em>'
161
- end
162
-
163
- it "checks the document field value" do
164
- value = subject.render_index_field_value 'qwer'
165
- expect(value).to eq 'document qwer value'
166
- end
167
-
168
- it "works with index fields that aren't explicitly defined" do
169
- value = subject.render_index_field_value 'mnbv'
170
- expect(value).to eq 'document mnbv value'
171
- end
172
-
173
- it "calls an accessor on the solr document" do
174
- allow(document).to receive_messages(solr_doc_accessor: "123")
175
- value = subject.render_index_field_value 'solr_doc_accessor'
176
- expect(value).to eq "123"
177
- end
178
-
179
- it "calls an explicit accessor on the solr document" do
180
- allow(document).to receive_messages(solr_doc_accessor: "123")
181
- value = subject.render_index_field_value 'explicit_accessor'
182
- expect(value).to eq "123"
183
- end
184
-
185
- it "calls an accessor on the solr document with the field as an argument" do
186
- allow(document).to receive(:solr_doc_accessor_with_arg).with('explicit_accessor_with_arg').and_return("123")
187
- value = subject.render_index_field_value 'explicit_accessor_with_arg'
188
- expect(value).to eq "123"
189
- end
190
-
191
- it "supports solr field configuration" do
192
- value = subject.render_index_field_value 'alias'
193
- expect(value).to eq "document qwer value"
194
- end
195
-
196
- it "supports default values in the field configuration" do
197
- value = subject.render_index_field_value 'with_default'
198
- expect(value).to eq "value"
199
- end
200
- end
201
-
202
- describe "render_document_show_field_value" do
203
- let(:config) do
204
- Blacklight::Configuration.new.configure do |config|
205
- config.add_show_field 'qwer'
206
- config.add_show_field 'asdf', :helper_method => :render_asdf_document_show_field
207
- config.add_show_field 'link_to_search_true', :link_to_search => true
208
- config.add_show_field 'link_to_search_named', :link_to_search => :some_field
209
- config.add_show_field 'highlight', :highlight => true
210
- config.add_show_field 'solr_doc_accessor', :accessor => true
211
- config.add_show_field 'explicit_accessor', :accessor => :solr_doc_accessor
212
- config.add_show_field 'explicit_array_accessor', :accessor => [:solr_doc_accessor, :some_method]
213
- config.add_show_field 'explicit_accessor_with_arg', :accessor => :solr_doc_accessor_with_arg
214
- end
215
- end
216
-
217
- before do
218
- allow(request_context).to receive(:show_presenter).and_return(show_presenter)
219
- end
220
-
221
- it 'html-escapes values' do
222
- value = subject.render_document_show_field_value 'asdf', value: '<b>val1</b>'
223
- expect(value).to eq '&lt;b&gt;val1&lt;/b&gt;'
224
- end
225
-
226
- it 'joins multivalued valued fields' do
227
- value = subject.render_document_show_field_value 'asdf', value: ['<a', 'b']
228
- expect(value).to eq '&lt;a and b'
229
- end
230
-
231
- it 'joins multivalued valued fields' do
232
- value = subject.render_document_show_field_value 'asdf', value: ['a', 'b', 'c']
233
- expect(value).to eq 'a, b, and c'
234
- end
235
-
236
- it "checks for an explicit value" do
237
- expect(request_context).to_not receive(:render_asdf_document_show_field)
238
- value = subject.render_document_show_field_value 'asdf', :value => 'val1'
239
- expect(value).to eq 'val1'
240
- end
241
-
242
- it "checks for a helper method to call" do
243
- allow(request_context).to receive(:render_asdf_document_show_field).and_return('custom asdf value')
244
- value = subject.render_document_show_field_value 'asdf'
245
- expect(value).to eq 'custom asdf value'
246
- end
247
-
248
- it "checks for a link_to_search" do
249
- allow(request_context).to receive(:search_action_path).and_return('/foo')
250
- allow(request_context).to receive(:link_to).with("x", '/foo').and_return('bar')
251
- value = subject.render_document_show_field_value 'link_to_search_true'
252
- expect(value).to eq 'bar'
253
- end
254
-
255
- it "checks for a link_to_search with a field name" do
256
- allow(request_context).to receive(:search_action_path).and_return('/foo')
257
- allow(request_context).to receive(:link_to).with("x", '/foo').and_return('bar')
258
- value = subject.render_document_show_field_value 'link_to_search_named'
259
- expect(value).to eq 'bar'
260
- end
261
-
262
- context "when no highlight field is available" do
263
- before do
264
- allow(document).to receive(:has_highlight_field?).and_return(false)
265
- end
266
- let(:value) { subject.render_document_show_field_value 'highlight' }
267
- it "is blank" do
268
- expect(value).to be_blank
269
- end
270
- end
271
-
272
- it "checks for a highlighted field" do
273
- allow(document).to receive(:has_highlight_field?).and_return(true)
274
- allow(document).to receive(:highlight_field).with('highlight').and_return(['<em>highlight</em>'.html_safe])
275
- value = subject.render_document_show_field_value 'highlight'
276
- expect(value).to eq '<em>highlight</em>'
277
- end
278
-
279
- it 'respects the HTML-safeness of multivalued highlight fields' do
280
- allow(document).to receive(:has_highlight_field?).and_return(true)
281
- allow(document).to receive(:highlight_field).with('highlight').and_return(['<em>highlight</em>'.html_safe, '<em>other highlight</em>'.html_safe])
282
- value = subject.render_document_show_field_value 'highlight'
283
- expect(value).to eq '<em>highlight</em> and <em>other highlight</em>'
284
- end
285
-
286
- it "checks the document field value" do
287
- value = subject.render_document_show_field_value 'qwer'
288
- expect(value).to eq 'document qwer value'
289
- end
290
-
291
- it "works with show fields that aren't explicitly defined" do
292
- value = subject.render_document_show_field_value 'mnbv'
293
- expect(value).to eq 'document mnbv value'
294
- end
295
-
296
- it "calls an accessor on the solr document" do
297
- allow(document).to receive_messages(solr_doc_accessor: "123")
298
- value = subject.render_document_show_field_value 'solr_doc_accessor'
299
- expect(value).to eq "123"
300
- end
301
-
302
- it "calls an explicit accessor on the solr document" do
303
- allow(document).to receive_messages(solr_doc_accessor: "123")
304
- value = subject.render_document_show_field_value 'explicit_accessor'
305
- expect(value).to eq "123"
306
- end
307
-
308
- it "calls an explicit array-style accessor on the solr document" do
309
- allow(document).to receive_message_chain(:solr_doc_accessor, some_method: "123")
310
- value = subject.render_document_show_field_value 'explicit_array_accessor'
311
- expect(value).to eq "123"
312
- end
313
-
314
- it "calls an accessor on the solr document with the field as an argument" do
315
- allow(document).to receive(:solr_doc_accessor_with_arg).with('explicit_accessor_with_arg').and_return("123")
316
- value = subject.render_document_show_field_value 'explicit_accessor_with_arg'
317
- expect(value).to eq "123"
318
- end
319
- end
320
- describe "render_field_value" do
321
- before do
322
- expect(Deprecation).to receive(:warn)
323
- end
324
- it "joins and html-safe values" do
325
- expect(subject.render_field_value(['a', 'b'])).to eq "a and b"
326
- end
327
-
328
- context "with separator_options" do
329
- let(:field_config) { double(to_h: { field: 'foo', separator: nil, itemprop: nil, separator_options: { two_words_connector: '; '}}) }
330
- it "uses the field_config.separator_options" do
331
- expect(subject.render_field_value(['c', 'd'], field_config)).to eq "c; d"
332
- end
333
- end
334
-
335
- context "with itemprop attributes" do
336
- let(:field_config) { double(to_h: { field: 'bar', separator: nil, itemprop: 'some-prop', separator_options: nil }) }
337
- it "includes schema.org itemprop attributes" do
338
- expect(subject.render_field_value('a', field_config)).to have_selector("span[@itemprop='some-prop']", :text => "a")
339
- end
340
- end
341
- end
342
-
343
- describe "#document_heading" do
344
- before do
345
- allow(request_context).to receive(:show_presenter).and_return(show_presenter)
346
- end
347
- it "falls back to an id" do
348
- allow(document).to receive(:[]).with('id').and_return "xyz"
349
- expect(subject.document_heading).to eq document.id
350
- end
351
-
352
- it "returns the value of the field" do
353
- config.show.title_field = :x
354
- allow(document).to receive(:has?).with(:x).and_return(true)
355
- allow(document).to receive(:[]).with(:x).and_return("value")
356
- expect(subject.document_heading).to eq "value"
357
- end
358
-
359
- it "returns the first present value" do
360
- config.show.title_field = [:x, :y]
361
- allow(document).to receive(:has?).with(:x).and_return(false)
362
- allow(document).to receive(:has?).with(:y).and_return(true)
363
- allow(document).to receive(:[]).with(:y).and_return("value")
364
- expect(subject.document_heading).to eq "value"
365
- end
366
- end
367
-
368
- describe "#document_show_html_title" do
369
- before do
370
- allow(request_context).to receive(:show_presenter).and_return(show_presenter)
371
- end
372
- it "falls back to an id" do
373
- allow(document).to receive(:[]).with('id').and_return "xyz"
374
- expect(subject.document_show_html_title).to eq document.id
375
- end
376
-
377
- it "returns the value of the field" do
378
- config.show.html_title_field = :x
379
- allow(document).to receive(:has?).with(:x).and_return(true)
380
- allow(document).to receive(:fetch).with(:x, nil).and_return("value")
381
- expect(subject.document_show_html_title).to eq "value"
382
- end
383
-
384
- it "returns the first present value" do
385
- config.show.html_title_field = [:x, :y]
386
- allow(document).to receive(:has?).with(:x).and_return(false)
387
- allow(document).to receive(:has?).with(:y).and_return(true)
388
- allow(document).to receive(:fetch).with(:y, nil).and_return("value")
389
- expect(subject.document_show_html_title).to eq "value"
390
- end
391
- end
392
-
393
- describe '#get_field_values' do
394
- let(:field_config) { double }
395
- let(:options) { double }
396
- it "calls field_values" do
397
- expect(Deprecation).to receive(:warn)
398
- expect(presenter).to receive(:field_values).with(field_config, options)
399
- presenter.get_field_values('name', field_config, options)
400
- end
401
- end
402
-
403
- describe '#field_values' do
404
- context 'for a field with the helper_method option' do
405
- let(:field_name) { 'field_with_helper' }
406
- let(:field_config) { config.add_facet_field 'field_with_helper', helper_method: 'render_field_with_helper' }
407
-
408
- before do
409
- document['field_with_helper'] = 'value'
410
- end
411
-
412
- it "checks call the helper method with arguments" do
413
- allow(request_context).to receive(:render_field_with_helper) do |*args|
414
- args.first
415
- end
416
-
417
- render_options = { a: 1 }
418
-
419
- options = subject.field_values field_config, a: 1
420
-
421
- expect(options).to include :document, :field, :value, :config, :a
422
- expect(options[:document]).to eq document
423
- expect(options[:field]).to eq 'field_with_helper'
424
- expect(options[:value]).to eq ['value']
425
- expect(options[:config]).to eq field_config
426
- expect(options[:a]).to eq 1
427
- end
428
- end
429
- end
430
-
431
- describe '#render_values' do
432
- it 'renders field values as a string' do
433
- expect(subject.render_values('x')).to eq 'x'
434
- expect(subject.render_values(['x', 'y'])).to eq 'x and y'
435
- expect(subject.render_values(['x', 'y', 'z'])).to eq 'x, y, and z'
436
- end
437
- end
438
- end