blacklight 6.24.0 → 7.0.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.npmignore +23 -0
  4. data/.rubocop.yml +15 -3
  5. data/.rubocop_todo.yml +242 -379
  6. data/.solr_wrapper.yml +1 -1
  7. data/.travis.yml +20 -24
  8. data/Gemfile +1 -4
  9. data/README.md +21 -4
  10. data/Rakefile +1 -2
  11. data/VERSION +1 -1
  12. data/app/assets/images/blacklight/list.svg +1 -0
  13. data/app/assets/images/blacklight/search.svg +1 -0
  14. data/app/assets/javascripts/blacklight/blacklight.js +496 -56
  15. data/app/assets/stylesheets/blacklight/_balanced_list.scss +7 -12
  16. data/app/assets/stylesheets/blacklight/_blacklight_base.scss +3 -1
  17. data/app/assets/stylesheets/blacklight/_bookmark.scss +1 -13
  18. data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +27 -0
  19. data/app/assets/stylesheets/blacklight/_constraints.scss +17 -25
  20. data/app/assets/stylesheets/blacklight/_controls.scss +8 -16
  21. data/app/assets/stylesheets/blacklight/_facets.scss +74 -92
  22. data/app/assets/stylesheets/blacklight/_header.scss +35 -48
  23. data/app/assets/stylesheets/blacklight/_icons.scss +29 -0
  24. data/app/assets/stylesheets/blacklight/_layout.scss +0 -10
  25. data/app/assets/stylesheets/blacklight/_mixins.scss +15 -0
  26. data/app/assets/stylesheets/blacklight/_modal.scss +9 -17
  27. data/app/assets/stylesheets/blacklight/_pagination.scss +2 -17
  28. data/app/assets/stylesheets/blacklight/_search_history.scss +5 -13
  29. data/app/assets/stylesheets/blacklight/_search_results.scss +9 -8
  30. data/app/assets/stylesheets/blacklight/_twitter_typeahead.scss +1 -2
  31. data/app/builders/blacklight/action_builder.rb +56 -0
  32. data/app/controllers/bookmarks_controller.rb +2 -2
  33. data/app/controllers/catalog_controller.rb +2 -2
  34. data/app/controllers/concerns/blacklight/base.rb +0 -33
  35. data/app/controllers/concerns/blacklight/bookmarks.rb +20 -37
  36. data/app/controllers/concerns/blacklight/catalog.rb +254 -213
  37. data/app/controllers/concerns/blacklight/controller.rb +117 -133
  38. data/app/controllers/concerns/blacklight/default_component_configuration.rb +12 -43
  39. data/app/controllers/concerns/blacklight/search_context.rb +10 -14
  40. data/app/controllers/concerns/blacklight/search_fields.rb +4 -14
  41. data/app/controllers/concerns/blacklight/token_based_user.rb +6 -10
  42. data/app/helpers/blacklight/blacklight_helper_behavior.rb +32 -118
  43. data/app/helpers/blacklight/catalog_helper_behavior.rb +94 -88
  44. data/app/helpers/blacklight/component_helper_behavior.rb +19 -19
  45. data/app/helpers/blacklight/configuration_helper_behavior.rb +25 -54
  46. data/app/helpers/blacklight/facets_helper_behavior.rb +40 -39
  47. data/app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb +9 -11
  48. data/app/helpers/blacklight/icon_helper_behavior.rb +16 -0
  49. data/app/helpers/blacklight/layout_helper_behavior.rb +3 -10
  50. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +6 -6
  51. data/app/helpers/blacklight/render_partials_helper_behavior.rb +195 -0
  52. data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +18 -11
  53. data/app/helpers/blacklight/suggest_helper_behavior.rb +1 -0
  54. data/app/helpers/blacklight/url_helper_behavior.rb +21 -27
  55. data/app/{assets/javascripts → javascript}/blacklight/autocomplete.js +3 -2
  56. data/app/javascript/blacklight/autofocus.js +20 -0
  57. data/app/javascript/blacklight/bookmark_toggle.js +25 -0
  58. data/app/javascript/blacklight/checkbox_submit.js +133 -0
  59. data/app/{assets/javascripts → javascript}/blacklight/collapsable.js +1 -1
  60. data/app/javascript/blacklight/core.js +39 -0
  61. data/app/{assets/javascripts → javascript}/blacklight/facet_load.js +6 -6
  62. data/app/{assets/javascripts/blacklight/ajax_modal.js → javascript/blacklight/modal.js} +63 -63
  63. data/app/{assets/javascripts → javascript}/blacklight/search_context.js +10 -2
  64. data/app/models/blacklight/facet_paginator.rb +3 -3
  65. data/app/models/blacklight/icon.rb +53 -0
  66. data/app/models/blacklight/solr/facet_paginator.rb +3 -3
  67. data/app/models/blacklight/suggest_search.rb +15 -4
  68. data/app/models/bookmark.rb +4 -9
  69. data/app/models/concerns/blacklight/configurable.rb +13 -13
  70. data/app/models/concerns/blacklight/document.rb +8 -42
  71. data/app/models/concerns/blacklight/document/active_model_shim.rb +8 -11
  72. data/app/models/concerns/blacklight/document/cache_key.rb +1 -1
  73. data/app/models/concerns/blacklight/document/dublin_core.rb +2 -2
  74. data/app/models/concerns/blacklight/document/email.rb +1 -1
  75. data/app/models/concerns/blacklight/document/extensions.rb +5 -5
  76. data/app/models/concerns/blacklight/document/semantic_fields.rb +9 -9
  77. data/app/models/concerns/blacklight/document/sms.rb +1 -1
  78. data/app/models/concerns/blacklight/solr/document.rb +7 -8
  79. data/app/models/concerns/blacklight/suggest/response.rb +3 -5
  80. data/app/models/concerns/blacklight/user.rb +6 -6
  81. data/app/models/record_mailer.rb +5 -6
  82. data/app/models/search.rb +4 -7
  83. data/app/presenters/blacklight/field_presenter.rb +5 -5
  84. data/app/presenters/blacklight/index_presenter.rb +34 -71
  85. data/app/presenters/blacklight/json_presenter.rb +7 -4
  86. data/app/presenters/blacklight/link_alternate_presenter.rb +1 -1
  87. data/app/presenters/blacklight/rendering/abstract_step.rb +5 -5
  88. data/app/presenters/blacklight/rendering/helper_method.rb +8 -8
  89. data/app/presenters/blacklight/rendering/join.rb +3 -3
  90. data/app/presenters/blacklight/rendering/link_to_facet.rb +19 -19
  91. data/app/presenters/blacklight/rendering/microdata.rb +3 -3
  92. data/app/presenters/blacklight/rendering/pipeline.rb +5 -5
  93. data/app/presenters/blacklight/search_bar_presenter.rb +37 -0
  94. data/app/presenters/blacklight/show_presenter.rb +20 -69
  95. data/app/presenters/blacklight/thumbnail_presenter.rb +72 -0
  96. data/app/services/blacklight/document_factory.rb +11 -0
  97. data/app/services/blacklight/field_retriever.rb +24 -24
  98. data/app/services/blacklight/search_service.rb +154 -0
  99. data/app/views/blacklight/nav/_bookmark.html.erb +2 -2
  100. data/app/views/blacklight/nav/_search_history.html.erb +1 -1
  101. data/app/views/bookmarks/_tools.html.erb +2 -2
  102. data/app/views/bookmarks/index.html.erb +2 -2
  103. data/app/views/catalog/_bookmark_control.html.erb +26 -10
  104. data/app/views/catalog/_citation.html.erb +18 -23
  105. data/app/views/catalog/_constraints.html.erb +5 -8
  106. data/app/views/catalog/_constraints_element.html.erb +6 -6
  107. data/app/views/catalog/{_document_default.atom.builder → _document.atom.builder} +2 -2
  108. data/app/views/catalog/_document.html.erb +5 -3
  109. data/app/views/catalog/{_document_default.rss.builder → _document.rss.builder} +0 -0
  110. data/app/views/catalog/_document_action.html.erb +2 -1
  111. data/app/views/catalog/_email_form.html.erb +8 -4
  112. data/app/views/catalog/_facet_index_navigation.html.erb +3 -3
  113. data/app/views/catalog/_facet_layout.html.erb +5 -7
  114. data/app/views/catalog/_facet_limit.html.erb +3 -2
  115. data/app/views/catalog/_facet_pagination.html.erb +10 -10
  116. data/app/views/catalog/_facet_pivot.html.erb +2 -2
  117. data/app/views/catalog/_facets.html.erb +8 -12
  118. data/app/views/catalog/{_group_default.html.erb → _group.html.erb} +0 -0
  119. data/app/views/catalog/_home_text.html.erb +32 -36
  120. data/app/views/catalog/_index.html.erb +12 -0
  121. data/app/views/catalog/{_index_header_default.html.erb → _index_header.html.erb} +2 -2
  122. data/app/views/catalog/_per_page_widget.html.erb +6 -7
  123. data/app/views/catalog/_previous_next_doc.html.erb +6 -14
  124. data/app/views/catalog/_search_form.html.erb +12 -8
  125. data/app/views/catalog/_search_header.html.erb +0 -3
  126. data/app/views/catalog/_search_results.html.erb +4 -0
  127. data/app/views/catalog/_show.html.erb +10 -0
  128. data/app/views/catalog/{_show_header_default.html.erb → _show_header.html.erb} +0 -0
  129. data/app/views/catalog/_show_main_content.html.erb +4 -4
  130. data/app/views/catalog/_show_sidebar.html.erb +3 -3
  131. data/app/views/catalog/_show_tools.html.erb +9 -11
  132. data/app/views/catalog/_sms_form.html.erb +8 -4
  133. data/app/views/catalog/_sort_and_per_page.html.erb +3 -3
  134. data/app/views/catalog/_sort_widget.html.erb +7 -7
  135. data/app/views/catalog/_thumbnail.html.erb +5 -0
  136. data/app/views/catalog/_view_type_group.html.erb +2 -2
  137. data/app/views/catalog/citation.html.erb +1 -1
  138. data/app/views/catalog/citation.js.erb +9 -1
  139. data/app/views/catalog/email.html.erb +5 -5
  140. data/app/views/catalog/email_success.html.erb +11 -9
  141. data/app/views/catalog/facet.html.erb +5 -6
  142. data/app/views/catalog/index.atom.builder +10 -15
  143. data/app/views/catalog/index.html.erb +9 -11
  144. data/app/views/catalog/index.json.jbuilder +65 -3
  145. data/app/views/catalog/index.rss.builder +5 -5
  146. data/app/views/catalog/opensearch.xml.builder +10 -10
  147. data/app/views/catalog/show.html.erb +11 -6
  148. data/app/views/catalog/sms.html.erb +2 -3
  149. data/app/views/catalog/sms_success.html.erb +11 -10
  150. data/app/views/kaminari/blacklight/_first_page.html.erb +2 -2
  151. data/app/views/kaminari/blacklight/_gap.html.erb +2 -2
  152. data/app/views/kaminari/blacklight/_last_page.html.erb +2 -2
  153. data/app/views/kaminari/blacklight/_next_page.html.erb +4 -4
  154. data/app/views/kaminari/blacklight/_page.html.erb +3 -3
  155. data/app/views/kaminari/blacklight/_prev_page.html.erb +4 -4
  156. data/app/views/kaminari/blacklight_compact/_paginator.html.erb +4 -4
  157. data/app/views/layouts/blacklight.html.erb +14 -41
  158. data/app/views/layouts/blacklight/base.html.erb +43 -0
  159. data/app/views/layouts/catalog_result.html.erb +11 -0
  160. data/app/views/search_history/index.html.erb +16 -21
  161. data/app/views/{_flash_msg.html.erb → shared/_flash_msg.html.erb} +0 -0
  162. data/app/views/shared/_header_navbar.html.erb +8 -13
  163. data/app/views/shared/_modal.html.erb +6 -0
  164. data/app/views/shared/_user_util_links.html.erb +22 -0
  165. data/blacklight.gemspec +10 -11
  166. data/config/locales/blacklight.de.yml +0 -30
  167. data/config/locales/blacklight.en.yml +1 -27
  168. data/config/locales/blacklight.es.yml +0 -30
  169. data/config/locales/blacklight.fr.yml +0 -30
  170. data/config/locales/blacklight.hu.yml +210 -0
  171. data/config/locales/blacklight.it.yml +0 -30
  172. data/config/locales/blacklight.nl.yml +210 -0
  173. data/config/locales/blacklight.pt-BR.yml +6 -32
  174. data/config/locales/blacklight.sq.yml +1 -28
  175. data/config/locales/blacklight.zh.yml +0 -25
  176. data/config/routes.rb +3 -10
  177. data/db/migrate/20140202020202_create_bookmarks.rb +0 -1
  178. data/db/migrate/20140320000000_add_polymorphic_type_to_bookmarks.rb +1 -1
  179. data/lib/blacklight.rb +4 -5
  180. data/lib/blacklight/abstract_repository.rb +9 -21
  181. data/lib/blacklight/configuration.rb +82 -89
  182. data/lib/blacklight/configuration/context.rb +1 -1
  183. data/lib/blacklight/configuration/facet_field.rb +16 -9
  184. data/lib/blacklight/configuration/field.rb +32 -3
  185. data/lib/blacklight/configuration/fields.rb +41 -48
  186. data/lib/blacklight/configuration/search_field.rb +2 -2
  187. data/lib/blacklight/configuration/sort_field.rb +2 -2
  188. data/lib/blacklight/configuration/view_config.rb +4 -0
  189. data/lib/blacklight/engine.rb +6 -10
  190. data/lib/blacklight/exceptions.rb +4 -7
  191. data/lib/blacklight/nested_open_struct_with_hash_access.rb +107 -0
  192. data/lib/blacklight/open_struct_with_hash_access.rb +49 -0
  193. data/lib/blacklight/parameters.rb +1 -1
  194. data/lib/blacklight/routes/searchable.rb +1 -0
  195. data/lib/blacklight/search_builder.rb +26 -35
  196. data/lib/blacklight/search_state.rb +8 -8
  197. data/lib/blacklight/solr/repository.rb +3 -36
  198. data/lib/blacklight/solr/request.rb +1 -1
  199. data/lib/blacklight/solr/response.rb +29 -30
  200. data/lib/blacklight/solr/response/facets.rb +29 -31
  201. data/lib/blacklight/solr/response/group.rb +3 -3
  202. data/lib/blacklight/solr/response/group_response.rb +1 -1
  203. data/lib/blacklight/solr/response/more_like_this.rb +2 -2
  204. data/lib/blacklight/solr/response/response.rb +2 -2
  205. data/lib/blacklight/solr/response/spelling.rb +3 -3
  206. data/lib/blacklight/solr/search_builder_behavior.rb +25 -29
  207. data/lib/blacklight/version.rb +1 -1
  208. data/lib/generators/blacklight/assets_generator.rb +8 -8
  209. data/lib/generators/blacklight/controller_generator.rb +4 -5
  210. data/lib/generators/blacklight/document_generator.rb +1 -1
  211. data/lib/generators/blacklight/install_generator.rb +18 -21
  212. data/lib/generators/blacklight/search_builder_generator.rb +1 -1
  213. data/lib/generators/blacklight/{solr5_generator.rb → solr_generator.rb} +4 -6
  214. data/lib/generators/blacklight/templates/.solr_wrapper.yml +5 -0
  215. data/lib/generators/blacklight/templates/blacklight.scss +0 -2
  216. data/lib/generators/blacklight/templates/catalog_controller.rb +52 -51
  217. data/{solr → lib/generators/blacklight/templates/solr}/conf/_rest_managed.json +0 -0
  218. data/{solr → lib/generators/blacklight/templates/solr}/conf/admin-extra.html +0 -0
  219. data/{solr → lib/generators/blacklight/templates/solr}/conf/elevate.xml +0 -0
  220. data/{solr → lib/generators/blacklight/templates/solr}/conf/mapping-ISOLatin1Accent.txt +0 -0
  221. data/{solr → lib/generators/blacklight/templates/solr}/conf/protwords.txt +0 -0
  222. data/lib/generators/blacklight/templates/solr/conf/schema.xml +390 -0
  223. data/{solr → lib/generators/blacklight/templates/solr}/conf/scripts.conf +0 -0
  224. data/lib/generators/blacklight/templates/solr/conf/solrconfig.xml +195 -0
  225. data/{solr → lib/generators/blacklight/templates/solr}/conf/spellings.txt +0 -0
  226. data/{solr → lib/generators/blacklight/templates/solr}/conf/stopwords.txt +0 -0
  227. data/{solr → lib/generators/blacklight/templates/solr}/conf/stopwords_en.txt +0 -0
  228. data/{solr → lib/generators/blacklight/templates/solr}/conf/synonyms.txt +0 -0
  229. data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example.xsl +0 -0
  230. data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example_atom.xsl +0 -0
  231. data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example_rss.xsl +0 -0
  232. data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/luke.xsl +0 -0
  233. data/lib/generators/blacklight/test_support_generator.rb +10 -10
  234. data/lib/generators/blacklight/user_generator.rb +3 -6
  235. data/lib/railties/blacklight.rake +19 -14
  236. data/package-lock.json +2057 -0
  237. data/package.json +28 -0
  238. data/spec/controllers/alternate_controller_spec.rb +1 -1
  239. data/spec/controllers/application_controller_spec.rb +1 -1
  240. data/spec/controllers/blacklight/base_spec.rb +1 -1
  241. data/spec/controllers/blacklight/catalog/component_configuration_spec.rb +11 -7
  242. data/spec/controllers/blacklight/facet_spec.rb +1 -1
  243. data/spec/controllers/blacklight/search_fields_spec.rb +1 -13
  244. data/spec/controllers/bookmarks_controller_spec.rb +1 -36
  245. data/spec/controllers/catalog_controller_spec.rb +153 -53
  246. data/spec/controllers/search_history_controller_spec.rb +2 -2
  247. data/spec/features/alternate_controller_spec.rb +1 -1
  248. data/spec/features/autocomplete_spec.rb +2 -2
  249. data/spec/features/bookmarks_spec.rb +10 -10
  250. data/spec/features/did_you_mean_spec.rb +3 -9
  251. data/spec/features/facets_spec.rb +11 -11
  252. data/spec/features/record_view_spec.rb +1 -6
  253. data/spec/features/search_context_spec.rb +2 -2
  254. data/spec/features/search_filters_spec.rb +41 -41
  255. data/spec/features/search_formats_spec.rb +1 -1
  256. data/spec/features/search_history_spec.rb +1 -26
  257. data/spec/features/search_pagination_spec.rb +1 -1
  258. data/spec/features/search_results_spec.rb +3 -4
  259. data/spec/features/search_sort_spec.rb +2 -2
  260. data/spec/features/search_spec.rb +5 -10
  261. data/{solr → spec/fixtures}/sample_solr_documents.yml +688 -688
  262. data/spec/helpers/{configuration_helper_spec.rb → blacklight/configuration_helper_behavior_spec.rb} +70 -65
  263. data/spec/helpers/{facets_helper_spec.rb → blacklight/facets_helper_behavior_spec.rb} +7 -8
  264. data/spec/helpers/{hash_as_hidden_fields_spec.rb → blacklight/hash_as_hidden_fields_behavior_spec.rb} +1 -1
  265. data/spec/helpers/blacklight/icon_helper_behavior_spec.rb +8 -0
  266. data/spec/helpers/{layout_helper_spec.rb → blacklight/layout_helper_behavior_spec.rb} +5 -15
  267. data/spec/helpers/{render_constraints_helper_spec.rb → blacklight/render_constraints_helper_behavior_spec.rb} +2 -3
  268. data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +80 -0
  269. data/spec/helpers/{search_history_constraints_helper_spec.rb → blacklight/search_history_constraints_helper_behavior_spec.rb} +9 -9
  270. data/spec/helpers/{suggest_helper_spec.rb → blacklight/suggest_helper_behavior_spec.rb} +4 -2
  271. data/spec/helpers/{url_helper_spec.rb → blacklight/url_helper_behavior_spec.rb} +11 -15
  272. data/spec/helpers/blacklight_helper_spec.rb +36 -141
  273. data/spec/helpers/catalog_helper_spec.rb +37 -56
  274. data/spec/integration/generators/blacklight/{solr5_generator_spec.rb → solr_generator_spec.rb} +3 -3
  275. data/spec/lib/blacklight/configuration/facet_field_spec.rb +11 -0
  276. data/spec/lib/blacklight/configuration/field_spec.rb +12 -0
  277. data/spec/lib/blacklight/nested_open_struct_with_hash_access_spec.rb +17 -0
  278. data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +153 -0
  279. data/spec/lib/blacklight/parameters_spec.rb +1 -1
  280. data/spec/lib/blacklight/search_state_spec.rb +2 -2
  281. data/spec/lib/blacklight_spec.rb +1 -1
  282. data/spec/lib/tasks/blacklight_task_spec.rb +1 -1
  283. data/spec/models/blacklight/configurable_spec.rb +15 -16
  284. data/spec/models/blacklight/configuration/context_spec.rb +1 -1
  285. data/spec/models/blacklight/configuration_spec.rb +146 -135
  286. data/spec/models/blacklight/document/active_model_shim_spec.rb +11 -1
  287. data/spec/models/blacklight/document/cache_key_spec.rb +1 -1
  288. data/spec/models/blacklight/document/dublin_core_spec.rb +5 -5
  289. data/spec/models/blacklight/document/email_spec.rb +3 -3
  290. data/spec/models/blacklight/document/sms_spec.rb +3 -3
  291. data/spec/models/blacklight/document_spec.rb +3 -16
  292. data/spec/models/blacklight/facet_paginator_spec.rb +1 -1
  293. data/spec/models/blacklight/icon_spec.rb +34 -0
  294. data/spec/models/blacklight/search_builder_spec.rb +33 -27
  295. data/spec/models/blacklight/solr/document_spec.rb +18 -7
  296. data/spec/models/blacklight/solr/facet_paginator_spec.rb +1 -1
  297. data/spec/models/blacklight/solr/repository_spec.rb +32 -27
  298. data/spec/models/blacklight/solr/request_spec.rb +1 -1
  299. data/spec/models/blacklight/solr/response/facets_spec.rb +1 -1
  300. data/spec/models/blacklight/solr/response/group_response_spec.rb +1 -1
  301. data/spec/models/blacklight/solr/response/group_spec.rb +1 -1
  302. data/spec/models/blacklight/solr/response_spec.rb +9 -6
  303. data/spec/models/blacklight/solr/search_builder_spec.rb +35 -48
  304. data/spec/models/blacklight/suggest/response_spec.rb +4 -5
  305. data/spec/models/blacklight/suggest_search_spec.rb +14 -7
  306. data/spec/models/blacklight/user_spec.rb +1 -1
  307. data/spec/models/bookmark_spec.rb +1 -1
  308. data/spec/models/record_mailer_spec.rb +2 -2
  309. data/spec/models/search_spec.rb +1 -1
  310. data/spec/models/solr_document_spec.rb +3 -3
  311. data/spec/presenters/blacklight/search_bar_presenter_spec.rb +72 -0
  312. data/spec/presenters/index_presenter_spec.rb +70 -143
  313. data/spec/presenters/pipeline_spec.rb +4 -4
  314. data/spec/presenters/show_presenter_spec.rb +83 -145
  315. data/spec/presenters/thumbnail_presenter_spec.rb +171 -0
  316. data/spec/routing/catalog_routing_spec.rb +1 -17
  317. data/spec/services/blacklight/search_service_spec.rb +446 -0
  318. data/spec/spec_helper.rb +22 -9
  319. data/spec/test_app_templates/Gemfile.extra +2 -5
  320. data/spec/test_app_templates/lib/generators/test_app_generator.rb +1 -1
  321. data/spec/views/catalog/_constraints.html.erb_spec.rb +1 -3
  322. data/spec/views/catalog/_constraints_element.html.erb_spec.rb +8 -8
  323. data/spec/views/catalog/_document.html.erb_spec.rb +7 -7
  324. data/spec/views/catalog/_document_list.html.erb_spec.rb +1 -1
  325. data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +1 -1
  326. data/spec/views/catalog/_facet_layout.html.erb_spec.rb +6 -6
  327. data/spec/views/catalog/_facets.html.erb_spec.rb +2 -2
  328. data/spec/views/catalog/{_index_default.erb_spec.rb → _index.html.erb_spec.rb} +1 -1
  329. data/spec/views/catalog/{_index_header_default.html.erb_spec.rb → _index_header.html.erb_spec.rb} +4 -4
  330. data/spec/views/catalog/_paginate_compact.html.erb_spec.rb +4 -27
  331. data/spec/views/catalog/_search_header.erb_spec.rb +1 -3
  332. data/spec/views/catalog/{_show_default.erb_spec.rb → _show.html.erb_spec.rb} +1 -1
  333. data/spec/views/catalog/_show_sidebar.erb_spec.rb +3 -3
  334. data/spec/views/catalog/_show_tools.html.erb_spec.rb +3 -3
  335. data/spec/views/catalog/_sort_and_per_page.html.erb_spec.rb +1 -1
  336. data/spec/views/catalog/{_thumbnail_default.erb_spec.rb → _thumbnail.html.erb_spec.rb} +3 -3
  337. data/spec/views/catalog/_view_type_group.html.erb_spec.rb +5 -1
  338. data/spec/views/catalog/email_success.html.erb_spec.rb +9 -0
  339. data/spec/views/catalog/facet.html.erb_spec.rb +1 -1
  340. data/spec/views/catalog/facet.json.jbuilder_spec.rb +1 -1
  341. data/spec/views/catalog/index.atom.builder_spec.rb +2 -2
  342. data/spec/views/catalog/index.html.erb_spec.rb +4 -7
  343. data/spec/views/catalog/index.json.jbuilder_spec.rb +66 -21
  344. data/spec/views/catalog/opensearch.xml.builder_spec.rb +1 -1
  345. data/spec/views/catalog/show.html.erb_spec.rb +2 -2
  346. data/spec/views/catalog/sms_success.html.erb_spec.rb +9 -0
  347. data/spec/views/{_user_util_links.html.erb_spec.rb → shared/_user_util_links.html.erb_spec.rb} +4 -4
  348. data/tasks/blacklight.rake +10 -8
  349. data/template.demo.rb +1 -11
  350. metadata +171 -189
  351. data/app/assets/javascripts/blacklight/autofocus.js +0 -16
  352. data/app/assets/javascripts/blacklight/bookmark_toggle.js +0 -23
  353. data/app/assets/javascripts/blacklight/checkbox_submit.js +0 -139
  354. data/app/assets/javascripts/blacklight/core.js +0 -30
  355. data/app/controllers/concerns/blacklight/request_builders.rb +0 -77
  356. data/app/controllers/concerns/blacklight/saved_searches.rb +0 -70
  357. data/app/controllers/concerns/blacklight/search_helper.rb +0 -161
  358. data/app/controllers/concerns/blacklight/suggest.rb +0 -25
  359. data/app/controllers/saved_searches_controller.rb +0 -4
  360. data/app/controllers/suggest_controller.rb +0 -4
  361. data/app/helpers/blacklight/deprecated_url_helper_behavior.rb +0 -57
  362. data/app/helpers/blacklight/render_partials_helper.rb +0 -205
  363. data/app/helpers/blacklight_configuration_helper.rb +0 -4
  364. data/app/helpers/blacklight_url_helper.rb +0 -4
  365. data/app/helpers/component_helper.rb +0 -4
  366. data/app/helpers/facets_helper.rb +0 -4
  367. data/app/helpers/hash_as_hidden_fields_helper.rb +0 -4
  368. data/app/helpers/layout_helper.rb +0 -4
  369. data/app/helpers/render_constraints_helper.rb +0 -4
  370. data/app/helpers/search_history_constraints_helper.rb +0 -4
  371. data/app/helpers/suggest_helper.rb +0 -4
  372. data/app/models/concerns/blacklight/solr/document/more_like_this.rb +0 -6
  373. data/app/presenters/blacklight/document_presenter.rb +0 -153
  374. data/app/views/_user_util_links.html.erb +0 -26
  375. data/app/views/blacklight/nav/_saved_searches.html.erb +0 -1
  376. data/app/views/catalog/_index_default.html.erb +0 -12
  377. data/app/views/catalog/_show_default.html.erb +0 -10
  378. data/app/views/catalog/_thumbnail_default.html.erb +0 -5
  379. data/app/views/saved_searches/index.html.erb +0 -32
  380. data/app/views/shared/_ajax_modal.html.erb +0 -6
  381. data/lib/blacklight/utils.rb +0 -183
  382. data/lib/generators/blacklight/solr4_generator.rb +0 -31
  383. data/solr/conf/schema.xml +0 -627
  384. data/solr/conf/solrconfig.xml +0 -411
  385. data/spec/controllers/blacklight/search_helper_spec.rb +0 -489
  386. data/spec/controllers/saved_searches_controller_spec.rb +0 -32
  387. data/spec/controllers/suggest_controller_spec.rb +0 -17
  388. data/spec/features/saved_searches_spec.rb +0 -47
  389. data/spec/helpers/deprecated_url_helper_behavior_spec.rb +0 -101
  390. data/spec/lib/blacklight/utils_spec.rb +0 -167
  391. data/spec/models/blacklight/solr/document/more_like_this_spec.rb +0 -18
  392. data/spec/presenters/document_presenter_spec.rb +0 -438
  393. data/spec/support/backport_test.rb +0 -14
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- describe SavedSearchesController do
4
- routes { Blacklight::Engine.routes }
5
-
6
- before(:all) do
7
- @one = Search.create
8
- @two = Search.create
9
- @three = Search.create
10
- end
11
-
12
- before(:each) do
13
- @user = User.create! :email => 'test@example.com', :password => 'abcd12345', :password_confirmation => 'abcd12345'
14
- sign_in @user
15
- end
16
-
17
- describe "save" do
18
- it "lets you save a search" do
19
- request.env["HTTP_REFERER"] = "where_i_came_from"
20
- session[:history] = [@one.id]
21
- post :save, params: { id: @one.id }
22
- expect(response).to redirect_to "where_i_came_from"
23
- end
24
-
25
- it "does not let you save a search that isn't in your search history" do
26
- session[:history] = [@one.id]
27
- expect {
28
- post :save, params: { id: @two.id }
29
- }.to raise_error ActiveRecord::RecordNotFound
30
- end
31
- end
32
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- describe SuggestController do
4
- routes { Blacklight::Engine.routes }
5
- describe 'GET index' do
6
- it 'returns JSON' do
7
- get :index, params: { format: 'json' }
8
- expect(response.body).to eq [].to_json
9
- end
10
- it 'returns suggestions' do
11
- get :index, params: { format: 'json', q: 'new' }
12
- json = JSON.parse(response.body)
13
- expect(json.count).to eq 3
14
- expect(json.first['term']).to eq 'new jersey'
15
- end
16
- end
17
- end
@@ -1,47 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- describe "Saved Searches" do
4
- before do
5
- sign_in 'user1'
6
- visit root_path
7
- end
8
-
9
- it "is empty" do
10
- click_link 'Saved Searches'
11
- expect(page).to have_content 'You have no saved searches'
12
- end
13
-
14
- describe "with a saved search 'book'" do
15
- before do
16
- fill_in "q", with: 'book'
17
- click_button 'search'
18
- click_link "History"
19
- click_button "save"
20
- click_link 'Saved Searches'
21
- end
22
- it "shows saved searches" do
23
- expect(page).to have_content 'Your saved searches'
24
- expect(page).to have_content 'book'
25
- end
26
- it "deletes saved searches" do
27
- click_button 'delete'
28
- expect(page).to have_content 'Successfully removed that saved search.'
29
- end
30
-
31
- describe "and a saved search 'dang'" do
32
- before do
33
- visit root_path
34
- fill_in "q", with: 'dang'
35
- click_button 'search'
36
- click_link "History"
37
- click_button "save"
38
- click_link 'Saved Searches'
39
- end
40
- it "clears the searhes" do
41
- click_link "Clear Saved Searches"
42
- expect(page).to have_content 'Cleared your saved searches.'
43
- expect(page).to have_content 'You have no saved searches'
44
- end
45
- end
46
- end
47
- end
@@ -1,101 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- describe Blacklight::DeprecatedUrlHelperBehavior do
4
- around do |test|
5
- Deprecation.silence(described_class) do
6
- test.call
7
- end
8
- end
9
-
10
- let(:parameter_class) { ActionController::Parameters }
11
- let(:search_state) { Blacklight::SearchState.new(params, blacklight_config) }
12
- let(:params) { parameter_class.new }
13
- let(:blacklight_config) { Blacklight::Configuration.new }
14
-
15
- before do
16
- allow(helper).to receive(:search_state).and_return(search_state)
17
- allow(helper).to receive(:params).and_return(params)
18
- allow(helper).to receive(:blacklight_config).and_return(blacklight_config)
19
- allow(controller).to receive(:search_state_class).and_return(Blacklight::SearchState)
20
- end
21
-
22
- describe '#params_for_search' do
23
- it 'passes through to the search state' do
24
- expect(helper.params_for_search).to eq search_state.params_for_search
25
- end
26
-
27
- it 'passes arguments through to the search state' do
28
- expect(helper.params_for_search(merge: 1)).to eq search_state.params_for_search(merge: 1)
29
- end
30
-
31
- it 'generates a search state for the source parameters' do
32
- expect(helper.params_for_search(parameter_class.new(source: 1), { merge: 1 })).to include merge: 1, source: 1
33
- end
34
- end
35
-
36
- describe '#sanitize_search_params' do
37
- it 'passes through to the parameter sanitizer' do
38
- expect(helper.sanitize_search_params(a: 1)).to eq Blacklight::Parameters.sanitize(a: 1)
39
- end
40
- end
41
-
42
- describe '#reset_search_params' do
43
- let(:source_parameters) { parameter_class.new page: 1, counter: 10 }
44
- it 'resets the current page and counter' do
45
- expect(helper.reset_search_params(source_parameters)).to be_blank
46
- end
47
- end
48
-
49
- describe '#add_facet_params' do
50
- before do
51
- blacklight_config.add_facet_field 'x'
52
- end
53
-
54
- let(:field) { blacklight_config.facet_fields['x'] }
55
- let(:item) { true }
56
-
57
- it 'passes through to the search state' do
58
- expect(helper.add_facet_params(field, item)).to eq search_state.add_facet_params(field, item)
59
- end
60
-
61
- context "with source_parameters" do
62
- let(:source_parameters) { parameter_class.new source: 1 }
63
- it 'generates a search state for the source parameters' do
64
- expect(helper.add_facet_params(field, item, source_parameters)).to include source: 1
65
- end
66
- end
67
- end
68
-
69
- describe '#add_facet_params_and_redirect' do
70
- before do
71
- blacklight_config.add_facet_field 'x'
72
- end
73
-
74
- let(:field) { blacklight_config.facet_fields['x'] }
75
- let(:item) { true }
76
-
77
- it 'passes through to the search state' do
78
- expect(helper.add_facet_params_and_redirect(field, item)).to eq search_state.add_facet_params_and_redirect(field, item)
79
- end
80
- end
81
-
82
- describe '#remove_facet_params' do
83
- before do
84
- blacklight_config.add_facet_field 'x'
85
- end
86
-
87
- let(:field) { blacklight_config.facet_fields['x'] }
88
- let(:item) { true }
89
-
90
- it 'passes through to the search state' do
91
- expect(helper.remove_facet_params(field, item)).to eq search_state.remove_facet_params(field, item)
92
- end
93
-
94
- context "with source_parameters" do
95
- let(:source_parameters) { parameter_class.new source: 1 }
96
- it 'generates a search state for the source parameters' do
97
- expect(helper.remove_facet_params(field, item, source_parameters)).to include source: 1
98
- end
99
- end
100
- end
101
- end
@@ -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