newspaper_works 0.1.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 +7 -0
- data/.fcrepo_wrapper +4 -0
- data/.gitignore +43 -0
- data/.rubocop.yml +143 -0
- data/.solr_wrapper +8 -0
- data/.travis.yml +50 -0
- data/Gemfile +47 -0
- data/LICENSE +203 -0
- data/README.md +159 -0
- data/Rakefile +38 -0
- data/app/actors/hyrax/actors/newspaper_article_actor.rb +8 -0
- data/app/actors/hyrax/actors/newspaper_container_actor.rb +8 -0
- data/app/actors/hyrax/actors/newspaper_issue_actor.rb +8 -0
- data/app/actors/hyrax/actors/newspaper_page_actor.rb +8 -0
- data/app/actors/hyrax/actors/newspaper_title_actor.rb +8 -0
- data/app/actors/newspaper_works/actors/newspaper_works_upload_actor.rb +88 -0
- data/app/assets/config/newspaper_works_manifest.js +2 -0
- data/app/assets/images/newspaper_works/.keep +0 -0
- data/app/assets/javascripts/newspaper_works/autocomplete_fix.js +33 -0
- data/app/assets/javascripts/newspaper_works/ocr_search.js.erb +6 -0
- data/app/assets/javascripts/newspaper_works/thumbnail_highlights.js.erb +102 -0
- data/app/assets/javascripts/newspaper_works.js +4 -0
- data/app/assets/stylesheets/newspaper_works/_issue_search.scss +13 -0
- data/app/assets/stylesheets/newspaper_works/_issues_calendar.scss +18 -0
- data/app/assets/stylesheets/newspaper_works/_newspaper_works.scss +4 -0
- data/app/assets/stylesheets/newspaper_works/_newspapers_search.scss +38 -0
- data/app/assets/stylesheets/newspaper_works/_search_results.scss +12 -0
- data/app/controllers/hyrax/newspaper_articles_controller.rb +14 -0
- data/app/controllers/hyrax/newspaper_containers_controller.rb +14 -0
- data/app/controllers/hyrax/newspaper_issues_controller.rb +14 -0
- data/app/controllers/hyrax/newspaper_pages_controller.rb +14 -0
- data/app/controllers/hyrax/newspaper_titles_controller.rb +13 -0
- data/app/controllers/newspaper_works/newspapers_controller.rb +117 -0
- data/app/controllers/newspaper_works/newspapers_search_controller.rb +26 -0
- data/app/forms/hyrax/newspaper_article_form.rb +11 -0
- data/app/forms/hyrax/newspaper_container_form.rb +11 -0
- data/app/forms/hyrax/newspaper_issue_form.rb +11 -0
- data/app/forms/hyrax/newspaper_page_form.rb +15 -0
- data/app/forms/hyrax/newspaper_title_form.rb +12 -0
- data/app/forms/newspaper_works/newspaper_core_form_data.rb +17 -0
- data/app/helpers/hyrax/newspaper_articles_helper.rb +5 -0
- data/app/helpers/hyrax/newspaper_containers_helper.rb +5 -0
- data/app/helpers/hyrax/newspaper_issues_helper.rb +5 -0
- data/app/helpers/hyrax/newspaper_pages_helper.rb +5 -0
- data/app/helpers/newspaper_works/application_helper.rb +5 -0
- data/app/helpers/newspaper_works/breadcrumb_helper.rb +92 -0
- data/app/helpers/newspaper_works/newspaper_works_helper_behavior.rb +103 -0
- data/app/helpers/newspaper_works/newspapers_helper.rb +5 -0
- data/app/indexers/concerns/newspaper_works/indexes_full_text.rb +17 -0
- data/app/indexers/concerns/newspaper_works/indexes_place_of_publication.rb +67 -0
- data/app/indexers/concerns/newspaper_works/indexes_publication_date_range.rb +35 -0
- data/app/indexers/concerns/newspaper_works/indexes_relationships.rb +125 -0
- data/app/indexers/newspaper_article_indexer.rb +16 -0
- data/app/indexers/newspaper_container_indexer.rb +18 -0
- data/app/indexers/newspaper_issue_indexer.rb +26 -0
- data/app/indexers/newspaper_page_indexer.rb +9 -0
- data/app/indexers/newspaper_title_indexer.rb +19 -0
- data/app/indexers/newspaper_works/newspaper_core_indexer.rb +21 -0
- data/app/jobs/newspaper_works/application_job.rb +4 -0
- data/app/jobs/newspaper_works/compose_issue_pdf_job.rb +13 -0
- data/app/jobs/newspaper_works/create_issue_pages_job.rb +19 -0
- data/app/mailers/newspaper_works/application_mailer.rb +8 -0
- data/app/models/concerns/newspaper_works/blacklight_iiif_search/annotation_behavior.rb +82 -0
- data/app/models/concerns/newspaper_works/blacklight_iiif_search/search_behavior.rb +27 -0
- data/app/models/concerns/newspaper_works/newspaper_core_metadata.rb +67 -0
- data/app/models/concerns/newspaper_works/place_of_publication_behavior.rb +15 -0
- data/app/models/concerns/newspaper_works/scanned_media_metadata.rb +43 -0
- data/app/models/concerns/newspaper_works/solr/document.rb +25 -0
- data/app/models/file_set.rb +10 -0
- data/app/models/newspaper_article.rb +158 -0
- data/app/models/newspaper_container.rb +86 -0
- data/app/models/newspaper_issue.rb +115 -0
- data/app/models/newspaper_page.rb +70 -0
- data/app/models/newspaper_title.rb +111 -0
- data/app/models/newspaper_works/application_record.rb +6 -0
- data/app/models/newspaper_works/derivative_attachment.rb +8 -0
- data/app/models/newspaper_works/ingest_file_relation.rb +14 -0
- data/app/presenters/hyrax/newspaper_article_presenter.rb +38 -0
- data/app/presenters/hyrax/newspaper_container_presenter.rb +11 -0
- data/app/presenters/hyrax/newspaper_issue_presenter.rb +62 -0
- data/app/presenters/hyrax/newspaper_page_presenter.rb +72 -0
- data/app/presenters/hyrax/newspaper_title_presenter.rb +86 -0
- data/app/presenters/newspaper_works/iiif_manifest_presenter_behavior.rb +29 -0
- data/app/presenters/newspaper_works/issue_info_presenter.rb +29 -0
- data/app/presenters/newspaper_works/newspaper_core_presenter.rb +9 -0
- data/app/presenters/newspaper_works/persistent_url_presenter_behavior.rb +16 -0
- data/app/presenters/newspaper_works/place_of_publication_presenter_behavior.rb +8 -0
- data/app/presenters/newspaper_works/scanned_media_presenter.rb +7 -0
- data/app/presenters/newspaper_works/title_info_presenter.rb +13 -0
- data/app/search_builders/concerns/newspaper_works/exclude_models.rb +16 -0
- data/app/search_builders/concerns/newspaper_works/highlight_search_params.rb +14 -0
- data/app/search_builders/newspaper_works/newspapers_search_builder.rb +26 -0
- data/app/services/hyrax/article_genre_service.rb +9 -0
- data/app/services/newspaper_works/jp2_derivative_service.rb +120 -0
- data/app/services/newspaper_works/newspaper_page_derivative_service.rb +91 -0
- data/app/services/newspaper_works/pdf_derivative_service.rb +45 -0
- data/app/services/newspaper_works/pluggable_derivative_service.rb +114 -0
- data/app/services/newspaper_works/text_extraction_derivative_service.rb +56 -0
- data/app/services/newspaper_works/text_formats_from_alto_service.rb +77 -0
- data/app/services/newspaper_works/tiff_derivative_service.rb +54 -0
- data/app/validators/newspaper_works/publication_date_start_end_validator.rb +48 -0
- data/app/validators/newspaper_works/publication_date_validator.rb +16 -0
- data/app/views/catalog/_index_gallery_newspaper_article_wrapper.html.erb +9 -0
- data/app/views/catalog/_index_gallery_newspaper_page_wrapper.html.erb +9 -0
- data/app/views/catalog/_index_header_gallery_newspaper_article.html.erb +23 -0
- data/app/views/catalog/_index_header_gallery_newspaper_page.html.erb +23 -0
- data/app/views/catalog/_index_header_list_newspaper_article.html.erb +7 -0
- data/app/views/catalog/_index_header_list_newspaper_page.html.erb +7 -0
- data/app/views/catalog/_snippets_more.html.erb +16 -0
- data/app/views/catalog/_thumbnail_list_newspaper_article.html.erb +6 -0
- data/app/views/catalog/_thumbnail_list_newspaper_page.html.erb +6 -0
- data/app/views/hyrax/file_sets/_actions.html.erb +45 -0
- data/app/views/hyrax/newspaper_articles/_newspaper_article.html.erb +2 -0
- data/app/views/hyrax/newspaper_articles/show.html.erb +1 -0
- data/app/views/hyrax/newspaper_containers/_newspaper_container.html.erb +2 -0
- data/app/views/hyrax/newspaper_containers/show.html.erb +1 -0
- data/app/views/hyrax/newspaper_issues/_newspaper_issue.html.erb +2 -0
- data/app/views/hyrax/newspaper_issues/show.html.erb +1 -0
- data/app/views/hyrax/newspaper_pages/_newspaper_page.html.erb +2 -0
- data/app/views/hyrax/newspaper_pages/show.html.erb +1 -0
- data/app/views/hyrax/newspaper_titles/_all_front_pages_form.html.erb +5 -0
- data/app/views/hyrax/newspaper_titles/_issue_search_form.html.erb +33 -0
- data/app/views/hyrax/newspaper_titles/_issues_calendar.html.erb +63 -0
- data/app/views/hyrax/newspaper_titles/_newspaper_title.html.erb +2 -0
- data/app/views/hyrax/newspaper_titles/show.html.erb +54 -0
- data/app/views/newspaper_works/base/_attribute_rows.html.erb +42 -0
- data/app/views/newspaper_works/base/_attributes.html.erb +16 -0
- data/app/views/newspaper_works/base/_metadata.html.erb +6 -0
- data/app/views/newspaper_works/base/_newspaper_hierarchy.html.erb +14 -0
- data/app/views/newspaper_works/base/_persistent_url.html.erb +1 -0
- data/app/views/newspaper_works/base/_show.html.erb +45 -0
- data/app/views/newspaper_works/newspapers_search/_date_fields.html.erb +29 -0
- data/app/views/newspaper_works/newspapers_search/_facet_layout.html.erb +8 -0
- data/app/views/newspaper_works/newspapers_search/_facet_limit.html.erb +17 -0
- data/app/views/newspaper_works/newspapers_search/_front_pages_input.html.erb +5 -0
- data/app/views/newspaper_works/newspapers_search/_keyword_input.html.erb +18 -0
- data/app/views/newspaper_works/newspapers_search/_newspapers_facets.html.erb +5 -0
- data/app/views/newspaper_works/newspapers_search/_newspapers_search_form.html.erb +13 -0
- data/app/views/newspaper_works/newspapers_search/_newspapers_search_help.html.erb +8 -0
- data/app/views/newspaper_works/newspapers_search/search.html.erb +13 -0
- data/app/views/records/edit_fields/_alternate_title.html.erb +4 -0
- data/app/views/records/edit_fields/_genre.html.erb +4 -0
- data/app/views/records/edit_fields/_place_of_publication.html.erb +14 -0
- data/app/views/records/edit_fields/_subtitle.html.erb +4 -0
- data/bin/rails +13 -0
- data/config/fcrepo_wrapper_test.yml +5 -0
- data/config/initializers/assets.rb +2 -0
- data/config/locales/newspaper_article.de.yml +12 -0
- data/config/locales/newspaper_article.en.yml +12 -0
- data/config/locales/newspaper_article.es.yml +12 -0
- data/config/locales/newspaper_article.fr.yml +12 -0
- data/config/locales/newspaper_article.it.yml +12 -0
- data/config/locales/newspaper_article.pt-BR.yml +12 -0
- data/config/locales/newspaper_article.zh.yml +12 -0
- data/config/locales/newspaper_container.de.yml +8 -0
- data/config/locales/newspaper_container.en.yml +8 -0
- data/config/locales/newspaper_container.es.yml +8 -0
- data/config/locales/newspaper_container.fr.yml +8 -0
- data/config/locales/newspaper_container.it.yml +8 -0
- data/config/locales/newspaper_container.pt-BR.yml +8 -0
- data/config/locales/newspaper_container.zh.yml +8 -0
- data/config/locales/newspaper_issue.de.yml +8 -0
- data/config/locales/newspaper_issue.en.yml +8 -0
- data/config/locales/newspaper_issue.es.yml +8 -0
- data/config/locales/newspaper_issue.fr.yml +8 -0
- data/config/locales/newspaper_issue.it.yml +8 -0
- data/config/locales/newspaper_issue.pt-BR.yml +8 -0
- data/config/locales/newspaper_issue.zh.yml +8 -0
- data/config/locales/newspaper_page.de.yml +15 -0
- data/config/locales/newspaper_page.en.yml +15 -0
- data/config/locales/newspaper_page.es.yml +15 -0
- data/config/locales/newspaper_page.fr.yml +15 -0
- data/config/locales/newspaper_page.it.yml +15 -0
- data/config/locales/newspaper_page.pt-BR.yml +15 -0
- data/config/locales/newspaper_page.zh.yml +15 -0
- data/config/locales/newspaper_title.de.yml +8 -0
- data/config/locales/newspaper_title.en.yml +8 -0
- data/config/locales/newspaper_title.es.yml +8 -0
- data/config/locales/newspaper_title.fr.yml +8 -0
- data/config/locales/newspaper_title.it.yml +8 -0
- data/config/locales/newspaper_title.pt-BR.yml +8 -0
- data/config/locales/newspaper_title.zh.yml +8 -0
- data/config/locales/newspaper_works.de.yml +50 -0
- data/config/locales/newspaper_works.en.yml +52 -0
- data/config/locales/newspaper_works.es.yml +52 -0
- data/config/locales/newspaper_works.fr.yml +52 -0
- data/config/locales/newspaper_works.it.yml +52 -0
- data/config/locales/newspaper_works.pt-BR.yml +52 -0
- data/config/locales/newspaper_works.zh.yml +52 -0
- data/config/routes.rb +9 -0
- data/config/solr_wrapper_test.yml +9 -0
- data/config/test-fixture/solr-config/_rest_managed.json +3 -0
- data/config/test-fixture/solr-config/admin-extra.html +31 -0
- data/config/test-fixture/solr-config/elevate.xml +36 -0
- data/config/test-fixture/solr-config/mapping-ISOLatin1Accent.txt +246 -0
- data/config/test-fixture/solr-config/protwords.txt +21 -0
- data/config/test-fixture/solr-config/schema.xml +366 -0
- data/config/test-fixture/solr-config/scripts.conf +24 -0
- data/config/test-fixture/solr-config/solrconfig.xml +322 -0
- data/config/test-fixture/solr-config/spellings.txt +2 -0
- data/config/test-fixture/solr-config/stopwords.txt +58 -0
- data/config/test-fixture/solr-config/stopwords_en.txt +58 -0
- data/config/test-fixture/solr-config/synonyms.txt +31 -0
- data/config/test-fixture/solr-config/xslt/example.xsl +132 -0
- data/config/test-fixture/solr-config/xslt/example_atom.xsl +67 -0
- data/config/test-fixture/solr-config/xslt/example_rss.xsl +66 -0
- data/config/test-fixture/solr-config/xslt/luke.xsl +337 -0
- data/config/vendor/imagemagick-6-policy.xml +76 -0
- data/db/migrate/20181214181358_create_newspaper_works_derivative_attachments.rb +12 -0
- data/db/migrate/20190107165909_create_newspaper_works_ingest_file_relations.rb +11 -0
- data/lib/generators/newspaper_works/assets_generator.rb +29 -0
- data/lib/generators/newspaper_works/blacklight_advanced_search_generator.rb +44 -0
- data/lib/generators/newspaper_works/blacklight_iiif_search_generator.rb +41 -0
- data/lib/generators/newspaper_works/catalog_controller_generator.rb +60 -0
- data/lib/generators/newspaper_works/install_generator.rb +97 -0
- data/lib/generators/newspaper_works/templates/annotation_behavior.rb +6 -0
- data/lib/generators/newspaper_works/templates/config/authorities/newspaper_article_genres.yml +86 -0
- data/lib/generators/newspaper_works/templates/config/initializers/newspaper_works.rb +12 -0
- data/lib/generators/newspaper_works/templates/config/initializers/patch_blacklight_advanced_search.rb +74 -0
- data/lib/generators/newspaper_works/templates/custom_search_builder.rb +23 -0
- data/lib/generators/newspaper_works/templates/newspaper_works.scss +1 -0
- data/lib/generators/newspaper_works/templates/newspaper_works_helper.rb +3 -0
- data/lib/generators/newspaper_works/templates/search_behavior.rb +6 -0
- data/lib/newspaper_works/configuration.rb +14 -0
- data/lib/newspaper_works/data/fileset_helper.rb +25 -0
- data/lib/newspaper_works/data/path_helper.rb +40 -0
- data/lib/newspaper_works/data/work_derivatives.rb +314 -0
- data/lib/newspaper_works/data/work_file.rb +92 -0
- data/lib/newspaper_works/data/work_files.rb +181 -0
- data/lib/newspaper_works/data.rb +35 -0
- data/lib/newspaper_works/engine.rb +42 -0
- data/lib/newspaper_works/errors.rb +14 -0
- data/lib/newspaper_works/ingest/base_ingest.rb +69 -0
- data/lib/newspaper_works/ingest/base_publication_info.rb +35 -0
- data/lib/newspaper_works/ingest/batch_ingest_helper.rb +44 -0
- data/lib/newspaper_works/ingest/batch_issue_ingester.rb +129 -0
- data/lib/newspaper_works/ingest/chronam_publication_info.rb +133 -0
- data/lib/newspaper_works/ingest/from_command.rb +52 -0
- data/lib/newspaper_works/ingest/image_ingest_issues.rb +43 -0
- data/lib/newspaper_works/ingest/issue_images.rb +51 -0
- data/lib/newspaper_works/ingest/lc_publication_info.rb +144 -0
- data/lib/newspaper_works/ingest/named_issue_metadata.rb +60 -0
- data/lib/newspaper_works/ingest/ndnp/batch_ingester.rb +64 -0
- data/lib/newspaper_works/ingest/ndnp/batch_xml_ingest.rb +72 -0
- data/lib/newspaper_works/ingest/ndnp/container_ingest.rb +99 -0
- data/lib/newspaper_works/ingest/ndnp/container_ingester.rb +84 -0
- data/lib/newspaper_works/ingest/ndnp/container_metadata.rb +87 -0
- data/lib/newspaper_works/ingest/ndnp/issue_ingest.rb +81 -0
- data/lib/newspaper_works/ingest/ndnp/issue_ingester.rb +101 -0
- data/lib/newspaper_works/ingest/ndnp/issue_metadata.rb +96 -0
- data/lib/newspaper_works/ingest/ndnp/ndnp_asset_helper.rb +20 -0
- data/lib/newspaper_works/ingest/ndnp/ndnp_mets_helper.rb +70 -0
- data/lib/newspaper_works/ingest/ndnp/page_ingest.rb +47 -0
- data/lib/newspaper_works/ingest/ndnp/page_ingester.rb +157 -0
- data/lib/newspaper_works/ingest/ndnp/page_metadata.rb +112 -0
- data/lib/newspaper_works/ingest/ndnp.rb +21 -0
- data/lib/newspaper_works/ingest/newspaper_issue_ingest.rb +56 -0
- data/lib/newspaper_works/ingest/newspaper_page_ingest.rb +6 -0
- data/lib/newspaper_works/ingest/page_image.rb +52 -0
- data/lib/newspaper_works/ingest/path_enumeration.rb +52 -0
- data/lib/newspaper_works/ingest/pdf_images.rb +85 -0
- data/lib/newspaper_works/ingest/pdf_issue.rb +20 -0
- data/lib/newspaper_works/ingest/pdf_issues.rb +39 -0
- data/lib/newspaper_works/ingest/pdf_pages.rb +114 -0
- data/lib/newspaper_works/ingest/pub_finder.rb +89 -0
- data/lib/newspaper_works/ingest/publication_info.rb +44 -0
- data/lib/newspaper_works/ingest.rb +90 -0
- data/lib/newspaper_works/issue_pdf_composer.rb +111 -0
- data/lib/newspaper_works/logging.rb +54 -0
- data/lib/newspaper_works/page_finder.rb +62 -0
- data/lib/newspaper_works/resource_fetcher.rb +78 -0
- data/lib/newspaper_works/text_extraction/alto_reader.rb +122 -0
- data/lib/newspaper_works/text_extraction/page_ocr.rb +100 -0
- data/lib/newspaper_works/text_extraction/render_alto.rb +84 -0
- data/lib/newspaper_works/text_extraction/word_coords_builder.rb +30 -0
- data/lib/newspaper_works/text_extraction.rb +10 -0
- data/lib/newspaper_works/version.rb +3 -0
- data/lib/newspaper_works.rb +19 -0
- data/lib/tasks/newspaper_works_tasks.rake +39 -0
- data/newspaper_works.gemspec +49 -0
- data/spec/.keep.txt +1 -0
- data/spec/actors/newspaper_works/actors/newspaper_works_upload_actor_spec.rb +69 -0
- data/spec/controllers/catalog_controller_spec.rb +63 -0
- data/spec/controllers/newspaper_works/newspapers_controller_spec.rb +114 -0
- data/spec/controllers/newspaper_works/newspapers_search_controller_spec.rb +21 -0
- data/spec/factories/ability.rb +6 -0
- data/spec/factories/newspaper_issue.rb +7 -0
- data/spec/factories/newspaper_issue_ingest.rb +6 -0
- data/spec/factories/newspaper_page.rb +7 -0
- data/spec/factories/newspaper_page_ingest.rb +6 -0
- data/spec/factories/newspaper_page_solr_document.rb +12 -0
- data/spec/factories/newspaper_title.rb +8 -0
- data/spec/factories/uploaded_pdf_file.rb +9 -0
- data/spec/factories/user.rb +13 -0
- data/spec/features/front_pages_for_title_spec.rb +19 -0
- data/spec/features/newspaper_title_search_spec.rb +30 -0
- data/spec/features/newspapers_search_spec.rb +49 -0
- data/spec/features/search_results_thumbnail_highlights_spec.rb +33 -0
- data/spec/features_shared.rb +71 -0
- data/spec/fixtures/files/4.1.07.jp2 +0 -0
- data/spec/fixtures/files/4.1.07.tiff +0 -0
- data/spec/fixtures/files/README.md +7 -0
- data/spec/fixtures/files/alto-2-0.xsd +714 -0
- data/spec/fixtures/files/broken-truncated.pdf +0 -0
- data/spec/fixtures/files/credits.md +16 -0
- data/spec/fixtures/files/lowres-gray-via-ndnp-sample.tiff +0 -0
- data/spec/fixtures/files/minimal-1-page.pdf +0 -0
- data/spec/fixtures/files/minimal-2-page.pdf +0 -0
- data/spec/fixtures/files/minimal-alto.xml +31 -0
- data/spec/fixtures/files/ndnp-alto-sample.xml +24 -0
- data/spec/fixtures/files/ndnp-sample1-json.json +1 -0
- data/spec/fixtures/files/ndnp-sample1-txt.txt +1 -0
- data/spec/fixtures/files/ndnp-sample1.pdf +0 -0
- data/spec/fixtures/files/ocr_alto.xml +202 -0
- data/spec/fixtures/files/ocr_alto_scaled_4pts_per_px.xml +202 -0
- data/spec/fixtures/files/ocr_color.tiff +0 -0
- data/spec/fixtures/files/ocr_gray.jp2 +0 -0
- data/spec/fixtures/files/ocr_gray.tiff +0 -0
- data/spec/fixtures/files/ocr_mono.tiff +0 -0
- data/spec/fixtures/files/page1.tiff +0 -0
- data/spec/fixtures/files/resource_mocks/chronam/http404-expected +0 -0
- data/spec/fixtures/files/resource_mocks/chronam/sn84038814.rdf +1028 -0
- data/spec/fixtures/files/resource_mocks/chronam/sn93059126.rdf +36 -0
- data/spec/fixtures/files/resource_mocks/chronam/sn94051019.rdf +37 -0
- data/spec/fixtures/files/resource_mocks/geonames/Chicopee +1104 -0
- data/spec/fixtures/files/resource_mocks/geonames/Denver +1104 -0
- data/spec/fixtures/files/resource_mocks/geonames/Marysville +279 -0
- data/spec/fixtures/files/resource_mocks/geonames/Marysville2 +279 -0
- data/spec/fixtures/files/resource_mocks/geonames/SLC +1104 -0
- data/spec/fixtures/files/resource_mocks/lccn/sn2099999999 +1 -0
- data/spec/fixtures/files/resource_mocks/lccn/sn82014496 +2 -0
- data/spec/fixtures/files/resource_mocks/lccn/sn83020109 +1 -0
- data/spec/fixtures/files/resource_mocks/lccn/sn83021453 +2 -0
- data/spec/fixtures/files/resource_mocks/lccn/sn83045396 +2 -0
- data/spec/fixtures/files/resource_mocks/lccn/sn84038814 +2 -0
- data/spec/fixtures/files/resource_mocks/lccn/sn93059126 +1 -0
- data/spec/fixtures/files/resource_mocks/lccn/sn94051019 +1 -0
- data/spec/fixtures/files/resource_mocks/lccn/sn99999999 +1 -0
- data/spec/fixtures/files/resource_mocks/urls.json +82 -0
- data/spec/fixtures/files/sample-4page-issue.pdf +0 -0
- data/spec/fixtures/files/sample-color-newsletter.pdf +0 -0
- data/spec/fixtures/files/thumbnail.jpg +0 -0
- data/spec/forms/hyrax/newspaper_article_form_spec.rb +33 -0
- data/spec/forms/hyrax/newspaper_container_form_spec.rb +30 -0
- data/spec/forms/hyrax/newspaper_issue_form_spec.rb +31 -0
- data/spec/forms/hyrax/newspaper_page_form_spec.rb +28 -0
- data/spec/forms/hyrax/newspaper_title_form_spec.rb +31 -0
- data/spec/forms/newspaper_works/newspaper_core_form_data_spec.rb +12 -0
- data/spec/helpers/newspaper_works/breadcrumb_helper_spec.rb +82 -0
- data/spec/helpers/newspaper_works_helper_spec.rb +57 -0
- data/spec/indexers/concerns/newspaper_works/indexes_full_text_spec.rb +31 -0
- data/spec/indexers/concerns/newspaper_works/indexes_place_of_publication_spec.rb +53 -0
- data/spec/indexers/concerns/newspaper_works/indexes_publication_date_range_spec.rb +39 -0
- data/spec/indexers/concerns/newspaper_works/indexes_relationships_spec.rb +86 -0
- data/spec/indexers/newspaper_article_indexer_spec.rb +29 -0
- data/spec/indexers/newspaper_issue_indexer_spec.rb +19 -0
- data/spec/indexers/newspaper_title_indexer_spec.rb +22 -0
- data/spec/indexers/newspaper_works/newspaper_core_indexer_spec.rb +23 -0
- data/spec/lib/newspaper_works/configuration_spec.rb +18 -0
- data/spec/lib/newspaper_works/data/work_derivatives_spec.rb +245 -0
- data/spec/lib/newspaper_works/data/work_file_spec.rb +99 -0
- data/spec/lib/newspaper_works/data/work_files_spec.rb +224 -0
- data/spec/lib/newspaper_works/ingest/batch_issue_ingester_spec.rb +158 -0
- data/spec/lib/newspaper_works/ingest/chronam_publication_info_spec.rb +35 -0
- data/spec/lib/newspaper_works/ingest/from_command_spec.rb +75 -0
- data/spec/lib/newspaper_works/ingest/image_ingest_issues_spec.rb +62 -0
- data/spec/lib/newspaper_works/ingest/ingest_shared.rb +75 -0
- data/spec/lib/newspaper_works/ingest/issue_images_spec.rb +65 -0
- data/spec/lib/newspaper_works/ingest/lc_publication_info_spec.rb +34 -0
- data/spec/lib/newspaper_works/ingest/ndnp/batch_ingester_spec.rb +131 -0
- data/spec/lib/newspaper_works/ingest/ndnp/batch_xml_ingest_spec.rb +64 -0
- data/spec/lib/newspaper_works/ingest/ndnp/container_ingest_spec.rb +44 -0
- data/spec/lib/newspaper_works/ingest/ndnp/container_ingester_spec.rb +126 -0
- data/spec/lib/newspaper_works/ingest/ndnp/container_metadata_spec.rb +36 -0
- data/spec/lib/newspaper_works/ingest/ndnp/issue_ingest_spec.rb +108 -0
- data/spec/lib/newspaper_works/ingest/ndnp/issue_ingester_spec.rb +155 -0
- data/spec/lib/newspaper_works/ingest/ndnp/issue_metadata_spec.rb +84 -0
- data/spec/lib/newspaper_works/ingest/ndnp/page_ingest_spec.rb +79 -0
- data/spec/lib/newspaper_works/ingest/ndnp/page_ingester_spec.rb +184 -0
- data/spec/lib/newspaper_works/ingest/ndnp/page_metadata_spec.rb +85 -0
- data/spec/lib/newspaper_works/ingest/newspaper_issue_ingest_spec.rb +83 -0
- data/spec/lib/newspaper_works/ingest/newspaper_page_ingest_spec.rb +77 -0
- data/spec/lib/newspaper_works/ingest/page_image_spec.rb +29 -0
- data/spec/lib/newspaper_works/ingest/pdf_images_spec.rb +32 -0
- data/spec/lib/newspaper_works/ingest/pdf_issue_spec.rb +29 -0
- data/spec/lib/newspaper_works/ingest/pdf_issues_spec.rb +62 -0
- data/spec/lib/newspaper_works/ingest/pdf_pages_spec.rb +110 -0
- data/spec/lib/newspaper_works/ingest/pub_finder_spec.rb +58 -0
- data/spec/lib/newspaper_works/ingest/publication_info_spec.rb +61 -0
- data/spec/lib/newspaper_works/ingest_spec.rb +45 -0
- data/spec/lib/newspaper_works/issue_pdf_composer_spec.rb +101 -0
- data/spec/lib/newspaper_works/logging_spec.rb +53 -0
- data/spec/lib/newspaper_works/page_finder_spec.rb +53 -0
- data/spec/lib/newspaper_works/resource_fetcher_spec.rb +65 -0
- data/spec/lib/newspaper_works/text_extraction/alto_reader_spec.rb +49 -0
- data/spec/lib/newspaper_works/text_extraction/page_ocr_spec.rb +84 -0
- data/spec/lib/newspaper_works/text_extraction/render_alto_spec.rb +54 -0
- data/spec/lib/newspaper_works/text_extraction/word_coords_builder_spec.rb +30 -0
- data/spec/lib/tasks/newspaper_works_rake_spec.rb +124 -0
- data/spec/misc_shared.rb +109 -0
- data/spec/model_shared.rb +134 -0
- data/spec/models/concerns/newspaper_works/blacklight_iiif_search/annotation_behavior_spec.rb +45 -0
- data/spec/models/concerns/newspaper_works/blacklight_iiif_search/search_behavior_spec.rb +27 -0
- data/spec/models/concerns/newspaper_works/newspaper_core_metadata_spec.rb +45 -0
- data/spec/models/concerns/newspaper_works/place_of_publication_behavior_spec.rb +17 -0
- data/spec/models/concerns/newspaper_works/scanned_media_metadata_spec.rb +35 -0
- data/spec/models/newspaper_article_spec.rb +73 -0
- data/spec/models/newspaper_container_spec.rb +111 -0
- data/spec/models/newspaper_issue_spec.rb +91 -0
- data/spec/models/newspaper_page_spec.rb +44 -0
- data/spec/models/newspaper_title_spec.rb +116 -0
- data/spec/models/newspaper_works/derivative_attachment_spec.rb +37 -0
- data/spec/models/newspaper_works/ingest_file_relation_spec.rb +56 -0
- data/spec/models/solr_document_spec.rb +14 -0
- data/spec/ndnp_shared.rb +48 -0
- data/spec/presenters/hyrax/newspaper_article_presenter_spec.rb +53 -0
- data/spec/presenters/hyrax/newspaper_container_presenter_spec.rb +20 -0
- data/spec/presenters/hyrax/newspaper_issue_presenter_spec.rb +65 -0
- data/spec/presenters/hyrax/newspaper_page_presenter_spec.rb +75 -0
- data/spec/presenters/hyrax/newspaper_title_presenter_spec.rb +153 -0
- data/spec/presenters/newspaper_works/iiif_manifest_presenter_behavior_spec.rb +32 -0
- data/spec/presenters/newspaper_works/issue_info_presenter_spec.rb +51 -0
- data/spec/presenters/newspaper_works/newspaper_core_presenter_spec.rb +22 -0
- data/spec/presenters/newspaper_works/persistent_url_presenter_behavior_spec.rb +24 -0
- data/spec/presenters/newspaper_works/place_of_publication_presenter_behavior_spec.rb +17 -0
- data/spec/presenters/newspaper_works/scanned_media_presenter_spec.rb +18 -0
- data/spec/presenters/newspaper_works/title_info_presenter_spec.rb +23 -0
- data/spec/routing/route_spec.rb +52 -0
- data/spec/search_builders/custom_search_builder_spec.rb +34 -0
- data/spec/search_builders/newspaper_works/newspapers_search_builder_spec.rb +33 -0
- data/spec/services/hyrax/article_genre_service_spec.rb +12 -0
- data/spec/services/hyrax/resource_types_service_spec.rb +12 -0
- data/spec/services/newspaper_works/jp2_derivative_service_spec.rb +62 -0
- data/spec/services/newspaper_works/newspaper_page_derivative_service_spec.rb +125 -0
- data/spec/services/newspaper_works/pdf_derivative_service_spec.rb +62 -0
- data/spec/services/newspaper_works/pluggable_derivative_service_spec.rb +204 -0
- data/spec/services/newspaper_works/text_extraction_derivative_service_spec.rb +82 -0
- data/spec/services/newspaper_works/text_formats_from_alto_service_spec.rb +129 -0
- data/spec/services/newspaper_works/tiff_derivative_service_spec.rb +58 -0
- data/spec/spec_helper.rb +261 -0
- data/spec/support/controller_level_helpers.rb +28 -0
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +22 -0
- data/spec/views/catalog/_index_gallery_newspaper_page_wrapper.html.erb_spec.rb +36 -0
- data/spec/views/catalog/_index_header_list_newspaper_page.html.erb_spec.rb +26 -0
- data/spec/views/catalog/_thumbnail_list_newspaper_page.html.erb_spec.rb +35 -0
- data/spec/views/hyrax/newspaper_titles/_all_front_pages_form.html.erb_spec.rb +16 -0
- data/spec/views/hyrax/newspaper_titles/_issue_search_form.html.erb_spec.rb +33 -0
- data/spec/views/hyrax/newspaper_titles/_issues_calendar.html.erb_spec.rb +37 -0
- data/spec/views/hyrax/newspaper_titles/show.html.erb_spec.rb +87 -0
- data/spec/views/newspaper_works/base/_attribute_rows.html.erb_spec.rb +60 -0
- data/spec/views/newspaper_works/base/_newspaper_hierarchy.html.erb_spec.rb +80 -0
- data/spec/views/newspaper_works/base/_show.html.erb_spec.rb +78 -0
- data/spec/views/newspaper_works/newspapers_search/search.html.erb_spec.rb +54 -0
- data/spec/views/records/edit_fields/_place_of_publication.html.erb_spec.rb +26 -0
- data/tasks/newspaperworks_dev.rake +26 -0
- data/test/integration/navigation_test.rb +7 -0
- data/test/lib/generators/newspaper_works/install_generator_test.rb +16 -0
- data/test/newspaper_works_test.rb +7 -0
- data/test/test_helper.rb +17 -0
- data/tmp/.keep +0 -0
- metadata +1037 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# adds controller-scope behavior to the implementing application
|
|
2
|
+
require 'rails/generators'
|
|
3
|
+
|
|
4
|
+
module NewspaperWorks
|
|
5
|
+
class CatalogControllerGenerator < Rails::Generators::Base
|
|
6
|
+
source_root File.expand_path('../templates', __FILE__)
|
|
7
|
+
|
|
8
|
+
desc "
|
|
9
|
+
This generator makes the following changes to your app:
|
|
10
|
+
1. Adds index fields in CatalogController
|
|
11
|
+
2. Adds facet fields in CatalogController
|
|
12
|
+
3. Adds sort fields in CatalogController
|
|
13
|
+
"
|
|
14
|
+
|
|
15
|
+
def add_index_fields_to_catalog_controller
|
|
16
|
+
marker = 'configure_blacklight do |config|'
|
|
17
|
+
inject_into_file 'app/controllers/catalog_controller.rb', after: marker do
|
|
18
|
+
"\n\n # NewspaperWorks index fields\n"\
|
|
19
|
+
" config.add_index_field 'publication_title_ssi', label: I18n.t('newspaper_works.attributes.publication_title.label'), link_to_search: 'publication_title_ssi'\n"\
|
|
20
|
+
" config.add_index_field solr_name('publication_date', :stored_sortable, type: :date), label: 'Publication date', helper_method: :human_readable_date\n"\
|
|
21
|
+
" config.add_index_field solr_name('place_of_publication_label', :stored_searchable), label: I18n.t('newspaper_works.attributes.place_of_publication.label'), link_to_search: solr_name('place_of_publication_label', :facetable)\n"\
|
|
22
|
+
" config.add_index_field solr_name('publication_date_start', :stored_sortable, type: :date), label: 'Publication date (start)', helper_method: :human_readable_date\n"\
|
|
23
|
+
" config.add_index_field solr_name('publication_date_end', :stored_sortable, type: :date), label: 'Publication date (end)', helper_method: :human_readable_date\n"\
|
|
24
|
+
" config.add_index_field 'all_text_tsimv', highlight: true, helper_method: :render_ocr_snippets\n"
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def add_facets_to_catalog_controller
|
|
29
|
+
marker = 'configure_blacklight do |config|'
|
|
30
|
+
inject_into_file 'app/controllers/catalog_controller.rb', after: marker do
|
|
31
|
+
"\n\n # NewspaperWorks facet fields\n"\
|
|
32
|
+
" config.add_facet_field solr_name('place_of_publication_city', :facetable), label: 'Place of publication', limit: 5\n"\
|
|
33
|
+
" config.add_facet_field 'publication_title_ssi', label: 'Publication title', limit: 5\n"\
|
|
34
|
+
" config.add_facet_field solr_name('genre', :facetable), label: 'Article type', limit: 5\n\n"\
|
|
35
|
+
" # additional NewspaperWorks fields not displayed in the facet list,\n"\
|
|
36
|
+
" # but below definitions give labels to filters for linked metadata\n"\
|
|
37
|
+
" config.add_facet_field solr_name('place_of_publication_label', :facetable), label: 'Place of publication', if: false\n"\
|
|
38
|
+
" config.add_facet_field solr_name('issn', :facetable), label: 'ISSN', if: false\n"\
|
|
39
|
+
" config.add_facet_field solr_name('lccn', :facetable), label: 'LCCN', if: false\n"\
|
|
40
|
+
" config.add_facet_field solr_name('oclcnum', :facetable), label: 'OCLC #', if: false\n"\
|
|
41
|
+
" config.add_facet_field solr_name('held_by', :facetable), label: 'Held by', if: false\n"\
|
|
42
|
+
" config.add_facet_field solr_name('author', :facetable), label: 'Author', if: false\n"\
|
|
43
|
+
" config.add_facet_field solr_name('photographer', :facetable), label: 'Photographer', if: false\n"\
|
|
44
|
+
" config.add_facet_field solr_name('geographic_coverage', :facetable), label: 'Geographic coverage', if: false\n"\
|
|
45
|
+
" config.add_facet_field solr_name('preceded_by', :facetable), label: 'Preceded by', if: false\n"\
|
|
46
|
+
" config.add_facet_field solr_name('succeeded_by', :facetable), label: 'Succeeded by', if: false\n"\
|
|
47
|
+
" config.add_facet_field 'first_page_bsi', label: 'First page', if: false\n"
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def add_pubdate_sort_to_catalog_controller
|
|
52
|
+
marker = 'config.add_sort_field "#{modified_field} asc", label: "date modified \u25B2"'
|
|
53
|
+
inject_into_file 'app/controllers/catalog_controller.rb', after: marker do
|
|
54
|
+
"\n\n # NewspaperWorks sort fields\n"\
|
|
55
|
+
' config.add_sort_field "publication_date_dtsi desc", label: "publication date \u25BC"
|
|
56
|
+
config.add_sort_field "publication_date_dtsi asc", label: "publication date \u25B2"'
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
require 'rails/generators'
|
|
2
|
+
|
|
3
|
+
module NewspaperWorks
|
|
4
|
+
# Install Generator Class
|
|
5
|
+
class InstallGenerator < Rails::Generators::Base
|
|
6
|
+
source_root File.expand_path('../templates', __FILE__)
|
|
7
|
+
|
|
8
|
+
def copy_migrations
|
|
9
|
+
rake "newspaper_works:install:migrations"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def register_worktypes
|
|
13
|
+
inject_into_file 'config/initializers/hyrax.rb',
|
|
14
|
+
after: "Hyrax.config do |config|\n" do
|
|
15
|
+
" # Configuration generated by `rails g newspaper_works:install`\n" \
|
|
16
|
+
" config.register_curation_concern :newspaper_article\n" \
|
|
17
|
+
" config.register_curation_concern :newspaper_container\n" \
|
|
18
|
+
" config.register_curation_concern :newspaper_issue\n" \
|
|
19
|
+
" config.register_curation_concern :newspaper_page\n" \
|
|
20
|
+
" config.register_curation_concern :newspaper_title\n" \
|
|
21
|
+
" config.callback.set(:after_create_fileset) do |file_set, user|\n" \
|
|
22
|
+
" require 'newspaper_works'\n" \
|
|
23
|
+
" NewspaperWorks::Data.handle_after_create_fileset(file_set, user)\n" \
|
|
24
|
+
" end\n" \
|
|
25
|
+
" #== END GENERATED newspaper_works CONFIG ==\n\n"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def inject_routes
|
|
30
|
+
inject_into_file 'config/routes.rb',
|
|
31
|
+
after: "Rails.application.routes.draw do\n" do
|
|
32
|
+
"\n mount NewspaperWorks::Engine => '/'\n"
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def add_solr_doc
|
|
37
|
+
inject_into_file 'app/models/solr_document.rb',
|
|
38
|
+
after: "include Hyrax::SolrDocumentBehavior" do
|
|
39
|
+
"\n include NewspaperWorks::Solr::Document\n"
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def verify_biiif_installed
|
|
44
|
+
return if IO.read('app/controllers/catalog_controller.rb').include?('include BlacklightIiifSearch::Controller')
|
|
45
|
+
say_status('info',
|
|
46
|
+
'BLACKLIGHT IIIF SEARCH NOT INSTALLED; INSTALLING BLACKLIGHT IIIF SEARCH',
|
|
47
|
+
:blue)
|
|
48
|
+
generate 'blacklight_iiif_search:install'
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def iiif_configuration
|
|
52
|
+
generate 'newspaper_works:blacklight_iiif_search'
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# NOTE: BlacklightAdvancedSearch generator installs a view partial by default,
|
|
56
|
+
# remove it after install, unless app has already customized that view partial
|
|
57
|
+
def verify_blacklight_adv_search_installed
|
|
58
|
+
return if IO.read('app/controllers/catalog_controller.rb').include?('include BlacklightAdvancedSearch::Controller')
|
|
59
|
+
say_status('info', 'INSTALLING BLACKLIGHT ADVANCED SEARCH', :blue)
|
|
60
|
+
search_form_path = 'app/views/catalog/_search_form.html.erb'
|
|
61
|
+
existing_search_form = File.exist?(search_form_path) ? true : false
|
|
62
|
+
generate 'blacklight_advanced_search:install', '--force'
|
|
63
|
+
remove_file search_form_path unless existing_search_form
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def advanced_search_configuration
|
|
67
|
+
generate 'newspaper_works:blacklight_advanced_search'
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def inject_authorities
|
|
71
|
+
inject_into_file 'config/authorities/resource_types.yml',
|
|
72
|
+
after: "term: Masters Thesis\n" do
|
|
73
|
+
" - id: Microfilm\n" \
|
|
74
|
+
" term: Microfilm\n" \
|
|
75
|
+
" - id: Newspaper\n" \
|
|
76
|
+
" term: Newspaper\n"
|
|
77
|
+
end
|
|
78
|
+
copy_file "config/authorities/newspaper_article_genres.yml"
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def catalog_controller_configuration
|
|
82
|
+
generate 'newspaper_works:catalog_controller'
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def inject_configuration
|
|
86
|
+
copy_file 'config/initializers/newspaper_works.rb'
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def add_helper
|
|
90
|
+
copy_file "newspaper_works_helper.rb", "app/helpers/newspaper_works_helper.rb"
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def inject_assets
|
|
94
|
+
generate 'newspaper_works:assets'
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# based on hyrax/lib/generators/hyrax/templates/conifg/authorities/resource_types.yml
|
|
2
|
+
terms:
|
|
3
|
+
- id: http://id.loc.gov/vocabulary/graphicMaterials/tgm000098
|
|
4
|
+
term: "Advertisement"
|
|
5
|
+
active: true
|
|
6
|
+
- id: http://cv.iptc.org/newscodes/genre/Advice
|
|
7
|
+
term: "Advice"
|
|
8
|
+
active: true
|
|
9
|
+
- id: http://cv.iptc.org/newscodes/genre/almanac
|
|
10
|
+
term: "Almanac"
|
|
11
|
+
active: true
|
|
12
|
+
- id: http://vocab.getty.edu/aat/300048715
|
|
13
|
+
term: "Article"
|
|
14
|
+
active: true
|
|
15
|
+
- id: http://vocab.getty.edu/aat/300265772
|
|
16
|
+
term: "Birth announcement"
|
|
17
|
+
active: true
|
|
18
|
+
- id: http://vocab.getty.edu/aat/300191074
|
|
19
|
+
term: "Caption"
|
|
20
|
+
active: true
|
|
21
|
+
- id: http://id.loc.gov/vocabulary/graphicMaterials/tgm001739
|
|
22
|
+
term: "Cartoon (editorial)"
|
|
23
|
+
active: true
|
|
24
|
+
- id: http://id.loc.gov/vocabulary/graphicMaterials/tgm002334
|
|
25
|
+
term: "Comics"
|
|
26
|
+
active: true
|
|
27
|
+
- id: http://vocab.getty.edu/aat/300026441
|
|
28
|
+
term: "Column"
|
|
29
|
+
active: true
|
|
30
|
+
- id: http://vocab.getty.edu/aat/300026284
|
|
31
|
+
term: "Editorial"
|
|
32
|
+
active: true
|
|
33
|
+
- id: http://cv.iptc.org/newscodes/genre/Feature
|
|
34
|
+
term: "Feature"
|
|
35
|
+
active: true
|
|
36
|
+
- id: http://cv.iptc.org/newscodes/genre/Forecast
|
|
37
|
+
term: "Forecast"
|
|
38
|
+
active: true
|
|
39
|
+
- id: http://cv.iptc.org/newscodes/genre/horoscope
|
|
40
|
+
term: "Horoscope"
|
|
41
|
+
active: true
|
|
42
|
+
- id: http://id.loc.gov/authorities/genreForms/gf2014026110
|
|
43
|
+
term: "Humor"
|
|
44
|
+
active: true
|
|
45
|
+
- id: http://id.loc.gov/vocabulary/graphicMaterials/tgm005314
|
|
46
|
+
term: "Illustration"
|
|
47
|
+
active: true
|
|
48
|
+
- id: http://vocab.getty.edu/aat/300027757
|
|
49
|
+
term: "Legal notice"
|
|
50
|
+
active: true
|
|
51
|
+
- id: http://vocab.getty.edu/aat/300343729
|
|
52
|
+
term: "Letter to the editor"
|
|
53
|
+
active: true
|
|
54
|
+
- id: http://id.loc.gov/authorities/genreForms/gf2014026415
|
|
55
|
+
term: "Literature"
|
|
56
|
+
active: true
|
|
57
|
+
- id: http://vocab.getty.edu/aat/300311565
|
|
58
|
+
term: "Masthead"
|
|
59
|
+
active: true
|
|
60
|
+
- id: http://schema.org/NewsArticle
|
|
61
|
+
term: "News article"
|
|
62
|
+
active: true
|
|
63
|
+
- id: http://cv.iptc.org/newscodes/genre/Obituary
|
|
64
|
+
term: "Obituary/Death announcement"
|
|
65
|
+
active: true
|
|
66
|
+
- id: http://cv.iptc.org/newscodes/genre/Opinion
|
|
67
|
+
term: "Opinion"
|
|
68
|
+
active: true
|
|
69
|
+
- id: http://id.loc.gov/vocabulary/graphicMaterials/tgm007721
|
|
70
|
+
term: "Photograph"
|
|
71
|
+
active: true
|
|
72
|
+
- id: http://id.loc.gov/authorities/genreForms/gf2014026158
|
|
73
|
+
term: "Puzzle/Game"
|
|
74
|
+
active: true
|
|
75
|
+
- id: http://id.loc.gov/authorities/genreForms/gf2014026168
|
|
76
|
+
term: "Review"
|
|
77
|
+
active: true
|
|
78
|
+
- id: http://id.loc.gov/vocabulary/graphicMaterials/tgm009217
|
|
79
|
+
term: "Schedule/Timetable"
|
|
80
|
+
active: true
|
|
81
|
+
- id: http://vocab.getty.edu/aat/300136681
|
|
82
|
+
term: "Shipping record"
|
|
83
|
+
active: true
|
|
84
|
+
- id: http://vocab.getty.edu/aat/300310119
|
|
85
|
+
term: "Wedding/Engagement announcement"
|
|
86
|
+
active: true
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
NewspaperWorks.config do |config|
|
|
2
|
+
# 'publication_unique_id' configs used for Chronicling America style linking
|
|
3
|
+
# e.g. First page of an issue from publication with LCCN sn86069873, from Jan. 15, 1897
|
|
4
|
+
# https://host/newspapers/sn86069873/1897-01-15/ed-1/seq-1
|
|
5
|
+
# the property that represents a unique identifier for a NewspaperTitle
|
|
6
|
+
# defaults to :lccn
|
|
7
|
+
# config.publication_unique_id_property = :lccn
|
|
8
|
+
|
|
9
|
+
# the Solr field that represents a unique identifier for a NewspaperTitle
|
|
10
|
+
# defaults to 'lccn_tesim'
|
|
11
|
+
# config.publication_unique_id_field = 'lccn_tesim'
|
|
12
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# have to override some methods from BlacklightAdvancedSearch classes/modules
|
|
2
|
+
# to provide date range search functionality
|
|
3
|
+
require BlacklightAdvancedSearch::Engine.root.join(Rails.root, 'config', 'initializers',
|
|
4
|
+
'patch_blacklight_advanced_search')
|
|
5
|
+
|
|
6
|
+
class BlacklightAdvancedSearch::QueryParser
|
|
7
|
+
# override to add date range to query
|
|
8
|
+
def process_query(params, config)
|
|
9
|
+
queries = keyword_queries.map do |field, query|
|
|
10
|
+
ParsingNesting::Tree.parse(query,
|
|
11
|
+
config.advanced_search[:query_parser]).to_query(local_param_hash(field,
|
|
12
|
+
config))
|
|
13
|
+
end
|
|
14
|
+
queries.join(" #{keyword_op} ")
|
|
15
|
+
return queries if params[:date_start].blank? && params[:date_end].blank?
|
|
16
|
+
if queries.blank?
|
|
17
|
+
add_date_range_to_queries(params)
|
|
18
|
+
else
|
|
19
|
+
[queries, add_date_range_to_queries(params)].join(' AND ')
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# format date input for Solr
|
|
24
|
+
def add_date_range_to_queries(params)
|
|
25
|
+
range_start = if params[:date_start].blank? || params[:date_start].match(/[\D]+/)
|
|
26
|
+
'*'
|
|
27
|
+
else
|
|
28
|
+
params[:date_start] + '-01-01T00:00:00.000Z'
|
|
29
|
+
end
|
|
30
|
+
range_end = if params[:date_end].blank? || params[:date_end].match(/[\D]+/)
|
|
31
|
+
'*'
|
|
32
|
+
else
|
|
33
|
+
params[:date_end] + '-12-31T23:59:59.999Z'
|
|
34
|
+
end
|
|
35
|
+
'(publication_date_dtsi:[' + range_start + ' TO ' + range_end + '])'
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
module BlacklightAdvancedSearch::RenderConstraintsOverride
|
|
40
|
+
# override to add date range to constraints rendering
|
|
41
|
+
def render_constraints_filters(my_params = params)
|
|
42
|
+
# these lines are copied from source
|
|
43
|
+
content = super(my_params)
|
|
44
|
+
if advanced_query
|
|
45
|
+
advanced_query.filters.each_pair do |field, value_list|
|
|
46
|
+
label = facet_field_label(field)
|
|
47
|
+
content << render_constraint_element(label,
|
|
48
|
+
safe_join(Array(value_list), " <strong class='text-muted constraint-connector'>OR</strong> ".html_safe),
|
|
49
|
+
remove: search_action_path(remove_advanced_filter_group(field, my_params).except(:controller, :action)))
|
|
50
|
+
end
|
|
51
|
+
# this is our new line
|
|
52
|
+
content << render_advanced_date_query(my_params)
|
|
53
|
+
end
|
|
54
|
+
content
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# render the advanced search date query constraints
|
|
58
|
+
def render_advanced_date_query(localized_params = params)
|
|
59
|
+
return ''.html_safe if localized_params[:date_start].blank? && localized_params[:date_end].blank?
|
|
60
|
+
render_constraint_element(t('blacklight.advanced_search.constraints.date'),
|
|
61
|
+
date_range_constraints_to_s(localized_params),
|
|
62
|
+
classes: ['date_range'],
|
|
63
|
+
remove: remove_constraint_url(localized_params.merge(date_start: nil,
|
|
64
|
+
date_end: nil,
|
|
65
|
+
action: 'index')))
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# render date range constraint text from Advanced Search form
|
|
69
|
+
def date_range_constraints_to_s(params)
|
|
70
|
+
return "#{params[:date_end]} or before" if params[:date_start].blank?
|
|
71
|
+
return "#{params[:date_start]} or later" if params[:date_end].blank?
|
|
72
|
+
"#{params[:date_start]}-#{params[:date_end]}"
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# custom SearchBuilder generated by NewspaperWorks; adds behavior to Hyrax::CatalogSearchBuilder:
|
|
2
|
+
# - BlacklightAdvancedSearch::AdvancedSearchBuilder, to support /newspapers_search
|
|
3
|
+
# - NewspaperWorks::HighlightSearchParams, to support highlighting and snippets in results
|
|
4
|
+
# - NewspaperWorks::ExcludeModels, to remove NewspaperTitle, NewspaperContainer,
|
|
5
|
+
# and NewspaperIssue objects from keyword searches
|
|
6
|
+
class CustomSearchBuilder < Hyrax::CatalogSearchBuilder
|
|
7
|
+
include BlacklightAdvancedSearch::AdvancedSearchBuilder
|
|
8
|
+
include NewspaperWorks::HighlightSearchParams
|
|
9
|
+
include NewspaperWorks::ExcludeModels
|
|
10
|
+
|
|
11
|
+
# :exclude_models and :highlight_search_params must be added after advanced_search
|
|
12
|
+
# so keyword query input can be properly eval'd
|
|
13
|
+
self.default_processor_chain += [:add_advanced_parse_q_to_solr, :add_advanced_search_to_solr,
|
|
14
|
+
:exclude_models, :highlight_search_params]
|
|
15
|
+
|
|
16
|
+
# add logic to BlacklightAdvancedSearch::AdvancedSearchBuilder
|
|
17
|
+
# so that date range params are recognized as advanced search
|
|
18
|
+
# rubocop:disable Naming/PredicateName
|
|
19
|
+
def is_advanced_search?
|
|
20
|
+
blacklight_params[:date_start].present? || blacklight_params[:date_end].present? || super
|
|
21
|
+
end
|
|
22
|
+
# rubocop:enable Naming/PredicateName
|
|
23
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import 'newspaper_works/newspaper_works';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module NewspaperWorks
|
|
2
|
+
class Configuration
|
|
3
|
+
# 'publication_unique_id' configs used for Chronicling America style linking
|
|
4
|
+
attr_writer :publication_unique_id_property
|
|
5
|
+
def publication_unique_id_property
|
|
6
|
+
@publication_unique_id_property || :lccn
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
attr_writer :publication_unique_id_field
|
|
10
|
+
def publication_unique_id_field
|
|
11
|
+
@publication_unique_id_field || 'lccn_tesim'
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module NewspaperWorks
|
|
2
|
+
module Data
|
|
3
|
+
# Mixin module for fileset methods for work, presumes an @work
|
|
4
|
+
# instance attribute refering to a work object
|
|
5
|
+
module FilesetHelper
|
|
6
|
+
def fileset_id
|
|
7
|
+
# if context is itself a string, presume it is a file set id
|
|
8
|
+
return @work if @work.class == String
|
|
9
|
+
# if context is not a String, presume a work or fileset context:
|
|
10
|
+
fileset.nil? ? nil : fileset.id
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def first_fileset
|
|
14
|
+
# if context is fileset id (e.g. caller is view partial) string,
|
|
15
|
+
# get the fileset from that id
|
|
16
|
+
return FileSet.find(@work) if @work.class == String
|
|
17
|
+
# if "work" context is a FileSet, not actual work, return it
|
|
18
|
+
return @work if @work.class == FileSet
|
|
19
|
+
# in most cases, get from work's members:
|
|
20
|
+
filesets = @work.members.select { |m| m.class == FileSet }
|
|
21
|
+
filesets.empty? ? nil : filesets[0]
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require 'uri'
|
|
2
|
+
|
|
3
|
+
module NewspaperWorks
|
|
4
|
+
module Data
|
|
5
|
+
# Mixin for methods related to paths on filesystem
|
|
6
|
+
module PathHelper
|
|
7
|
+
def normalize_path(path)
|
|
8
|
+
path = path.to_s
|
|
9
|
+
isuri?(path) ? path : File.expand_path(path)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def isuri?(path)
|
|
13
|
+
!path.scan(URI.regexp).empty?
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def path_to_uri(path)
|
|
17
|
+
isuri?(path) ? path : "file://#{path}"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def whitelisted_path(path)
|
|
21
|
+
Hyrax.config.whitelisted_ingest_dirs.any? do |dir|
|
|
22
|
+
path.start_with?(dir) && path.length > dir.length
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def validate_path(path)
|
|
27
|
+
# treat file URIs equivalent to local paths
|
|
28
|
+
path = File.expand_path(path.sub(/^file:\/\//, ''))
|
|
29
|
+
# make sure file exists
|
|
30
|
+
raise IOError, "Not found: #{path}" unless File.exist?(path)
|
|
31
|
+
return if whitelisted_path(path)
|
|
32
|
+
# we cannot use path if it is not whitelisted for Hyrax ingest, we
|
|
33
|
+
# would prefer to fail early vs. later+silently
|
|
34
|
+
raise SecurityError,
|
|
35
|
+
"Path specified is not configured in Hyrax ingest whitelist: " \
|
|
36
|
+
"#{path}"
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|