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,280 +1,288 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- describe "Blacklight::Solr::Document" do
4
- class MockDocument
5
- include Blacklight::Solr::Document
6
- end
3
+ RSpec.describe "Blacklight::Solr::Document", api: true do
4
+ class MockDocument
5
+ include Blacklight::Solr::Document
6
+ end
7
7
 
8
- module MockExtension
9
- def my_extension_method
10
- "my_extension_results"
11
- end
8
+ module MockExtension
9
+ def my_extension_method
10
+ "my_extension_results"
12
11
  end
12
+ end
13
13
 
14
- module MockSecondExtension
15
- def my_extension_method
16
- "override"
17
- end
14
+ module MockSecondExtension
15
+ def my_extension_method
16
+ "override"
18
17
  end
18
+ end
19
19
 
20
- context "Hashy methods" do
21
- it 'should create a doc with hashy methods' do
22
- doc = SolrDocument.new({'id'=>'SP2514N','inStock'=>true,'manu'=>'Samsung Electronics Co. Ltd.','name'=>'Samsung SpinPoint P120 SP2514N - hard drive - 250 GB - ATA-133','popularity'=>6,'price'=>92.0,'sku'=>'SP2514N','timestamp'=>'2009-03-20T14:42:49.795Z','cat'=>['electronics','hard drive'],'spell'=>['Samsung SpinPoint P120 SP2514N - hard drive - 250 GB - ATA-133'],'features'=>['7200RPM, 8MB cache, IDE Ultra ATA-133','NoiseGuard, SilentSeek technology, Fluid Dynamic Bearing (FDB) motor']})
20
+ context "Hashy methods" do
21
+ it 'creates a doc with hashy methods' do
22
+ doc = SolrDocument.new('id' => 'SP2514N', 'inStock' => true, 'manu' => 'Samsung Electronics Co. Ltd.', 'name' => 'Samsung SpinPoint P120 SP2514N - hard drive - 250 GB - ATA-133', 'popularity' => 6, 'price' => 92.0, 'sku' => 'SP2514N', 'timestamp' => '2009-03-20T14:42:49.795Z', 'cat' => ['electronics', 'hard drive'], 'spell' => ['Samsung SpinPoint P120 SP2514N - hard drive - 250 GB - ATA-133'], 'features' => ['7200RPM, 8MB cache, IDE Ultra ATA-133', 'NoiseGuard, SilentSeek technology, Fluid Dynamic Bearing (FDB) motor'])
23
23
 
24
- expect(doc.has?(:cat, /^elec/)).to eq true
25
- expect(doc.has?(:cat, 'elec')).not_to eq true
26
- expect(doc.has?(:cat, 'electronics')).to eq true
24
+ expect(doc.has?(:cat, /^elec/)).to eq true
25
+ expect(doc.has?(:cat, 'elec')).not_to eq true
26
+ expect(doc.has?(:cat, 'electronics')).to eq true
27
27
 
28
- expect(doc.fetch(:cat)).to eq ['electronics', 'hard drive']
29
- expect(doc.fetch(:xyz, nil)).to be_nil
30
- expect(doc.fetch(:xyz, 'def')).to eq 'def'
31
- expect(doc.fetch(:xyz) { |el| 'def' }).to eq 'def'
32
- expect { doc.fetch(:xyz) }.to raise_exception(KeyError)
33
- end
28
+ expect(doc.fetch(:cat)).to eq ['electronics', 'hard drive']
29
+ expect(doc.fetch(:xyz, nil)).to be_nil
30
+ expect(doc.fetch(:xyz, 'def')).to eq 'def'
31
+ expect(doc.fetch(:xyz) { |_el| 'def' }).to eq 'def'
32
+ expect { doc.fetch(:xyz) }.to raise_exception(KeyError)
34
33
  end
34
+ end
35
35
 
36
-
37
- context "Unique Key" do
38
- before(:each) do
39
- MockDocument.unique_key = 'my_unique_key'
40
- end
36
+ context "Unique Key" do
37
+ before do
38
+ MockDocument.unique_key = 'my_unique_key'
39
+ end
41
40
 
42
- after(:each) do
43
- MockDocument.unique_key = 'id'
44
- end
45
- it "should use a configuration-defined document unique key" do
46
- @document = MockDocument.new :id => 'asdf', :my_unique_key => '1234'
47
- expect(@document.id).to eq '1234'
48
- end
41
+ after do
42
+ MockDocument.unique_key = 'id'
43
+ end
49
44
 
45
+ it "uses a configuration-defined document unique key" do
46
+ @document = MockDocument.new id: 'asdf', my_unique_key: '1234'
47
+ expect(@document.id).to eq '1234'
50
48
  end
49
+ end
51
50
 
52
- describe "Primary key" do
53
- before(:each) do
54
- MockDocument.unique_key = 'my_unique_key'
55
- end
56
- after(:each) do
57
- MockDocument.unique_key = 'id'
58
- end
59
- it "should be the same as the unique key" do
60
- expect(MockDocument.primary_key).to eq MockDocument.unique_key
61
- end
51
+ describe "Primary key" do
52
+ before do
53
+ MockDocument.unique_key = 'my_unique_key'
62
54
  end
63
55
 
64
- describe "#to_param" do
65
- it "should be a string" do
66
- @document = MockDocument.new :id => 1234
67
- expect(@document.to_param).to eq '1234'
68
- end
56
+ after do
57
+ MockDocument.unique_key = 'id'
69
58
  end
70
59
 
71
- context "Extendability" do
72
- before(:each) do
73
- #Clear extensions
74
- MockDocument.registered_extensions = []
75
- end
76
-
77
- it "should let you register an extension" do
78
- MockDocument.use_extension(MockExtension) { |doc| true }
60
+ it "is the same as the unique key" do
61
+ expect(MockDocument.primary_key).to eq MockDocument.unique_key
62
+ end
63
+ end
79
64
 
80
- expect(MockDocument.registered_extensions.find {|a| a[:module_obj] == MockExtension}).not_to be_nil
81
- end
82
- it "should let you register an extension with a nil condition proc" do
83
- MockDocument.use_extension(MockExtension) { |doc| true }
84
- expect(MockDocument.registered_extensions.find {|a| a[:module_obj] == MockExtension}).not_to be_nil
85
- end
86
- it "should apply an extension whose condition is met" do
87
- MockDocument.use_extension(MockExtension) {|doc| true}
88
- doc = MockDocument.new()
65
+ describe "#to_param" do
66
+ it "is a string" do
67
+ @document = MockDocument.new id: 1234
68
+ expect(@document.to_param).to eq '1234'
69
+ end
70
+ end
89
71
 
90
- expect(doc.methods.find {|name| name.to_s == "my_extension_method"}).not_to be_nil
91
- expect(doc.my_extension_method.to_s).to eq "my_extension_results"
92
- end
93
- it "should apply an extension based on a Solr field" do
94
- MockDocument.use_extension(MockExtension) {|doc| doc.key?(:required_key)}
72
+ context "Extendability" do
73
+ before do
74
+ # Clear extensions
75
+ MockDocument.registered_extensions = []
76
+ end
95
77
 
96
- with_extension = MockDocument.new(:required_key => "value")
97
- expect(with_extension.my_extension_method.to_s).to eq "my_extension_results"
78
+ it "lets you register an extension" do
79
+ MockDocument.use_extension(MockExtension) { |_doc| true }
98
80
 
99
- without_extension = MockDocument.new(:other_key => "value")
100
- expect(without_extension.methods.find {|name| name.to_s == "my_extension_method"}).to be_nil
101
-
102
- end
103
- it "should not apply an extension whose condition is not met" do
104
- MockDocument.use_extension(MockExtension) {|doc| false}
105
- doc = MockDocument.new()
106
-
107
- expect(doc.methods.find {|name| name.to_s == "my_extension_method"}).to be_nil
108
- end
109
- it "should treat a nil condition as always applyable" do
110
- MockDocument.use_extension(MockExtension)
111
-
112
- doc = MockDocument.new()
113
-
114
- expect(doc.methods.find {|name | name.to_s =="my_extension_method"}).not_to be_nil
115
- expect(doc.my_extension_method).to eq "my_extension_results"
116
- end
117
- it "should let last extension applied override earlier extensions" do
118
- MockDocument.use_extension(MockExtension)
119
- MockDocument.use_extension(MockSecondExtension)
81
+ expect(MockDocument.registered_extensions.find { |a| a[:module_obj] == MockExtension }).not_to be_nil
82
+ end
83
+ it "lets you register an extension with a nil condition proc" do
84
+ MockDocument.use_extension(MockExtension) { |_doc| true }
85
+ expect(MockDocument.registered_extensions.find { |a| a[:module_obj] == MockExtension }).not_to be_nil
86
+ end
87
+ it "applies an extension whose condition is met" do
88
+ MockDocument.use_extension(MockExtension) { |_doc| true }
89
+ doc = MockDocument.new
120
90
 
121
- expect(MockDocument.new().my_extension_method.to_s).to eq "override"
122
- end
91
+ expect(doc.methods.find { |name| name.to_s == "my_extension_method" }).not_to be_nil
92
+ expect(doc.my_extension_method.to_s).to eq "my_extension_results"
93
+ end
94
+ it "applies an extension based on a Solr field" do
95
+ MockDocument.use_extension(MockExtension) { |doc| doc.key?(:required_key) }
123
96
 
124
- describe "extension_parameters class-level hash" do
125
- it "should provide an extension_parameters hash at the class level" do
126
- MockDocument.extension_parameters[:key] = "value"
127
- expect(MockDocument.extension_parameters[:key]).to eq "value"
128
- end
129
-
130
- it "extension_parameters should not be shared between classes" do
131
- class_one = Class.new do
132
- include Blacklight::Solr::Document
133
- end
134
- class_two = Class.new do
135
- include Blacklight::Solr::Document
136
- end
137
-
138
- class_one.extension_parameters[:key] = "class_one_value"
139
- class_two.extension_parameters[:key] = "class_two_value"
140
-
141
- expect(class_one.extension_parameters[:key]).to eq "class_one_value"
142
- end
143
- end
144
-
97
+ with_extension = MockDocument.new(required_key: "value")
98
+ expect(with_extension.my_extension_method.to_s).to eq "my_extension_results"
99
+
100
+ without_extension = MockDocument.new(other_key: "value")
101
+ expect(without_extension.methods.find { |name| name.to_s == "my_extension_method" }).to be_nil
145
102
  end
103
+ it "does not apply an extension whose condition is not met" do
104
+ MockDocument.use_extension(MockExtension) { |_doc| false }
105
+ doc = MockDocument.new
146
106
 
147
- context "Will export as" do
148
- class MockDocument
149
- include Blacklight::Solr::Document
107
+ expect(doc.methods.find { |name| name.to_s == "my_extension_method" }).to be_nil
108
+ end
109
+ it "treats a nil condition as always applyable" do
110
+ MockDocument.use_extension(MockExtension)
150
111
 
151
- def export_as_marc
152
- "fake_marc"
153
- end
154
- end
112
+ doc = MockDocument.new
155
113
 
156
- it "reports it's exportable formats properly" do
157
- doc = MockDocument.new
158
- doc.will_export_as(:marc, "application/marc" )
159
- expect(doc.export_formats).to have_key(:marc)
160
- expect(doc.export_formats[:marc][:content_type]).to eq "application/marc"
161
- end
114
+ expect(doc.methods.find { |name| name.to_s == "my_extension_method" }).not_to be_nil
115
+ expect(doc.my_extension_method).to eq "my_extension_results"
116
+ end
117
+ it "lets last extension applied override earlier extensions" do
118
+ MockDocument.use_extension(MockExtension)
119
+ MockDocument.use_extension(MockSecondExtension)
120
+
121
+ expect(MockDocument.new.my_extension_method.to_s).to eq "override"
122
+ end
162
123
 
163
- it "looks up content-type from Mime::Type if not given in arg" do
164
- doc = MockDocument.new
165
- doc.will_export_as(:html)
166
- expect(doc.export_formats).to have_key(:html)
124
+ describe "extension_parameters class-level hash" do
125
+ it "provides an extension_parameters hash at the class level" do
126
+ MockDocument.extension_parameters[:key] = "value"
127
+ expect(MockDocument.extension_parameters[:key]).to eq "value"
167
128
  end
168
129
 
169
- context "format not registered with Mime::Type" do
170
- before(:all) do
171
- @doc = MockDocument.new
172
- @doc.will_export_as(:mock2, "application/mock2" )
173
- # Mime::Type doesn't give us a good way to clean up our new
174
- # registration in an after, sorry.
130
+ it "extension_parameters should not be shared between classes" do
131
+ class_one = Class.new do
132
+ include Blacklight::Solr::Document
175
133
  end
176
- it "registers format" do
177
- expect(defined?("Mime::MOCK2")).to be_truthy
134
+ class_two = Class.new do
135
+ include Blacklight::Solr::Document
178
136
  end
179
- it "registers as alias only" do
180
- expect(Mime::Type.lookup("application/mock2")).not_to equal Mime::Type.lookup_by_extension("mock2")
181
- end
182
- end
183
137
 
184
- it "export_as(:format) by calling export_as_format" do
185
- doc = MockDocument.new
186
- doc.will_export_as(:marc, "application/marc")
187
- expect(doc.export_as(:marc)).to eq "fake_marc"
188
- end
189
-
190
- it "should know if a document is exportable" do
191
- doc = MockDocument.new
192
- doc.will_export_as(:marc, "application/marc")
193
- expect(doc.exports_as?(:marc)).to be true
138
+ class_one.extension_parameters[:key] = "class_one_value"
139
+ class_two.extension_parameters[:key] = "class_two_value"
140
+
141
+ expect(class_one.extension_parameters[:key]).to eq "class_one_value"
194
142
  end
195
143
  end
144
+ end
196
145
 
197
- context "to_semantic_fields" do
198
- class MockDocument
199
- include Blacklight::Solr::Document
200
- end
201
- before do
202
- MockDocument.field_semantics.merge!(
203
- title: ["title_field", "other_title"],
204
- author: "author_field",
205
- something: "something_field"
206
- )
207
-
208
- @doc1 = MockDocument.new(
209
- "title_field" => "doc1 title",
210
- "other_title" => "doc1 title other",
211
- "something_field" => ["val1", "val2"],
212
- "not_in_list_field" => "weird stuff"
213
- )
146
+ context "Will export as" do
147
+ class MockDocument
148
+ include Blacklight::Solr::Document
149
+
150
+ def export_as_marc
151
+ "fake_marc"
214
152
  end
153
+ end
154
+
155
+ it "reports it's exportable formats properly" do
156
+ doc = MockDocument.new
157
+ doc.will_export_as(:marc, "application/marc")
158
+ expect(doc.export_formats).to have_key(:marc)
159
+ expect(doc.export_formats[:marc][:content_type]).to eq "application/marc"
160
+ end
215
161
 
216
- it "should return complete dictionary based on config'd fields" do
217
- expect(@doc1.to_semantic_values)
218
- .to eq title: ["doc1 title", "doc1 title other"], something: ["val1", "val2"]
219
- end
220
- it "should return empty array for a key without a value" do
221
- expect(@doc1.to_semantic_values[:author]).to be_empty
222
- expect(@doc1.to_semantic_values[:nonexistent_token]).to be_empty
162
+ it "looks up content-type from Mime::Type if not given in arg" do
163
+ doc = MockDocument.new
164
+ doc.will_export_as(:html)
165
+ expect(doc.export_formats).to have_key(:html)
166
+ end
167
+
168
+ context "format not registered with Mime::Type" do
169
+ before(:all) do
170
+ @doc = MockDocument.new
171
+ @doc.will_export_as(:mock2, "application/mock2")
172
+ # Mime::Type doesn't give us a good way to clean up our new
173
+ # registration in an after, sorry.
223
174
  end
224
- it "should return an array even for a single-value field" do
225
- expect(@doc1.to_semantic_values[:title]).to be_kind_of(Array)
175
+
176
+ it "registers format" do
177
+ expect(defined?("Mime::MOCK2")).to be_truthy
226
178
  end
227
- it "should return complete array for a multi-value field" do
228
- expect(@doc1.to_semantic_values[:something]).to eq ["val1", "val2"]
179
+ it "registers as alias only" do
180
+ expect(Mime::Type.lookup("application/mock2")).not_to equal Mime::Type.lookup_by_extension("mock2")
229
181
  end
230
-
231
182
  end
232
183
 
233
- context "highlighting" do
184
+ it "export_as(:format) by calling export_as_format" do
185
+ doc = MockDocument.new
186
+ doc.will_export_as(:marc, "application/marc")
187
+ expect(doc.export_as(:marc)).to eq "fake_marc"
188
+ end
234
189
 
235
- before(:all) do
236
- @document = MockDocument.new({'id' => 'doc1', 'title_field' => 'doc1 title'}, {'highlighting' => { 'doc1' => { 'title_text' => ['doc <em>1</em>']}, 'doc2' => { 'title_text' => ['doc 2']}}})
190
+ it "knows if a document is exportable" do
191
+ doc = MockDocument.new
192
+ doc.will_export_as(:marc, "application/marc")
193
+ expect(doc.exports_as?(:marc)).to be true
194
+ end
195
+ end
237
196
 
238
- end
197
+ context "to_semantic_fields" do
198
+ class MockDocument
199
+ include Blacklight::Solr::Document
200
+ end
201
+ before do
202
+ MockDocument.field_semantics.merge!(
203
+ title: %w[title_field other_title],
204
+ author: "author_field",
205
+ something: "something_field"
206
+ )
207
+
208
+ @doc1 = MockDocument.new(
209
+ "title_field" => "doc1 title",
210
+ "other_title" => "doc1 title other",
211
+ "something_field" => %w[val1 val2],
212
+ "not_in_list_field" => "weird stuff"
213
+ )
214
+ end
239
215
 
240
- describe "#has_highlight_field?" do
241
- it "should be true if the highlight field is in the solr response" do
242
- expect(@document).to have_highlight_field 'title_text'
243
- expect(@document).to have_highlight_field :title_text
244
- end
216
+ it "returns complete dictionary based on config'd fields" do
217
+ expect(@doc1.to_semantic_values)
218
+ .to eq title: ["doc1 title", "doc1 title other"], something: %w[val1 val2]
219
+ end
220
+ it "returns empty array for a key without a value" do
221
+ expect(@doc1.to_semantic_values[:author]).to be_empty
222
+ expect(@doc1.to_semantic_values[:nonexistent_token]).to be_empty
223
+ end
224
+ it "returns an array even for a single-value field" do
225
+ expect(@doc1.to_semantic_values[:title]).to be_kind_of(Array)
226
+ end
227
+ it "returns complete array for a multi-value field" do
228
+ expect(@doc1.to_semantic_values[:something]).to eq %w[val1 val2]
229
+ end
230
+ end
245
231
 
246
- it "should be false if the highlight field isn't in the solr response" do
247
- expect(@document).to_not have_highlight_field 'nonexisting_field'
248
- end
232
+ context "highlighting" do
233
+ before(:all) do
234
+ @document = MockDocument.new({ 'id' => 'doc1', 'title_field' => 'doc1 title' }, 'highlighting' => { 'doc1' => { 'title_tsimext' => ['doc <em>1</em>'] }, 'doc2' => { 'title_tsimext' => ['doc 2'] } })
235
+ end
236
+
237
+ describe "#has_highlight_field?" do
238
+ it "is true if the highlight field is in the solr response" do
239
+ expect(@document).to have_highlight_field 'title_tsimext'
240
+ expect(@document).to have_highlight_field :title_tsimext
249
241
  end
250
242
 
251
- describe "#highlight_field" do
252
- it "should return a value" do
253
- expect(@document.highlight_field('title_text')).to include('doc <em>1</em>')
254
- end
243
+ it "is false if the highlight field isn't in the solr response" do
244
+ expect(@document).not_to have_highlight_field 'nonexisting_field'
245
+ end
246
+ end
255
247
 
248
+ describe "#highlight_field" do
249
+ it "returns a value" do
250
+ expect(@document.highlight_field('title_tsimext')).to include('doc <em>1</em>')
251
+ end
256
252
 
257
- it "should return a value that is html safe" do
258
- expect(@document.highlight_field('title_text').first).to be_html_safe
259
- end
253
+ it "returns a value that is html safe" do
254
+ expect(@document.highlight_field('title_tsimext').first).to be_html_safe
255
+ end
260
256
 
261
- it "should return nil when the field doesn't exist" do
262
- expect(@document.highlight_field('nonexisting_field')).to be_nil
263
- end
257
+ it "returns nil when the field doesn't exist" do
258
+ expect(@document.highlight_field('nonexisting_field')).to be_nil
264
259
  end
265
260
  end
261
+ end
266
262
 
267
263
  describe "#first" do
268
- it "should get the first value from a multi-valued field" do
269
- doc = SolrDocument.new :multi => ['a', 'b']
270
- expect(doc.first :multi).to eq("a")
264
+ it "gets the first value from a multi-valued field" do
265
+ doc = SolrDocument.new multi: %w[a b]
266
+ expect(doc.first(:multi)).to eq("a")
267
+ end
268
+
269
+ it "gets the value from a single-valued field" do
270
+ doc = SolrDocument.new single: 'a'
271
+ expect(doc.first(:single)).to eq("a")
271
272
  end
273
+ end
274
+
275
+ describe '#more_like_this' do
276
+ subject(:result) { document.more_like_this }
272
277
 
273
- it "should get the value from a single-valued field" do
274
- doc = SolrDocument.new :single => 'a'
275
- expect(doc.first :single).to eq("a")
278
+ let(:response) { instance_double(Blacklight::Solr::Response, more_like: [{ 'id' => 'abc' }]) }
279
+ let(:document) { MockDocument.new({ id: '123' }, response) }
276
280
 
281
+ it "plucks the MoreLikeThis results from the Solr Response" do
282
+ expect(result).to have(1).item
283
+ expect(result.first).to be_a_kind_of(MockDocument)
284
+ expect(result.first.id).to eq 'abc'
285
+ expect(result.first.solr_response).to eq response
277
286
  end
278
287
  end
279
-
280
288
  end
@@ -1,12 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- describe Blacklight::Solr::FacetPaginator do
3
+ RSpec.describe Blacklight::Solr::FacetPaginator, api: true do
4
4
  let(:f1) { Blacklight::Solr::Response::Facets::FacetItem.new(hits: '792', value: 'Book') }
5
+
5
6
  describe "#as_json" do
6
7
  subject { described_class.new([f1], offset: 0, limit: nil).as_json }
7
- it "should be well structured" do
8
- expect(subject).to eq("items" => [{"hits"=>"792", "value"=>"Book"}], "limit" => nil,
9
- "offset" => 0, "sort" => "index")
8
+
9
+ it "is well structured" do
10
+ expect(subject).to eq("items" => [{ "hits" => "792", "value" => "Book" }], "limit" => nil,
11
+ "offset" => 0, "sort" => "index")
10
12
  end
11
13
  end
12
14