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.
- checksums.yaml +5 -5
- data/.gitignore +1 -0
- data/.npmignore +23 -0
- data/.rubocop.yml +40 -16
- data/.rubocop_todo.yml +479 -375
- data/.solr_wrapper.yml +9 -2
- data/.travis.yml +27 -20
- data/Gemfile +3 -1
- data/README.md +22 -5
- data/Rakefile +3 -2
- data/VERSION +1 -1
- data/Vagrantfile +2 -0
- data/app/assets/images/blacklight/list.svg +1 -0
- data/app/assets/images/blacklight/search.svg +1 -0
- data/app/assets/javascripts/blacklight/blacklight.js +497 -57
- data/app/assets/stylesheets/blacklight/_balanced_list.scss +7 -12
- data/app/assets/stylesheets/blacklight/_blacklight_base.scss +18 -15
- data/app/assets/stylesheets/blacklight/_bookmark.scss +1 -13
- data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +27 -0
- data/app/assets/stylesheets/blacklight/_constraints.scss +17 -25
- data/app/assets/stylesheets/blacklight/_controls.scss +8 -16
- data/app/assets/stylesheets/blacklight/_facets.scss +64 -93
- data/app/assets/stylesheets/blacklight/_header.scss +35 -48
- data/app/assets/stylesheets/blacklight/_icons.scss +35 -0
- data/app/assets/stylesheets/blacklight/_layout.scss +0 -10
- data/app/assets/stylesheets/blacklight/_mixins.scss +15 -0
- data/app/assets/stylesheets/blacklight/_modal.scss +9 -17
- data/app/assets/stylesheets/blacklight/_pagination.scss +2 -17
- data/app/assets/stylesheets/blacklight/_search_form.scss +7 -0
- data/app/assets/stylesheets/blacklight/_search_history.scss +5 -13
- data/app/assets/stylesheets/blacklight/_search_results.scss +9 -8
- data/app/assets/stylesheets/blacklight/_twitter_typeahead.scss +1 -2
- data/app/assets/stylesheets/blacklight/blacklight.scss +1 -1
- data/app/builders/blacklight/action_builder.rb +57 -0
- data/app/controllers/bookmarks_controller.rb +2 -2
- data/app/controllers/catalog_controller.rb +2 -2
- data/app/controllers/concerns/blacklight/base.rb +0 -33
- data/app/controllers/concerns/blacklight/bookmarks.rb +36 -33
- data/app/controllers/concerns/blacklight/catalog.rb +266 -210
- data/app/controllers/concerns/blacklight/controller.rb +111 -126
- data/app/controllers/concerns/blacklight/default_component_configuration.rb +12 -43
- data/app/controllers/concerns/blacklight/facet.rb +3 -0
- data/app/controllers/concerns/blacklight/search_context.rb +16 -14
- data/app/controllers/concerns/blacklight/search_fields.rb +4 -14
- data/app/controllers/concerns/blacklight/search_history.rb +1 -6
- data/app/controllers/concerns/blacklight/token_based_user.rb +24 -9
- data/app/helpers/blacklight/blacklight_helper_behavior.rb +39 -119
- data/app/helpers/blacklight/catalog_helper_behavior.rb +94 -88
- data/app/helpers/blacklight/component_helper_behavior.rb +21 -19
- data/app/helpers/blacklight/configuration_helper_behavior.rb +30 -57
- data/app/helpers/blacklight/facets_helper_behavior.rb +55 -51
- data/app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb +9 -11
- data/app/helpers/blacklight/icon_helper_behavior.rb +18 -0
- data/app/helpers/blacklight/layout_helper_behavior.rb +3 -3
- data/app/helpers/blacklight/render_constraints_helper_behavior.rb +8 -6
- data/app/helpers/blacklight/render_partials_helper_behavior.rb +195 -0
- data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +19 -11
- data/app/helpers/blacklight/suggest_helper_behavior.rb +1 -0
- data/app/helpers/blacklight/url_helper_behavior.rb +50 -41
- data/app/{assets/javascripts → javascript}/blacklight/autocomplete.js +3 -2
- data/app/javascript/blacklight/bookmark_toggle.js +25 -0
- data/app/javascript/blacklight/checkbox_submit.js +134 -0
- data/app/{assets/javascripts → javascript}/blacklight/collapsable.js +1 -1
- data/app/{assets/javascripts → javascript}/blacklight/core.js +10 -8
- data/app/{assets/javascripts → javascript}/blacklight/facet_load.js +6 -6
- data/app/{assets/javascripts/blacklight/ajax_modal.js → javascript/blacklight/modal.js} +62 -64
- data/app/{assets/javascripts → javascript}/blacklight/search_context.js +10 -3
- data/app/models/blacklight/facet_paginator.rb +3 -3
- data/app/models/blacklight/icon.rb +56 -0
- data/app/models/blacklight/solr/facet_paginator.rb +3 -3
- data/app/models/blacklight/suggest_search.rb +4 -15
- data/app/models/bookmark.rb +5 -10
- data/app/models/concerns/blacklight/configurable.rb +13 -13
- data/app/models/concerns/blacklight/document/active_model_shim.rb +13 -11
- data/app/models/concerns/blacklight/document/cache_key.rb +1 -1
- data/app/models/concerns/blacklight/document/dublin_core.rb +2 -2
- data/app/models/concerns/blacklight/document/email.rb +1 -1
- data/app/models/concerns/blacklight/document/extensions.rb +5 -5
- data/app/models/concerns/blacklight/document/semantic_fields.rb +9 -9
- data/app/models/concerns/blacklight/document/sms.rb +1 -1
- data/app/models/concerns/blacklight/document.rb +26 -40
- data/app/models/concerns/blacklight/solr/document.rb +8 -8
- data/app/models/concerns/blacklight/suggest/response.rb +5 -3
- data/app/models/concerns/blacklight/user.rb +7 -6
- data/app/models/record_mailer.rb +5 -6
- data/app/models/search.rb +5 -7
- data/app/presenters/blacklight/document_presenter.rb +25 -140
- data/app/presenters/blacklight/field_presenter.rb +7 -5
- data/app/presenters/blacklight/index_presenter.rb +41 -58
- data/app/presenters/blacklight/json_presenter.rb +10 -14
- data/app/presenters/blacklight/link_alternate_presenter.rb +3 -1
- data/app/presenters/blacklight/rendering/abstract_step.rb +7 -5
- data/app/presenters/blacklight/rendering/helper_method.rb +10 -8
- data/app/presenters/blacklight/rendering/join.rb +5 -3
- data/app/presenters/blacklight/rendering/link_to_facet.rb +23 -19
- data/app/presenters/blacklight/rendering/microdata.rb +6 -3
- data/app/presenters/blacklight/rendering/pipeline.rb +7 -5
- data/app/presenters/blacklight/rendering/terminator.rb +2 -0
- data/app/presenters/blacklight/search_bar_presenter.rb +39 -0
- data/app/presenters/blacklight/show_presenter.rb +26 -63
- data/app/presenters/blacklight/thumbnail_presenter.rb +74 -0
- data/app/services/blacklight/document_factory.rb +13 -0
- data/app/services/blacklight/field_retriever.rb +26 -24
- data/app/services/blacklight/search_service.rb +152 -0
- data/app/values/blacklight/types.rb +31 -0
- data/app/views/blacklight/nav/_bookmark.html.erb +2 -2
- data/app/views/blacklight/nav/_search_history.html.erb +1 -1
- data/app/views/bookmarks/_tools.html.erb +2 -2
- data/app/views/bookmarks/index.html.erb +12 -13
- data/app/views/catalog/_bookmark_control.html.erb +26 -10
- data/app/views/catalog/_citation.html.erb +4 -4
- data/app/views/catalog/_constraints.html.erb +6 -7
- data/app/views/catalog/_constraints_element.html.erb +6 -6
- data/app/views/catalog/_did_you_mean.html.erb +1 -1
- data/app/views/catalog/{_document_default.atom.builder → _document.atom.builder} +19 -18
- data/app/views/catalog/_document.html.erb +5 -3
- data/app/views/catalog/{_document_default.rss.builder → _document.rss.builder} +2 -0
- data/app/views/catalog/_document_action.html.erb +2 -1
- data/app/views/catalog/_email_form.html.erb +8 -4
- data/app/views/catalog/_facet_index_navigation.html.erb +5 -4
- data/app/views/catalog/_facet_layout.html.erb +6 -10
- data/app/views/catalog/_facet_limit.html.erb +3 -2
- data/app/views/catalog/_facet_pagination.html.erb +8 -8
- data/app/views/catalog/_facet_pivot.html.erb +2 -2
- data/app/views/catalog/_facets.html.erb +9 -12
- data/app/views/catalog/_field.json.jbuilder +10 -0
- data/app/views/catalog/{_group_default.html.erb → _group.html.erb} +1 -1
- data/app/views/catalog/_home_text.html.erb +32 -36
- data/app/views/catalog/_index.html.erb +10 -0
- data/app/views/catalog/{_index_header_default.html.erb → _index_header.html.erb} +3 -3
- data/app/views/catalog/_per_page_widget.html.erb +6 -7
- data/app/views/catalog/_previous_next_doc.html.erb +6 -14
- data/app/views/catalog/_results_pagination.html.erb +2 -2
- data/app/views/catalog/_search_form.html.erb +12 -8
- data/app/views/catalog/_search_header.html.erb +0 -3
- data/app/views/catalog/_search_results.html.erb +6 -2
- data/app/views/catalog/_show.html.erb +8 -0
- data/app/views/catalog/_show_main_content.html.erb +4 -4
- data/app/views/catalog/_show_more_like_this.html.erb +1 -1
- data/app/views/catalog/_show_sidebar.html.erb +3 -3
- data/app/views/catalog/_show_tools.html.erb +10 -12
- data/app/views/catalog/_sms_form.html.erb +8 -4
- data/app/views/catalog/_sort_and_per_page.html.erb +3 -3
- data/app/views/catalog/_sort_widget.html.erb +7 -7
- data/app/views/catalog/_thumbnail.html.erb +5 -0
- data/app/views/catalog/_view_type_group.html.erb +2 -2
- data/app/views/catalog/_zero_results.html.erb +1 -1
- data/app/views/catalog/citation.js.erb +4 -2
- data/app/views/catalog/email.html.erb +5 -3
- data/app/views/catalog/email_success.html.erb +12 -8
- data/app/views/catalog/facet.html.erb +10 -8
- data/app/views/catalog/facet.json.jbuilder +2 -0
- data/app/views/catalog/index.atom.builder +13 -16
- data/app/views/catalog/index.html.erb +9 -11
- data/app/views/catalog/index.json.jbuilder +84 -3
- data/app/views/catalog/index.rss.builder +7 -5
- data/app/views/catalog/opensearch.xml.builder +12 -10
- data/app/views/catalog/show.html.erb +11 -6
- data/app/views/catalog/show.json.jbuilder +21 -0
- data/app/views/catalog/sms.html.erb +3 -1
- data/app/views/catalog/sms_success.html.erb +12 -8
- data/app/views/kaminari/blacklight/_first_page.html.erb +2 -2
- data/app/views/kaminari/blacklight/_gap.html.erb +2 -2
- data/app/views/kaminari/blacklight/_last_page.html.erb +2 -2
- data/app/views/kaminari/blacklight/_next_page.html.erb +5 -5
- data/app/views/kaminari/blacklight/_page.html.erb +5 -3
- data/app/views/kaminari/blacklight/_prev_page.html.erb +4 -4
- data/app/views/kaminari/blacklight_compact/_paginator.html.erb +4 -4
- data/app/views/layouts/blacklight/base.html.erb +35 -0
- data/app/views/layouts/blacklight.html.erb +14 -41
- data/app/views/layouts/catalog_result.html.erb +11 -0
- data/app/views/search_history/index.html.erb +16 -21
- data/app/views/shared/_header_navbar.html.erb +8 -13
- data/app/views/shared/_modal.html.erb +6 -0
- data/app/views/shared/_user_util_links.html.erb +22 -0
- data/blacklight.gemspec +10 -11
- data/config/i18n-tasks.yml +17 -0
- data/config/locales/blacklight.de.yml +71 -82
- data/config/locales/blacklight.en.yml +15 -27
- data/config/locales/blacklight.es.yml +14 -26
- data/config/locales/blacklight.fr.yml +16 -33
- data/config/locales/blacklight.hu.yml +212 -0
- data/config/locales/blacklight.it.yml +15 -26
- data/config/locales/blacklight.nl.yml +212 -0
- data/config/locales/blacklight.pt-BR.yml +24 -29
- data/config/locales/blacklight.sq.yml +4 -28
- data/config/locales/blacklight.zh.yml +3 -25
- data/config/routes.rb +2 -10
- data/db/migrate/20140202020202_create_bookmarks.rb +0 -1
- data/db/migrate/20140320000000_add_polymorphic_type_to_bookmarks.rb +1 -1
- data/lib/blacklight/abstract_repository.rb +22 -10
- data/lib/blacklight/configuration/context.rb +12 -1
- data/lib/blacklight/configuration/facet_field.rb +16 -9
- data/lib/blacklight/configuration/field.rb +32 -3
- data/lib/blacklight/configuration/fields.rb +61 -58
- data/lib/blacklight/configuration/null_field.rb +2 -0
- data/lib/blacklight/configuration/search_field.rb +2 -2
- data/lib/blacklight/configuration/sort_field.rb +2 -2
- data/lib/blacklight/configuration/view_config.rb +4 -0
- data/lib/blacklight/configuration.rb +101 -88
- data/lib/blacklight/engine.rb +11 -7
- data/lib/blacklight/exceptions.rb +4 -7
- data/lib/blacklight/{utils.rb → nested_open_struct_with_hash_access.rb} +9 -81
- data/lib/blacklight/open_struct_with_hash_access.rb +49 -0
- data/lib/blacklight/parameters.rb +1 -1
- data/lib/blacklight/routes/exportable.rb +1 -3
- data/lib/blacklight/routes/searchable.rb +3 -3
- data/lib/blacklight/runtime_registry.rb +2 -0
- data/lib/blacklight/search_builder.rb +28 -35
- data/lib/blacklight/search_state.rb +10 -8
- data/lib/blacklight/solr/repository.rb +40 -6
- data/lib/blacklight/solr/request.rb +1 -1
- data/lib/blacklight/solr/response/facets.rb +29 -31
- data/lib/blacklight/solr/response/group.rb +3 -3
- data/lib/blacklight/solr/response/group_response.rb +1 -1
- data/lib/blacklight/solr/response/more_like_this.rb +2 -2
- data/lib/blacklight/solr/response/response.rb +2 -2
- data/lib/blacklight/solr/response/spelling.rb +4 -3
- data/lib/blacklight/solr/response.rb +29 -30
- data/lib/blacklight/solr/search_builder_behavior.rb +25 -29
- data/lib/blacklight/version.rb +1 -1
- data/lib/blacklight.rb +10 -8
- data/lib/generators/blacklight/assets_generator.rb +18 -12
- data/lib/generators/blacklight/controller_generator.rb +4 -5
- data/lib/generators/blacklight/document_generator.rb +1 -1
- data/lib/generators/blacklight/install_generator.rb +18 -28
- data/lib/generators/blacklight/search_builder_generator.rb +1 -1
- data/lib/generators/blacklight/{solr5_generator.rb → solr_generator.rb} +12 -6
- data/lib/generators/blacklight/templates/.solr_wrapper.yml +5 -0
- data/lib/generators/blacklight/templates/alternate_controller.rb +4 -4
- data/lib/generators/blacklight/templates/blacklight.scss +0 -2
- data/lib/generators/blacklight/templates/catalog_controller.rb +59 -49
- data/lib/generators/blacklight/templates/config/blacklight.yml +1 -13
- data/lib/generators/blacklight/templates/solr/conf/schema.xml +388 -0
- data/lib/generators/blacklight/templates/solr/conf/solrconfig.xml +195 -0
- data/lib/generators/blacklight/test_support_generator.rb +10 -10
- data/lib/generators/blacklight/user_generator.rb +5 -6
- data/lib/railties/blacklight.rake +17 -21
- data/package-lock.json +2195 -0
- data/package.json +29 -0
- data/spec/controllers/alternate_controller_spec.rb +5 -4
- data/spec/controllers/application_controller_spec.rb +1 -5
- data/spec/controllers/blacklight/base_spec.rb +6 -3
- data/spec/controllers/blacklight/catalog/component_configuration_spec.rb +11 -7
- data/spec/controllers/blacklight/facet_spec.rb +1 -2
- data/spec/controllers/blacklight/search_fields_spec.rb +25 -34
- data/spec/controllers/bookmarks_controller_spec.rb +46 -11
- data/spec/controllers/catalog_controller_spec.rb +334 -161
- data/spec/controllers/search_history_controller_spec.rb +6 -6
- data/spec/features/alternate_controller_spec.rb +4 -4
- data/spec/features/autocomplete_spec.rb +4 -2
- data/spec/features/bookmarks_spec.rb +10 -10
- data/spec/features/did_you_mean_spec.rb +7 -12
- data/spec/features/facets_spec.rb +29 -17
- data/spec/features/record_view_spec.rb +12 -18
- data/spec/features/search_context_spec.rb +6 -7
- data/spec/features/search_crawler_spec.rb +3 -5
- data/spec/features/search_filters_spec.rb +80 -80
- data/spec/features/search_formats_spec.rb +1 -1
- data/spec/features/search_history_spec.rb +6 -29
- data/spec/features/search_pagination_spec.rb +4 -2
- data/spec/features/search_results_spec.rb +14 -12
- data/spec/features/search_sort_spec.rb +2 -2
- data/spec/features/search_spec.rb +8 -9
- data/spec/features/sitelinks_search_box.rb +4 -4
- data/{solr → spec/fixtures}/sample_solr_documents.yml +688 -688
- data/spec/helpers/{configuration_helper_spec.rb → blacklight/configuration_helper_behavior_spec.rb} +97 -92
- data/spec/helpers/{facets_helper_spec.rb → blacklight/facets_helper_behavior_spec.rb} +72 -67
- data/spec/helpers/{hash_as_hidden_fields_spec.rb → blacklight/hash_as_hidden_fields_behavior_spec.rb} +2 -2
- data/spec/helpers/blacklight/icon_helper_behavior_spec.rb +10 -0
- data/spec/helpers/{layout_helper_spec.rb → blacklight/layout_helper_behavior_spec.rb} +5 -5
- data/spec/helpers/{render_constraints_helper_spec.rb → blacklight/render_constraints_helper_behavior_spec.rb} +10 -6
- data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +92 -0
- data/spec/helpers/{search_history_constraints_helper_spec.rb → blacklight/search_history_constraints_helper_behavior_spec.rb} +29 -30
- data/spec/helpers/{suggest_helper_spec.rb → blacklight/suggest_helper_behavior_spec.rb} +9 -2
- data/spec/helpers/{url_helper_spec.rb → blacklight/url_helper_behavior_spec.rb} +56 -54
- data/spec/helpers/blacklight_helper_spec.rb +65 -150
- data/spec/helpers/catalog_helper_spec.rb +80 -96
- data/spec/i18n_spec.rb +18 -0
- data/spec/integration/generators/blacklight/{solr5_generator_spec.rb → solr_generator_spec.rb} +21 -13
- data/spec/lib/blacklight/configuration/facet_field_spec.rb +13 -0
- data/spec/lib/blacklight/configuration/field_spec.rb +15 -0
- data/spec/lib/blacklight/nested_open_struct_with_hash_access_spec.rb +17 -0
- data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +148 -0
- data/spec/lib/blacklight/parameters_spec.rb +4 -2
- data/spec/lib/blacklight/search_state_spec.rb +53 -36
- data/spec/lib/blacklight_spec.rb +14 -15
- data/spec/lib/tasks/blacklight_task_spec.rb +4 -6
- data/spec/models/blacklight/configurable_spec.rb +24 -27
- data/spec/models/blacklight/configuration/context_spec.rb +9 -10
- data/spec/models/blacklight/configuration_spec.rb +248 -223
- data/spec/models/blacklight/document/active_model_shim_spec.rb +15 -6
- data/spec/models/blacklight/document/cache_key_spec.rb +9 -2
- data/spec/models/blacklight/document/dublin_core_spec.rb +17 -20
- data/spec/models/blacklight/document/email_spec.rb +10 -10
- data/spec/models/blacklight/document/sms_spec.rb +10 -10
- data/spec/models/blacklight/document_spec.rb +10 -22
- data/spec/models/blacklight/facet_paginator_spec.rb +40 -30
- data/spec/models/blacklight/icon_spec.rb +44 -0
- data/spec/models/blacklight/search_builder_spec.rb +41 -26
- data/spec/models/blacklight/solr/document_spec.rb +224 -216
- data/spec/models/blacklight/solr/facet_paginator_spec.rb +6 -4
- data/spec/models/blacklight/solr/repository_spec.rb +61 -46
- data/spec/models/blacklight/solr/request_spec.rb +17 -18
- data/spec/models/blacklight/solr/response/facets_spec.rb +58 -58
- data/spec/models/blacklight/solr/response/group_response_spec.rb +16 -22
- data/spec/models/blacklight/solr/response/group_spec.rb +18 -25
- data/spec/models/blacklight/solr/response_spec.rb +56 -55
- data/spec/models/blacklight/solr/search_builder_spec.rb +150 -164
- data/spec/models/blacklight/suggest/response_spec.rb +6 -4
- data/spec/models/blacklight/suggest_search_spec.rb +9 -16
- data/spec/models/blacklight/user_spec.rb +9 -11
- data/spec/models/bookmark_spec.rb +7 -6
- data/spec/models/record_mailer_spec.rb +23 -21
- data/spec/models/search_spec.rb +19 -18
- data/spec/models/solr_document_spec.rb +33 -5
- data/spec/presenters/blacklight/document_presenter_spec.rb +86 -0
- data/spec/presenters/blacklight/index_presenter_spec.rb +186 -0
- data/spec/presenters/blacklight/json_presenter_spec.rb +59 -0
- data/spec/presenters/blacklight/link_alternate_presenter_spec.rb +3 -0
- data/spec/presenters/blacklight/search_bar_presenter_spec.rb +79 -0
- data/spec/presenters/blacklight/show_presenter_spec.rb +333 -0
- data/spec/presenters/pipeline_spec.rb +18 -11
- data/spec/presenters/thumbnail_presenter_spec.rb +174 -0
- data/spec/routing/catalog_routing_spec.rb +13 -15
- data/spec/services/blacklight/search_service_spec.rb +488 -0
- data/spec/spec_helper.rb +20 -19
- data/spec/support/features/session_helpers.rb +4 -4
- data/spec/support/features.rb +1 -1
- data/spec/test_app_templates/Gemfile.extra +2 -4
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +12 -13
- data/spec/views/catalog/_constraints.html.erb_spec.rb +3 -6
- data/spec/views/catalog/_constraints_element.html.erb_spec.rb +17 -13
- data/spec/views/catalog/_document.html.erb_spec.rb +11 -11
- data/spec/views/catalog/_document_list.html.erb_spec.rb +2 -1
- data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +5 -5
- data/spec/views/catalog/_facet_layout.html.erb_spec.rb +6 -6
- data/spec/views/catalog/_facets.html.erb_spec.rb +10 -12
- data/spec/views/catalog/{_index_default.erb_spec.rb → _index.html.erb_spec.rb} +14 -15
- data/spec/views/catalog/{_index_header_default.html.erb_spec.rb → _index_header.html.erb_spec.rb} +6 -9
- data/spec/views/catalog/_paginate_compact.html.erb_spec.rb +7 -30
- data/spec/views/catalog/_search_header.erb_spec.rb +1 -3
- data/spec/views/catalog/{_show_default.erb_spec.rb → _show.html.erb_spec.rb} +13 -14
- data/spec/views/catalog/_show_sidebar.erb_spec.rb +6 -9
- data/spec/views/catalog/_show_tools.html.erb_spec.rb +5 -5
- data/spec/views/catalog/_sort_and_per_page.html.erb_spec.rb +1 -2
- data/spec/views/catalog/_sort_widget.html.erb_spec.rb +3 -1
- data/spec/views/catalog/{_thumbnail_default.erb_spec.rb → _thumbnail.html.erb_spec.rb} +7 -9
- data/spec/views/catalog/_view_type_group.html.erb_spec.rb +12 -10
- data/spec/views/catalog/email_success.html.erb_spec.rb +8 -0
- data/spec/views/catalog/facet.html.erb_spec.rb +4 -3
- data/spec/views/catalog/facet.json.jbuilder_spec.rb +3 -2
- data/spec/views/catalog/index.atom.builder_spec.rb +11 -6
- data/spec/views/catalog/index.html.erb_spec.rb +6 -8
- data/spec/views/catalog/index.json.jbuilder_spec.rb +119 -26
- data/spec/views/catalog/opensearch.xml.builder_spec.rb +1 -1
- data/spec/views/catalog/show.html.erb_spec.rb +8 -8
- data/spec/views/catalog/show.json.jbuilder_spec.rb +40 -0
- data/spec/views/catalog/sms_success.html.erb_spec.rb +8 -0
- data/spec/views/{_user_util_links.html.erb_spec.rb → shared/_user_util_links.html.erb_spec.rb} +4 -7
- data/tasks/blacklight.rake +10 -8
- data/template.demo.rb +3 -11
- metadata +188 -189
- data/app/assets/javascripts/blacklight/autofocus.js +0 -16
- data/app/assets/javascripts/blacklight/bookmark_toggle.js +0 -23
- data/app/assets/javascripts/blacklight/checkbox_submit.js +0 -135
- data/app/controllers/concerns/blacklight/request_builders.rb +0 -77
- data/app/controllers/concerns/blacklight/saved_searches.rb +0 -70
- data/app/controllers/concerns/blacklight/search_helper.rb +0 -155
- data/app/controllers/concerns/blacklight/suggest.rb +0 -25
- data/app/controllers/saved_searches_controller.rb +0 -4
- data/app/controllers/suggest_controller.rb +0 -4
- data/app/helpers/blacklight/deprecated_url_helper_behavior.rb +0 -57
- data/app/helpers/blacklight/render_partials_helper.rb +0 -205
- data/app/helpers/blacklight_configuration_helper.rb +0 -4
- data/app/helpers/blacklight_url_helper.rb +0 -4
- data/app/helpers/component_helper.rb +0 -4
- data/app/helpers/facets_helper.rb +0 -4
- data/app/helpers/hash_as_hidden_fields_helper.rb +0 -4
- data/app/helpers/layout_helper.rb +0 -4
- data/app/helpers/render_constraints_helper.rb +0 -4
- data/app/helpers/search_history_constraints_helper.rb +0 -4
- data/app/helpers/suggest_helper.rb +0 -4
- data/app/models/concerns/blacklight/solr/document/more_like_this.rb +0 -6
- data/app/views/_user_util_links.html.erb +0 -26
- data/app/views/blacklight/nav/_saved_searches.html.erb +0 -1
- data/app/views/catalog/_index_default.html.erb +0 -12
- data/app/views/catalog/_show_default.html.erb +0 -10
- data/app/views/catalog/_thumbnail_default.html.erb +0 -5
- data/app/views/saved_searches/index.html.erb +0 -32
- data/app/views/shared/_ajax_modal.html.erb +0 -6
- data/lib/generators/blacklight/solr4_generator.rb +0 -31
- data/lib/generators/blacklight/templates/config/jetty.yml +0 -13
- data/solr/conf/schema.xml +0 -629
- data/solr/conf/solrconfig.xml +0 -411
- data/spec/controllers/blacklight/search_helper_spec.rb +0 -470
- data/spec/controllers/saved_searches_controller_spec.rb +0 -32
- data/spec/controllers/suggest_controller_spec.rb +0 -17
- data/spec/features/saved_searches_spec.rb +0 -47
- data/spec/helpers/deprecated_url_helper_behavior_spec.rb +0 -101
- data/spec/lib/blacklight/utils_spec.rb +0 -167
- data/spec/models/blacklight/solr/document/more_like_this_spec.rb +0 -18
- data/spec/presenters/document_presenter_spec.rb +0 -438
- data/spec/presenters/index_presenter_spec.rb +0 -173
- data/spec/presenters/show_presenter_spec.rb +0 -313
- data/spec/support/backport_test.rb +0 -14
- /data/app/views/catalog/{_show_header_default.html.erb → _show_header.html.erb} +0 -0
- /data/app/views/{_flash_msg.html.erb → shared/_flash_msg.html.erb} +0 -0
- /data/{solr → lib/generators/blacklight/templates/solr}/conf/_rest_managed.json +0 -0
- /data/{solr → lib/generators/blacklight/templates/solr}/conf/admin-extra.html +0 -0
- /data/{solr → lib/generators/blacklight/templates/solr}/conf/elevate.xml +0 -0
- /data/{solr → lib/generators/blacklight/templates/solr}/conf/mapping-ISOLatin1Accent.txt +0 -0
- /data/{solr → lib/generators/blacklight/templates/solr}/conf/protwords.txt +0 -0
- /data/{solr → lib/generators/blacklight/templates/solr}/conf/scripts.conf +0 -0
- /data/{solr → lib/generators/blacklight/templates/solr}/conf/spellings.txt +0 -0
- /data/{solr → lib/generators/blacklight/templates/solr}/conf/stopwords.txt +0 -0
- /data/{solr → lib/generators/blacklight/templates/solr}/conf/stopwords_en.txt +0 -0
- /data/{solr → lib/generators/blacklight/templates/solr}/conf/synonyms.txt +0 -0
- /data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example.xsl +0 -0
- /data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example_atom.xsl +0 -0
- /data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example_rss.xsl +0 -0
- /data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/luke.xsl +0 -0
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
describe Blacklight::Solr::SearchBuilderBehavior do
|
|
3
|
+
RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
|
|
4
|
+
subject { search_builder.with(user_params) }
|
|
5
|
+
|
|
4
6
|
let(:single_facet) { { format: 'Book' } }
|
|
5
|
-
let(:multi_facets) { { format: 'Book',
|
|
7
|
+
let(:multi_facets) { { format: 'Book', language_ssim: 'Tibetan' } }
|
|
6
8
|
let(:mult_word_query) { 'tibetan history' }
|
|
7
9
|
let(:subject_search_params) { { commit: "search", search_field: "subject", action: "index", controller: "catalog", rows: "10", q: "wome" } }
|
|
8
10
|
|
|
9
11
|
let(:blacklight_config) { CatalogController.blacklight_config.deep_copy }
|
|
10
|
-
let(:user_params) {
|
|
12
|
+
let(:user_params) { {} }
|
|
11
13
|
let(:context) { CatalogController.new }
|
|
12
14
|
|
|
13
15
|
before { allow(context).to receive(:blacklight_config).and_return(blacklight_config) }
|
|
@@ -19,25 +21,11 @@ describe Blacklight::Solr::SearchBuilderBehavior do
|
|
|
19
21
|
end
|
|
20
22
|
let(:search_builder) { search_builder_class.new(context) }
|
|
21
23
|
|
|
22
|
-
subject { search_builder.with(user_params) }
|
|
23
|
-
|
|
24
24
|
context "with default processor chain" do
|
|
25
|
-
|
|
26
|
-
subject do
|
|
27
|
-
Deprecation.silence Blacklight::SearchBuilder do
|
|
28
|
-
search_builder_class.new true, context
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
it "uses the class-level default_processor_chain" do
|
|
32
|
-
expect(subject.processor_chain).to eq search_builder_class.default_processor_chain
|
|
33
|
-
end
|
|
34
|
-
end
|
|
25
|
+
subject { search_builder }
|
|
35
26
|
|
|
36
|
-
|
|
37
|
-
subject
|
|
38
|
-
it "uses the class-level default_processor_chain" do
|
|
39
|
-
expect(subject.processor_chain).to eq search_builder_class.default_processor_chain
|
|
40
|
-
end
|
|
27
|
+
it "uses the class-level default_processor_chain" do
|
|
28
|
+
expect(subject.processor_chain).to eq search_builder_class.default_processor_chain
|
|
41
29
|
end
|
|
42
30
|
end
|
|
43
31
|
|
|
@@ -45,40 +33,41 @@ describe Blacklight::Solr::SearchBuilderBehavior do
|
|
|
45
33
|
subject { search_builder.with(user_params).processed_parameters }
|
|
46
34
|
|
|
47
35
|
let(:user_params) do
|
|
48
|
-
{:search_field => "test_field", :q => "test query", "facet.field" => "extra_facet"}
|
|
36
|
+
{ :search_field => "test_field", :q => "test query", "facet.field" => "extra_facet" }
|
|
49
37
|
end
|
|
50
38
|
|
|
51
39
|
let(:blacklight_config) do
|
|
52
40
|
Blacklight::Configuration.new.tap do |config|
|
|
53
41
|
config.add_search_field("test_field",
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
42
|
+
display_label: "Test",
|
|
43
|
+
key: "test_field",
|
|
44
|
+
solr_parameters: {
|
|
45
|
+
qf: "fieldOne^2.3 fieldTwo fieldThree^0.4",
|
|
46
|
+
pf: "",
|
|
47
|
+
spellcheck: 'false',
|
|
48
|
+
sort: "request_params_sort"
|
|
49
|
+
})
|
|
62
50
|
end
|
|
63
51
|
end
|
|
64
|
-
|
|
52
|
+
|
|
53
|
+
it "merges parameters from search_field definition" do
|
|
65
54
|
expect(subject[:qf]).to eq "fieldOne^2.3 fieldTwo fieldThree^0.4"
|
|
66
55
|
expect(subject[:spellcheck]).to eq 'false'
|
|
67
56
|
end
|
|
68
|
-
it "
|
|
57
|
+
it "merges empty string parameters from search_field definition" do
|
|
69
58
|
expect(subject[:pf]).to eq ""
|
|
70
59
|
end
|
|
71
60
|
|
|
72
61
|
describe "should respect proper precedence of settings, " do
|
|
73
|
-
it "
|
|
62
|
+
it "does not put :search_field in produced params" do
|
|
74
63
|
expect(subject[:search_field]).to be_nil
|
|
75
64
|
end
|
|
76
65
|
|
|
77
|
-
it "
|
|
66
|
+
it "falls through to BL general defaults for qt not otherwise specified" do
|
|
78
67
|
expect(subject[:qt]).to eq blacklight_config[:default_solr_params][:qt]
|
|
79
68
|
end
|
|
80
69
|
|
|
81
|
-
it "
|
|
70
|
+
it "takes q from request params" do
|
|
82
71
|
expect(subject[:q]).to eq "test query"
|
|
83
72
|
end
|
|
84
73
|
end
|
|
@@ -95,41 +84,41 @@ describe Blacklight::Solr::SearchBuilderBehavior do
|
|
|
95
84
|
let(:method_chain) { [:add_foo_to_solr_params] }
|
|
96
85
|
|
|
97
86
|
it "allows customization of search_params_logic" do
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
87
|
+
allow(search_builder).to receive(:add_foo_to_solr_params) do |solr_params, _user_params|
|
|
88
|
+
solr_params[:wt] = "TESTING"
|
|
89
|
+
end
|
|
101
90
|
|
|
102
|
-
|
|
91
|
+
expect(subject[:wt]).to eq "TESTING"
|
|
103
92
|
end
|
|
104
93
|
end
|
|
105
94
|
|
|
106
|
-
it "
|
|
107
|
-
expect(subject[:"f.
|
|
95
|
+
it "generates a facet limit" do
|
|
96
|
+
expect(subject[:"f.subject_ssim.facet.limit"]).to eq 21
|
|
108
97
|
end
|
|
109
98
|
|
|
110
99
|
context 'with a negative facet limit' do
|
|
111
100
|
before do
|
|
112
|
-
blacklight_config.facet_fields['
|
|
101
|
+
blacklight_config.facet_fields['subject_ssim'].limit = -1
|
|
113
102
|
end
|
|
114
103
|
|
|
115
104
|
it 'is negative' do
|
|
116
|
-
expect(subject[:"f.
|
|
105
|
+
expect(subject[:"f.subject_ssim.facet.limit"]).to eq -1
|
|
117
106
|
end
|
|
118
107
|
end
|
|
119
108
|
|
|
120
109
|
context 'with a facet limit set to 0' do
|
|
121
110
|
before do
|
|
122
|
-
blacklight_config.facet_fields['
|
|
111
|
+
blacklight_config.facet_fields['subject_ssim'].limit = 0
|
|
123
112
|
end
|
|
124
113
|
|
|
125
114
|
it 'is negative' do
|
|
126
|
-
expect(subject[:"f.
|
|
115
|
+
expect(subject[:"f.subject_ssim.facet.limit"]).to eq 0
|
|
127
116
|
end
|
|
128
117
|
end
|
|
129
118
|
|
|
130
|
-
it "
|
|
119
|
+
it "handles no facet_limits in config" do
|
|
131
120
|
blacklight_config.facet_fields = {}
|
|
132
|
-
expect(subject).not_to have_key(:"f.
|
|
121
|
+
expect(subject).not_to have_key(:"f.subject_ssim.facet.limit")
|
|
133
122
|
end
|
|
134
123
|
|
|
135
124
|
describe "with max per page enforced" do
|
|
@@ -139,8 +128,9 @@ describe Blacklight::Solr::SearchBuilderBehavior do
|
|
|
139
128
|
end
|
|
140
129
|
end
|
|
141
130
|
|
|
142
|
-
let(:user_params) { { per_page:
|
|
143
|
-
|
|
131
|
+
let(:user_params) { { per_page: 98_765 } }
|
|
132
|
+
|
|
133
|
+
it "enforces max_per_page against all parameters" do
|
|
144
134
|
expect(blacklight_config.max_per_page).to eq 123
|
|
145
135
|
expect(subject[:rows]).to eq 123
|
|
146
136
|
end
|
|
@@ -155,56 +145,55 @@ describe Blacklight::Solr::SearchBuilderBehavior do
|
|
|
155
145
|
end
|
|
156
146
|
end
|
|
157
147
|
|
|
158
|
-
it "
|
|
148
|
+
it "uses the configured solr field name in queries" do
|
|
159
149
|
expect(subject).to include 'f.solr_field.facet.limit': 51,
|
|
160
150
|
'facet.field': ['{!ex=other}solr_field']
|
|
161
151
|
end
|
|
162
152
|
end
|
|
163
153
|
|
|
164
154
|
describe 'for an entirely empty search' do
|
|
165
|
-
|
|
166
|
-
it 'should not have a q param' do
|
|
155
|
+
it 'does not have a q param' do
|
|
167
156
|
expect(subject[:q]).to be_nil
|
|
168
157
|
expect(subject["spellcheck.q"]).to be_nil
|
|
169
158
|
end
|
|
170
|
-
it '
|
|
159
|
+
it 'has default rows' do
|
|
171
160
|
expect(subject[:rows]).to eq 10
|
|
172
161
|
end
|
|
173
|
-
it '
|
|
162
|
+
it 'has default facet fields' do
|
|
174
163
|
# remove local params from the facet.field
|
|
175
|
-
expect(subject[:"facet.field"].map { |x| x.gsub(/\{![^}]+\}/, '') }).to match_array [
|
|
164
|
+
expect(subject[:"facet.field"].map { |x| x.gsub(/\{![^}]+\}/, '') }).to match_array %w[format subject_ssim pub_date_ssim language_ssim lc_1letter_ssim subject_geo_ssim subject_era_ssim]
|
|
176
165
|
end
|
|
177
166
|
|
|
178
|
-
it "
|
|
167
|
+
it "does not have a default qt" do
|
|
179
168
|
expect(subject[:qt]).to be_nil
|
|
180
169
|
end
|
|
181
|
-
it "
|
|
170
|
+
it "has no fq" do
|
|
182
171
|
expect(subject[:phrase_filters]).to be_blank
|
|
183
172
|
expect(subject[:fq]).to be_blank
|
|
184
173
|
end
|
|
185
174
|
end
|
|
186
175
|
|
|
187
|
-
|
|
188
176
|
describe "for an empty string search" do
|
|
189
177
|
let(:user_params) { { q: "" } }
|
|
190
|
-
|
|
178
|
+
|
|
179
|
+
it "returns empty string q in solr parameters" do
|
|
191
180
|
expect(subject[:q]).to eq ""
|
|
192
181
|
end
|
|
193
182
|
end
|
|
194
183
|
|
|
195
184
|
describe "for request params also passed in as argument" do
|
|
196
185
|
let(:user_params) { { q: "some query", 'q' => 'another value' } }
|
|
197
|
-
|
|
186
|
+
|
|
187
|
+
it "onlies have one value for the key 'q' regardless if a symbol or string" do
|
|
198
188
|
expect(subject[:q]).to eq 'some query'
|
|
199
189
|
expect(subject['q']).to eq 'some query'
|
|
200
190
|
end
|
|
201
191
|
end
|
|
202
192
|
|
|
203
|
-
|
|
204
193
|
describe "for one facet, no query" do
|
|
205
194
|
let(:user_params) { { f: single_facet } }
|
|
206
|
-
it "should have proper solr parameters" do
|
|
207
195
|
|
|
196
|
+
it "has proper solr parameters" do
|
|
208
197
|
expect(subject[:q]).to be_blank
|
|
209
198
|
expect(subject["spellcheck.q"]).to be_blank
|
|
210
199
|
|
|
@@ -216,40 +205,41 @@ describe Blacklight::Solr::SearchBuilderBehavior do
|
|
|
216
205
|
|
|
217
206
|
describe "for an empty facet limit param" do
|
|
218
207
|
let(:user_params) { { f: { "format" => [""] } } }
|
|
219
|
-
|
|
208
|
+
|
|
209
|
+
it "does not add any fq to solr" do
|
|
220
210
|
expect(subject[:fq]).to be_blank
|
|
221
211
|
end
|
|
222
212
|
end
|
|
223
213
|
|
|
224
214
|
describe "with Multi Facets, No Query" do
|
|
225
215
|
let(:user_params) { { f: multi_facets } }
|
|
226
|
-
|
|
216
|
+
|
|
217
|
+
it 'has fq set properly' do
|
|
227
218
|
multi_facets.each_pair do |facet_field, value_list|
|
|
228
219
|
value_list ||= []
|
|
229
220
|
value_list = [value_list] unless value_list.respond_to? :each
|
|
230
221
|
value_list.each do |value|
|
|
231
|
-
expect(subject[:fq]).to include("{!term f=#{facet_field}}#{value}"
|
|
222
|
+
expect(subject[:fq]).to include("{!term f=#{facet_field}}#{value}")
|
|
232
223
|
end
|
|
233
224
|
end
|
|
234
|
-
|
|
235
225
|
end
|
|
236
226
|
end
|
|
237
227
|
|
|
238
228
|
describe "with Multi Facets, Multi Word Query" do
|
|
239
229
|
let(:user_params) { { q: mult_word_query, f: multi_facets } }
|
|
240
|
-
|
|
230
|
+
|
|
231
|
+
it 'has fq and q set properly' do
|
|
241
232
|
multi_facets.each_pair do |facet_field, value_list|
|
|
242
233
|
value_list ||= []
|
|
243
234
|
value_list = [value_list] unless value_list.respond_to? :each
|
|
244
235
|
value_list.each do |value|
|
|
245
|
-
expect(subject[:fq]).to include("{!term f=#{facet_field}}#{value}"
|
|
236
|
+
expect(subject[:fq]).to include("{!term f=#{facet_field}}#{value}")
|
|
246
237
|
end
|
|
247
238
|
end
|
|
248
239
|
expect(subject[:q]).to eq mult_word_query
|
|
249
240
|
end
|
|
250
241
|
end
|
|
251
242
|
|
|
252
|
-
|
|
253
243
|
describe "solr parameters for a field search from config (subject)" do
|
|
254
244
|
let(:user_params) { subject_search_params }
|
|
255
245
|
|
|
@@ -261,11 +251,11 @@ describe Blacklight::Solr::SearchBuilderBehavior do
|
|
|
261
251
|
}
|
|
262
252
|
end
|
|
263
253
|
|
|
264
|
-
it "
|
|
254
|
+
it "looks up qt from field definition" do
|
|
265
255
|
expect(subject[:qt]).to eq "search"
|
|
266
256
|
end
|
|
267
257
|
|
|
268
|
-
it "
|
|
258
|
+
it "does not include weird keys not in field definition" do
|
|
269
259
|
expect(subject[:phrase_filters]).to be_nil
|
|
270
260
|
expect(subject[:fq]).to eq []
|
|
271
261
|
expect(subject[:commit]).to be_nil
|
|
@@ -273,26 +263,26 @@ describe Blacklight::Solr::SearchBuilderBehavior do
|
|
|
273
263
|
expect(subject[:controller]).to be_nil
|
|
274
264
|
end
|
|
275
265
|
|
|
276
|
-
it "
|
|
266
|
+
it "includes proper 'q', possibly with LocalParams" do
|
|
277
267
|
expect(subject[:q]).to match(/(\{[^}]+\})?wome/)
|
|
278
268
|
end
|
|
279
|
-
it "
|
|
280
|
-
if
|
|
269
|
+
it "includes proper 'q' when LocalParams are used" do
|
|
270
|
+
if /\{[^}]+\}/.match?(subject[:q])
|
|
281
271
|
expect(subject[:q]).to match(/\{[^}]+\}wome/)
|
|
282
272
|
end
|
|
283
273
|
end
|
|
284
|
-
it "
|
|
274
|
+
it "includes spellcheck.q, without LocalParams" do
|
|
285
275
|
expect(subject["spellcheck.q"]).to eq "wome"
|
|
286
276
|
end
|
|
287
277
|
|
|
288
|
-
it "
|
|
278
|
+
it "includes spellcheck.dictionary from field def solr_parameters" do
|
|
289
279
|
expect(subject[:"spellcheck.dictionary"]).to eq "subject"
|
|
290
280
|
end
|
|
291
|
-
it "
|
|
292
|
-
#q == "{!pf=$subject_pf $qf=subject_qf} wome", make sure
|
|
293
|
-
#the LocalParams are really there
|
|
281
|
+
it "adds on :solr_local_parameters using Solr LocalParams style" do
|
|
282
|
+
# q == "{!pf=$subject_pf $qf=subject_qf} wome", make sure
|
|
283
|
+
# the LocalParams are really there
|
|
294
284
|
subject[:q] =~ /^\{!([^}]+)\}/
|
|
295
|
-
key_value_pairs =
|
|
285
|
+
key_value_pairs = Regexp.last_match(1).split(" ")
|
|
296
286
|
expect(key_value_pairs).to include("pf=$subject_pf")
|
|
297
287
|
expect(key_value_pairs).to include("qf=$subject_qf")
|
|
298
288
|
end
|
|
@@ -303,28 +293,42 @@ describe Blacklight::Solr::SearchBuilderBehavior do
|
|
|
303
293
|
{ qt: 'overridden' }
|
|
304
294
|
end
|
|
305
295
|
|
|
306
|
-
it "
|
|
296
|
+
it "returns the correct overriden parameter" do
|
|
307
297
|
expect(subject[:qt]).to eq "overridden"
|
|
308
298
|
end
|
|
309
299
|
end
|
|
310
300
|
|
|
311
|
-
|
|
312
301
|
describe "sorting" do
|
|
313
|
-
|
|
314
|
-
|
|
302
|
+
context 'when the user has not provided a value' do
|
|
303
|
+
it 'sends the default sort parameter to solr' do
|
|
304
|
+
expect(subject[:sort]).to eq 'score desc, pub_date_si desc, title_si asc'
|
|
305
|
+
end
|
|
315
306
|
end
|
|
316
307
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
308
|
+
context "when the configured sort field is blank" do
|
|
309
|
+
before do
|
|
310
|
+
blacklight_config.sort_fields = {}
|
|
311
|
+
blacklight_config.add_sort_field('', label: 'test')
|
|
312
|
+
end
|
|
320
313
|
|
|
321
|
-
|
|
314
|
+
it "does not send a sort parameter to solr if the sort value is blank" do
|
|
315
|
+
expect(subject).not_to have_key(:sort)
|
|
316
|
+
end
|
|
322
317
|
end
|
|
323
318
|
|
|
324
|
-
context "when the user provides sort
|
|
325
|
-
let(:user_params) { { sort: '
|
|
319
|
+
context "when the user provides a valid sort parmeter" do
|
|
320
|
+
let(:user_params) { { sort: 'title_si asc, pub_date_si desc' } }
|
|
321
|
+
|
|
326
322
|
it "passes them through" do
|
|
327
|
-
expect(subject[:sort]).to eq '
|
|
323
|
+
expect(subject[:sort]).to eq 'title_si asc, pub_date_si desc'
|
|
324
|
+
end
|
|
325
|
+
end
|
|
326
|
+
|
|
327
|
+
context "when the user provides an invalid sort parameter" do
|
|
328
|
+
let(:user_params) { { sort: 'bad' } }
|
|
329
|
+
|
|
330
|
+
it "removes them" do
|
|
331
|
+
expect(subject).not_to have_key(:sort)
|
|
328
332
|
end
|
|
329
333
|
end
|
|
330
334
|
end
|
|
@@ -334,17 +338,17 @@ describe Blacklight::Solr::SearchBuilderBehavior do
|
|
|
334
338
|
config = Blacklight::Configuration.new
|
|
335
339
|
config.add_search_field(
|
|
336
340
|
"custom_author_key",
|
|
337
|
-
:
|
|
338
|
-
:
|
|
339
|
-
:
|
|
340
|
-
:
|
|
341
|
-
:
|
|
342
|
-
:
|
|
343
|
-
:
|
|
341
|
+
display_label: "Author",
|
|
342
|
+
qt: "author_qt",
|
|
343
|
+
key: "custom_author_key",
|
|
344
|
+
solr_local_parameters: {
|
|
345
|
+
qf: "$author_qf",
|
|
346
|
+
pf: "you'll have \" to escape this",
|
|
347
|
+
pf2: "$pf2_do_not_escape_or_quote"
|
|
344
348
|
},
|
|
345
|
-
:
|
|
346
|
-
:
|
|
347
|
-
:
|
|
349
|
+
solr_parameters: {
|
|
350
|
+
qf: "someField^1000",
|
|
351
|
+
ps: "2"
|
|
348
352
|
}
|
|
349
353
|
)
|
|
350
354
|
return config
|
|
@@ -352,13 +356,13 @@ describe Blacklight::Solr::SearchBuilderBehavior do
|
|
|
352
356
|
|
|
353
357
|
let(:user_params) { { search_field: "custom_author_key", q: "query" } }
|
|
354
358
|
|
|
355
|
-
it "
|
|
359
|
+
it "passes through ordinary params" do
|
|
356
360
|
expect(subject[:qt]).to eq "author_qt"
|
|
357
361
|
expect(subject[:ps]).to eq "2"
|
|
358
362
|
expect(subject[:qf]).to eq "someField^1000"
|
|
359
363
|
end
|
|
360
364
|
|
|
361
|
-
it "
|
|
365
|
+
it "includes include local params with escaping" do
|
|
362
366
|
expect(subject[:q]).to include('qf=$author_qf')
|
|
363
367
|
expect(subject[:q]).to include('pf=\'you\\\'ll have \\" to escape this\'')
|
|
364
368
|
expect(subject[:q]).to include('pf2=$pf2_do_not_escape_or_quote')
|
|
@@ -375,63 +379,62 @@ describe Blacklight::Solr::SearchBuilderBehavior do
|
|
|
375
379
|
end
|
|
376
380
|
end
|
|
377
381
|
|
|
378
|
-
|
|
379
382
|
describe "#facet_value_to_fq_string" do
|
|
380
|
-
it "
|
|
383
|
+
it "uses the configured field name" do
|
|
381
384
|
blacklight_config.add_facet_field :facet_key, field: "facet_name"
|
|
382
385
|
expect(subject.send(:facet_value_to_fq_string, "facet_key", "my value")).to eq "{!term f=facet_name}my value"
|
|
383
386
|
end
|
|
384
387
|
|
|
385
|
-
it "
|
|
388
|
+
it "uses the raw handler for strings" do
|
|
386
389
|
expect(subject.send(:facet_value_to_fq_string, "facet_name", "my value")).to eq "{!term f=facet_name}my value"
|
|
387
390
|
end
|
|
388
391
|
|
|
389
|
-
it "
|
|
392
|
+
it "passes booleans through" do
|
|
390
393
|
expect(subject.send(:facet_value_to_fq_string, "facet_name", true)).to eq '{!term f=facet_name}true'
|
|
391
394
|
end
|
|
392
395
|
|
|
393
|
-
it "
|
|
396
|
+
it "passes boolean-like strings through" do
|
|
394
397
|
expect(subject.send(:facet_value_to_fq_string, "facet_name", "true")).to eq '{!term f=facet_name}true'
|
|
395
398
|
end
|
|
396
399
|
|
|
397
|
-
it "
|
|
400
|
+
it "passes integers through" do
|
|
398
401
|
expect(subject.send(:facet_value_to_fq_string, "facet_name", 1)).to eq '{!term f=facet_name}1'
|
|
399
402
|
end
|
|
400
403
|
|
|
401
|
-
it "
|
|
404
|
+
it "passes integer-like strings through" do
|
|
402
405
|
expect(subject.send(:facet_value_to_fq_string, "facet_name", "1")).to eq '{!term f=facet_name}1'
|
|
403
406
|
expect(subject.send(:facet_value_to_fq_string, "facet_name", -1)).to eq '{!term f=facet_name}-1'
|
|
404
407
|
end
|
|
405
408
|
|
|
406
|
-
it "
|
|
409
|
+
it "passes floats through" do
|
|
407
410
|
expect(subject.send(:facet_value_to_fq_string, "facet_name", 1.11)).to eq '{!term f=facet_name}1.11'
|
|
408
411
|
end
|
|
409
412
|
|
|
410
|
-
it "
|
|
413
|
+
it "passes floats through" do
|
|
411
414
|
expect(subject.send(:facet_value_to_fq_string, "facet_name", "1.11")).to eq '{!term f=facet_name}1.11'
|
|
412
415
|
end
|
|
413
416
|
|
|
414
417
|
context 'date handling' do
|
|
415
|
-
before { allow(blacklight_config.facet_fields).to receive(:[]).with('facet_name').and_return(double(:
|
|
418
|
+
before { allow(blacklight_config.facet_fields).to receive(:[]).with('facet_name').and_return(double(date: true, query: nil, tag: nil, field: 'facet_name')) }
|
|
416
419
|
|
|
417
|
-
it "
|
|
420
|
+
it "passes date-type fields through" do
|
|
418
421
|
expect(subject.send(:facet_value_to_fq_string, "facet_name", "2012-01-01")).to eq '{!term f=facet_name}2012-01-01'
|
|
419
422
|
expect(subject.send(:facet_value_to_fq_string, "facet_name", "2003-04-09T00:00:00Z")).to eq '{!term f=facet_name}2003-04-09T00:00:00Z'
|
|
420
423
|
end
|
|
421
424
|
|
|
422
|
-
it "
|
|
423
|
-
allow(blacklight_config.facet_fields).to receive(:[]).with('facet_name').and_return(double(:
|
|
425
|
+
it "formats Date objects correctly" do
|
|
426
|
+
allow(blacklight_config.facet_fields).to receive(:[]).with('facet_name').and_return(double(date: nil, query: nil, tag: nil, field: 'facet_name'))
|
|
424
427
|
d = DateTime.parse("2003-04-09T00:00:00")
|
|
425
428
|
expect(subject.send(:facet_value_to_fq_string, "facet_name", d)).to eq '{!term f=facet_name}2003-04-09T00:00:00Z'
|
|
426
429
|
end
|
|
427
430
|
end
|
|
428
431
|
|
|
429
|
-
it "
|
|
432
|
+
it "handles range requests" do
|
|
430
433
|
expect(subject.send(:facet_value_to_fq_string, "facet_name", 1..5)).to eq "facet_name:[1 TO 5]"
|
|
431
434
|
end
|
|
432
435
|
|
|
433
|
-
it "
|
|
434
|
-
allow(blacklight_config.facet_fields).to receive(:[]).with('facet_name').and_return(double(:
|
|
436
|
+
it "adds tag local parameters" do
|
|
437
|
+
allow(blacklight_config.facet_fields).to receive(:[]).with('facet_name').and_return(double(query: nil, tag: 'asdf', date: nil, field: 'facet_name'))
|
|
435
438
|
|
|
436
439
|
expect(subject.send(:facet_value_to_fq_string, "facet_name", true)).to eq "{!term f=facet_name tag=asdf}true"
|
|
437
440
|
expect(subject.send(:facet_value_to_fq_string, "facet_name", "my value")).to eq "{!term f=facet_name tag=asdf}my value"
|
|
@@ -440,7 +443,7 @@ describe Blacklight::Solr::SearchBuilderBehavior do
|
|
|
440
443
|
|
|
441
444
|
describe "#add_facet_fq_to_solr" do
|
|
442
445
|
it "converts a String fq into an Array" do
|
|
443
|
-
solr_parameters = {:
|
|
446
|
+
solr_parameters = { fq: 'a string' }
|
|
444
447
|
|
|
445
448
|
subject.add_facet_fq_to_solr(solr_parameters)
|
|
446
449
|
|
|
@@ -450,10 +453,9 @@ describe Blacklight::Solr::SearchBuilderBehavior do
|
|
|
450
453
|
|
|
451
454
|
describe "#add_solr_fields_to_query" do
|
|
452
455
|
let(:blacklight_config) do
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
config.
|
|
456
|
-
config.add_show_field 'a_show_field', solr_params: { 'hl.alternativeField' => 'field_y'}
|
|
456
|
+
Blacklight::Configuration.new do |config|
|
|
457
|
+
config.add_index_field 'an_index_field', solr_params: { 'hl.alternativeField' => 'field_x' }
|
|
458
|
+
config.add_show_field 'a_show_field', solr_params: { 'hl.alternativeField' => 'field_y' }
|
|
457
459
|
config.add_field_configuration_to_solr_request!
|
|
458
460
|
end
|
|
459
461
|
end
|
|
@@ -466,24 +468,21 @@ describe Blacklight::Solr::SearchBuilderBehavior do
|
|
|
466
468
|
solr_parameters
|
|
467
469
|
end
|
|
468
470
|
|
|
469
|
-
it "
|
|
471
|
+
it "adds any extra solr parameters from index and show fields" do
|
|
470
472
|
expect(solr_parameters[:'f.an_index_field.hl.alternativeField']).to eq "field_x"
|
|
471
473
|
expect(solr_parameters[:'f.a_show_field.hl.alternativeField']).to eq "field_y"
|
|
472
474
|
end
|
|
473
475
|
end
|
|
474
476
|
|
|
475
477
|
describe "#add_facetting_to_solr" do
|
|
476
|
-
|
|
477
478
|
let(:blacklight_config) do
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
config
|
|
479
|
+
Blacklight::Configuration.new do |config|
|
|
480
|
+
config.add_facet_field 'test_field', sort: 'count'
|
|
481
|
+
config.add_facet_field 'some-query', query: { 'x' => { fq: 'some:query' } }, ex: 'xyz'
|
|
482
|
+
config.add_facet_field 'some-pivot', pivot: %w[a b], ex: 'xyz'
|
|
483
|
+
config.add_facet_field 'some-field', solr_params: { 'facet.mincount' => 15 }
|
|
484
|
+
config.add_facet_fields_to_solr_request!
|
|
485
|
+
end
|
|
487
486
|
end
|
|
488
487
|
|
|
489
488
|
let(:solr_parameters) do
|
|
@@ -494,19 +493,19 @@ describe Blacklight::Solr::SearchBuilderBehavior do
|
|
|
494
493
|
solr_parameters
|
|
495
494
|
end
|
|
496
495
|
|
|
497
|
-
it "
|
|
496
|
+
it "adds sort parameters" do
|
|
498
497
|
expect(solr_parameters[:facet]).to be true
|
|
499
498
|
|
|
500
499
|
expect(solr_parameters[:'facet.field']).to include('test_field')
|
|
501
500
|
expect(solr_parameters[:'f.test_field.facet.sort']).to eq 'count'
|
|
502
501
|
end
|
|
503
502
|
|
|
504
|
-
it "
|
|
503
|
+
it "adds facet exclusions" do
|
|
505
504
|
expect(solr_parameters[:'facet.query']).to include('{!ex=xyz}some:query')
|
|
506
505
|
expect(solr_parameters[:'facet.pivot']).to include('{!ex=xyz}a,b')
|
|
507
506
|
end
|
|
508
507
|
|
|
509
|
-
it "
|
|
508
|
+
it "adds any additional solr_params" do
|
|
510
509
|
expect(solr_parameters[:'f.some-field.facet.mincount']).to eq 15
|
|
511
510
|
end
|
|
512
511
|
|
|
@@ -517,7 +516,7 @@ describe Blacklight::Solr::SearchBuilderBehavior do
|
|
|
517
516
|
solr_parameters
|
|
518
517
|
end
|
|
519
518
|
|
|
520
|
-
it "
|
|
519
|
+
it "respects the include_in_request parameter" do
|
|
521
520
|
blacklight_config.add_facet_field 'yes_facet', include_in_request: true
|
|
522
521
|
blacklight_config.add_facet_field 'no_facet', include_in_request: false
|
|
523
522
|
|
|
@@ -525,7 +524,7 @@ describe Blacklight::Solr::SearchBuilderBehavior do
|
|
|
525
524
|
expect(solr_parameters[:'facet.field']).not_to include('no_facet')
|
|
526
525
|
end
|
|
527
526
|
|
|
528
|
-
it "
|
|
527
|
+
it "defaults to including facets if add_facet_fields_to_solr_request! was called" do
|
|
529
528
|
blacklight_config.add_facet_field 'yes_facet'
|
|
530
529
|
blacklight_config.add_facet_field 'no_facet', include_in_request: false
|
|
531
530
|
blacklight_config.add_facet_fields_to_solr_request!
|
|
@@ -536,7 +535,6 @@ describe Blacklight::Solr::SearchBuilderBehavior do
|
|
|
536
535
|
end
|
|
537
536
|
|
|
538
537
|
describe ":add_facet_fields_to_solr_request!" do
|
|
539
|
-
|
|
540
538
|
let(:blacklight_config) do
|
|
541
539
|
config = Blacklight::Configuration.new
|
|
542
540
|
config.add_facet_field 'yes_facet', include_in_request: true
|
|
@@ -552,23 +550,23 @@ describe Blacklight::Solr::SearchBuilderBehavior do
|
|
|
552
550
|
solr_parameters
|
|
553
551
|
end
|
|
554
552
|
|
|
555
|
-
it "
|
|
553
|
+
it "adds facets to the solr request" do
|
|
556
554
|
blacklight_config.add_facet_fields_to_solr_request!
|
|
557
|
-
expect(solr_parameters[:'facet.field']).to match_array [
|
|
555
|
+
expect(solr_parameters[:'facet.field']).to match_array %w[yes_facet maybe_facet another_facet]
|
|
558
556
|
end
|
|
559
557
|
|
|
560
|
-
it "
|
|
558
|
+
it "does not override field-specific configuration by default" do
|
|
561
559
|
blacklight_config.add_facet_fields_to_solr_request!
|
|
562
|
-
expect(solr_parameters[:'facet.field']).
|
|
560
|
+
expect(solr_parameters[:'facet.field']).not_to include 'no_facet'
|
|
563
561
|
end
|
|
564
562
|
|
|
565
|
-
it "
|
|
563
|
+
it "allows white-listing facets" do
|
|
566
564
|
blacklight_config.add_facet_fields_to_solr_request! 'maybe_facet'
|
|
567
565
|
expect(solr_parameters[:'facet.field']).to include 'maybe_facet'
|
|
568
566
|
expect(solr_parameters[:'facet.field']).not_to include 'another_facet'
|
|
569
567
|
end
|
|
570
568
|
|
|
571
|
-
it "
|
|
569
|
+
it "allows white-listed facets to override any field-specific include_in_request configuration" do
|
|
572
570
|
blacklight_config.add_facet_fields_to_solr_request! 'no_facet'
|
|
573
571
|
expect(solr_parameters[:'facet.field']).to include 'no_facet'
|
|
574
572
|
end
|
|
@@ -608,6 +606,7 @@ describe Blacklight::Solr::SearchBuilderBehavior do
|
|
|
608
606
|
end
|
|
609
607
|
context 'when offset is manually set' do
|
|
610
608
|
let(:user_params) { { page_key => 2 } }
|
|
609
|
+
|
|
611
610
|
it 'uses offset manually set, and converts it to an integer' do
|
|
612
611
|
expect(solr_parameters[:"f.#{facet_field}.facet.offset"]).to eq 20
|
|
613
612
|
end
|
|
@@ -633,7 +632,7 @@ describe Blacklight::Solr::SearchBuilderBehavior do
|
|
|
633
632
|
end
|
|
634
633
|
end
|
|
635
634
|
|
|
636
|
-
it "
|
|
635
|
+
it "uses the configured solr field name in queries" do
|
|
637
636
|
expect(solr_parameters).to include 'f.solr_field.facet.limit': 51,
|
|
638
637
|
'f.solr_field.facet.offset': 50,
|
|
639
638
|
'f.solr_field.facet.sort': 'index',
|
|
@@ -646,26 +645,13 @@ describe Blacklight::Solr::SearchBuilderBehavior do
|
|
|
646
645
|
expect(solr_parameters[:"f.#{facet_field}.facet.limit"]).to eq 21
|
|
647
646
|
end
|
|
648
647
|
|
|
649
|
-
context 'when facet_list_limit is defined in scope' do
|
|
650
|
-
before do
|
|
651
|
-
allow(Deprecation).to receive(:warn)
|
|
652
|
-
allow(context).to receive_messages facet_list_limit: 1000
|
|
653
|
-
end
|
|
654
|
-
it 'uses scope method for limit' do
|
|
655
|
-
expect(solr_parameters[:"f.#{facet_field}.facet.limit"]).to eq 1001
|
|
656
|
-
end
|
|
657
|
-
|
|
658
|
-
it 'uses controller method for limit when a ordinary limit is set' do
|
|
659
|
-
expect(solr_parameters[:"f.#{facet_field}.facet.limit"]).to eq 1001
|
|
660
|
-
end
|
|
661
|
-
end
|
|
662
|
-
|
|
663
648
|
it 'uses the default sort' do
|
|
664
649
|
expect(solr_parameters[:"f.#{facet_field}.facet.sort"]).to be_blank
|
|
665
650
|
end
|
|
666
651
|
|
|
667
652
|
context 'when sort is provided' do
|
|
668
653
|
let(:user_params) { { sort_key => 'index' } }
|
|
654
|
+
|
|
669
655
|
it 'uses sort provided in the parameters' do
|
|
670
656
|
expect(solr_parameters[:"f.#{facet_field}.facet.sort"]).to eq 'index'
|
|
671
657
|
end
|
|
@@ -673,6 +659,7 @@ describe Blacklight::Solr::SearchBuilderBehavior do
|
|
|
673
659
|
|
|
674
660
|
context 'when a prefix is provided' do
|
|
675
661
|
let(:user_params) { { prefix_key => 'A' } }
|
|
662
|
+
|
|
676
663
|
it 'includes the prefix in the query' do
|
|
677
664
|
expect(solr_parameters[:"f.#{facet_field}.facet.prefix"]).to eq 'A'
|
|
678
665
|
end
|
|
@@ -680,12 +667,11 @@ describe Blacklight::Solr::SearchBuilderBehavior do
|
|
|
680
667
|
end
|
|
681
668
|
|
|
682
669
|
describe "#with_tag_ex" do
|
|
683
|
-
it "
|
|
670
|
+
it "adds an !ex local parameter if the facet configuration requests it" do
|
|
684
671
|
expect(subject.with_ex_local_param("xyz", "some-value")).to eq "{!ex=xyz}some-value"
|
|
685
672
|
end
|
|
686
673
|
|
|
687
|
-
it "
|
|
688
|
-
mock_field = double()
|
|
674
|
+
it "does not add an !ex local parameter if it isn't configured" do
|
|
689
675
|
expect(subject.with_ex_local_param(nil, "some-value")).to eq "some-value"
|
|
690
676
|
end
|
|
691
677
|
end
|