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
|
@@ -4,31 +4,28 @@ module Blacklight
|
|
|
4
4
|
# Blacklight::Configuration holds the configuration for a Blacklight::Controller, including
|
|
5
5
|
# fields to display, facets to show, sort options, and search fields.
|
|
6
6
|
class Configuration < OpenStructWithHashAccess
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
require_dependency 'blacklight/configuration/sort_field'
|
|
7
|
+
extend ActiveSupport::Autoload
|
|
8
|
+
eager_autoload do
|
|
9
|
+
autoload :Context
|
|
10
|
+
autoload :ViewConfig
|
|
11
|
+
autoload :ToolConfig
|
|
12
|
+
autoload :Fields
|
|
13
|
+
autoload :Field
|
|
14
|
+
autoload :NullField
|
|
15
|
+
autoload :SearchField
|
|
16
|
+
autoload :FacetField
|
|
17
|
+
autoload :SortField
|
|
18
|
+
end
|
|
19
|
+
|
|
21
20
|
include Fields
|
|
22
21
|
|
|
23
|
-
# Set up Blacklight::Configuration.default_values to contain
|
|
24
|
-
# the basic, required Blacklight fields
|
|
22
|
+
# Set up Blacklight::Configuration.default_values to contain the basic, required Blacklight fields
|
|
25
23
|
class << self
|
|
24
|
+
# rubocop:disable Metrics/MethodLength
|
|
26
25
|
def default_values
|
|
27
26
|
@default_values ||= begin
|
|
28
27
|
{
|
|
29
|
-
##
|
|
30
28
|
# === Search request configuration
|
|
31
|
-
##
|
|
32
29
|
# HTTP method to use when making requests to solr; valid
|
|
33
30
|
# values are :get and :post.
|
|
34
31
|
http_method: :get,
|
|
@@ -38,24 +35,14 @@ module Blacklight
|
|
|
38
35
|
default_solr_params: {},
|
|
39
36
|
##
|
|
40
37
|
# === Single document request configuration
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
document_unique_id_param: :id,
|
|
38
|
+
# The solr request handler to use when requesting only a single document
|
|
39
|
+
document_solr_request_handler: nil,
|
|
40
|
+
# The path to send single document requests to solr
|
|
41
|
+
document_solr_path: 'get',
|
|
42
|
+
document_unique_id_param: :ids,
|
|
47
43
|
# Default values of parameters to send when requesting a single document
|
|
48
|
-
default_document_solr_params: {
|
|
49
|
-
|
|
50
|
-
## by default, we just ask for all fields.
|
|
51
|
-
#fl: '*',
|
|
52
|
-
## this is a fancy way to say "find the document by id using
|
|
53
|
-
## the value in the id query parameter"
|
|
54
|
-
#q: "{!term f=#{unique_key} v=$id}",
|
|
55
|
-
## disable features we don't need
|
|
56
|
-
#facet: false,
|
|
57
|
-
#rows: 1
|
|
58
|
-
},
|
|
44
|
+
default_document_solr_params: {},
|
|
45
|
+
fetch_many_document_params: {},
|
|
59
46
|
document_pagination_params: {},
|
|
60
47
|
##
|
|
61
48
|
# == Response models
|
|
@@ -67,16 +54,13 @@ module Blacklight
|
|
|
67
54
|
response_model: nil,
|
|
68
55
|
# the model to use for each response document
|
|
69
56
|
document_model: nil,
|
|
70
|
-
# document presenter class used by helpers and views
|
|
71
|
-
document_presenter_class: nil, # deprecated
|
|
72
57
|
# Class for paginating long lists of facet fields
|
|
73
58
|
facet_paginator_class: nil,
|
|
74
59
|
# repository connection configuration
|
|
75
60
|
connection_config: nil,
|
|
76
61
|
##
|
|
77
62
|
# == Blacklight view configuration
|
|
78
|
-
|
|
79
|
-
navbar: OpenStructWithHashAccess.new(partials: { }),
|
|
63
|
+
navbar: OpenStructWithHashAccess.new(partials: {}),
|
|
80
64
|
# General configuration for all views
|
|
81
65
|
index: ViewConfig::Index.new(
|
|
82
66
|
# document presenter class used by helpers and views
|
|
@@ -98,10 +82,10 @@ module Blacklight
|
|
|
98
82
|
show: ViewConfig::Show.new(
|
|
99
83
|
# document presenter class used by helpers and views
|
|
100
84
|
document_presenter_class: nil,
|
|
101
|
-
|
|
102
|
-
#
|
|
103
|
-
#
|
|
104
|
-
# current controller.
|
|
85
|
+
display_type_field: 'format',
|
|
86
|
+
# Default route parameters for 'show' requests.
|
|
87
|
+
# Set this to a hash with additional arguments to merge into the route,
|
|
88
|
+
# or set `controller: :current` to route to the current controller.
|
|
105
89
|
route: nil,
|
|
106
90
|
# partials to render for each document(see #render_document_partials)
|
|
107
91
|
partials: [:show_header, :show],
|
|
@@ -109,17 +93,17 @@ module Blacklight
|
|
|
109
93
|
),
|
|
110
94
|
# Configurations for specific types of index views
|
|
111
95
|
view: NestedOpenStructWithHashAccess.new(ViewConfig,
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
96
|
+
list: {},
|
|
97
|
+
atom: {
|
|
98
|
+
if: false, # by default, atom should not show up as an alternative view
|
|
99
|
+
partials: [:document]
|
|
100
|
+
},
|
|
101
|
+
rss: {
|
|
102
|
+
if: false, # by default, rss should not show up as an alternative view
|
|
103
|
+
partials: [:document]
|
|
104
|
+
}),
|
|
121
105
|
#
|
|
122
|
-
# These fields are created and managed below by `
|
|
106
|
+
# These fields are created and managed below by `define_field_access`
|
|
123
107
|
# facet_fields
|
|
124
108
|
# index_fields
|
|
125
109
|
# show_fields
|
|
@@ -127,7 +111,6 @@ module Blacklight
|
|
|
127
111
|
# search_fields
|
|
128
112
|
##
|
|
129
113
|
# === Blacklight behavior configuration
|
|
130
|
-
##
|
|
131
114
|
# Maxiumum number of spelling suggestions to offer
|
|
132
115
|
spell_max: 5,
|
|
133
116
|
# Maximum number of results to show per page
|
|
@@ -141,9 +124,12 @@ module Blacklight
|
|
|
141
124
|
default_more_limit: 20,
|
|
142
125
|
# proc for determining whether the session is a crawler/bot
|
|
143
126
|
# ex.: crawler_detector: lambda { |req| req.env['HTTP_USER_AGENT'] =~ /bot/ }
|
|
144
|
-
crawler_detector: nil
|
|
127
|
+
crawler_detector: nil,
|
|
128
|
+
autocomplete_suggester: 'mySuggester',
|
|
129
|
+
raw_endpoint: OpenStructWithHashAccess.new(enabled: false)
|
|
145
130
|
}
|
|
146
131
|
end
|
|
132
|
+
# rubocop:enable Metrics/MethodLength
|
|
147
133
|
end
|
|
148
134
|
end
|
|
149
135
|
|
|
@@ -177,6 +163,11 @@ module Blacklight
|
|
|
177
163
|
super || ::SolrDocument
|
|
178
164
|
end
|
|
179
165
|
|
|
166
|
+
# A class that builds documents
|
|
167
|
+
def document_factory
|
|
168
|
+
super || Blacklight::DocumentFactory
|
|
169
|
+
end
|
|
170
|
+
|
|
180
171
|
# only here to support alias_method
|
|
181
172
|
def document_model=(*args)
|
|
182
173
|
super
|
|
@@ -186,17 +177,6 @@ module Blacklight
|
|
|
186
177
|
super || Blacklight::Solr::Response
|
|
187
178
|
end
|
|
188
179
|
|
|
189
|
-
# @deprecated
|
|
190
|
-
def document_presenter_class
|
|
191
|
-
super || Blacklight::DocumentPresenter
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
# @deprecated
|
|
195
|
-
def document_presenter_class=(klass)
|
|
196
|
-
super
|
|
197
|
-
end
|
|
198
|
-
deprecation_deprecate :document_presenter_class= => "replaced by show.presenter_class and index.presenter_class"
|
|
199
|
-
|
|
200
180
|
def response_model=(*args)
|
|
201
181
|
super
|
|
202
182
|
end
|
|
@@ -205,6 +185,10 @@ module Blacklight
|
|
|
205
185
|
super || Blacklight::Solr::Repository
|
|
206
186
|
end
|
|
207
187
|
|
|
188
|
+
def repository
|
|
189
|
+
repository_class.new(self)
|
|
190
|
+
end
|
|
191
|
+
|
|
208
192
|
def connection_config
|
|
209
193
|
super || Blacklight.connection_config
|
|
210
194
|
end
|
|
@@ -234,16 +218,14 @@ module Blacklight
|
|
|
234
218
|
# Returns default search field, used for simpler display in history, etc.
|
|
235
219
|
# if not set, defaults to first defined search field
|
|
236
220
|
def default_search_field
|
|
237
|
-
field = super
|
|
238
|
-
field ||= search_fields.values.find { |f| f.default == true }
|
|
221
|
+
field = super || search_fields.values.find { |f| f.default == true }
|
|
239
222
|
field || search_fields.values.first
|
|
240
223
|
end
|
|
241
224
|
|
|
242
225
|
# Returns default sort field, used for simpler display in history, etc.
|
|
243
226
|
# if not set, defaults to first defined sort field
|
|
244
227
|
def default_sort_field
|
|
245
|
-
field = super
|
|
246
|
-
field ||= sort_fields.values.find { |f| f.default == true }
|
|
228
|
+
field = super || sort_fields.values.find { |f| f.default == true }
|
|
247
229
|
field || sort_fields.values.first
|
|
248
230
|
end
|
|
249
231
|
|
|
@@ -271,11 +253,10 @@ module Blacklight
|
|
|
271
253
|
if fields.empty?
|
|
272
254
|
self.add_facet_fields_to_solr_request = true
|
|
273
255
|
else
|
|
274
|
-
facet_fields.slice(*fields).
|
|
256
|
+
facet_fields.slice(*fields).each_value { |v| v.include_in_request = true }
|
|
275
257
|
end
|
|
276
258
|
end
|
|
277
259
|
|
|
278
|
-
##
|
|
279
260
|
# Add any configured facet fields to the default solr parameters hash
|
|
280
261
|
# @overload add_field_configuration_to_solr_request!
|
|
281
262
|
# add all index, show, and facet fields to the solr request
|
|
@@ -285,9 +266,9 @@ module Blacklight
|
|
|
285
266
|
if fields.empty?
|
|
286
267
|
self.add_field_configuration_to_solr_request = true
|
|
287
268
|
else
|
|
288
|
-
index_fields.slice(*fields).
|
|
289
|
-
show_fields.slice(*fields).
|
|
290
|
-
facet_fields.slice(*fields).
|
|
269
|
+
index_fields.slice(*fields).each_value { |v| v.include_in_request = true }
|
|
270
|
+
show_fields.slice(*fields).each_value { |v| v.include_in_request = true }
|
|
271
|
+
facet_fields.slice(*fields).each_value { |v| v.include_in_request = true }
|
|
291
272
|
end
|
|
292
273
|
end
|
|
293
274
|
|
|
@@ -304,17 +285,22 @@ module Blacklight
|
|
|
304
285
|
end
|
|
305
286
|
end
|
|
306
287
|
end
|
|
307
|
-
alias_method :inheritable_copy, :deep_copy
|
|
308
288
|
|
|
309
|
-
|
|
289
|
+
# builds a copy for the provided controller class
|
|
290
|
+
def build(klass)
|
|
291
|
+
deep_copy.tap do |conf|
|
|
292
|
+
conf.klass = klass
|
|
293
|
+
end
|
|
294
|
+
end
|
|
295
|
+
alias_method :inheritable_copy, :build
|
|
296
|
+
|
|
310
297
|
# Get a view configuration for the given view type
|
|
311
298
|
# including default values from the index configuration
|
|
299
|
+
# @param [Symbol,#to_sym] view_type
|
|
300
|
+
# @return [Blacklight::Configuration::ViewConfig]
|
|
312
301
|
def view_config(view_type)
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
else
|
|
316
|
-
self.index.merge view.fetch(view_type, {})
|
|
317
|
-
end
|
|
302
|
+
view_type = view_type.to_sym unless view_type.is_a? Symbol
|
|
303
|
+
index.merge(view_type == :show ? show : view.fetch(view_type, {}))
|
|
318
304
|
end
|
|
319
305
|
|
|
320
306
|
# YARD will include inline disabling as docs, cannot do multiline inside @!macro. AND this must be separate from doc block.
|
|
@@ -329,6 +315,7 @@ module Blacklight
|
|
|
329
315
|
def add_show_tools_partial(name, opts = {})
|
|
330
316
|
opts[:partial] ||= 'document_action'
|
|
331
317
|
add_action(show.document_actions, name, opts)
|
|
318
|
+
klass && ActionBuilder.new(klass, name, opts).build
|
|
332
319
|
end
|
|
333
320
|
# rubocop:enable Metrics/LineLength
|
|
334
321
|
|
|
@@ -350,13 +337,39 @@ module Blacklight
|
|
|
350
337
|
add_action(navbar.partials, name, opts)
|
|
351
338
|
end
|
|
352
339
|
|
|
353
|
-
|
|
340
|
+
##
|
|
341
|
+
# Add a section of config that only applies to documents with a matching display type
|
|
342
|
+
def for_display_type display_type, &_block
|
|
343
|
+
self.fields_for_type ||= {}
|
|
354
344
|
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
config.name = name
|
|
358
|
-
yield(config) if block_given?
|
|
359
|
-
config_hash[name] = config
|
|
345
|
+
(fields_for_type[display_type] ||= self.class.new).tap do |conf|
|
|
346
|
+
yield(conf) if block_given?
|
|
360
347
|
end
|
|
348
|
+
end
|
|
349
|
+
|
|
350
|
+
##
|
|
351
|
+
# Return a list of fields for the index display that should be used for the
|
|
352
|
+
# provided document. This respects any configuration made using for_display_type
|
|
353
|
+
def index_fields_for(document)
|
|
354
|
+
display_type = document.first(index.display_type_field)
|
|
355
|
+
for_display_type(display_type).index_fields.merge(index_fields)
|
|
356
|
+
end
|
|
357
|
+
|
|
358
|
+
##
|
|
359
|
+
# Return a list of fields for the show page that should be used for the
|
|
360
|
+
# provided document. This respects any configuration made using for_display_type
|
|
361
|
+
def show_fields_for(document)
|
|
362
|
+
display_type = document.first(show.display_type_field)
|
|
363
|
+
for_display_type(display_type).show_fields.merge(show_fields)
|
|
364
|
+
end
|
|
365
|
+
|
|
366
|
+
private
|
|
367
|
+
|
|
368
|
+
def add_action(config_hash, name, opts)
|
|
369
|
+
config = Blacklight::Configuration::ToolConfig.new opts
|
|
370
|
+
config.name = name
|
|
371
|
+
yield(config) if block_given?
|
|
372
|
+
config_hash[name] = config
|
|
373
|
+
end
|
|
361
374
|
end
|
|
362
375
|
end
|
data/lib/blacklight/engine.rb
CHANGED
|
@@ -3,12 +3,9 @@ module Blacklight
|
|
|
3
3
|
class Engine < Rails::Engine
|
|
4
4
|
engine_name "blacklight"
|
|
5
5
|
|
|
6
|
-
require 'bootstrap-sass'
|
|
7
|
-
require 'twitter-typeahead-rails'
|
|
8
|
-
|
|
9
6
|
# BlacklightHelper is needed by all helpers, so we inject it
|
|
10
|
-
# into action view base here.
|
|
11
|
-
initializer 'blacklight.helpers' do
|
|
7
|
+
# into action view base here.
|
|
8
|
+
initializer 'blacklight.helpers' do
|
|
12
9
|
ActionView::Base.send :include, BlacklightHelper
|
|
13
10
|
end
|
|
14
11
|
|
|
@@ -28,7 +25,10 @@ module Blacklight
|
|
|
28
25
|
end
|
|
29
26
|
|
|
30
27
|
initializer "blacklight.assets.precompile" do |app|
|
|
31
|
-
|
|
28
|
+
# When Rails has been generated in API mode, it does not have sprockets available
|
|
29
|
+
if defined? Sprockets
|
|
30
|
+
app.config.assets.precompile += %w(favicon.ico)
|
|
31
|
+
end
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
Blacklight::Engine.config.sms_mappings = {
|
|
@@ -43,7 +43,11 @@ module Blacklight
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
config.bookmarks_http_method = :post
|
|
46
|
-
|
|
46
|
+
|
|
47
47
|
config.email_regexp = defined?(Devise) ? Devise.email_regexp : /\A[^@\s]+@[^@\s]+\z/
|
|
48
|
+
|
|
49
|
+
config.action_dispatch.rescue_responses.merge!(
|
|
50
|
+
"Blacklight::Exceptions::RecordNotFound" => :not_found
|
|
51
|
+
)
|
|
48
52
|
end
|
|
49
53
|
end
|
|
@@ -4,13 +4,7 @@ module Blacklight
|
|
|
4
4
|
class AccessDenied < StandardError
|
|
5
5
|
end
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
# is not successful, we can raise this exception.
|
|
9
|
-
# Deprecated; this will be removed in Blacklight 6.0:
|
|
10
|
-
class InvalidSolrID < RuntimeError
|
|
11
|
-
end
|
|
12
|
-
# In Blacklight 6.0, this exception can subclass RuntimeError directly
|
|
13
|
-
class RecordNotFound < InvalidSolrID
|
|
7
|
+
class RecordNotFound < RuntimeError
|
|
14
8
|
end
|
|
15
9
|
|
|
16
10
|
class InvalidRequest < StandardError
|
|
@@ -20,5 +14,8 @@ module Blacklight
|
|
|
20
14
|
end
|
|
21
15
|
|
|
22
16
|
class ECONNREFUSED < ::Errno::ECONNREFUSED; end
|
|
17
|
+
|
|
18
|
+
class IconNotFound < StandardError
|
|
19
|
+
end
|
|
23
20
|
end
|
|
24
21
|
end
|
|
@@ -1,96 +1,24 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
require 'ostruct'
|
|
3
3
|
module Blacklight
|
|
4
|
-
module Utils
|
|
5
|
-
def self.needs_attr_accessible?
|
|
6
|
-
protected_attributes_enabled?
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def self.protected_attributes_enabled?
|
|
10
|
-
defined?(ActiveModel::MassAssignmentSecurity)
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
|
|
14
4
|
##
|
|
15
|
-
# An OpenStruct that
|
|
16
|
-
class OpenStructWithHashAccess < OpenStruct
|
|
17
|
-
delegate :keys, :each, :map, :has_key?, :key?, :include?, :empty?, :length, :delete, :delete_if, :keep_if, :clear, :reject!, :select!, :replace, :fetch, :to_json, :as_json, :any?, to: :to_h
|
|
18
|
-
|
|
19
|
-
##
|
|
20
|
-
# Expose the internal hash
|
|
21
|
-
# @return [Hash]
|
|
22
|
-
def to_h
|
|
23
|
-
@table
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def select *args, &block
|
|
27
|
-
self.class.new to_h.select(*args, &block)
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def sort_by *args, &block
|
|
31
|
-
self.class.new Hash[to_h.sort_by(*args, &block)]
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def sort_by! *args, &block
|
|
35
|
-
replace Hash[to_h.sort_by(*args, &block)]
|
|
36
|
-
self
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
##
|
|
40
|
-
# Merge the values of this OpenStruct with another OpenStruct or Hash
|
|
41
|
-
# @param [Hash,#to_h] other_hash
|
|
42
|
-
# @return [OpenStructWithHashAccess] a new instance of an OpenStructWithHashAccess
|
|
43
|
-
def merge other_hash
|
|
44
|
-
self.class.new to_h.merge((other_hash if other_hash.is_a? Hash) || other_hash.to_h)
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
##
|
|
48
|
-
# Merge the values of another OpenStruct or Hash into this object
|
|
49
|
-
# @param [Hash,#to_h] other_hash
|
|
50
|
-
# @return [OpenStructWithHashAccess] a new instance of an OpenStructWithHashAccess
|
|
51
|
-
def merge! other_hash
|
|
52
|
-
@table.merge!((other_hash if other_hash.is_a? Hash) || other_hash.to_h)
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
def deep_dup
|
|
56
|
-
self.class.new @table.deep_dup
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
##
|
|
61
|
-
# An OpenStruct refinement that converts any hash-keys into
|
|
5
|
+
# An OpenStruct refinement that converts any hash-keys into
|
|
62
6
|
# additional instances of NestedOpenStructWithHashAccess
|
|
63
7
|
class NestedOpenStructWithHashAccess < OpenStructWithHashAccess
|
|
64
8
|
attr_reader :nested_class
|
|
65
|
-
delegate :default_proc=, :
|
|
9
|
+
delegate :default_proc=, to: :to_h
|
|
66
10
|
|
|
67
|
-
def initialize
|
|
11
|
+
def initialize(klass, hash = {})
|
|
68
12
|
@nested_class = klass
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
hashes_and_keys = args.flatten
|
|
72
|
-
lazy_configs = hashes_and_keys.extract_options!
|
|
73
|
-
|
|
74
|
-
hashes_and_keys.each do |v|
|
|
13
|
+
value = hash.transform_values do |v|
|
|
75
14
|
if v.is_a? Hash
|
|
76
|
-
|
|
77
|
-
value = v[key]
|
|
78
|
-
|
|
79
|
-
hash[key] = nested_class.new value
|
|
15
|
+
nested_class.new(v)
|
|
80
16
|
else
|
|
81
|
-
|
|
17
|
+
v
|
|
82
18
|
end
|
|
83
19
|
end
|
|
84
20
|
|
|
85
|
-
|
|
86
|
-
hash[k] = if v.is_a? nested_class
|
|
87
|
-
v
|
|
88
|
-
else
|
|
89
|
-
nested_class.new v
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
super hash
|
|
21
|
+
super value
|
|
94
22
|
set_default_proc!
|
|
95
23
|
end
|
|
96
24
|
|
|
@@ -131,7 +59,7 @@ module Blacklight
|
|
|
131
59
|
end
|
|
132
60
|
|
|
133
61
|
def deep_dup
|
|
134
|
-
self.class.new
|
|
62
|
+
self.class.new nested_class, @table.deep_dup
|
|
135
63
|
end
|
|
136
64
|
|
|
137
65
|
def select *args, &block
|
|
@@ -172,7 +100,7 @@ module Blacklight
|
|
|
172
100
|
|
|
173
101
|
def set_default_proc!
|
|
174
102
|
self.default_proc = lambda do |hash, key|
|
|
175
|
-
hash[key] =
|
|
103
|
+
hash[key] = nested_class.new
|
|
176
104
|
end
|
|
177
105
|
end
|
|
178
106
|
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require 'ostruct'
|
|
3
|
+
module Blacklight
|
|
4
|
+
##
|
|
5
|
+
# An OpenStruct that responds to common Hash methods
|
|
6
|
+
class OpenStructWithHashAccess < OpenStruct
|
|
7
|
+
delegate :keys, :each, :map, :has_key?, :key?, :include?, :empty?, :length, :delete, :delete_if, :keep_if, :clear, :reject!, :select!, :replace, :fetch, :to_json, :as_json, :any?, to: :to_h
|
|
8
|
+
|
|
9
|
+
##
|
|
10
|
+
# Expose the internal hash
|
|
11
|
+
# @return [Hash]
|
|
12
|
+
def to_h
|
|
13
|
+
@table
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def select *args, &block
|
|
17
|
+
self.class.new to_h.select(*args, &block)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def sort_by *args, &block
|
|
21
|
+
self.class.new Hash[to_h.sort_by(*args, &block)]
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def sort_by! *args, &block
|
|
25
|
+
replace Hash[to_h.sort_by(*args, &block)]
|
|
26
|
+
self
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
##
|
|
30
|
+
# Merge the values of this OpenStruct with another OpenStruct or Hash
|
|
31
|
+
# @param [Hash,#to_h] other_hash
|
|
32
|
+
# @return [OpenStructWithHashAccess] a new instance of an OpenStructWithHashAccess
|
|
33
|
+
def merge other_hash
|
|
34
|
+
self.class.new to_h.merge((other_hash if other_hash.is_a? Hash) || other_hash.to_h)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
##
|
|
38
|
+
# Merge the values of another OpenStruct or Hash into this object
|
|
39
|
+
# @param [Hash,#to_h] other_hash
|
|
40
|
+
# @return [OpenStructWithHashAccess] a new instance of an OpenStructWithHashAccess
|
|
41
|
+
def merge! other_hash
|
|
42
|
+
@table.merge!((other_hash if other_hash.is_a? Hash) || other_hash.to_h)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def deep_dup
|
|
46
|
+
self.class.new @table.deep_dup
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -6,9 +6,7 @@ module Blacklight
|
|
|
6
6
|
@defaults = defaults
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
-
def call(mapper,
|
|
10
|
-
options = @defaults.merge(options)
|
|
11
|
-
|
|
9
|
+
def call(mapper, _options = {})
|
|
12
10
|
mapper.member do
|
|
13
11
|
mapper.match 'email', via: [:get, :post]
|
|
14
12
|
mapper.match 'sms', via: [:get, :post]
|
|
@@ -6,14 +6,14 @@ module Blacklight
|
|
|
6
6
|
@defaults = defaults
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
-
def call(mapper,
|
|
10
|
-
options = @defaults.merge(options)
|
|
11
|
-
|
|
9
|
+
def call(mapper, _options = {})
|
|
12
10
|
mapper.match '/', action: 'index', as: 'search', via: [:get, :post]
|
|
13
11
|
|
|
14
12
|
mapper.post ":id/track", action: 'track', as: 'track'
|
|
13
|
+
mapper.get ":id/raw", action: 'raw', as: 'raw', defaults: { format: 'json' }
|
|
15
14
|
|
|
16
15
|
mapper.get "opensearch"
|
|
16
|
+
mapper.get 'suggest', as: 'suggest_index', defaults: { format: 'json' }
|
|
17
17
|
mapper.get "facet/:id", action: 'facet', as: 'facet'
|
|
18
18
|
end
|
|
19
19
|
end
|