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,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- describe 'Blacklight::Document::ActiveModelShim' do
4
-
3
+ RSpec.describe 'Blacklight::Document::ActiveModelShim', api: true do
5
4
  class MockDocument
6
5
  include Blacklight::Document
7
6
  include Blacklight::Document::ActiveModelShim
@@ -16,18 +15,28 @@ describe 'Blacklight::Document::ActiveModelShim' do
16
15
  end
17
16
 
18
17
  def documents
19
- response.collect {|doc| MockDocument.new(doc, self)}
18
+ response.collect { |doc| MockDocument.new(doc, self) }
20
19
  end
21
20
  end
22
21
 
23
22
  before do
24
- allow(MockDocument).to receive(:repository).and_return(double(find: MockResponse.new([{id: 1}], {})))
23
+ allow(MockDocument).to receive(:repository).and_return(double(find: MockResponse.new([{ id: 1 }], {})))
25
24
  end
26
-
25
+
27
26
  describe "#find" do
28
- it "should return a document from the repository" do
27
+ it "returns a document from the repository" do
29
28
  expect(MockDocument.find(1)).to be_a MockDocument
30
29
  expect(MockDocument.find(1).id).to be 1
31
30
  end
32
31
  end
32
+
33
+ describe "#==" do
34
+ it 'is equal for the same id' do
35
+ expect(MockDocument.new(id: 1) == MockDocument.new(id: 1)).to eq true
36
+ end
37
+
38
+ it 'is not equal if the ids differ' do
39
+ expect(MockDocument.new(id: 1) == MockDocument.new(id: 2)).to eq false
40
+ end
41
+ end
33
42
  end
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- describe Blacklight::Document::CacheKey do
3
+ RSpec.describe Blacklight::Document::CacheKey, api: true do
4
4
  let(:attributes) { {} }
5
5
  let(:subject) { SolrDocument.new(attributes) }
6
+
6
7
  it 'SolrDocument includes the module' do
7
8
  expect(subject.class).to include(Blacklight::Document::CacheKey)
8
9
  end
@@ -11,6 +12,7 @@ describe Blacklight::Document::CacheKey do
11
12
  before do
12
13
  allow(subject).to receive_messages(new_record?: true)
13
14
  end
15
+
14
16
  it 'provides an acceptable cache key' do
15
17
  expect(subject.cache_key).to eq 'solr_documents/new'
16
18
  end
@@ -18,11 +20,13 @@ describe Blacklight::Document::CacheKey do
18
20
 
19
21
  describe 'with version' do
20
22
  let(:attributes) { { id: '12345', _version_: '1497353774427013120' } }
23
+
21
24
  it 'provides a cache key with the id and version' do
22
25
  expect(subject.cache_key).to eq 'solr_documents/12345-1497353774427013120'
23
26
  end
24
27
  describe 'as array' do
25
- let(:attributes) { { id: '12345', _version_: ['1234', '4321'] } }
28
+ let(:attributes) { { id: '12345', _version_: %w[1234 4321] } }
29
+
26
30
  it 'provides a cache key with the id and joined version array' do
27
31
  expect(subject.cache_key).to eq 'solr_documents/12345-12344321'
28
32
  end
@@ -31,6 +35,7 @@ describe Blacklight::Document::CacheKey do
31
35
 
32
36
  describe 'without version' do
33
37
  let(:attributes) { { id: '12345' } }
38
+
34
39
  it 'provides a cache key with just the id' do
35
40
  expect(subject.cache_key).to eq 'solr_documents/12345'
36
41
  end
@@ -38,9 +43,11 @@ describe Blacklight::Document::CacheKey do
38
43
 
39
44
  describe '#cache_version_key' do
40
45
  let(:attributes) { { id: '12345', another_version_field: '1497353774427013120' } }
46
+
41
47
  before do
42
48
  allow(subject).to receive_messages(cache_version_key: :another_version_field)
43
49
  end
50
+
44
51
  it 'provides a cache key with the defined field' do
45
52
  expect(subject.cache_key).to eq 'solr_documents/12345-1497353774427013120'
46
53
  end
@@ -1,41 +1,38 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- describe "Blacklight::Document::DublinCore" do
3
+ RSpec.describe "Blacklight::Document::DublinCore" do
4
4
  before(:all) do
5
5
  @mock_class = Class.new do
6
6
  include Blacklight::Document
7
7
  end
8
- @mock_class.use_extension( Blacklight::Document::DublinCore )
8
+ @mock_class.use_extension(Blacklight::Document::DublinCore)
9
9
  @mock_class.field_semantics.merge!(
10
- :title => :title_display,
11
- :non_dc_title => :title_display
10
+ title: :title_tsim,
11
+ non_dc_title: :title_tsim
12
12
  )
13
13
  end
14
14
 
15
-
16
- it "should register all its export formats" do
15
+ it "registers all its export formats" do
17
16
  document = @mock_class.new
18
- expect(document.export_formats.keys).to include :oai_dc_xml, :dc_xml, :xml
17
+ expect(document.export_formats.keys).to include :oai_dc_xml, :dc_xml, :xml
19
18
  end
20
19
 
21
- it "should export oai_dc with the proper namespaces" do
20
+ it "exports oai_dc with the proper namespaces" do
22
21
  document = @mock_class.new
23
22
  expect(document.export_as_oai_dc_xml).to match 'xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"'
24
-
25
23
  end
26
24
 
27
- it "should include 'dc:'-prefixed semantic fields" do
28
- data = {'id'=>'123456','title_display'=>['654321'] }
29
- document = @mock_class.new(data)
30
- expect(document.export_as_oai_dc_xml).to match 'xmlns:dc="http://purl.org/dc/elements/1.1/"'
31
- expect(document.export_as_oai_dc_xml).to match '<dc:title>654321</dc:title>'
25
+ it "includes 'dc:'-prefixed semantic fields" do
26
+ data = { 'id' => '123456', 'title_tsim' => ['654321'] }
27
+ document = @mock_class.new(data)
28
+ expect(document.export_as_oai_dc_xml).to match 'xmlns:dc="http://purl.org/dc/elements/1.1/"'
29
+ expect(document.export_as_oai_dc_xml).to match '<dc:title>654321</dc:title>'
32
30
  end
33
31
 
34
- it "should work with multi-value fields" do
35
- data = {'id'=>'123456','title_display'=>['654321', '987'] }
36
- document = @mock_class.new(data)
37
- expect(document.export_as_oai_dc_xml).to match '<dc:title>654321</dc:title>'
38
- expect(document.export_as_oai_dc_xml).to match '<dc:title>987</dc:title></oai_dc:dc>'
32
+ it "works with multi-value fields" do
33
+ data = { 'id' => '123456', 'title_tsim' => %w[654321 987] }
34
+ document = @mock_class.new(data)
35
+ expect(document.export_as_oai_dc_xml).to match '<dc:title>654321</dc:title>'
36
+ expect(document.export_as_oai_dc_xml).to match '<dc:title>987</dc:title></oai_dc:dc>'
39
37
  end
40
38
  end
41
-
@@ -1,23 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- describe "Blacklight::Document::Email" do
3
+ RSpec.describe "Blacklight::Document::Email" do
4
4
  before(:all) do
5
- SolrDocument.use_extension( Blacklight::Document::Email )
5
+ SolrDocument.use_extension(Blacklight::Document::Email)
6
6
  end
7
- it "should only return values that are available in the field semantics" do
8
- doc = SolrDocument.new({:id=>"1234", :title_display=>"My Title"})
7
+
8
+ it "onlies return values that are available in the field semantics" do
9
+ doc = SolrDocument.new(id: "1234", title_tsim: "My Title")
9
10
  email_body = doc.to_email_text
10
11
  expect(email_body).to match(/Title: My Title/)
11
- expect(email_body).to_not match(/Author/)
12
+ expect(email_body).not_to match(/Author/)
12
13
  end
13
- it "should handle multi-values fields correctly" do
14
- doc = SolrDocument.new({:id=>"1234", :title_display=>["My Title", "My Alt. Title"]})
14
+ it "handles multi-values fields correctly" do
15
+ doc = SolrDocument.new(id: "1234", title_tsim: ["My Title", "My Alt. Title"])
15
16
  email_body = doc.to_email_text
16
17
  expect(email_body).to match(/Title: My Title My Alt. Title/)
17
18
  end
18
- it "should return nil if there are no valid field semantics to build the email body from" do
19
- doc = SolrDocument.new({:id=>"1234"})
19
+ it "returns nil if there are no valid field semantics to build the email body from" do
20
+ doc = SolrDocument.new(id: "1234")
20
21
  expect(doc.to_email_text).to be_nil
21
22
  end
22
23
  end
23
-
@@ -1,23 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- describe "Blacklight::Document::Email" do
3
+ RSpec.describe "Blacklight::Document::Email" do
4
4
  before(:all) do
5
- SolrDocument.use_extension( Blacklight::Document::Sms )
5
+ SolrDocument.use_extension(Blacklight::Document::Sms)
6
6
  end
7
- it "should only return values that are available in the field semantics" do
8
- doc = SolrDocument.new({:id=>"1234", :title_display=>"My Title", :author_display=>"Joe Schmoe"})
7
+
8
+ it "onlies return values that are available in the field semantics" do
9
+ doc = SolrDocument.new(id: "1234", title_tsim: "My Title", author_tsim: "Joe Schmoe")
9
10
  sms_text = doc.to_sms_text
10
11
  expect(sms_text).to match(/My Title by Joe Schmoe/)
11
12
  end
12
- it "should handle multi-values fields correctly and only take the first" do
13
- doc = SolrDocument.new({:id=>"1234", :title_display=>["My Title", "My Alt. Title"]})
13
+ it "handles multi-values fields correctly and only take the first" do
14
+ doc = SolrDocument.new(id: "1234", title_tsim: ["My Title", "My Alt. Title"])
14
15
  sms_text = doc.to_sms_text
15
16
  expect(sms_text).to match(/My Title/)
16
- expect(sms_text).to_not match(/My Alt\. Title/)
17
+ expect(sms_text).not_to match(/My Alt\. Title/)
17
18
  end
18
- it "should return nil if there are no valid field semantics to build the email body from" do
19
- doc = SolrDocument.new({:id=>"1234"})
19
+ it "returns nil if there are no valid field semantics to build the email body from" do
20
+ doc = SolrDocument.new(id: "1234")
20
21
  expect(doc.to_sms_text).to be_nil
21
22
  end
22
23
  end
23
-
@@ -1,25 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- describe Blacklight::Document do
4
- let(:data) { {} }
5
- let(:test_class) do
3
+ RSpec.describe Blacklight::Document, api: true do
4
+ subject do
6
5
  Class.new do
7
6
  include Blacklight::Document
8
- end
7
+ end.new(data)
9
8
  end
10
9
 
11
- subject { test_class.new(data) }
12
-
13
- describe '.new' do
14
- it 'accepts a hash' do
15
- expect(test_class.new(id: 1)[:id]).to eq 1
16
- end
17
-
18
- it 'accepts a SolrDocument' do
19
- expect(Deprecation).to receive(:warn)
20
- expect(test_class.new(test_class.new(id: 1))[:id]).to eq 1
21
- end
22
- end
10
+ let(:data) { {} }
23
11
 
24
12
  describe "#has?" do
25
13
  context "without value constraints" do
@@ -27,7 +15,7 @@ describe Blacklight::Document do
27
15
  data[:x] = true
28
16
  expect(subject).to have_field(:x)
29
17
  end
30
-
18
+
31
19
  it "does not have the field if the field is not in the data" do
32
20
  expect(subject).not_to have_field(:x)
33
21
  end
@@ -38,7 +26,7 @@ describe Blacklight::Document do
38
26
  data[:x] = true
39
27
  expect(subject).to have_field(:x, true)
40
28
  end
41
-
29
+
42
30
  it "does not have the field if the data does not have that value" do
43
31
  data[:x] = false
44
32
  expect(subject).not_to have_field(:x, true)
@@ -50,12 +38,12 @@ describe Blacklight::Document do
50
38
  end
51
39
 
52
40
  it "supports multivalued fields" do
53
- data[:x] = ["a", "b", "c"]
41
+ data[:x] = %w[a b c]
54
42
  expect(subject).to have_field(:x, "a")
55
43
  end
56
44
 
57
45
  it "supports multivalued fields with an array of value constraints" do
58
- data[:x] = ["a", "b", "c"]
46
+ data[:x] = %w[a b c]
59
47
  expect(subject).to have_field(:x, "a", "d")
60
48
  end
61
49
  end
@@ -88,12 +76,12 @@ describe Blacklight::Document do
88
76
  end
89
77
 
90
78
  def documents
91
- response.collect {|doc| MockDocument.new(doc, self)}
79
+ response.collect { |doc| MockDocument.new(doc, self) }
92
80
  end
93
81
  end
94
82
 
95
83
  before do
96
- allow(MockDocument).to receive(:repository).and_return(instance_double(Blacklight::Solr::Repository, find: MockResponse.new([{id: 1}], {})))
84
+ allow(MockDocument).to receive(:repository).and_return(instance_double(Blacklight::Solr::Repository, find: MockResponse.new([{ id: 1 }], {})))
97
85
  end
98
86
 
99
87
  it "has a globalid" do
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- describe Blacklight::FacetPaginator do
4
-
3
+ RSpec.describe Blacklight::FacetPaginator, api: true do
5
4
  let(:f1) { Blacklight::Solr::Response::Facets::FacetItem.new(hits: '792', value: 'Book') }
6
5
  let(:f2) { Blacklight::Solr::Response::Facets::FacetItem.new(hits: '65', value: 'Musical Score') }
7
6
  let(:f3) { Blacklight::Solr::Response::Facets::FacetItem.new(hits: '58', value: 'Serial') }
@@ -15,11 +14,12 @@ describe Blacklight::FacetPaginator do
15
14
 
16
15
  context 'on the first page of two pages' do
17
16
  subject { described_class.new(seven_facet_values, limit: limit) }
18
- it { should be_first_page }
19
- it { should_not be_last_page }
20
- its(:current_page) { should eq 1 }
21
- its(:prev_page) { should be_nil }
22
- its(:next_page) { should eq 2 }
17
+
18
+ it { is_expected.to be_first_page }
19
+ it { is_expected.not_to be_last_page }
20
+ its(:current_page) { is_expected.to eq 1 }
21
+ its(:prev_page) { is_expected.to be_nil }
22
+ its(:next_page) { is_expected.to eq 2 }
23
23
  it 'limits items to limit, if limit is smaller than items.length' do
24
24
  expect(subject.items.size).to eq 6
25
25
  end
@@ -27,11 +27,12 @@ describe Blacklight::FacetPaginator do
27
27
 
28
28
  context 'on the last page of two pages' do
29
29
  subject { described_class.new([f7], offset: 6, limit: limit) }
30
- it { should_not be_first_page }
31
- it { should be_last_page }
32
- its(:current_page) { should eq 2 }
33
- its(:prev_page) { should eq 1 }
34
- its(:next_page) { should be_nil }
30
+
31
+ it { is_expected.not_to be_first_page }
32
+ it { is_expected.to be_last_page }
33
+ its(:current_page) { is_expected.to eq 2 }
34
+ its(:prev_page) { is_expected.to eq 1 }
35
+ its(:next_page) { is_expected.to be_nil }
35
36
  it 'returns all items when limit is greater than items.length' do
36
37
  expect(subject.items.size).to eq 1
37
38
  end
@@ -39,11 +40,12 @@ describe Blacklight::FacetPaginator do
39
40
 
40
41
  context 'on the second page of three pages' do
41
42
  subject { described_class.new(seven_facet_values, offset: 6, limit: limit) }
42
- it { should_not be_first_page }
43
- it { should_not be_last_page }
44
- its(:current_page) { should eq 2 }
45
- its(:prev_page) { should eq 1 }
46
- its(:next_page) { should eq 3 }
43
+
44
+ it { is_expected.not_to be_first_page }
45
+ it { is_expected.not_to be_last_page }
46
+ its(:current_page) { is_expected.to eq 2 }
47
+ its(:prev_page) { is_expected.to eq 1 }
48
+ its(:next_page) { is_expected.to eq 3 }
47
49
  it 'limits items to limit, if limit is smaller than items.length' do
48
50
  expect(subject.items.size).to eq 6
49
51
  end
@@ -51,34 +53,37 @@ describe Blacklight::FacetPaginator do
51
53
 
52
54
  context 'on the first page of one page' do
53
55
  subject { described_class.new(six_facet_values, offset: 0, limit: limit) }
54
- it { should be_first_page }
55
- it { should be_last_page }
56
+
57
+ it { is_expected.to be_first_page }
58
+ it { is_expected.to be_last_page }
56
59
  end
57
60
 
58
61
  describe "params_for_resort_url" do
62
+ subject { described_class.new([], offset: 100, limit: limit, sort: 'index') }
63
+
59
64
  let(:sort_key) { described_class.request_keys[:sort] }
60
65
  let(:page_key) { described_class.request_keys[:page] }
61
- subject { described_class.new([], offset: 100, limit: limit, sort: 'index') }
62
66
 
63
67
  it 'knows a manually set sort, and produce proper sort url' do
64
- expect(subject.sort).to eq 'index'
68
+ expect(subject.sort).to eq 'index'
65
69
 
66
- click_params = subject.params_for_resort_url('count', {}.with_indifferent_access)
70
+ click_params = subject.params_for_resort_url('count', {}.with_indifferent_access)
67
71
 
68
- expect(click_params[ sort_key ]).to eq 'count'
69
- expect(click_params[ page_key ]).to be_nil
72
+ expect(click_params[sort_key]).to eq 'count'
73
+ expect(click_params[page_key]).to be_nil
70
74
  end
71
75
 
72
76
  context 'when sorting by "count"' do
73
77
  subject { described_class.new([]) }
74
- let(:params) { HashWithIndifferentAccess.new :'facet.prefix' => 'A' }
78
+
79
+ let(:params) { HashWithIndifferentAccess.new 'facet.prefix': 'A' }
75
80
 
76
81
  it 'includes the prefix filter for "index" sorting' do
77
- expect(subject.params_for_resort_url('index', params)).to include :'facet.prefix' => 'A'
82
+ expect(subject.params_for_resort_url('index', params)).to include 'facet.prefix': 'A'
78
83
  end
79
84
 
80
85
  it 'removes the prefix filter' do
81
- expect(subject.params_for_resort_url('count', params)).not_to include :'facet.prefix' => 'A'
86
+ expect(subject.params_for_resort_url('count', params)).not_to include 'facet.prefix': 'A'
82
87
  end
83
88
  end
84
89
  end
@@ -88,31 +93,36 @@ describe Blacklight::FacetPaginator do
88
93
 
89
94
  describe "#items" do
90
95
  subject { paginator.items }
96
+
91
97
  it { is_expected.to eq seven_facet_values }
92
98
  end
93
99
 
94
100
  describe "#last_page?" do
95
101
  subject { paginator.last_page? }
102
+
96
103
  it { is_expected.to be true }
97
104
  end
98
105
 
99
106
  describe "#current_page" do
100
107
  subject { paginator.current_page }
108
+
101
109
  it { is_expected.to eq 1 }
102
110
  end
103
111
  end
104
112
 
105
113
  describe "#as_json" do
106
114
  subject { described_class.new([f1], offset: 0, limit: nil).as_json }
115
+
107
116
  it "is well structured" do
108
- expect(subject).to eq("items" => [{"hits"=>"792", "value"=>"Book"}], "limit" => nil,
109
- "offset" => 0, "sort" => nil)
117
+ expect(subject).to eq("items" => [{ "hits" => "792", "value" => "Book" }], "limit" => nil,
118
+ "offset" => 0, "sort" => nil)
110
119
  end
111
120
  end
112
121
 
113
122
  describe "#total_pages" do
114
123
  # this method is just for API compatability with kaminari 0.16.1
115
124
  subject { described_class.new([f1], offset: 0, limit: nil).total_pages }
116
- it { should eq -1 }
125
+
126
+ it { is_expected.to eq -1 }
117
127
  end
118
128
  end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Blacklight::Icon do
4
+ subject { described_class.new(:search, classes: 'awesome') }
5
+
6
+ describe '#svg' do
7
+ it 'returns a string' do
8
+ expect(subject.svg).to be_an String
9
+ end
10
+ it 'returns raw svg' do
11
+ expect(Capybara.string(subject.svg))
12
+ .to have_css 'svg title', text: 'Search'
13
+ end
14
+ end
15
+
16
+ describe '#options' do
17
+ it 'applies options classes and default class' do
18
+ expect(subject.options[:class]).to eq 'blacklight-icons awesome'
19
+ end
20
+ end
21
+
22
+ describe '#path' do
23
+ it 'prepends blacklight and sufixes .svg' do
24
+ expect(subject.path).to eq 'blacklight/search.svg'
25
+ end
26
+ end
27
+
28
+ describe 'file_source' do
29
+ context 'file is not available' do
30
+ subject { described_class.new(:yolo) }
31
+
32
+ it {
33
+ expect { subject.file_source }
34
+ .to raise_error(Blacklight::Exceptions::IconNotFound)
35
+ }
36
+ end
37
+
38
+ context 'file is available' do
39
+ it 'returns the filesource' do
40
+ expect(subject.file_source).to include '<svg'
41
+ end
42
+ end
43
+ end
44
+ end
@@ -1,28 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- describe Blacklight::SearchBuilder do
3
+ RSpec.describe Blacklight::SearchBuilder, api: true do
4
+ subject(:builder) { described_class.new processor_chain, scope }
5
+
4
6
  let(:processor_chain) { [] }
5
7
  let(:blacklight_config) { Blacklight::Configuration.new }
6
8
  let(:scope) { double blacklight_config: blacklight_config }
7
- subject { described_class.new processor_chain, scope }
8
9
 
9
10
  context "with default processor chain" do
10
- context "with two arguments" do
11
- subject do
12
- Deprecation.silence Blacklight::SearchBuilder do
13
- described_class.new true, scope
14
- end
15
- end
16
- it "uses the class-level default_processor_chain" do
17
- expect(subject.processor_chain).to eq []
18
- end
19
- end
11
+ subject { described_class.new scope }
20
12
 
21
- context "with one arguments" do
22
- subject { described_class.new scope }
23
- it "uses the class-level default_processor_chain" do
24
- expect(subject.processor_chain).to eq []
25
- end
13
+ it "uses the class-level default_processor_chain" do
14
+ expect(subject.processor_chain).to eq []
26
15
  end
27
16
  end
28
17
 
@@ -44,6 +33,7 @@ describe Blacklight::SearchBuilder do
44
33
 
45
34
  describe "#processor_chain" do
46
35
  let(:processor_chain) { [:a, :b, :c] }
36
+
47
37
  it "is mutable" do
48
38
  subject.processor_chain.insert(-1, :d)
49
39
  expect(subject.processor_chain).to match_array [:a, :b, :c, :d]
@@ -52,6 +42,7 @@ describe Blacklight::SearchBuilder do
52
42
 
53
43
  describe "#append" do
54
44
  let(:processor_chain) { [:a, :b, :c] }
45
+
55
46
  it "provides a new search builder with the processor chain" do
56
47
  builder = subject.append(:d, :e)
57
48
  expect(subject.processor_chain).to eq processor_chain
@@ -62,6 +53,7 @@ describe Blacklight::SearchBuilder do
62
53
 
63
54
  describe "#except" do
64
55
  let(:processor_chain) { [:a, :b, :c, :d, :e] }
56
+
65
57
  it "provide a new search builder excepting arguments" do
66
58
  builder = subject.except(:b, :d, :does_not_exist)
67
59
  expect(builder).not_to equal(subject)
@@ -82,11 +74,13 @@ describe Blacklight::SearchBuilder do
82
74
 
83
75
  describe "#merge" do
84
76
  let(:processor_chain) { [:pass_through] }
77
+
85
78
  before do
86
79
  allow(subject).to receive(:pass_through) do |req_params|
87
80
  req_params.replace subject.blacklight_params
88
81
  end
89
82
  end
83
+
90
84
  it "overwrites the processed parameters" do
91
85
  actual = subject.with(q: 'abc').merge(q: 'xyz')
92
86
  expect(actual[:q]).to eq 'xyz'
@@ -95,6 +89,7 @@ describe Blacklight::SearchBuilder do
95
89
 
96
90
  describe "#reverse_merge" do
97
91
  let(:processor_chain) { [:pass_through] }
92
+
98
93
  before do
99
94
  allow(subject).to receive(:pass_through) do |req_params|
100
95
  req_params.replace subject.blacklight_params
@@ -176,18 +171,38 @@ describe Blacklight::SearchBuilder do
176
171
  end
177
172
 
178
173
  describe "#sort" do
179
- it "passes through the sort parameter" do
180
- expect(subject.with(sort: 'x').send(:sort)).to eq 'x'
181
- end
174
+ context "when no sort parameter is given" do
175
+ subject(:sort) { builder.send(:sort) }
182
176
 
183
- it "uses the default if no sort parameter is given" do
184
- blacklight_config.default_sort_field = double(sort: 'x desc')
185
- expect(subject.send(:sort)).to eq 'x desc'
177
+ before do
178
+ blacklight_config.default_sort_field = double(sort: 'x desc')
179
+ end
180
+
181
+ it "uses the default" do
182
+ expect(sort).to eq 'x desc'
183
+ end
186
184
  end
187
185
 
188
- it "uses the requested sort field" do
189
- blacklight_config.add_sort_field 'x', sort: 'x asc'
190
- expect(subject.with(sort: 'x').send(:sort)).to eq 'x asc'
186
+ context "when the user provides an sort parameter" do
187
+ subject(:sort) { builder_with_param.send(:sort) }
188
+
189
+ let(:builder_with_param) { builder.with(sort: 'x') }
190
+
191
+ context "that is invalid" do
192
+ it "removes them" do
193
+ expect(sort).to be_nil
194
+ end
195
+ end
196
+
197
+ context "that is valid" do
198
+ before do
199
+ blacklight_config.add_sort_field 'x', sort: 'x asc'
200
+ end
201
+
202
+ it "uses the requested sort field" do
203
+ expect(sort).to eq 'x asc'
204
+ end
205
+ end
191
206
  end
192
207
  end
193
208