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
|
@@ -5,34 +5,27 @@ module Blacklight
|
|
|
5
5
|
# query parameters appropriate for search index. It does so by evaluating a
|
|
6
6
|
# chain of processing methods to populate a result hash (see {#to_hash}).
|
|
7
7
|
class SearchBuilder
|
|
8
|
-
extend Deprecation
|
|
9
8
|
class_attribute :default_processor_chain
|
|
10
9
|
self.default_processor_chain = []
|
|
11
10
|
|
|
12
11
|
attr_reader :processor_chain, :blacklight_params
|
|
13
12
|
|
|
14
|
-
|
|
15
13
|
# @overload initialize(scope)
|
|
16
|
-
# @param [Object] scope scope the scope where the filter methods reside in.
|
|
14
|
+
# @param [Object] scope scope the scope where the filter methods reside in.
|
|
17
15
|
# @overload initialize(processor_chain, scope)
|
|
18
16
|
# @param [List<Symbol>,TrueClass] processor_chain options a list of filter methods to run or true, to use the default methods
|
|
19
|
-
# @param [Object] scope
|
|
17
|
+
# @param [Object] scope the scope where the filter methods reside in.
|
|
20
18
|
def initialize(*options)
|
|
21
|
-
|
|
19
|
+
case options.size
|
|
22
20
|
when 1
|
|
23
|
-
|
|
21
|
+
@processor_chain = default_processor_chain.dup
|
|
22
|
+
@scope = options.first
|
|
24
23
|
when 2
|
|
25
|
-
|
|
26
|
-
Deprecation.warn Blacklight::SearchBuilder, "SearchBuilder#initialize now takes only one parameter, the scope. Passing `true' will be removed in Blacklight 7"
|
|
27
|
-
else
|
|
28
|
-
@processor_chain = options.first
|
|
29
|
-
end
|
|
30
|
-
options.last
|
|
24
|
+
@processor_chain, @scope = options
|
|
31
25
|
else
|
|
32
26
|
raise ArgumentError, "wrong number of arguments. (#{options.size} for 1..2)"
|
|
33
27
|
end
|
|
34
28
|
|
|
35
|
-
@processor_chain ||= default_processor_chain.dup
|
|
36
29
|
@blacklight_params = {}
|
|
37
30
|
@merged_params = {}
|
|
38
31
|
@reverse_merged_params = {}
|
|
@@ -116,10 +109,11 @@ module Blacklight
|
|
|
116
109
|
# @return [Blacklight::Solr::Response] the solr response object
|
|
117
110
|
def to_hash
|
|
118
111
|
return @params unless params_need_update?
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
112
|
+
|
|
113
|
+
@params = processed_parameters
|
|
114
|
+
.reverse_merge(@reverse_merged_params)
|
|
115
|
+
.merge(@merged_params)
|
|
116
|
+
.tap { clear_changes }
|
|
123
117
|
end
|
|
124
118
|
|
|
125
119
|
alias_method :query, :to_hash
|
|
@@ -197,7 +191,7 @@ module Blacklight
|
|
|
197
191
|
end
|
|
198
192
|
@rows ||= begin
|
|
199
193
|
# user-provided parameters should override any default row
|
|
200
|
-
r = [:rows, :per_page].map {|k| blacklight_params[k] }.reject(&:blank?).first
|
|
194
|
+
r = [:rows, :per_page].map { |k| blacklight_params[k] }.reject(&:blank?).first
|
|
201
195
|
r ||= blacklight_config.default_per_page
|
|
202
196
|
# ensure we don't excede the max page size
|
|
203
197
|
r.nil? ? nil : [r, blacklight_config.max_per_page].map(&:to_i).min
|
|
@@ -221,36 +215,35 @@ module Blacklight
|
|
|
221
215
|
@facet
|
|
222
216
|
end
|
|
223
217
|
|
|
218
|
+
# Decode the user provided 'sort' parameter into a sort string that can be
|
|
219
|
+
# passed to the search. This sanitizes the input by ensuring only
|
|
220
|
+
# configured search values are passed through to the search.
|
|
221
|
+
# @return [String] the field/fields to sort by
|
|
224
222
|
def sort
|
|
225
223
|
sort_field = if blacklight_params[:sort].blank?
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
# just pass the key through
|
|
237
|
-
blacklight_params[:sort]
|
|
238
|
-
end
|
|
239
|
-
|
|
240
|
-
field unless field.blank?
|
|
224
|
+
# no sort param provided, use default
|
|
225
|
+
blacklight_config.default_sort_field
|
|
226
|
+
else
|
|
227
|
+
# check for sort field key
|
|
228
|
+
blacklight_config.sort_fields[blacklight_params[:sort]]
|
|
229
|
+
end
|
|
230
|
+
return sort_field.sort if sort_field.present?
|
|
231
|
+
|
|
232
|
+
Blacklight.logger.warn "Invalid sort field: '#{blacklight_params[:sort]}' was provided."
|
|
233
|
+
nil
|
|
241
234
|
end
|
|
242
235
|
|
|
243
236
|
def search_field
|
|
244
237
|
blacklight_config.search_fields[blacklight_params[:search_field]]
|
|
245
238
|
end
|
|
246
239
|
|
|
247
|
-
|
|
240
|
+
private
|
|
248
241
|
|
|
249
242
|
def request
|
|
250
243
|
Blacklight::Solr::Request.new
|
|
251
244
|
end
|
|
252
245
|
|
|
253
|
-
def should_add_field_to_request?
|
|
246
|
+
def should_add_field_to_request? _field_name, field
|
|
254
247
|
field.include_in_request || (field.include_in_request.nil? && blacklight_config.add_field_configuration_to_solr_request)
|
|
255
248
|
end
|
|
256
249
|
|
|
@@ -46,9 +46,9 @@ module Blacklight
|
|
|
46
46
|
# to provide more interesting routing to
|
|
47
47
|
# documents
|
|
48
48
|
def url_for_document(doc, options = {})
|
|
49
|
-
if respond_to?(:blacklight_config)
|
|
50
|
-
blacklight_config.show.route
|
|
51
|
-
(!doc.respond_to?(:to_model)
|
|
49
|
+
if respond_to?(:blacklight_config) &&
|
|
50
|
+
blacklight_config.show.route &&
|
|
51
|
+
(!doc.respond_to?(:to_model) || doc.to_model.is_a?(SolrDocument))
|
|
52
52
|
route = blacklight_config.show.route.merge(action: :show, id: doc).merge(options)
|
|
53
53
|
route[:controller] = params[:controller] if route[:controller] == :current
|
|
54
54
|
route
|
|
@@ -66,7 +66,7 @@ module Blacklight
|
|
|
66
66
|
|
|
67
67
|
add_facet_param(p, field, item)
|
|
68
68
|
|
|
69
|
-
if item
|
|
69
|
+
if item && item.respond_to?(:fq) && item.fq
|
|
70
70
|
Array(item.fq).each do |f, v|
|
|
71
71
|
add_facet_param(p, f, v)
|
|
72
72
|
end
|
|
@@ -97,6 +97,8 @@ module Blacklight
|
|
|
97
97
|
# removes the field value from params[:f]
|
|
98
98
|
# removes the field if there are no more values in params[:f][field]
|
|
99
99
|
# removes additional params (page, id, etc..)
|
|
100
|
+
# @param [String] field
|
|
101
|
+
# @param [String] item
|
|
100
102
|
def remove_facet_params(field, item)
|
|
101
103
|
if item.respond_to? :field
|
|
102
104
|
field = item.field
|
|
@@ -132,7 +134,7 @@ module Blacklight
|
|
|
132
134
|
# @param [Hash] params_to_merge to merge into above
|
|
133
135
|
# @return [ActionController::Parameters] the current search parameters after being sanitized by Blacklight::Parameters.sanitize
|
|
134
136
|
# @yield [params] The merged parameters hash before being sanitized
|
|
135
|
-
def params_for_search(params_to_merge={}
|
|
137
|
+
def params_for_search(params_to_merge = {})
|
|
136
138
|
# params hash we'll return
|
|
137
139
|
my_params = params.dup.merge(self.class.new(params_to_merge, blacklight_config, controller))
|
|
138
140
|
|
|
@@ -140,7 +142,7 @@ module Blacklight
|
|
|
140
142
|
yield my_params
|
|
141
143
|
end
|
|
142
144
|
|
|
143
|
-
if my_params[:page]
|
|
145
|
+
if my_params[:page] && (my_params[:per_page] != params[:per_page] || my_params[:sort] != params[:sort])
|
|
144
146
|
my_params[:page] = 1
|
|
145
147
|
end
|
|
146
148
|
|
|
@@ -165,7 +167,7 @@ module Blacklight
|
|
|
165
167
|
item
|
|
166
168
|
end
|
|
167
169
|
end
|
|
168
|
-
|
|
170
|
+
|
|
169
171
|
def add_facet_param(p, field, item)
|
|
170
172
|
if item.respond_to? :field
|
|
171
173
|
field = item.field
|
|
@@ -180,7 +182,7 @@ module Blacklight
|
|
|
180
182
|
p[:f] = (p[:f] || {}).dup # the command above is not deep in rails3, !@#$!@#$
|
|
181
183
|
p[:f][url_field] = (p[:f][url_field] || []).dup
|
|
182
184
|
|
|
183
|
-
if facet_config.single
|
|
185
|
+
if facet_config.single && p[:f][url_field].present?
|
|
184
186
|
p[:f][url_field] = []
|
|
185
187
|
end
|
|
186
188
|
|
|
@@ -12,6 +12,7 @@ module Blacklight::Solr
|
|
|
12
12
|
|
|
13
13
|
solr_response = send_and_receive blacklight_config.document_solr_path || blacklight_config.solr_path, doc_params
|
|
14
14
|
raise Blacklight::Exceptions::RecordNotFound if solr_response.documents.empty?
|
|
15
|
+
|
|
15
16
|
solr_response
|
|
16
17
|
end
|
|
17
18
|
|
|
@@ -22,8 +23,31 @@ module Blacklight::Solr
|
|
|
22
23
|
send_and_receive blacklight_config.solr_path, params.reverse_merge(qt: blacklight_config.qt)
|
|
23
24
|
end
|
|
24
25
|
|
|
26
|
+
# @param [Hash] params
|
|
27
|
+
# @return [Blacklight::Suggest::Response]
|
|
28
|
+
def suggestions(request_params)
|
|
29
|
+
suggest_results = connection.send_and_receive(suggest_handler_path, params: request_params)
|
|
30
|
+
Blacklight::Suggest::Response.new suggest_results, request_params, suggest_handler_path, suggester_name
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
##
|
|
34
|
+
# Gets a list of available fields
|
|
35
|
+
# @return [Hash]
|
|
36
|
+
def reflect_fields
|
|
37
|
+
send_and_receive('admin/luke', params: { fl: '*', 'json.nl' => 'map' })['fields']
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
##
|
|
41
|
+
# @return [boolean] true if the repository is reachable
|
|
42
|
+
def ping
|
|
43
|
+
response = connection.send_and_receive 'admin/ping', {}
|
|
44
|
+
Blacklight.logger.info("Ping [#{connection.uri}] returned: '#{response['status']}'")
|
|
45
|
+
response['status'] == "OK"
|
|
46
|
+
end
|
|
47
|
+
|
|
25
48
|
##
|
|
26
49
|
# Execute a solr query
|
|
50
|
+
# TODO: Make this private after we have a way to abstract admin/luke and ping
|
|
27
51
|
# @see [RSolr::Client#send_and_receive]
|
|
28
52
|
# @overload find(solr_path, params)
|
|
29
53
|
# Execute a solr query at the given path with the parameters
|
|
@@ -35,12 +59,12 @@ module Blacklight::Solr
|
|
|
35
59
|
def send_and_receive(path, solr_params = {})
|
|
36
60
|
benchmark("Solr fetch", level: :debug) do
|
|
37
61
|
key = blacklight_config.http_method == :post ? :data : :params
|
|
38
|
-
res = connection.send_and_receive(path, {key=>solr_params.to_hash, method: blacklight_config.http_method})
|
|
62
|
+
res = connection.send_and_receive(path, { key => solr_params.to_hash, method: blacklight_config.http_method })
|
|
39
63
|
|
|
40
64
|
solr_response = blacklight_config.response_model.new(res, solr_params, document_model: blacklight_config.document_model, blacklight_config: blacklight_config)
|
|
41
65
|
|
|
42
66
|
Blacklight.logger.debug("Solr query: #{blacklight_config.http_method} #{path} #{solr_params.to_hash.inspect}")
|
|
43
|
-
Blacklight.logger.debug("Solr response: #{solr_response.inspect}") if defined?(::BLACKLIGHT_VERBOSE_LOGGING)
|
|
67
|
+
Blacklight.logger.debug("Solr response: #{solr_response.inspect}") if defined?(::BLACKLIGHT_VERBOSE_LOGGING) && ::BLACKLIGHT_VERBOSE_LOGGING
|
|
44
68
|
solr_response
|
|
45
69
|
end
|
|
46
70
|
rescue Errno::ECONNREFUSED => e
|
|
@@ -49,10 +73,20 @@ module Blacklight::Solr
|
|
|
49
73
|
raise Blacklight::Exceptions::InvalidRequest, e.message
|
|
50
74
|
end
|
|
51
75
|
|
|
52
|
-
|
|
76
|
+
private
|
|
53
77
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
78
|
+
##
|
|
79
|
+
# @return [String]
|
|
80
|
+
def suggest_handler_path
|
|
81
|
+
blacklight_config.autocomplete_path
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def suggester_name
|
|
85
|
+
blacklight_config.autocomplete_suggester
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def build_connection
|
|
89
|
+
RSolr.connect(connection_config.merge(adapter: connection_config[:http_adapter]))
|
|
90
|
+
end
|
|
57
91
|
end
|
|
58
92
|
end
|
|
@@ -13,7 +13,7 @@ module Blacklight::Solr::Response::Facets
|
|
|
13
13
|
|
|
14
14
|
options[:value] = value if value
|
|
15
15
|
options[:hits] = hits if hits
|
|
16
|
-
|
|
16
|
+
|
|
17
17
|
super(options)
|
|
18
18
|
end
|
|
19
19
|
|
|
@@ -25,7 +25,7 @@ module Blacklight::Solr::Response::Facets
|
|
|
25
25
|
table.as_json(props)
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
|
-
|
|
28
|
+
|
|
29
29
|
# represents a facet; which is a field and its values
|
|
30
30
|
class FacetField
|
|
31
31
|
attr_reader :name, :items
|
|
@@ -58,14 +58,14 @@ module Blacklight::Solr::Response::Facets
|
|
|
58
58
|
def count?
|
|
59
59
|
sort == 'count'
|
|
60
60
|
end
|
|
61
|
-
|
|
61
|
+
|
|
62
62
|
private
|
|
63
63
|
|
|
64
64
|
# Per https://wiki.apache.org/solr/SimpleFacetParameters#facet.limit
|
|
65
65
|
def solr_default_limit
|
|
66
66
|
100
|
|
67
67
|
end
|
|
68
|
-
|
|
68
|
+
|
|
69
69
|
# Per https://wiki.apache.org/solr/SimpleFacetParameters#facet.sort
|
|
70
70
|
def solr_default_sort
|
|
71
71
|
if limit > 0
|
|
@@ -74,7 +74,7 @@ module Blacklight::Solr::Response::Facets
|
|
|
74
74
|
'index'
|
|
75
75
|
end
|
|
76
76
|
end
|
|
77
|
-
|
|
77
|
+
|
|
78
78
|
# Per https://wiki.apache.org/solr/SimpleFacetParameters#facet.offset
|
|
79
79
|
def solr_default_offset
|
|
80
80
|
0
|
|
@@ -86,7 +86,7 @@ module Blacklight::Solr::Response::Facets
|
|
|
86
86
|
end
|
|
87
87
|
|
|
88
88
|
##
|
|
89
|
-
# Get all the Solr facet data (fields, queries, pivots) as a hash keyed by
|
|
89
|
+
# Get all the Solr facet data (fields, queries, pivots) as a hash keyed by
|
|
90
90
|
# both the Solr field name and/or by the blacklight field name
|
|
91
91
|
def aggregations
|
|
92
92
|
@aggregations ||= {}.merge(facet_field_aggregations).merge(facet_query_aggregations).merge(facet_pivot_aggregations)
|
|
@@ -114,7 +114,7 @@ module Blacklight::Solr::Response::Facets
|
|
|
114
114
|
def facet_queries
|
|
115
115
|
@facet_queries ||= facet_counts['facet_queries'] || {}
|
|
116
116
|
end
|
|
117
|
-
|
|
117
|
+
|
|
118
118
|
# Returns all of the facet queries
|
|
119
119
|
def facet_pivot
|
|
120
120
|
@facet_pivot ||= facet_counts['facet_pivot'] || {}
|
|
@@ -123,7 +123,7 @@ module Blacklight::Solr::Response::Facets
|
|
|
123
123
|
private
|
|
124
124
|
|
|
125
125
|
##
|
|
126
|
-
# Convert Solr responses of various json.nl flavors to
|
|
126
|
+
# Convert Solr responses of various json.nl flavors to
|
|
127
127
|
def list_as_hash solr_list
|
|
128
128
|
# map
|
|
129
129
|
if solr_list.values.first.is_a? Hash
|
|
@@ -131,12 +131,12 @@ module Blacklight::Solr::Response::Facets
|
|
|
131
131
|
else
|
|
132
132
|
solr_list.each_with_object({}) do |(key, values), hash|
|
|
133
133
|
hash[key] = if values.first.is_a? Array
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
134
|
+
# arrarr
|
|
135
|
+
Hash[values]
|
|
136
|
+
else
|
|
137
|
+
# flat
|
|
138
|
+
Hash[values.each_slice(2).to_a]
|
|
139
|
+
end
|
|
140
140
|
end
|
|
141
141
|
end
|
|
142
142
|
end
|
|
@@ -164,9 +164,9 @@ module Blacklight::Solr::Response::Facets
|
|
|
164
164
|
options)
|
|
165
165
|
|
|
166
166
|
# alias all the possible blacklight config names..
|
|
167
|
-
blacklight_config.facet_fields.select { |
|
|
167
|
+
blacklight_config.facet_fields.select { |_k, v| v.field == facet_field_name }.each_key do |key|
|
|
168
168
|
hash[key] = hash[facet_field_name]
|
|
169
|
-
end if blacklight_config
|
|
169
|
+
end if blacklight_config && !blacklight_config.facet_fields[facet_field_name]
|
|
170
170
|
end
|
|
171
171
|
end
|
|
172
172
|
|
|
@@ -193,36 +193,36 @@ module Blacklight::Solr::Response::Facets
|
|
|
193
193
|
def facet_query_aggregations
|
|
194
194
|
return {} unless blacklight_config
|
|
195
195
|
|
|
196
|
-
blacklight_config.facet_fields.select { |
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
196
|
+
blacklight_config.facet_fields.select { |_k, v| v.query }.each_with_object({}) do |(field_name, facet_field), hash|
|
|
197
|
+
salient_facet_queries = facet_field.query.map { |_k, x| x[:fq] }
|
|
198
|
+
items = facet_queries.select { |k, _v| salient_facet_queries.include?(k) }.reject { |_value, hits| hits.zero? }.map do |value, hits|
|
|
199
|
+
salient_fields = facet_field.query.select { |_key, val| val[:fq] == value }
|
|
200
|
+
key = ((salient_fields.keys if salient_fields.respond_to? :keys) || salient_fields.first).first
|
|
201
|
+
Blacklight::Solr::Response::Facets::FacetItem.new(value: key, hits: hits, label: facet_field.query[key][:label])
|
|
202
|
+
end
|
|
203
203
|
|
|
204
|
-
|
|
204
|
+
hash[field_name] = Blacklight::Solr::Response::Facets::FacetField.new field_name, items
|
|
205
205
|
end
|
|
206
206
|
end
|
|
207
207
|
|
|
208
208
|
##
|
|
209
|
-
# Convert Solr's facet_pivot response into
|
|
209
|
+
# Convert Solr's facet_pivot response into
|
|
210
210
|
# a hash of Blacklight::Solr::Response::Facet::FacetField objects
|
|
211
211
|
def facet_pivot_aggregations
|
|
212
212
|
facet_pivot.each_with_object({}) do |(field_name, values), hash|
|
|
213
|
-
next unless blacklight_config
|
|
213
|
+
next unless blacklight_config && !blacklight_config.facet_fields[field_name]
|
|
214
214
|
|
|
215
215
|
items = values.map do |lst|
|
|
216
216
|
construct_pivot_field(lst)
|
|
217
217
|
end
|
|
218
218
|
|
|
219
219
|
# alias all the possible blacklight config names..
|
|
220
|
-
blacklight_config.facet_fields.select { |
|
|
220
|
+
blacklight_config.facet_fields.select { |_k, v| v.pivot && v.pivot.join(",") == field_name }.each_key do |key|
|
|
221
221
|
hash[key] = Blacklight::Solr::Response::Facets::FacetField.new key, items
|
|
222
222
|
end
|
|
223
223
|
end
|
|
224
224
|
end
|
|
225
|
-
|
|
225
|
+
|
|
226
226
|
##
|
|
227
227
|
# Recursively parse the pivot facet response to build up the full pivot tree
|
|
228
228
|
def construct_pivot_field lst, parent_fq = {}
|
|
@@ -232,6 +232,4 @@ module Blacklight::Solr::Response::Facets
|
|
|
232
232
|
|
|
233
233
|
Blacklight::Solr::Response::Facets::FacetItem.new(value: lst[:value], hits: lst[:count], field: lst[:field], items: items, fq: parent_fq)
|
|
234
234
|
end
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
end # end Facets
|
|
235
|
+
end
|
|
@@ -3,7 +3,7 @@ class Blacklight::Solr::Response::Group
|
|
|
3
3
|
include Blacklight::Solr::Response::PaginationMethods
|
|
4
4
|
|
|
5
5
|
attr_reader :key, :group, :response
|
|
6
|
-
|
|
6
|
+
|
|
7
7
|
def initialize key, group, response
|
|
8
8
|
@key = key
|
|
9
9
|
@group = group
|
|
@@ -18,13 +18,13 @@ class Blacklight::Solr::Response::Group
|
|
|
18
18
|
def total
|
|
19
19
|
doclist[:numFound].to_s.to_i
|
|
20
20
|
end
|
|
21
|
-
|
|
21
|
+
|
|
22
22
|
def start
|
|
23
23
|
doclist[:start].to_s.to_i
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
def docs
|
|
27
|
-
doclist[:docs].map {|doc| SolrDocument.new(doc, response)}
|
|
27
|
+
doclist[:docs].map { |doc| SolrDocument.new(doc, response) }
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
def field
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
module Blacklight::Solr::Response::MoreLikeThis
|
|
3
3
|
def more_like document
|
|
4
4
|
mlt = more_like_this[document.id]
|
|
5
|
-
return [] unless mlt
|
|
5
|
+
return [] unless mlt && mlt['docs']
|
|
6
6
|
|
|
7
7
|
mlt['docs']
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
def more_like_this
|
|
11
11
|
return {} unless self[:moreLikeThis]
|
|
12
|
-
|
|
12
|
+
|
|
13
13
|
self[:moreLikeThis]
|
|
14
14
|
end
|
|
15
15
|
end
|
|
@@ -24,7 +24,7 @@ module Blacklight::Solr::Response::Spelling
|
|
|
24
24
|
def words
|
|
25
25
|
@words ||= begin
|
|
26
26
|
word_suggestions = []
|
|
27
|
-
spellcheck =
|
|
27
|
+
spellcheck = response[:spellcheck]
|
|
28
28
|
if spellcheck && spellcheck[:suggestions]
|
|
29
29
|
suggestions = spellcheck[:suggestions]
|
|
30
30
|
unless suggestions.nil?
|
|
@@ -43,7 +43,7 @@ module Blacklight::Solr::Response::Spelling
|
|
|
43
43
|
suggestions = Hash[*suggestions].except('correctlySpelled', 'collation')
|
|
44
44
|
end
|
|
45
45
|
|
|
46
|
-
suggestions.
|
|
46
|
+
suggestions.each_value do |term_info|
|
|
47
47
|
# term_info is a hash:
|
|
48
48
|
# numFound =>
|
|
49
49
|
# startOffset =>
|
|
@@ -69,8 +69,9 @@ module Blacklight::Solr::Response::Spelling
|
|
|
69
69
|
|
|
70
70
|
def collation
|
|
71
71
|
# FIXME: DRY up with words
|
|
72
|
-
spellcheck =
|
|
72
|
+
spellcheck = response[:spellcheck]
|
|
73
73
|
return unless spellcheck && spellcheck[:suggestions]
|
|
74
|
+
|
|
74
75
|
suggestions = spellcheck[:suggestions]
|
|
75
76
|
|
|
76
77
|
if suggestions.is_a?(Array) && suggestions.index("collation")
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
class Blacklight::Solr::Response < ActiveSupport::HashWithIndifferentAccess
|
|
3
|
-
extend
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
require_dependency 'blacklight/solr/response/group_response'
|
|
14
|
-
require_dependency 'blacklight/solr/response/group'
|
|
3
|
+
extend ActiveSupport::Autoload
|
|
4
|
+
eager_autoload do
|
|
5
|
+
autoload :PaginationMethods
|
|
6
|
+
autoload :Response
|
|
7
|
+
autoload :Spelling
|
|
8
|
+
autoload :Facets
|
|
9
|
+
autoload :MoreLikeThis
|
|
10
|
+
autoload :GroupResponse
|
|
11
|
+
autoload :Group
|
|
12
|
+
end
|
|
15
13
|
|
|
16
14
|
include PaginationMethods
|
|
17
15
|
include Spelling
|
|
@@ -20,13 +18,14 @@ class Blacklight::Solr::Response < ActiveSupport::HashWithIndifferentAccess
|
|
|
20
18
|
include MoreLikeThis
|
|
21
19
|
|
|
22
20
|
attr_reader :request_params
|
|
23
|
-
attr_accessor :
|
|
21
|
+
attr_accessor :blacklight_config, :options
|
|
22
|
+
delegate :document_factory, to: :blacklight_config
|
|
24
23
|
|
|
25
24
|
def initialize(data, request_params, options = {})
|
|
26
25
|
super(force_to_utf8(ActiveSupport::HashWithIndifferentAccess.new(data)))
|
|
27
26
|
@request_params = ActiveSupport::HashWithIndifferentAccess.new(request_params)
|
|
28
|
-
self.document_model = options[:solr_document_model] || options[:document_model] || SolrDocument
|
|
29
27
|
self.blacklight_config = options[:blacklight_config]
|
|
28
|
+
self.options = options
|
|
30
29
|
end
|
|
31
30
|
|
|
32
31
|
def header
|
|
@@ -50,7 +49,7 @@ class Blacklight::Solr::Response < ActiveSupport::HashWithIndifferentAccess
|
|
|
50
49
|
end
|
|
51
50
|
|
|
52
51
|
def documents
|
|
53
|
-
@documents ||= (response['docs'] || []).collect{|doc|
|
|
52
|
+
@documents ||= (response['docs'] || []).collect { |doc| document_factory.build(doc, self, options) }
|
|
54
53
|
end
|
|
55
54
|
alias_method :docs, :documents
|
|
56
55
|
|
|
@@ -76,7 +75,7 @@ class Blacklight::Solr::Response < ActiveSupport::HashWithIndifferentAccess
|
|
|
76
75
|
end
|
|
77
76
|
|
|
78
77
|
def grouped?
|
|
79
|
-
|
|
78
|
+
key? "grouped"
|
|
80
79
|
end
|
|
81
80
|
|
|
82
81
|
def export_formats
|
|
@@ -85,20 +84,20 @@ class Blacklight::Solr::Response < ActiveSupport::HashWithIndifferentAccess
|
|
|
85
84
|
|
|
86
85
|
private
|
|
87
86
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
end
|
|
87
|
+
def force_to_utf8(value)
|
|
88
|
+
case value
|
|
89
|
+
when Hash
|
|
90
|
+
value.each { |k, v| value[k] = force_to_utf8(v) }
|
|
91
|
+
when Array
|
|
92
|
+
value.each { |v| force_to_utf8(v) }
|
|
93
|
+
when String
|
|
94
|
+
if value.encoding != Encoding::UTF_8
|
|
95
|
+
Blacklight.logger.warn "Found a non utf-8 value in Blacklight::Solr::Response. \"#{value}\" Encoding is #{value.encoding}"
|
|
96
|
+
value.dup.force_encoding('UTF-8')
|
|
97
|
+
else
|
|
98
|
+
value
|
|
101
99
|
end
|
|
102
|
-
value
|
|
103
100
|
end
|
|
101
|
+
value
|
|
102
|
+
end
|
|
104
103
|
end
|