blacklight 6.25.0 → 7.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (400) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.npmignore +23 -0
  4. data/.rubocop.yml +15 -3
  5. data/.rubocop_todo.yml +242 -379
  6. data/.solr_wrapper.yml +1 -1
  7. data/.travis.yml +40 -0
  8. data/Gemfile +1 -4
  9. data/README.md +21 -4
  10. data/Rakefile +1 -2
  11. data/VERSION +1 -1
  12. data/app/assets/images/blacklight/list.svg +1 -0
  13. data/app/assets/images/blacklight/search.svg +1 -0
  14. data/app/assets/javascripts/blacklight/blacklight.js +496 -56
  15. data/app/assets/stylesheets/blacklight/_balanced_list.scss +7 -12
  16. data/app/assets/stylesheets/blacklight/_blacklight_base.scss +3 -1
  17. data/app/assets/stylesheets/blacklight/_bookmark.scss +1 -13
  18. data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +27 -0
  19. data/app/assets/stylesheets/blacklight/_constraints.scss +17 -25
  20. data/app/assets/stylesheets/blacklight/_controls.scss +8 -16
  21. data/app/assets/stylesheets/blacklight/_facets.scss +74 -92
  22. data/app/assets/stylesheets/blacklight/_header.scss +35 -48
  23. data/app/assets/stylesheets/blacklight/_icons.scss +29 -0
  24. data/app/assets/stylesheets/blacklight/_layout.scss +0 -10
  25. data/app/assets/stylesheets/blacklight/_mixins.scss +15 -0
  26. data/app/assets/stylesheets/blacklight/_modal.scss +9 -17
  27. data/app/assets/stylesheets/blacklight/_pagination.scss +2 -17
  28. data/app/assets/stylesheets/blacklight/_search_history.scss +5 -13
  29. data/app/assets/stylesheets/blacklight/_search_results.scss +9 -8
  30. data/app/assets/stylesheets/blacklight/_twitter_typeahead.scss +1 -2
  31. data/app/builders/blacklight/action_builder.rb +56 -0
  32. data/app/controllers/bookmarks_controller.rb +2 -2
  33. data/app/controllers/catalog_controller.rb +2 -2
  34. data/app/controllers/concerns/blacklight/base.rb +0 -33
  35. data/app/controllers/concerns/blacklight/bookmarks.rb +20 -37
  36. data/app/controllers/concerns/blacklight/catalog.rb +254 -213
  37. data/app/controllers/concerns/blacklight/controller.rb +117 -133
  38. data/app/controllers/concerns/blacklight/default_component_configuration.rb +12 -43
  39. data/app/controllers/concerns/blacklight/search_context.rb +10 -14
  40. data/app/controllers/concerns/blacklight/search_fields.rb +4 -14
  41. data/app/controllers/concerns/blacklight/token_based_user.rb +6 -10
  42. data/app/helpers/blacklight/blacklight_helper_behavior.rb +32 -118
  43. data/app/helpers/blacklight/catalog_helper_behavior.rb +94 -88
  44. data/app/helpers/blacklight/component_helper_behavior.rb +19 -19
  45. data/app/helpers/blacklight/configuration_helper_behavior.rb +25 -54
  46. data/app/helpers/blacklight/facets_helper_behavior.rb +40 -39
  47. data/app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb +9 -11
  48. data/app/helpers/blacklight/icon_helper_behavior.rb +16 -0
  49. data/app/helpers/blacklight/layout_helper_behavior.rb +3 -10
  50. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +6 -6
  51. data/app/helpers/blacklight/render_partials_helper_behavior.rb +195 -0
  52. data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +18 -11
  53. data/app/helpers/blacklight/suggest_helper_behavior.rb +1 -0
  54. data/app/helpers/blacklight/url_helper_behavior.rb +21 -27
  55. data/app/{assets/javascripts → javascript}/blacklight/autocomplete.js +3 -2
  56. data/app/javascript/blacklight/autofocus.js +20 -0
  57. data/app/javascript/blacklight/bookmark_toggle.js +25 -0
  58. data/app/javascript/blacklight/checkbox_submit.js +133 -0
  59. data/app/{assets/javascripts → javascript}/blacklight/collapsable.js +1 -1
  60. data/app/javascript/blacklight/core.js +39 -0
  61. data/app/{assets/javascripts → javascript}/blacklight/facet_load.js +6 -6
  62. data/app/{assets/javascripts/blacklight/ajax_modal.js → javascript/blacklight/modal.js} +63 -63
  63. data/app/{assets/javascripts → javascript}/blacklight/search_context.js +10 -2
  64. data/app/models/blacklight/facet_paginator.rb +3 -3
  65. data/app/models/blacklight/icon.rb +53 -0
  66. data/app/models/blacklight/solr/facet_paginator.rb +3 -3
  67. data/app/models/blacklight/suggest_search.rb +15 -4
  68. data/app/models/bookmark.rb +4 -9
  69. data/app/models/concerns/blacklight/configurable.rb +13 -13
  70. data/app/models/concerns/blacklight/document/active_model_shim.rb +8 -11
  71. data/app/models/concerns/blacklight/document/cache_key.rb +1 -1
  72. data/app/models/concerns/blacklight/document/dublin_core.rb +2 -2
  73. data/app/models/concerns/blacklight/document/email.rb +1 -1
  74. data/app/models/concerns/blacklight/document/extensions.rb +5 -5
  75. data/app/models/concerns/blacklight/document/semantic_fields.rb +9 -9
  76. data/app/models/concerns/blacklight/document/sms.rb +1 -1
  77. data/app/models/concerns/blacklight/document.rb +8 -42
  78. data/app/models/concerns/blacklight/solr/document.rb +7 -8
  79. data/app/models/concerns/blacklight/suggest/response.rb +3 -5
  80. data/app/models/concerns/blacklight/user.rb +6 -6
  81. data/app/models/record_mailer.rb +5 -6
  82. data/app/models/search.rb +5 -9
  83. data/app/presenters/blacklight/field_presenter.rb +5 -5
  84. data/app/presenters/blacklight/index_presenter.rb +34 -71
  85. data/app/presenters/blacklight/json_presenter.rb +7 -4
  86. data/app/presenters/blacklight/link_alternate_presenter.rb +1 -1
  87. data/app/presenters/blacklight/rendering/abstract_step.rb +5 -5
  88. data/app/presenters/blacklight/rendering/helper_method.rb +8 -8
  89. data/app/presenters/blacklight/rendering/join.rb +3 -3
  90. data/app/presenters/blacklight/rendering/link_to_facet.rb +19 -19
  91. data/app/presenters/blacklight/rendering/microdata.rb +3 -3
  92. data/app/presenters/blacklight/rendering/pipeline.rb +5 -5
  93. data/app/presenters/blacklight/search_bar_presenter.rb +37 -0
  94. data/app/presenters/blacklight/show_presenter.rb +20 -69
  95. data/app/presenters/blacklight/thumbnail_presenter.rb +72 -0
  96. data/app/services/blacklight/document_factory.rb +11 -0
  97. data/app/services/blacklight/field_retriever.rb +24 -24
  98. data/app/services/blacklight/search_service.rb +154 -0
  99. data/app/views/blacklight/nav/_bookmark.html.erb +2 -2
  100. data/app/views/blacklight/nav/_search_history.html.erb +1 -1
  101. data/app/views/bookmarks/_tools.html.erb +2 -2
  102. data/app/views/bookmarks/index.html.erb +2 -2
  103. data/app/views/catalog/_bookmark_control.html.erb +26 -10
  104. data/app/views/catalog/_citation.html.erb +18 -23
  105. data/app/views/catalog/_constraints.html.erb +5 -8
  106. data/app/views/catalog/_constraints_element.html.erb +6 -6
  107. data/app/views/catalog/{_document_default.atom.builder → _document.atom.builder} +2 -2
  108. data/app/views/catalog/_document.html.erb +5 -3
  109. data/app/views/catalog/{_document_default.rss.builder → _document.rss.builder} +0 -0
  110. data/app/views/catalog/_document_action.html.erb +2 -1
  111. data/app/views/catalog/_email_form.html.erb +8 -4
  112. data/app/views/catalog/_facet_index_navigation.html.erb +3 -3
  113. data/app/views/catalog/_facet_layout.html.erb +5 -7
  114. data/app/views/catalog/_facet_limit.html.erb +3 -2
  115. data/app/views/catalog/_facet_pagination.html.erb +10 -10
  116. data/app/views/catalog/_facet_pivot.html.erb +2 -2
  117. data/app/views/catalog/_facets.html.erb +8 -12
  118. data/app/views/catalog/{_group_default.html.erb → _group.html.erb} +0 -0
  119. data/app/views/catalog/_home_text.html.erb +32 -36
  120. data/app/views/catalog/_index.html.erb +12 -0
  121. data/app/views/catalog/{_index_header_default.html.erb → _index_header.html.erb} +2 -2
  122. data/app/views/catalog/_per_page_widget.html.erb +6 -7
  123. data/app/views/catalog/_previous_next_doc.html.erb +6 -14
  124. data/app/views/catalog/_search_form.html.erb +12 -8
  125. data/app/views/catalog/_search_header.html.erb +0 -3
  126. data/app/views/catalog/_search_results.html.erb +4 -0
  127. data/app/views/catalog/_show.html.erb +10 -0
  128. data/app/views/catalog/{_show_header_default.html.erb → _show_header.html.erb} +0 -0
  129. data/app/views/catalog/_show_main_content.html.erb +4 -4
  130. data/app/views/catalog/_show_sidebar.html.erb +3 -3
  131. data/app/views/catalog/_show_tools.html.erb +9 -11
  132. data/app/views/catalog/_sms_form.html.erb +8 -4
  133. data/app/views/catalog/_sort_and_per_page.html.erb +3 -3
  134. data/app/views/catalog/_sort_widget.html.erb +7 -7
  135. data/app/views/catalog/_thumbnail.html.erb +5 -0
  136. data/app/views/catalog/_view_type_group.html.erb +2 -2
  137. data/app/views/catalog/citation.html.erb +1 -1
  138. data/app/views/catalog/citation.js.erb +9 -1
  139. data/app/views/catalog/email.html.erb +5 -5
  140. data/app/views/catalog/email_success.html.erb +11 -9
  141. data/app/views/catalog/facet.html.erb +5 -6
  142. data/app/views/catalog/index.atom.builder +10 -15
  143. data/app/views/catalog/index.html.erb +9 -11
  144. data/app/views/catalog/index.json.jbuilder +65 -3
  145. data/app/views/catalog/index.rss.builder +5 -5
  146. data/app/views/catalog/opensearch.xml.builder +10 -10
  147. data/app/views/catalog/show.html.erb +11 -6
  148. data/app/views/catalog/sms.html.erb +2 -3
  149. data/app/views/catalog/sms_success.html.erb +11 -10
  150. data/app/views/kaminari/blacklight/_first_page.html.erb +2 -2
  151. data/app/views/kaminari/blacklight/_gap.html.erb +2 -2
  152. data/app/views/kaminari/blacklight/_last_page.html.erb +2 -2
  153. data/app/views/kaminari/blacklight/_next_page.html.erb +4 -4
  154. data/app/views/kaminari/blacklight/_page.html.erb +3 -3
  155. data/app/views/kaminari/blacklight/_prev_page.html.erb +4 -4
  156. data/app/views/kaminari/blacklight_compact/_paginator.html.erb +4 -4
  157. data/app/views/layouts/blacklight/base.html.erb +43 -0
  158. data/app/views/layouts/blacklight.html.erb +14 -41
  159. data/app/views/layouts/catalog_result.html.erb +11 -0
  160. data/app/views/search_history/index.html.erb +16 -21
  161. data/app/views/{_flash_msg.html.erb → shared/_flash_msg.html.erb} +0 -0
  162. data/app/views/shared/_header_navbar.html.erb +8 -13
  163. data/app/views/shared/_modal.html.erb +6 -0
  164. data/app/views/shared/_user_util_links.html.erb +22 -0
  165. data/blacklight.gemspec +10 -11
  166. data/config/locales/blacklight.de.yml +56 -86
  167. data/config/locales/blacklight.en.yml +1 -27
  168. data/config/locales/blacklight.es.yml +0 -30
  169. data/config/locales/blacklight.fr.yml +0 -30
  170. data/config/locales/blacklight.hu.yml +210 -0
  171. data/config/locales/blacklight.it.yml +0 -30
  172. data/config/locales/blacklight.nl.yml +210 -0
  173. data/config/locales/blacklight.pt-BR.yml +6 -32
  174. data/config/locales/blacklight.sq.yml +1 -28
  175. data/config/locales/blacklight.zh.yml +0 -25
  176. data/config/routes.rb +3 -10
  177. data/db/migrate/20140202020202_create_bookmarks.rb +0 -1
  178. data/db/migrate/20140320000000_add_polymorphic_type_to_bookmarks.rb +1 -1
  179. data/lib/blacklight/abstract_repository.rb +9 -21
  180. data/lib/blacklight/configuration/context.rb +1 -1
  181. data/lib/blacklight/configuration/facet_field.rb +16 -9
  182. data/lib/blacklight/configuration/field.rb +32 -3
  183. data/lib/blacklight/configuration/fields.rb +41 -48
  184. data/lib/blacklight/configuration/search_field.rb +2 -2
  185. data/lib/blacklight/configuration/sort_field.rb +2 -2
  186. data/lib/blacklight/configuration/view_config.rb +4 -0
  187. data/lib/blacklight/configuration.rb +82 -89
  188. data/lib/blacklight/engine.rb +5 -11
  189. data/lib/blacklight/exceptions.rb +4 -7
  190. data/lib/blacklight/nested_open_struct_with_hash_access.rb +107 -0
  191. data/lib/blacklight/open_struct_with_hash_access.rb +49 -0
  192. data/lib/blacklight/parameters.rb +1 -1
  193. data/lib/blacklight/routes/searchable.rb +1 -0
  194. data/lib/blacklight/search_builder.rb +26 -35
  195. data/lib/blacklight/search_state.rb +8 -8
  196. data/lib/blacklight/solr/repository.rb +3 -36
  197. data/lib/blacklight/solr/request.rb +1 -1
  198. data/lib/blacklight/solr/response/facets.rb +29 -31
  199. data/lib/blacklight/solr/response/group.rb +3 -3
  200. data/lib/blacklight/solr/response/group_response.rb +1 -1
  201. data/lib/blacklight/solr/response/more_like_this.rb +2 -2
  202. data/lib/blacklight/solr/response/response.rb +2 -2
  203. data/lib/blacklight/solr/response/spelling.rb +3 -3
  204. data/lib/blacklight/solr/response.rb +29 -30
  205. data/lib/blacklight/solr/search_builder_behavior.rb +25 -29
  206. data/lib/blacklight/version.rb +1 -1
  207. data/lib/blacklight.rb +4 -5
  208. data/lib/generators/blacklight/assets_generator.rb +8 -8
  209. data/lib/generators/blacklight/controller_generator.rb +4 -5
  210. data/lib/generators/blacklight/document_generator.rb +1 -1
  211. data/lib/generators/blacklight/install_generator.rb +18 -21
  212. data/lib/generators/blacklight/search_builder_generator.rb +1 -1
  213. data/lib/generators/blacklight/{solr5_generator.rb → solr_generator.rb} +4 -6
  214. data/lib/generators/blacklight/templates/.solr_wrapper.yml +5 -0
  215. data/lib/generators/blacklight/templates/blacklight.scss +0 -2
  216. data/lib/generators/blacklight/templates/catalog_controller.rb +52 -51
  217. data/{solr → lib/generators/blacklight/templates/solr}/conf/_rest_managed.json +0 -0
  218. data/{solr → lib/generators/blacklight/templates/solr}/conf/admin-extra.html +0 -0
  219. data/{solr → lib/generators/blacklight/templates/solr}/conf/elevate.xml +0 -0
  220. data/{solr → lib/generators/blacklight/templates/solr}/conf/mapping-ISOLatin1Accent.txt +0 -0
  221. data/{solr → lib/generators/blacklight/templates/solr}/conf/protwords.txt +0 -0
  222. data/lib/generators/blacklight/templates/solr/conf/schema.xml +390 -0
  223. data/{solr → lib/generators/blacklight/templates/solr}/conf/scripts.conf +0 -0
  224. data/lib/generators/blacklight/templates/solr/conf/solrconfig.xml +195 -0
  225. data/{solr → lib/generators/blacklight/templates/solr}/conf/spellings.txt +0 -0
  226. data/{solr → lib/generators/blacklight/templates/solr}/conf/stopwords.txt +0 -0
  227. data/{solr → lib/generators/blacklight/templates/solr}/conf/stopwords_en.txt +0 -0
  228. data/{solr → lib/generators/blacklight/templates/solr}/conf/synonyms.txt +0 -0
  229. data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example.xsl +0 -0
  230. data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example_atom.xsl +0 -0
  231. data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example_rss.xsl +0 -0
  232. data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/luke.xsl +0 -0
  233. data/lib/generators/blacklight/test_support_generator.rb +10 -10
  234. data/lib/generators/blacklight/user_generator.rb +3 -6
  235. data/lib/railties/blacklight.rake +19 -14
  236. data/package-lock.json +2057 -0
  237. data/package.json +28 -0
  238. data/spec/controllers/alternate_controller_spec.rb +1 -1
  239. data/spec/controllers/application_controller_spec.rb +1 -1
  240. data/spec/controllers/blacklight/base_spec.rb +1 -1
  241. data/spec/controllers/blacklight/catalog/component_configuration_spec.rb +11 -7
  242. data/spec/controllers/blacklight/facet_spec.rb +1 -1
  243. data/spec/controllers/blacklight/search_fields_spec.rb +1 -13
  244. data/spec/controllers/bookmarks_controller_spec.rb +1 -36
  245. data/spec/controllers/catalog_controller_spec.rb +153 -53
  246. data/spec/controllers/search_history_controller_spec.rb +2 -2
  247. data/spec/features/alternate_controller_spec.rb +1 -1
  248. data/spec/features/autocomplete_spec.rb +2 -2
  249. data/spec/features/bookmarks_spec.rb +10 -10
  250. data/spec/features/did_you_mean_spec.rb +3 -9
  251. data/spec/features/facets_spec.rb +11 -11
  252. data/spec/features/record_view_spec.rb +1 -6
  253. data/spec/features/search_context_spec.rb +2 -2
  254. data/spec/features/search_filters_spec.rb +41 -41
  255. data/spec/features/search_formats_spec.rb +1 -1
  256. data/spec/features/search_history_spec.rb +1 -26
  257. data/spec/features/search_pagination_spec.rb +1 -1
  258. data/spec/features/search_results_spec.rb +3 -4
  259. data/spec/features/search_sort_spec.rb +2 -2
  260. data/spec/features/search_spec.rb +5 -10
  261. data/{solr → spec/fixtures}/sample_solr_documents.yml +688 -688
  262. data/spec/helpers/{configuration_helper_spec.rb → blacklight/configuration_helper_behavior_spec.rb} +70 -65
  263. data/spec/helpers/{facets_helper_spec.rb → blacklight/facets_helper_behavior_spec.rb} +7 -8
  264. data/spec/helpers/{hash_as_hidden_fields_spec.rb → blacklight/hash_as_hidden_fields_behavior_spec.rb} +1 -1
  265. data/spec/helpers/blacklight/icon_helper_behavior_spec.rb +8 -0
  266. data/spec/helpers/{layout_helper_spec.rb → blacklight/layout_helper_behavior_spec.rb} +5 -15
  267. data/spec/helpers/{render_constraints_helper_spec.rb → blacklight/render_constraints_helper_behavior_spec.rb} +2 -3
  268. data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +80 -0
  269. data/spec/helpers/{search_history_constraints_helper_spec.rb → blacklight/search_history_constraints_helper_behavior_spec.rb} +9 -9
  270. data/spec/helpers/{suggest_helper_spec.rb → blacklight/suggest_helper_behavior_spec.rb} +4 -2
  271. data/spec/helpers/{url_helper_spec.rb → blacklight/url_helper_behavior_spec.rb} +11 -15
  272. data/spec/helpers/blacklight_helper_spec.rb +36 -141
  273. data/spec/helpers/catalog_helper_spec.rb +37 -56
  274. data/spec/integration/generators/blacklight/{solr5_generator_spec.rb → solr_generator_spec.rb} +3 -3
  275. data/spec/lib/blacklight/configuration/facet_field_spec.rb +11 -0
  276. data/spec/lib/blacklight/configuration/field_spec.rb +12 -0
  277. data/spec/lib/blacklight/nested_open_struct_with_hash_access_spec.rb +17 -0
  278. data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +153 -0
  279. data/spec/lib/blacklight/parameters_spec.rb +1 -1
  280. data/spec/lib/blacklight/search_state_spec.rb +2 -2
  281. data/spec/lib/blacklight_spec.rb +1 -1
  282. data/spec/lib/tasks/blacklight_task_spec.rb +1 -1
  283. data/spec/models/blacklight/configurable_spec.rb +15 -16
  284. data/spec/models/blacklight/configuration/context_spec.rb +1 -1
  285. data/spec/models/blacklight/configuration_spec.rb +146 -135
  286. data/spec/models/blacklight/document/active_model_shim_spec.rb +11 -1
  287. data/spec/models/blacklight/document/cache_key_spec.rb +1 -1
  288. data/spec/models/blacklight/document/dublin_core_spec.rb +5 -5
  289. data/spec/models/blacklight/document/email_spec.rb +3 -3
  290. data/spec/models/blacklight/document/sms_spec.rb +3 -3
  291. data/spec/models/blacklight/document_spec.rb +3 -16
  292. data/spec/models/blacklight/facet_paginator_spec.rb +1 -1
  293. data/spec/models/blacklight/icon_spec.rb +34 -0
  294. data/spec/models/blacklight/search_builder_spec.rb +33 -27
  295. data/spec/models/blacklight/solr/document_spec.rb +18 -7
  296. data/spec/models/blacklight/solr/facet_paginator_spec.rb +1 -1
  297. data/spec/models/blacklight/solr/repository_spec.rb +32 -27
  298. data/spec/models/blacklight/solr/request_spec.rb +1 -1
  299. data/spec/models/blacklight/solr/response/facets_spec.rb +1 -1
  300. data/spec/models/blacklight/solr/response/group_response_spec.rb +1 -1
  301. data/spec/models/blacklight/solr/response/group_spec.rb +1 -1
  302. data/spec/models/blacklight/solr/response_spec.rb +9 -6
  303. data/spec/models/blacklight/solr/search_builder_spec.rb +35 -48
  304. data/spec/models/blacklight/suggest/response_spec.rb +4 -5
  305. data/spec/models/blacklight/suggest_search_spec.rb +14 -7
  306. data/spec/models/blacklight/user_spec.rb +1 -1
  307. data/spec/models/bookmark_spec.rb +1 -1
  308. data/spec/models/record_mailer_spec.rb +2 -2
  309. data/spec/models/search_spec.rb +15 -36
  310. data/spec/models/solr_document_spec.rb +3 -3
  311. data/spec/presenters/blacklight/search_bar_presenter_spec.rb +72 -0
  312. data/spec/presenters/index_presenter_spec.rb +70 -143
  313. data/spec/presenters/pipeline_spec.rb +4 -4
  314. data/spec/presenters/show_presenter_spec.rb +83 -145
  315. data/spec/presenters/thumbnail_presenter_spec.rb +171 -0
  316. data/spec/routing/catalog_routing_spec.rb +1 -32
  317. data/spec/services/blacklight/search_service_spec.rb +446 -0
  318. data/spec/spec_helper.rb +22 -9
  319. data/spec/test_app_templates/Gemfile.extra +2 -5
  320. data/spec/test_app_templates/lib/generators/test_app_generator.rb +1 -1
  321. data/spec/views/catalog/_constraints.html.erb_spec.rb +1 -3
  322. data/spec/views/catalog/_constraints_element.html.erb_spec.rb +8 -8
  323. data/spec/views/catalog/_document.html.erb_spec.rb +7 -7
  324. data/spec/views/catalog/_document_list.html.erb_spec.rb +1 -1
  325. data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +1 -1
  326. data/spec/views/catalog/_facet_layout.html.erb_spec.rb +6 -6
  327. data/spec/views/catalog/_facets.html.erb_spec.rb +2 -2
  328. data/spec/views/catalog/{_index_default.erb_spec.rb → _index.html.erb_spec.rb} +1 -1
  329. data/spec/views/catalog/{_index_header_default.html.erb_spec.rb → _index_header.html.erb_spec.rb} +4 -4
  330. data/spec/views/catalog/_paginate_compact.html.erb_spec.rb +4 -27
  331. data/spec/views/catalog/_search_header.erb_spec.rb +1 -3
  332. data/spec/views/catalog/{_show_default.erb_spec.rb → _show.html.erb_spec.rb} +1 -1
  333. data/spec/views/catalog/_show_sidebar.erb_spec.rb +3 -3
  334. data/spec/views/catalog/_show_tools.html.erb_spec.rb +3 -3
  335. data/spec/views/catalog/_sort_and_per_page.html.erb_spec.rb +1 -1
  336. data/spec/views/catalog/{_thumbnail_default.erb_spec.rb → _thumbnail.html.erb_spec.rb} +3 -3
  337. data/spec/views/catalog/_view_type_group.html.erb_spec.rb +5 -1
  338. data/spec/views/catalog/email_success.html.erb_spec.rb +9 -0
  339. data/spec/views/catalog/facet.html.erb_spec.rb +1 -1
  340. data/spec/views/catalog/facet.json.jbuilder_spec.rb +1 -1
  341. data/spec/views/catalog/index.atom.builder_spec.rb +2 -2
  342. data/spec/views/catalog/index.html.erb_spec.rb +4 -7
  343. data/spec/views/catalog/index.json.jbuilder_spec.rb +66 -21
  344. data/spec/views/catalog/opensearch.xml.builder_spec.rb +1 -1
  345. data/spec/views/catalog/show.html.erb_spec.rb +2 -2
  346. data/spec/views/catalog/sms_success.html.erb_spec.rb +9 -0
  347. data/spec/views/{_user_util_links.html.erb_spec.rb → shared/_user_util_links.html.erb_spec.rb} +4 -4
  348. data/tasks/blacklight.rake +28 -47
  349. data/template.demo.rb +1 -11
  350. metadata +172 -196
  351. data/.docker/app/Dockerfile +0 -28
  352. data/.docker/app/entrypoint.sh +0 -6
  353. data/.dockerignore +0 -3
  354. data/.env +0 -5
  355. data/.github/workflows/ruby.yml +0 -61
  356. data/app/assets/javascripts/blacklight/autofocus.js +0 -16
  357. data/app/assets/javascripts/blacklight/bookmark_toggle.js +0 -23
  358. data/app/assets/javascripts/blacklight/checkbox_submit.js +0 -139
  359. data/app/assets/javascripts/blacklight/core.js +0 -30
  360. data/app/controllers/concerns/blacklight/request_builders.rb +0 -77
  361. data/app/controllers/concerns/blacklight/saved_searches.rb +0 -70
  362. data/app/controllers/concerns/blacklight/search_helper.rb +0 -161
  363. data/app/controllers/concerns/blacklight/suggest.rb +0 -25
  364. data/app/controllers/saved_searches_controller.rb +0 -4
  365. data/app/controllers/suggest_controller.rb +0 -4
  366. data/app/helpers/blacklight/deprecated_url_helper_behavior.rb +0 -57
  367. data/app/helpers/blacklight/render_partials_helper.rb +0 -205
  368. data/app/helpers/blacklight_configuration_helper.rb +0 -4
  369. data/app/helpers/blacklight_url_helper.rb +0 -4
  370. data/app/helpers/component_helper.rb +0 -4
  371. data/app/helpers/facets_helper.rb +0 -4
  372. data/app/helpers/hash_as_hidden_fields_helper.rb +0 -4
  373. data/app/helpers/layout_helper.rb +0 -4
  374. data/app/helpers/render_constraints_helper.rb +0 -4
  375. data/app/helpers/search_history_constraints_helper.rb +0 -4
  376. data/app/helpers/suggest_helper.rb +0 -4
  377. data/app/models/concerns/blacklight/solr/document/more_like_this.rb +0 -6
  378. data/app/presenters/blacklight/document_presenter.rb +0 -153
  379. data/app/services/blacklight/search_params_yaml_coder.rb +0 -48
  380. data/app/views/_user_util_links.html.erb +0 -26
  381. data/app/views/blacklight/nav/_saved_searches.html.erb +0 -1
  382. data/app/views/catalog/_index_default.html.erb +0 -12
  383. data/app/views/catalog/_show_default.html.erb +0 -10
  384. data/app/views/catalog/_thumbnail_default.html.erb +0 -5
  385. data/app/views/saved_searches/index.html.erb +0 -32
  386. data/app/views/shared/_ajax_modal.html.erb +0 -6
  387. data/docker-compose.yml +0 -38
  388. data/lib/blacklight/utils.rb +0 -183
  389. data/lib/generators/blacklight/solr4_generator.rb +0 -31
  390. data/solr/conf/schema.xml +0 -627
  391. data/solr/conf/solrconfig.xml +0 -411
  392. data/spec/controllers/blacklight/search_helper_spec.rb +0 -489
  393. data/spec/controllers/saved_searches_controller_spec.rb +0 -32
  394. data/spec/controllers/suggest_controller_spec.rb +0 -17
  395. data/spec/features/saved_searches_spec.rb +0 -47
  396. data/spec/helpers/deprecated_url_helper_behavior_spec.rb +0 -101
  397. data/spec/lib/blacklight/utils_spec.rb +0 -167
  398. data/spec/models/blacklight/solr/document/more_like_this_spec.rb +0 -18
  399. data/spec/presenters/document_presenter_spec.rb +0 -438
  400. data/spec/support/backport_test.rb +0 -14
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- describe Blacklight::Document::CacheKey do
3
+ RSpec.describe Blacklight::Document::CacheKey do
4
4
  let(:attributes) { {} }
5
5
  let(:subject) { SolrDocument.new(attributes) }
6
6
  it 'SolrDocument includes the module' do
@@ -1,14 +1,14 @@
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
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
 
@@ -25,14 +25,14 @@ describe "Blacklight::Document::DublinCore" do
25
25
  end
26
26
 
27
27
  it "should include 'dc:'-prefixed semantic fields" do
28
- data = {'id'=>'123456','title_display'=>['654321'] }
28
+ data = {'id'=>'123456','title_tsim'=>['654321'] }
29
29
  document = @mock_class.new(data)
30
30
  expect(document.export_as_oai_dc_xml).to match 'xmlns:dc="http://purl.org/dc/elements/1.1/"'
31
31
  expect(document.export_as_oai_dc_xml).to match '<dc:title>654321</dc:title>'
32
32
  end
33
33
 
34
34
  it "should work with multi-value fields" do
35
- data = {'id'=>'123456','title_display'=>['654321', '987'] }
35
+ data = {'id'=>'123456','title_tsim'=>['654321', '987'] }
36
36
  document = @mock_class.new(data)
37
37
  expect(document.export_as_oai_dc_xml).to match '<dc:title>654321</dc:title>'
38
38
  expect(document.export_as_oai_dc_xml).to match '<dc:title>987</dc:title></oai_dc:dc>'
@@ -1,17 +1,17 @@
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
5
  SolrDocument.use_extension( Blacklight::Document::Email )
6
6
  end
7
7
  it "should only return values that are available in the field semantics" do
8
- doc = SolrDocument.new({:id=>"1234", :title_display=>"My Title"})
8
+ doc = SolrDocument.new({:id=>"1234", :title_tsim=>"My Title"})
9
9
  email_body = doc.to_email_text
10
10
  expect(email_body).to match(/Title: My Title/)
11
11
  expect(email_body).to_not match(/Author/)
12
12
  end
13
13
  it "should handle multi-values fields correctly" do
14
- doc = SolrDocument.new({:id=>"1234", :title_display=>["My Title", "My Alt. Title"]})
14
+ doc = SolrDocument.new({:id=>"1234", :title_tsim=>["My Title", "My Alt. Title"]})
15
15
  email_body = doc.to_email_text
16
16
  expect(email_body).to match(/Title: My Title My Alt. Title/)
17
17
  end
@@ -1,16 +1,16 @@
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
5
  SolrDocument.use_extension( Blacklight::Document::Sms )
6
6
  end
7
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"})
8
+ doc = SolrDocument.new({:id=>"1234", :title_tsim=>"My Title", :author_tsim=>"Joe Schmoe"})
9
9
  sms_text = doc.to_sms_text
10
10
  expect(sms_text).to match(/My Title by Joe Schmoe/)
11
11
  end
12
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
+ doc = SolrDocument.new({:id=>"1234", :title_tsim=>["My Title", "My Alt. Title"]})
14
14
  sms_text = doc.to_sms_text
15
15
  expect(sms_text).to match(/My Title/)
16
16
  expect(sms_text).to_not match(/My Alt\. Title/)
@@ -1,24 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- describe Blacklight::Document do
3
+ RSpec.describe Blacklight::Document do
4
4
  let(:data) { {} }
5
- let(:test_class) do
5
+ subject do
6
6
  Class.new do
7
7
  include Blacklight::Document
8
- end
9
- end
10
-
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
8
+ end.new(data)
22
9
  end
23
10
 
24
11
  describe "#has?" do
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- describe Blacklight::FacetPaginator do
3
+ RSpec.describe Blacklight::FacetPaginator do
4
4
 
5
5
  let(:f1) { Blacklight::Solr::Response::Facets::FacetItem.new(hits: '792', value: 'Book') }
6
6
  let(:f2) { Blacklight::Solr::Response::Facets::FacetItem.new(hits: '65', value: 'Musical Score') }
@@ -0,0 +1,34 @@
1
+ RSpec.describe Blacklight::Icon do
2
+ subject { described_class.new(:search, classes: 'awesome') }
3
+ describe '#svg' do
4
+ it 'returns a string' do
5
+ expect(subject.svg).to be_an String
6
+ end
7
+ it 'returns raw svg' do
8
+ expect(Capybara.string(subject.svg))
9
+ .to have_css 'svg title', text: 'Search'
10
+ end
11
+ end
12
+ describe '#options' do
13
+ it 'applies options classes and default class' do
14
+ expect(subject.options[:class]).to eq 'blacklight-icons awesome'
15
+ end
16
+ end
17
+ describe '#path' do
18
+ it 'prepends blacklight and sufixes .svg' do
19
+ expect(subject.path).to eq 'blacklight/search.svg'
20
+ end
21
+ end
22
+ describe 'file_source' do
23
+ context 'file is not available' do
24
+ subject { described_class.new(:yolo) }
25
+ it { expect { subject.file_source }
26
+ .to raise_error(Blacklight::Exceptions::IconNotFound) }
27
+ end
28
+ context 'file is available' do
29
+ it 'returns the filesource' do
30
+ expect(subject.file_source).to include '<svg'
31
+ end
32
+ end
33
+ end
34
+ end
@@ -1,28 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- describe Blacklight::SearchBuilder do
3
+ RSpec.describe Blacklight::SearchBuilder do
4
4
  let(:processor_chain) { [] }
5
5
  let(:blacklight_config) { Blacklight::Configuration.new }
6
6
  let(:scope) { double blacklight_config: blacklight_config }
7
- subject { described_class.new processor_chain, scope }
7
+ subject(:builder) { described_class.new processor_chain, scope }
8
8
 
9
9
  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
20
-
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
10
+ subject { described_class.new scope }
11
+ it "uses the class-level default_processor_chain" do
12
+ expect(subject.processor_chain).to eq []
26
13
  end
27
14
  end
28
15
 
@@ -176,18 +163,37 @@ describe Blacklight::SearchBuilder do
176
163
  end
177
164
 
178
165
  describe "#sort" do
179
- it "passes through the sort parameter" do
180
- expect(subject.with(sort: 'x').send(:sort)).to eq 'x'
181
- end
166
+ context "when no sort parameter is given" do
167
+ subject(:sort) { builder.send(:sort) }
168
+
169
+ before do
170
+ blacklight_config.default_sort_field = double(sort: 'x desc')
171
+ end
182
172
 
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'
173
+ it "uses the default" do
174
+ expect(sort).to eq 'x desc'
175
+ end
186
176
  end
187
177
 
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'
178
+ context "when the user provides an sort parameter" do
179
+ let(:builder_with_param) { builder.with(sort: 'x') }
180
+ subject(:sort) { builder_with_param.send(:sort) }
181
+
182
+ context "that is invalid" do
183
+ it "removes them" do
184
+ expect(sort).to be_nil
185
+ end
186
+ end
187
+
188
+ context "that is valid" do
189
+ before do
190
+ blacklight_config.add_sort_field 'x', sort: 'x asc'
191
+ end
192
+
193
+ it "uses the requested sort field" do
194
+ expect(sort).to eq 'x asc'
195
+ end
196
+ end
191
197
  end
192
198
  end
193
199
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- describe "Blacklight::Solr::Document" do
3
+ RSpec.describe "Blacklight::Solr::Document" do
4
4
  class MockDocument
5
5
  include Blacklight::Solr::Document
6
6
  end
@@ -233,14 +233,14 @@ describe "Blacklight::Solr::Document" do
233
233
  context "highlighting" do
234
234
 
235
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']}}})
236
+ @document = MockDocument.new({'id' => 'doc1', 'title_field' => 'doc1 title'}, {'highlighting' => { 'doc1' => { 'title_tsimext' => ['doc <em>1</em>']}, 'doc2' => { 'title_tsimext' => ['doc 2']}}})
237
237
 
238
238
  end
239
239
 
240
240
  describe "#has_highlight_field?" do
241
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
242
+ expect(@document).to have_highlight_field 'title_tsimext'
243
+ expect(@document).to have_highlight_field :title_tsimext
244
244
  end
245
245
 
246
246
  it "should be false if the highlight field isn't in the solr response" do
@@ -250,12 +250,12 @@ describe "Blacklight::Solr::Document" do
250
250
 
251
251
  describe "#highlight_field" do
252
252
  it "should return a value" do
253
- expect(@document.highlight_field('title_text')).to include('doc <em>1</em>')
253
+ expect(@document.highlight_field('title_tsimext')).to include('doc <em>1</em>')
254
254
  end
255
255
 
256
256
 
257
257
  it "should return a value that is html safe" do
258
- expect(@document.highlight_field('title_text').first).to be_html_safe
258
+ expect(@document.highlight_field('title_tsimext').first).to be_html_safe
259
259
  end
260
260
 
261
261
  it "should return nil when the field doesn't exist" do
@@ -276,5 +276,16 @@ describe "Blacklight::Solr::Document" do
276
276
 
277
277
  end
278
278
  end
279
-
279
+ describe '#more_like_this' do
280
+ let(:response) { instance_double(Blacklight::Solr::Response, :more_like => [{'id' => 'abc'}]) }
281
+ let(:document) { MockDocument.new({:id => '123'}, response) }
282
+ subject(:result) { document.more_like_this }
283
+
284
+ it "should pluck the MoreLikeThis results from the Solr Response" do
285
+ expect(result).to have(1).item
286
+ expect(result.first).to be_a_kind_of(MockDocument)
287
+ expect(result.first.id).to eq 'abc'
288
+ expect(result.first.solr_response).to eq response
289
+ end
290
+ end
280
291
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- describe Blacklight::Solr::FacetPaginator do
3
+ RSpec.describe Blacklight::Solr::FacetPaginator do
4
4
  let(:f1) { Blacklight::Solr::Response::Facets::FacetItem.new(hits: '792', value: 'Book') }
5
5
  describe "#as_json" do
6
6
  subject { described_class.new([f1], offset: 0, limit: nil).as_json }
@@ -1,9 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- RSpec.describe Blacklight::Solr::Repository, api: true do
4
- subject(:repository) do
5
- described_class.new blacklight_config
6
- end
3
+ RSpec.describe Blacklight::Solr::Repository do
7
4
 
8
5
  let :blacklight_config do
9
6
  CatalogController.blacklight_config.deep_copy
@@ -29,33 +26,45 @@ RSpec.describe Blacklight::Solr::Repository, api: true do
29
26
  expect(subject.find("123")).to be_a_kind_of Blacklight::Solr::Response
30
27
  end
31
28
 
32
- it "should use the default solr path" do
33
- blacklight_config.solr_path = 'xyz'
34
- allow(subject.connection).to receive(:send_and_receive).with('xyz', anything).and_return(mock_response)
35
- expect(subject.find("123")).to be_a_kind_of Blacklight::Solr::Response
36
- end
37
-
38
29
  it "should use a default :qt param" do
39
- allow(subject.connection).to receive(:send_and_receive).with('select', hash_including(params: { id: '123', qt: 'document'})).and_return(mock_response)
30
+ allow(subject.connection).to receive(:send_and_receive).with('get', hash_including(params: hash_including(ids: '123'))).and_return(mock_response)
40
31
  expect(subject.find("123", {})).to be_a_kind_of Blacklight::Solr::Response
41
32
  end
42
33
 
43
- it "should use the provided :qt param" do
44
- blacklight_config.document_solr_request_handler = 'xyz'
45
- allow(subject.connection).to receive(:send_and_receive).with('select', hash_including(params: { id: '123', qt: 'abc'})).and_return(mock_response)
46
- expect(subject.find("123", {qt: 'abc'})).to be_a_kind_of Blacklight::Solr::Response
34
+ context "without a document solr path configured" do
35
+ before do
36
+ blacklight_config.document_solr_path = nil
37
+ end
38
+
39
+ it "should use the default solr path" do
40
+ blacklight_config.solr_path = 'xyz'
41
+ allow(subject.connection).to receive(:send_and_receive).with('xyz', anything).and_return(mock_response)
42
+ expect(subject.find("123")).to be_a_kind_of Blacklight::Solr::Response
43
+ end
47
44
  end
48
45
 
49
- it "should use the :qt parameter from the default_document_solr_params" do
50
- blacklight_config.default_document_solr_params[:qt] = 'abc'
51
- blacklight_config.document_solr_request_handler = 'xyz'
52
- allow(subject.connection).to receive(:send_and_receive).with('select', hash_including(params: { id: '123', qt: 'abc'})).and_return(mock_response)
53
- expect(subject.find("123")).to be_a_kind_of Blacklight::Solr::Response
46
+ context "with legacy request handler-based configuration" do
47
+ before do
48
+ blacklight_config.document_solr_path = 'select'
49
+ blacklight_config.document_unique_id_param = :id
50
+ end
51
+ it "should use the provided :qt param" do
52
+ blacklight_config.document_solr_request_handler = 'xyz'
53
+ allow(subject.connection).to receive(:send_and_receive).with('select', hash_including(params: { id: '123', qt: 'abc'})).and_return(mock_response)
54
+ expect(subject.find("123", {qt: 'abc'})).to be_a_kind_of Blacklight::Solr::Response
55
+ end
56
+
57
+ it "should use the :qt parameter from the default_document_solr_params" do
58
+ blacklight_config.default_document_solr_params[:qt] = 'abc'
59
+ blacklight_config.document_solr_request_handler = 'xyz'
60
+ allow(subject.connection).to receive(:send_and_receive).with('select', hash_including(params: { id: '123', qt: 'abc'})).and_return(mock_response)
61
+ expect(subject.find("123")).to be_a_kind_of Blacklight::Solr::Response
62
+ end
54
63
  end
55
64
 
56
65
  it "should preserve the class of the incoming params" do
57
66
  doc_params = ActiveSupport::HashWithIndifferentAccess.new
58
- allow(subject.connection).to receive(:send_and_receive).with('select', anything).and_return(mock_response)
67
+ allow(subject.connection).to receive(:send_and_receive).with('get', anything).and_return(mock_response)
59
68
  response = subject.find("123", doc_params)
60
69
  expect(response).to be_a_kind_of Blacklight::Solr::Response
61
70
  expect(response.params).to be_a_kind_of ActiveSupport::HashWithIndifferentAccess
@@ -85,12 +94,12 @@ RSpec.describe Blacklight::Solr::Repository, api: true do
85
94
  allow(subject.connection).to receive(:send_and_receive).with('select', hash_including(params: { qt: 'abc'})).and_return(mock_response)
86
95
  expect(subject.search({qt: 'abc'})).to be_a_kind_of Blacklight::Solr::Response
87
96
  end
88
-
97
+
89
98
  it "should preserve the class of the incoming params" do
90
99
  search_params = ActiveSupport::HashWithIndifferentAccess.new
91
100
  search_params[:q] = "query"
92
101
  allow(subject.connection).to receive(:send_and_receive).with('select', anything).and_return(mock_response)
93
-
102
+
94
103
  response = subject.search(search_params)
95
104
  expect(response).to be_a_kind_of Blacklight::Solr::Response
96
105
  expect(response.params).to be_a_kind_of ActiveSupport::HashWithIndifferentAccess
@@ -137,9 +146,5 @@ RSpec.describe Blacklight::Solr::Repository, api: true do
137
146
  end
138
147
  end
139
148
 
140
- describe '#ping' do
141
- subject { repository.ping }
142
149
 
143
- it { is_expected.to be true }
144
- end
145
150
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- describe Blacklight::Solr::Request do
3
+ RSpec.describe Blacklight::Solr::Request do
4
4
  before do
5
5
  subject[:qt] = 'hey'
6
6
  subject[:fq] = ["what's up.", "dood"]
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- describe Blacklight::Solr::Response::Facets do
3
+ RSpec.describe Blacklight::Solr::Response::Facets do
4
4
  describe Blacklight::Solr::Response::Facets::FacetField do
5
5
 
6
6
  describe "A field with default options" do
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
  require "spec_helper"
3
3
 
4
- describe Blacklight::Solr::Response::GroupResponse do
4
+ RSpec.describe Blacklight::Solr::Response::GroupResponse do
5
5
 
6
6
  let(:response) do
7
7
  create_response(sample_response)
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
  require "spec_helper"
3
3
 
4
- describe Blacklight::Solr::Response::Group do
4
+ RSpec.describe Blacklight::Solr::Response::Group do
5
5
 
6
6
  let(:response) do
7
7
  create_response(sample_response)
@@ -3,9 +3,12 @@
3
3
  RSpec.describe Blacklight::Solr::Response do
4
4
  let(:raw_response) { eval(mock_query_response) }
5
5
 
6
+ let(:config) { Blacklight::Configuration.new }
7
+
6
8
  let(:r) do
7
9
  Blacklight::Solr::Response.new(raw_response,
8
- raw_response['params'])
10
+ raw_response['params'],
11
+ blacklight_config: config)
9
12
  end
10
13
 
11
14
  it 'should create a valid response' do
@@ -120,15 +123,15 @@ RSpec.describe Blacklight::Solr::Response do
120
123
  raw_response = eval(mock_query_response)
121
124
  r = Blacklight::Solr::Response.new(raw_response, {})
122
125
  expect(r.params[:rows].to_s).to eq '11'
123
- expect(r.params[:sort]).to eq 'title_sort asc, pub_date_sort desc'
126
+ expect(r.params[:sort]).to eq 'title_si asc, pub_date_si desc'
124
127
  end
125
128
 
126
129
  it 'should provide the ruby request params if responseHeader["params"] does not exist' do
127
130
  raw_response = eval(mock_query_response)
128
131
  raw_response.delete 'responseHeader'
129
- r = Blacklight::Solr::Response.new(raw_response, :rows => 999, :sort => 'score desc, pub_date_sort desc, title_sort asc')
132
+ r = Blacklight::Solr::Response.new(raw_response, :rows => 999, :sort => 'score desc, pub_date_si desc, title_si asc')
130
133
  expect(r.params[:rows].to_s).to eq '999'
131
- expect(r.params[:sort]).to eq 'score desc, pub_date_sort desc, title_sort asc'
134
+ expect(r.params[:sort]).to eq 'score desc, pub_date_si desc, title_si asc'
132
135
  end
133
136
 
134
137
  it 'should provide spelling suggestions for regular spellcheck results' do
@@ -211,7 +214,7 @@ RSpec.describe Blacklight::Solr::Response do
211
214
  end
212
215
 
213
216
  def mock_query_response
214
- %({'responseHeader'=>{'status'=>0,'QTime'=>5,'params'=>{'facet.limit'=>'10','wt'=>'ruby','rows'=>'11','facet'=>'true','facet.field'=>['cat','manu'],'echoParams'=>'EXPLICIT','q'=>'*:*','facet.sort'=>'true', 'sort'=>'title_sort asc, pub_date_sort desc'}},'response'=>{'numFound'=>26,'start'=>0,'docs'=>[{'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']},{'id'=>'6H500F0','inStock'=>true,'manu'=>'Maxtor Corp.','name'=>'Maxtor DiamondMax 11 - hard drive - 500 GB - SATA-300','popularity'=>6,'price'=>350.0,'sku'=>'6H500F0','timestamp'=>'2009-03-20T14:42:49.877Z','cat'=>['electronics','hard drive'],'spell'=>['Maxtor DiamondMax 11 - hard drive - 500 GB - SATA-300'],'features'=>['SATA 3.0Gb/s, NCQ','8.5ms seek','16MB cache']},{'id'=>'F8V7067-APL-KIT','inStock'=>false,'manu'=>'Belkin','name'=>'Belkin Mobile Power Cord for iPod w/ Dock','popularity'=>1,'price'=>19.95,'sku'=>'F8V7067-APL-KIT','timestamp'=>'2009-03-20T14:42:49.937Z','weight'=>4.0,'cat'=>['electronics','connector'],'spell'=>['Belkin Mobile Power Cord for iPod w/ Dock'],'features'=>['car power adapter, white']},{'id'=>'IW-02','inStock'=>false,'manu'=>'Belkin','name'=>'iPod & iPod Mini USB 2.0 Cable','popularity'=>1,'price'=>11.5,'sku'=>'IW-02','timestamp'=>'2009-03-20T14:42:49.944Z','weight'=>2.0,'cat'=>['electronics','connector'],'spell'=>['iPod & iPod Mini USB 2.0 Cable'],'features'=>['car power adapter for iPod, white']},{'id'=>'MA147LL/A','inStock'=>true,'includes'=>'earbud headphones, USB cable','manu'=>'Apple Computer Inc.','name'=>'Apple 60 GB iPod with Video Playback Black','popularity'=>10,'price'=>399.0,'sku'=>'MA147LL/A','timestamp'=>'2009-03-20T14:42:49.962Z','weight'=>5.5,'cat'=>['electronics','music'],'spell'=>['Apple 60 GB iPod with Video Playback Black'],'features'=>['iTunes, Podcasts, Audiobooks','Stores up to 15,000 songs, 25,000 photos, or 150 hours of video','2.5-inch, 320x240 color TFT LCD display with LED backlight','Up to 20 hours of battery life','Plays AAC, MP3, WAV, AIFF, Audible, Apple Lossless, H.264 video','Notes, Calendar, Phone book, Hold button, Date display, Photo wallet, Built-in games, JPEG photo playback, Upgradeable firmware, USB 2.0 compatibility, Playback speed control, Rechargeable capability, Battery level indication']},{'id'=>'TWINX2048-3200PRO','inStock'=>true,'manu'=>'Corsair Microsystems Inc.','name'=>'CORSAIR XMS 2GB (2 x 1GB) 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) Dual Channel Kit System Memory - Retail','popularity'=>5,'price'=>185.0,'sku'=>'TWINX2048-3200PRO','timestamp'=>'2009-03-20T14:42:49.99Z','cat'=>['electronics','memory'],'spell'=>['CORSAIR XMS 2GB (2 x 1GB) 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) Dual Channel Kit System Memory - Retail'],'features'=>['CAS latency 2, 2-3-3-6 timing, 2.75v, unbuffered, heat-spreader']},{'id'=>'VS1GB400C3','inStock'=>true,'manu'=>'Corsair Microsystems Inc.','name'=>'CORSAIR ValueSelect 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - Retail','popularity'=>7,'price'=>74.99,'sku'=>'VS1GB400C3','timestamp'=>'2009-03-20T14:42:50Z','cat'=>['electronics','memory'],'spell'=>['CORSAIR ValueSelect 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - Retail']},{'id'=>'VDBDB1A16','inStock'=>true,'manu'=>'A-DATA Technology Inc.','name'=>'A-DATA V-Series 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - OEM','popularity'=>5,'sku'=>'VDBDB1A16','timestamp'=>'2009-03-20T14:42:50.004Z','cat'=>['electronics','memory'],'spell'=>['A-DATA V-Series 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - OEM'],'features'=>['CAS latency 3, 2.7v']},{'id'=>'3007WFP','inStock'=>true,'includes'=>'USB cable','manu'=>'Dell, Inc.','name'=>'Dell Widescreen UltraSharp 3007WFP','popularity'=>6,'price'=>2199.0,'sku'=>'3007WFP','timestamp'=>'2009-03-20T14:42:50.017Z','weight'=>401.6,'cat'=>['electronics','monitor'],'spell'=>['Dell Widescreen UltraSharp 3007WFP'],'features'=>['30" TFT active matrix LCD, 2560 x 1600, .25mm dot pitch, 700:1 contrast']},{'id'=>'VA902B','inStock'=>true,'manu'=>'ViewSonic Corp.','name'=>'ViewSonic VA902B - flat panel display - TFT - 19"','popularity'=>6,'price'=>279.95,'sku'=>'VA902B','timestamp'=>'2009-03-20T14:42:50.034Z','weight'=>190.4,'cat'=>['electronics','monitor'],'spell'=>['ViewSonic VA902B - flat panel display - TFT - 19"'],'features'=>['19" TFT active matrix LCD, 8ms response time, 1280 x 1024 native resolution']},{'id'=>'0579B002','inStock'=>true,'manu'=>'Canon Inc.','name'=>'Canon PIXMA MP500 All-In-One Photo Printer','popularity'=>6,'price'=>179.99,'sku'=>'0579B002','timestamp'=>'2009-03-20T14:42:50.062Z','weight'=>352.0,'cat'=>['electronics','multifunction printer','printer','scanner','copier'],'spell'=>['Canon PIXMA MP500 All-In-One Photo Printer'],'features'=>['Multifunction ink-jet color photo printer','Flatbed scanner, optical scan resolution of 1,200 x 2,400 dpi','2.5" color LCD preview screen','Duplex Copying','Printing speed up to 29ppm black, 19ppm color','Hi-Speed USB','memory card: CompactFlash, Micro Drive, SmartMedia, Memory Stick, Memory Stick Pro, SD Card, and MultiMediaCard']}]},'facet_counts'=>{'facet_queries'=>{},'facet_fields'=>{'cat'=>['electronics',14,'memory',3,'card',2,'connector',2,'drive',2,'graphics',2,'hard',2,'monitor',2,'search',2,'software',2],'manu'=>['inc',8,'apach',2,'belkin',2,'canon',2,'comput',2,'corp',2,'corsair',2,'foundat',2,'microsystem',2,'softwar',2]},'facet_dates'=>{}}})
217
+ %({'responseHeader'=>{'status'=>0,'QTime'=>5,'params'=>{'facet.limit'=>'10','wt'=>'ruby','rows'=>'11','facet'=>'true','facet.field'=>['cat','manu'],'echoParams'=>'EXPLICIT','q'=>'*:*','facet.sort'=>'true', 'sort'=>'title_si asc, pub_date_si desc'}},'response'=>{'numFound'=>26,'start'=>0,'docs'=>[{'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']},{'id'=>'6H500F0','inStock'=>true,'manu'=>'Maxtor Corp.','name'=>'Maxtor DiamondMax 11 - hard drive - 500 GB - SATA-300','popularity'=>6,'price'=>350.0,'sku'=>'6H500F0','timestamp'=>'2009-03-20T14:42:49.877Z','cat'=>['electronics','hard drive'],'spell'=>['Maxtor DiamondMax 11 - hard drive - 500 GB - SATA-300'],'features'=>['SATA 3.0Gb/s, NCQ','8.5ms seek','16MB cache']},{'id'=>'F8V7067-APL-KIT','inStock'=>false,'manu'=>'Belkin','name'=>'Belkin Mobile Power Cord for iPod w/ Dock','popularity'=>1,'price'=>19.95,'sku'=>'F8V7067-APL-KIT','timestamp'=>'2009-03-20T14:42:49.937Z','weight'=>4.0,'cat'=>['electronics','connector'],'spell'=>['Belkin Mobile Power Cord for iPod w/ Dock'],'features'=>['car power adapter, white']},{'id'=>'IW-02','inStock'=>false,'manu'=>'Belkin','name'=>'iPod & iPod Mini USB 2.0 Cable','popularity'=>1,'price'=>11.5,'sku'=>'IW-02','timestamp'=>'2009-03-20T14:42:49.944Z','weight'=>2.0,'cat'=>['electronics','connector'],'spell'=>['iPod & iPod Mini USB 2.0 Cable'],'features'=>['car power adapter for iPod, white']},{'id'=>'MA147LL/A','inStock'=>true,'includes'=>'earbud headphones, USB cable','manu'=>'Apple Computer Inc.','name'=>'Apple 60 GB iPod with Video Playback Black','popularity'=>10,'price'=>399.0,'sku'=>'MA147LL/A','timestamp'=>'2009-03-20T14:42:49.962Z','weight'=>5.5,'cat'=>['electronics','music'],'spell'=>['Apple 60 GB iPod with Video Playback Black'],'features'=>['iTunes, Podcasts, Audiobooks','Stores up to 15,000 songs, 25,000 photos, or 150 hours of video','2.5-inch, 320x240 color TFT LCD display with LED backlight','Up to 20 hours of battery life','Plays AAC, MP3, WAV, AIFF, Audible, Apple Lossless, H.264 video','Notes, Calendar, Phone book, Hold button, Date display, Photo wallet, Built-in games, JPEG photo playback, Upgradeable firmware, USB 2.0 compatibility, Playback speed control, Rechargeable capability, Battery level indication']},{'id'=>'TWINX2048-3200PRO','inStock'=>true,'manu'=>'Corsair Microsystems Inc.','name'=>'CORSAIR XMS 2GB (2 x 1GB) 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) Dual Channel Kit System Memory - Retail','popularity'=>5,'price'=>185.0,'sku'=>'TWINX2048-3200PRO','timestamp'=>'2009-03-20T14:42:49.99Z','cat'=>['electronics','memory'],'spell'=>['CORSAIR XMS 2GB (2 x 1GB) 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) Dual Channel Kit System Memory - Retail'],'features'=>['CAS latency 2, 2-3-3-6 timing, 2.75v, unbuffered, heat-spreader']},{'id'=>'VS1GB400C3','inStock'=>true,'manu'=>'Corsair Microsystems Inc.','name'=>'CORSAIR ValueSelect 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - Retail','popularity'=>7,'price'=>74.99,'sku'=>'VS1GB400C3','timestamp'=>'2009-03-20T14:42:50Z','cat'=>['electronics','memory'],'spell'=>['CORSAIR ValueSelect 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - Retail']},{'id'=>'VDBDB1A16','inStock'=>true,'manu'=>'A-DATA Technology Inc.','name'=>'A-DATA V-Series 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - OEM','popularity'=>5,'sku'=>'VDBDB1A16','timestamp'=>'2009-03-20T14:42:50.004Z','cat'=>['electronics','memory'],'spell'=>['A-DATA V-Series 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - OEM'],'features'=>['CAS latency 3, 2.7v']},{'id'=>'3007WFP','inStock'=>true,'includes'=>'USB cable','manu'=>'Dell, Inc.','name'=>'Dell Widescreen UltraSharp 3007WFP','popularity'=>6,'price'=>2199.0,'sku'=>'3007WFP','timestamp'=>'2009-03-20T14:42:50.017Z','weight'=>401.6,'cat'=>['electronics','monitor'],'spell'=>['Dell Widescreen UltraSharp 3007WFP'],'features'=>['30" TFT active matrix LCD, 2560 x 1600, .25mm dot pitch, 700:1 contrast']},{'id'=>'VA902B','inStock'=>true,'manu'=>'ViewSonic Corp.','name'=>'ViewSonic VA902B - flat panel display - TFT - 19"','popularity'=>6,'price'=>279.95,'sku'=>'VA902B','timestamp'=>'2009-03-20T14:42:50.034Z','weight'=>190.4,'cat'=>['electronics','monitor'],'spell'=>['ViewSonic VA902B - flat panel display - TFT - 19"'],'features'=>['19" TFT active matrix LCD, 8ms response time, 1280 x 1024 native resolution']},{'id'=>'0579B002','inStock'=>true,'manu'=>'Canon Inc.','name'=>'Canon PIXMA MP500 All-In-One Photo Printer','popularity'=>6,'price'=>179.99,'sku'=>'0579B002','timestamp'=>'2009-03-20T14:42:50.062Z','weight'=>352.0,'cat'=>['electronics','multifunction printer','printer','scanner','copier'],'spell'=>['Canon PIXMA MP500 All-In-One Photo Printer'],'features'=>['Multifunction ink-jet color photo printer','Flatbed scanner, optical scan resolution of 1,200 x 2,400 dpi','2.5" color LCD preview screen','Duplex Copying','Printing speed up to 29ppm black, 19ppm color','Hi-Speed USB','memory card: CompactFlash, Micro Drive, SmartMedia, Memory Stick, Memory Stick Pro, SD Card, and MultiMediaCard']}]},'facet_counts'=>{'facet_queries'=>{},'facet_fields'=>{'cat'=>['electronics',14,'memory',3,'card',2,'connector',2,'drive',2,'graphics',2,'hard',2,'monitor',2,'search',2,'software',2],'manu'=>['inc',8,'apach',2,'belkin',2,'canon',2,'comput',2,'corp',2,'corsair',2,'foundat',2,'microsystem',2,'softwar',2]},'facet_dates'=>{}}})
215
218
  end
216
219
 
217
220
  # These spellcheck responses are all Solr 1.4 responses
@@ -241,6 +244,6 @@ RSpec.describe Blacklight::Solr::Response do
241
244
  end
242
245
 
243
246
  def mock_response_with_more_like_this
244
- %({'responseHeader'=>{'status'=>0,'QTime'=>8,'params'=>{'facet'=>'false','mlt.mindf'=>'1','mlt.fl'=>'subject_t','fl'=>'id','mlt.count'=>'3','mlt.mintf'=>'0','mlt'=>'true','q.alt'=>'*:*','qt'=>'search','wt'=>'ruby'}},'response'=>{'numFound'=>30,'start'=>0,'docs'=>[{'id'=>'00282214'},{'id'=>'00282371'},{'id'=>'00313831'},{'id'=>'00314247'},{'id'=>'43037890'},{'id'=>'53029833'},{'id'=>'77826928'},{'id'=>'78908283'},{'id'=>'79930185'},{'id'=>'85910001'}]},'moreLikeThis'=>{'00282214'=>{'numFound'=>0,'start'=>0,'docs'=>[]},'00282371'=>{'numFound'=>0,'start'=>0,'docs'=>[]},'00313831'=>{'numFound'=>1,'start'=>0,'docs'=>[{'id'=>'96933325'}]},'00314247'=>{'numFound'=>3,'start'=>0,'docs'=>[{'id'=>'2008543486'},{'id'=>'96933325'},{'id'=>'2009373513'}]},'43037890'=>{'numFound'=>0,'start'=>0,'docs'=>[]},'53029833'=>{'numFound'=>0,'start'=>0,'docs'=>[]},'77826928'=>{'numFound'=>1,'start'=>0,'docs'=>[{'id'=>'94120425'}]},'78908283'=>{'numFound'=>0,'start'=>0,'docs'=>[]},'79930185'=>{'numFound'=>2,'start'=>0,'docs'=>[{'id'=>'94120425'},{'id'=>'2007020969'}]},'85910001'=>{'numFound'=>0,'start'=>0,'docs'=>[]}}})
247
+ %({'responseHeader'=>{'status'=>0,'QTime'=>8,'params'=>{'facet'=>'false','mlt.mindf'=>'1','mlt.fl'=>'subject_tsim','fl'=>'id','mlt.count'=>'3','mlt.mintf'=>'0','mlt'=>'true','q.alt'=>'*:*','qt'=>'search','wt'=>'ruby'}},'response'=>{'numFound'=>30,'start'=>0,'docs'=>[{'id'=>'00282214'},{'id'=>'00282371'},{'id'=>'00313831'},{'id'=>'00314247'},{'id'=>'43037890'},{'id'=>'53029833'},{'id'=>'77826928'},{'id'=>'78908283'},{'id'=>'79930185'},{'id'=>'85910001'}]},'moreLikeThis'=>{'00282214'=>{'numFound'=>0,'start'=>0,'docs'=>[]},'00282371'=>{'numFound'=>0,'start'=>0,'docs'=>[]},'00313831'=>{'numFound'=>1,'start'=>0,'docs'=>[{'id'=>'96933325'}]},'00314247'=>{'numFound'=>3,'start'=>0,'docs'=>[{'id'=>'2008543486'},{'id'=>'96933325'},{'id'=>'2009373513'}]},'43037890'=>{'numFound'=>0,'start'=>0,'docs'=>[]},'53029833'=>{'numFound'=>0,'start'=>0,'docs'=>[]},'77826928'=>{'numFound'=>1,'start'=>0,'docs'=>[{'id'=>'94120425'}]},'78908283'=>{'numFound'=>0,'start'=>0,'docs'=>[]},'79930185'=>{'numFound'=>2,'start'=>0,'docs'=>[{'id'=>'94120425'},{'id'=>'2007020969'}]},'85910001'=>{'numFound'=>0,'start'=>0,'docs'=>[]}}})
245
248
  end
246
249
  end