From c8c179eb42c2ceafb3adae1ebfa15954d2da1443 Mon Sep 17 00:00:00 2001 From: Eliot Jordan Date: Wed, 9 Sep 2026 13:35:00 -0500 Subject: [PATCH 1/3] Update PUL fixtures --- spec/fixtures/solr_documents/child-1.json | 71 +++++++++------- spec/fixtures/solr_documents/child-2.json | 71 +++++++++------- spec/fixtures/solr_documents/child-3.json | 71 +++++++++------- spec/fixtures/solr_documents/child-4.json | 71 +++++++++------- .../solr_documents/figgy-image-work.json | 57 ++++++++----- spec/fixtures/solr_documents/parent.json | 62 ++++++++------ .../princeton-restricted-wms.json | 82 +++++++++++-------- .../solr_documents/princeton_public_cog.json | 7 +- .../princeton_restricted_cog.json | 14 ++-- .../scanned-map-restricted.json | 66 +++++++++------ spec/models/solr_document_spec.rb | 2 +- spec/requests/search_field_spec.rb | 2 +- 12 files changed, 341 insertions(+), 235 deletions(-) diff --git a/spec/fixtures/solr_documents/child-1.json b/spec/fixtures/solr_documents/child-1.json index a45911f0..a6b65c7b 100644 --- a/spec/fixtures/solr_documents/child-1.json +++ b/spec/fixtures/solr_documents/child-1.json @@ -1,31 +1,44 @@ { - "geoblacklight_version": "1.0", - "dc_identifier_s": "ark:/88435/n009w382v", - "layer_slug_s": "princeton-n009w382v", - "uuid": "princeton-n009w382v", - "dc_title_s": "Fire Insurance Map of Princeton, New Jersey (Sheet 1) (1885)", - "solr_geom": "ENVELOPE(-74.68, -74.63, 40.37, 40.33)", - "dct_provenance_s": "Princeton", - "dc_rights_s": "Public", - "dc_description_s": "\"Feb. 1885.\" Oriented with the north to the upper left. Includes location map and key. Title taken from sheet 1 of 1927 map.", - "dc_creator_sm": [ - "Sanborn Map Company" - ], - "dc_language_s": "English", - "dc_publisher_s": "New York : Sanborn Map & Publishing Co., Limited, 1885.", - "dc_subject_sm": [ - "Real property—New Jersey—Princeton—Maps", - "Princeton (N.J.)—Maps" - ], - "layer_modified_dt": "2018-02-23T23:53:39Z", - "layer_id_s": "public-figgy:b6ba3091-fcf4-4d2d-9d6a-df7df5c8c588", - "dct_references_s": "{\"http://schema.org/url\":\"https://catalog.princeton.edu/catalog/4266648\",\"http://schema.org/downloadUrl\":\"https://figgy.princeton.edu/downloads/b6ba3091-fcf4-4d2d-9d6a-df7df5c8c588/file/ff89fcc8-e61b-4b27-938f-a03e63d4f5f1\",\"http://schema.org/thumbnailUrl\":\"https://figgy.princeton.edu/downloads/b6ba3091-fcf4-4d2d-9d6a-df7df5c8c588/file/0cb6b6c7-bce2-46a8-8c79-2864c7ec5459\",\"http://iiif.io/api/image\":\"https://iiif.princeton.edu/loris/figgy_prod/5a%2F20%2F58%2F5a20585db50d44959fe5ae44821fd174%2Fintermediate_file.jp2/info.json\",\"http://iiif.io/api/presentation#manifest\":\"https://figgy.princeton.edu/concern/scanned_maps/2806e4cf-effc-4827-b116-952dfe776d14/manifest\"}", - "layer_geom_type_s": "Image", - "dc_format_s": "TIFF", - "suppressed_b": true, - "dc_source_sm": [ - "princeton-1r66j405w" - ], - "call_number_s": "HMC04 (Princeton)", - "rights_statement_s": "No Known Copyright

Princeton University Library reasonably believes that the Item is not restricted by copyright or related rights, but a conclusive determination could not be made.\n
You are free to use this Item in any way that is permitted by the copyright and related rights legislation that applies to your use.

Princeton University Library claims no copyright or license governing this digital resource. It is provided for free, on a non-commercial, open-access basis, for fair-use academic and research purposes only. Anyone who claims copyright over any part of these resources and feels that they should not be presented in this manner is invited to contact Princeton University Library, who will in turn consider such concerns and make every effort to respond appropriately. We request that users reproducing this resource cite it according to the guidelines described at https://library.princeton.edu/special-collections/policies/forms-citation.\n

" + "geoblacklight_version": "1.0", + "dc_identifier_s": "ark:/88435/n009w382v", + "layer_slug_s": "princeton-n009w382v", + "uuid": "princeton-n009w382v", + "dc_title_s": "Princeton, Mercer County, New Jersey (Sheet 1)", + "solr_geom": "ENVELOPE(-74.68, -74.63, 40.37, 40.33)", + "dct_provenance_s": "Princeton", + "dc_rights_s": "Public", + "dc_description_s": "Title taken from sheet 1 of 1927 map. \"Feb. 1885.\" Includes location map and key. Oriented with the north to the upper left.", + "dc_creator_sm": [ + "Sanborn Map Company" + ], + "dc_language_s": "en", + "dc_publisher_s": "New York : Sanborn Map & Publishing Co., Limited, 1885.", + "dc_subject_sm": [ + "Real property\u2014New Jersey\u2014Princeton\u2014Maps", + "Princeton (N.J.)\u2014Maps", + "Fire insurance maps\u2014New Jersey\u2014Princeton\u20141885", + "Maps\u2014New Jersey\u2014Princeton\u20141885", + "Maps" + ], + "all_subject_sm": [ + "Real property\u2014New Jersey\u2014Princeton\u2014Maps", + "Princeton (N.J.)\u2014Maps", + "Fire insurance maps\u2014New Jersey\u2014Princeton\u20141885", + "Maps\u2014New Jersey\u2014Princeton\u20141885", + "Maps" + ], + "solr_year_i": 1885, + "layer_modified_dt": "2025-11-17T19:34:37Z", + "dct_references_s": "{\"http://schema.org/url\":\"https://catalog.princeton.edu/catalog/9942666483506421\",\"http://schema.org/downloadUrl\":\"https://figgy.princeton.edu/downloads/b6ba3091-fcf4-4d2d-9d6a-df7df5c8c588/file/ff89fcc8-e61b-4b27-938f-a03e63d4f5f1\",\"http://schema.org/thumbnailUrl\":\"https://iiif-cloud.princeton.edu/iiif/2/2b%2F7c%2F03%2F2b7c03e4d37e46c393b44992e9ad7694%2Fthumbnail/full/!400,300/0/default.png\",\"http://iiif.io/api/image\":\"https://iiif-cloud.princeton.edu/iiif/2/26%2F35%2Ffb%2F2635fb5da2074099af3c7748702ee2d0%2Fintermediate_file/info.json\",\"http://iiif.io/api/presentation#manifest\":\"https://figgy.princeton.edu/concern/scanned_maps/2806e4cf-effc-4827-b116-952dfe776d14/manifest\"}", + "layer_geom_type_s": "Image", + "layer_geom_type_sm": [ + "Image" + ], + "dc_format_s": "TIFF", + "suppressed_b": true, + "dc_source_sm": [ + "princeton-1r66j405w" + ], + "call_number_s": "HMC04 (Princeton)", + "rights_statement_s": "No Known Copyright

Princeton University Library reasonably believes that the Item is not restricted by copyright or related rights, but a conclusive determination could not be made.\n
You are free to use this Item in any way that is permitted by the copyright and related rights legislation that applies to your use.

Princeton University Library claims no copyright or license governing this digital resource. It is provided for free, on a non-commercial, open-access basis, for fair-use academic and research purposes only. Anyone who claims copyright over any part of these resources and feels that they should not be presented in this manner is invited to contact Princeton University Library, who will in turn consider such concerns and make every effort to respond appropriately. We request that users reproducing this resource cite it according to the guidelines described at https://library.princeton.edu/about/policies/special-collections-copyright-credit-and-citation-guidelines.\n

" } diff --git a/spec/fixtures/solr_documents/child-2.json b/spec/fixtures/solr_documents/child-2.json index 97bc5705..8f0c6e20 100644 --- a/spec/fixtures/solr_documents/child-2.json +++ b/spec/fixtures/solr_documents/child-2.json @@ -1,31 +1,44 @@ { - "geoblacklight_version": "1.0", - "dc_identifier_s": "ark:/88435/jq085m62x", - "layer_slug_s": "princeton-jq085m62x", - "uuid": "princeton-jq085m62x", - "dc_title_s": "Fire Insurance Map of Princeton, New Jersey (Sheet 2) (1885)", - "solr_geom": "ENVELOPE(-74.68, -74.63, 40.37, 40.33)", - "dct_provenance_s": "Princeton", - "dc_rights_s": "Public", - "dc_description_s": "\"Feb. 1885.\" Oriented with the north to the upper left. Includes location map and key. Title taken from sheet 1 of 1927 map.", - "dc_creator_sm": [ - "Sanborn Map Company" - ], - "dc_language_s": "English", - "dc_publisher_s": "New York : Sanborn Map & Publishing Co., Limited, 1885.", - "dc_subject_sm": [ - "Real property—New Jersey—Princeton—Maps", - "Princeton (N.J.)—Maps" - ], - "layer_modified_dt": "2018-02-23T23:53:41Z", - "layer_id_s": "public-figgy:db890be9-02bf-43c1-85c8-69c0684e25f6", - "dct_references_s": "{\"http://schema.org/url\":\"https://catalog.princeton.edu/catalog/4266648\",\"http://schema.org/downloadUrl\":\"https://figgy.princeton.edu/downloads/db890be9-02bf-43c1-85c8-69c0684e25f6/file/dc08e083-5044-4949-bdd1-9d16a1fef818\",\"http://schema.org/thumbnailUrl\":\"https://figgy.princeton.edu/downloads/db890be9-02bf-43c1-85c8-69c0684e25f6/file/342e2f50-c9ff-4f86-9317-f5ce331e766e\",\"http://iiif.io/api/image\":\"https://iiif.princeton.edu/loris/figgy_prod/a6%2Fb9%2Ff9%2Fa6b9f96251724546ae37ea3fa37a5e57%2Fintermediate_file.jp2/info.json\",\"http://iiif.io/api/presentation#manifest\":\"https://figgy.princeton.edu/concern/scanned_maps/68e90289-74ce-4f21-89e5-852f3e96ce35/manifest\"}", - "layer_geom_type_s": "Image", - "dc_format_s": "TIFF", - "suppressed_b": true, - "dc_source_sm": [ - "princeton-1r66j405w" - ], - "call_number_s": "HMC04 (Princeton)", - "rights_statement_s": "No Known Copyright

Princeton University Library reasonably believes that the Item is not restricted by copyright or related rights, but a conclusive determination could not be made.\n
You are free to use this Item in any way that is permitted by the copyright and related rights legislation that applies to your use.

Princeton University Library claims no copyright or license governing this digital resource. It is provided for free, on a non-commercial, open-access basis, for fair-use academic and research purposes only. Anyone who claims copyright over any part of these resources and feels that they should not be presented in this manner is invited to contact Princeton University Library, who will in turn consider such concerns and make every effort to respond appropriately. We request that users reproducing this resource cite it according to the guidelines described at https://library.princeton.edu/special-collections/policies/forms-citation.\n

" + "geoblacklight_version": "1.0", + "dc_identifier_s": "ark:/88435/jq085m62x", + "layer_slug_s": "princeton-jq085m62x", + "uuid": "princeton-jq085m62x", + "dc_title_s": "Princeton, Mercer County, New Jersey (Sheet 2)", + "solr_geom": "ENVELOPE(-74.68, -74.63, 40.37, 40.33)", + "dct_provenance_s": "Princeton", + "dc_rights_s": "Public", + "dc_description_s": "Title taken from sheet 1 of 1927 map. \"Feb. 1885.\" Includes location map and key. Oriented with the north to the upper left.", + "dc_creator_sm": [ + "Sanborn Map Company" + ], + "dc_language_s": "en", + "dc_publisher_s": "New York : Sanborn Map & Publishing Co., Limited, 1885.", + "dc_subject_sm": [ + "Real property\u2014New Jersey\u2014Princeton\u2014Maps", + "Princeton (N.J.)\u2014Maps", + "Fire insurance maps\u2014New Jersey\u2014Princeton\u20141885", + "Maps\u2014New Jersey\u2014Princeton\u20141885", + "Maps" + ], + "all_subject_sm": [ + "Real property\u2014New Jersey\u2014Princeton\u2014Maps", + "Princeton (N.J.)\u2014Maps", + "Fire insurance maps\u2014New Jersey\u2014Princeton\u20141885", + "Maps\u2014New Jersey\u2014Princeton\u20141885", + "Maps" + ], + "solr_year_i": 1885, + "layer_modified_dt": "2026-03-24T20:43:50Z", + "dct_references_s": "{\"http://schema.org/url\":\"https://catalog.princeton.edu/catalog/9942666483506421\",\"http://schema.org/downloadUrl\":\"https://figgy.princeton.edu/downloads/db890be9-02bf-43c1-85c8-69c0684e25f6/file/dc08e083-5044-4949-bdd1-9d16a1fef818\",\"http://schema.org/thumbnailUrl\":\"https://iiif-cloud.princeton.edu/iiif/2/25%2Fa1%2F28%2F25a128bf33e145f5bc2012611ce4f5ec%2Fthumbnail/full/!400,300/0/default.png\",\"http://iiif.io/api/image\":\"https://iiif-cloud.princeton.edu/iiif/2/d1%2F65%2F84%2Fd165842f4604422395914c05ea307895%2Fintermediate_file/info.json\",\"http://iiif.io/api/presentation#manifest\":\"https://figgy.princeton.edu/concern/scanned_maps/68e90289-74ce-4f21-89e5-852f3e96ce35/manifest\"}", + "layer_geom_type_s": "Image", + "layer_geom_type_sm": [ + "Image" + ], + "dc_format_s": "TIFF", + "suppressed_b": true, + "dc_source_sm": [ + "princeton-1r66j405w" + ], + "call_number_s": "HMC04 (Princeton)", + "rights_statement_s": "No Known Copyright

Princeton University Library reasonably believes that the Item is not restricted by copyright or related rights, but a conclusive determination could not be made.\n
You are free to use this Item in any way that is permitted by the copyright and related rights legislation that applies to your use.

Princeton University Library claims no copyright or license governing this digital resource. It is provided for free, on a non-commercial, open-access basis, for fair-use academic and research purposes only. Anyone who claims copyright over any part of these resources and feels that they should not be presented in this manner is invited to contact Princeton University Library, who will in turn consider such concerns and make every effort to respond appropriately. We request that users reproducing this resource cite it according to the guidelines described at https://library.princeton.edu/about/policies/special-collections-copyright-credit-and-citation-guidelines.\n

" } diff --git a/spec/fixtures/solr_documents/child-3.json b/spec/fixtures/solr_documents/child-3.json index edaa29ad..bd315cc3 100644 --- a/spec/fixtures/solr_documents/child-3.json +++ b/spec/fixtures/solr_documents/child-3.json @@ -1,31 +1,44 @@ { - "geoblacklight_version": "1.0", - "dc_identifier_s": "ark:/88435/7d278v492", - "layer_slug_s": "princeton-7d278v492", - "uuid": "princeton-7d278v492", - "dc_title_s": "Fire Insurance Map of Princeton, New Jersey (Sheet 3) (1885)", - "solr_geom": "ENVELOPE(-74.68, -74.63, 40.37, 40.33)", - "dct_provenance_s": "Princeton", - "dc_rights_s": "Public", - "dc_description_s": "\"Feb. 1885.\" Oriented with the north to the upper left. Includes location map and key. Title taken from sheet 1 of 1927 map.", - "dc_creator_sm": [ - "Sanborn Map Company" - ], - "dc_language_s": "English", - "dc_publisher_s": "New York : Sanborn Map & Publishing Co., Limited, 1885.", - "dc_subject_sm": [ - "Real property—New Jersey—Princeton—Maps", - "Princeton (N.J.)—Maps" - ], - "layer_modified_dt": "2018-02-23T23:53:44Z", - "layer_id_s": "public-figgy:0219c7ac-4ecd-417b-adf0-cc5762fb094d", - "dct_references_s": "{\"http://schema.org/url\":\"https://catalog.princeton.edu/catalog/4266648\",\"http://schema.org/downloadUrl\":\"https://figgy.princeton.edu/downloads/0219c7ac-4ecd-417b-adf0-cc5762fb094d/file/47669d52-05c8-473e-a271-8ecaa9cfed5a\",\"http://schema.org/thumbnailUrl\":\"https://figgy.princeton.edu/downloads/0219c7ac-4ecd-417b-adf0-cc5762fb094d/file/ae304b19-32c8-407f-9405-e86bf591a15a\",\"http://iiif.io/api/image\":\"https://iiif.princeton.edu/loris/figgy_prod/50%2Fc2%2F8b%2F50c28bc7c1b142c6bfbc700416915cdd%2Fintermediate_file.jp2/info.json\",\"http://iiif.io/api/presentation#manifest\":\"https://figgy.princeton.edu/concern/scanned_maps/9a65ca4a-0eb8-466f-9f80-40f8f9f1cd09/manifest\"}", - "layer_geom_type_s": "Image", - "dc_format_s": "TIFF", - "suppressed_b": true, - "dc_source_sm": [ - "princeton-1r66j405w" - ], - "call_number_s": "HMC04 (Princeton)", - "rights_statement_s": "No Known Copyright

Princeton University Library reasonably believes that the Item is not restricted by copyright or related rights, but a conclusive determination could not be made.\n
You are free to use this Item in any way that is permitted by the copyright and related rights legislation that applies to your use.

Princeton University Library claims no copyright or license governing this digital resource. It is provided for free, on a non-commercial, open-access basis, for fair-use academic and research purposes only. Anyone who claims copyright over any part of these resources and feels that they should not be presented in this manner is invited to contact Princeton University Library, who will in turn consider such concerns and make every effort to respond appropriately. We request that users reproducing this resource cite it according to the guidelines described at https://library.princeton.edu/special-collections/policies/forms-citation.\n

" + "geoblacklight_version": "1.0", + "dc_identifier_s": "ark:/88435/7d278v492", + "layer_slug_s": "princeton-7d278v492", + "uuid": "princeton-7d278v492", + "dc_title_s": "Princeton, Mercer County, New Jersey (Sheet 3)", + "solr_geom": "ENVELOPE(-74.68, -74.63, 40.37, 40.33)", + "dct_provenance_s": "Princeton", + "dc_rights_s": "Public", + "dc_description_s": "Title taken from sheet 1 of 1927 map. \"Feb. 1885.\" Includes location map and key. Oriented with the north to the upper left.", + "dc_creator_sm": [ + "Sanborn Map Company" + ], + "dc_language_s": "en", + "dc_publisher_s": "New York : Sanborn Map & Publishing Co., Limited, 1885.", + "dc_subject_sm": [ + "Real property\u2014New Jersey\u2014Princeton\u2014Maps", + "Princeton (N.J.)\u2014Maps", + "Fire insurance maps\u2014New Jersey\u2014Princeton\u20141885", + "Maps\u2014New Jersey\u2014Princeton\u20141885", + "Maps" + ], + "all_subject_sm": [ + "Real property\u2014New Jersey\u2014Princeton\u2014Maps", + "Princeton (N.J.)\u2014Maps", + "Fire insurance maps\u2014New Jersey\u2014Princeton\u20141885", + "Maps\u2014New Jersey\u2014Princeton\u20141885", + "Maps" + ], + "solr_year_i": 1885, + "layer_modified_dt": "2026-05-03T13:14:57Z", + "dct_references_s": "{\"http://schema.org/url\":\"https://catalog.princeton.edu/catalog/9942666483506421\",\"http://schema.org/downloadUrl\":\"https://figgy.princeton.edu/downloads/0219c7ac-4ecd-417b-adf0-cc5762fb094d/file/47669d52-05c8-473e-a271-8ecaa9cfed5a\",\"http://schema.org/thumbnailUrl\":\"https://iiif-cloud.princeton.edu/iiif/2/9a%2F7c%2F0c%2F9a7c0cd5c6654c7d86fcce47176a9263%2Fthumbnail/full/!400,300/0/default.png\",\"http://iiif.io/api/image\":\"https://iiif-cloud.princeton.edu/iiif/2/5b%2Fe5%2F3f%2F5be53f8ec4c14c05bd719b8830999007%2Fintermediate_file/info.json\",\"http://iiif.io/api/presentation#manifest\":\"https://figgy.princeton.edu/concern/scanned_maps/9a65ca4a-0eb8-466f-9f80-40f8f9f1cd09/manifest\"}", + "layer_geom_type_s": "Image", + "layer_geom_type_sm": [ + "Image" + ], + "dc_format_s": "TIFF", + "suppressed_b": true, + "dc_source_sm": [ + "princeton-1r66j405w" + ], + "call_number_s": "HMC04 (Princeton)", + "rights_statement_s": "No Known Copyright

Princeton University Library reasonably believes that the Item is not restricted by copyright or related rights, but a conclusive determination could not be made.\n
You are free to use this Item in any way that is permitted by the copyright and related rights legislation that applies to your use.

Princeton University Library claims no copyright or license governing this digital resource. It is provided for free, on a non-commercial, open-access basis, for fair-use academic and research purposes only. Anyone who claims copyright over any part of these resources and feels that they should not be presented in this manner is invited to contact Princeton University Library, who will in turn consider such concerns and make every effort to respond appropriately. We request that users reproducing this resource cite it according to the guidelines described at https://library.princeton.edu/about/policies/special-collections-copyright-credit-and-citation-guidelines.\n

" } diff --git a/spec/fixtures/solr_documents/child-4.json b/spec/fixtures/solr_documents/child-4.json index 83e19145..a5a24805 100644 --- a/spec/fixtures/solr_documents/child-4.json +++ b/spec/fixtures/solr_documents/child-4.json @@ -1,31 +1,44 @@ { - "geoblacklight_version": "1.0", - "dc_identifier_s": "ark:/88435/5425kc10m", - "layer_slug_s": "princeton-5425kc10m", - "uuid": "princeton-5425kc10m", - "dc_title_s": "Fire Insurance Map of Princeton, New Jersey (Sheet 4) (1895)", - "solr_geom": "ENVELOPE(-74.68, -74.63, 40.37, 40.33)", - "dct_provenance_s": "Princeton", - "dc_rights_s": "Public", - "dc_description_s": "Title taken from sheet 1 of 1927 map. Oriented with the north to the upper right. Includes location map, key, streets and specials index, and text. \"Nov. 1896.\"", - "dc_creator_sm": [ - "Sanborn Map Company" - ], - "dc_language_s": "English", - "dc_publisher_s": "New York : Sanborn-Perris Map Co. Limited, 1895.", - "dc_subject_sm": [ - "Real property—New Jersey—Princeton—Maps", - "Princeton (N.J.)—Maps" - ], - "layer_modified_dt": "2018-02-23T23:37:50Z", - "layer_id_s": "public-figgy:f7074845-f1c4-4993-95cc-1ac34b2d07de", - "dct_references_s": "{\"http://schema.org/url\":\"https://catalog.princeton.edu/catalog/4266648\",\"http://schema.org/downloadUrl\":\"https://figgy.princeton.edu/downloads/f7074845-f1c4-4993-95cc-1ac34b2d07de/file/dc07f19e-806b-49e0-8f3e-d93e795220cf\",\"http://schema.org/thumbnailUrl\":\"https://figgy.princeton.edu/downloads/f7074845-f1c4-4993-95cc-1ac34b2d07de/file/8604e132-4d77-4346-ac76-ed303656bbcc\",\"http://iiif.io/api/image\":\"https://iiif.princeton.edu/loris/figgy_prod/46%2F2a%2Fc0%2F462ac078bf2c4b99a3c247841d23195f%2Fintermediate_file.jp2/info.json\",\"http://iiif.io/api/presentation#manifest\":\"https://figgy.princeton.edu/concern/scanned_maps/4bf7b087-3675-4791-bc3d-3fcbf5c1ba5e/manifest\"}", - "layer_geom_type_s": "Image", - "dc_format_s": "TIFF", - "suppressed_b": true, - "dc_source_sm": [ - "princeton-1r66j405w" - ], - "call_number_s": "HMC04 (Princeton)", - "rights_statement_s": "No Known Copyright

Princeton University Library reasonably believes that the Item is not restricted by copyright or related rights, but a conclusive determination could not be made.\n
You are free to use this Item in any way that is permitted by the copyright and related rights legislation that applies to your use.

Princeton University Library claims no copyright or license governing this digital resource. It is provided for free, on a non-commercial, open-access basis, for fair-use academic and research purposes only. Anyone who claims copyright over any part of these resources and feels that they should not be presented in this manner is invited to contact Princeton University Library, who will in turn consider such concerns and make every effort to respond appropriately. We request that users reproducing this resource cite it according to the guidelines described at https://library.princeton.edu/special-collections/policies/forms-citation.\n

" + "geoblacklight_version": "1.0", + "dc_identifier_s": "ark:/88435/5425kc10m", + "layer_slug_s": "princeton-5425kc10m", + "uuid": "princeton-5425kc10m", + "dc_title_s": "Princeton, Mercer County, New Jersey (Sheet 4 1895)", + "solr_geom": "ENVELOPE(-74.68, -74.63, 40.37, 40.33)", + "dct_provenance_s": "Princeton", + "dc_rights_s": "Public", + "dc_description_s": "Title taken from sheet 1 of 1927 map. \"Nov. 1896.\" Includes location map, key, streets and specials index, and text. Oriented with the north to the upper right.", + "dc_creator_sm": [ + "Sanborn Map Company" + ], + "dc_language_s": "en", + "dc_publisher_s": "New York : Sanborn-Perris Map Co. Limited, 1895.", + "dc_subject_sm": [ + "Real property\u2014New Jersey\u2014Princeton\u2014Maps", + "Princeton (N.J.)\u2014Maps", + "Fire insurance maps\u2014New Jersey\u2014Princeton\u20141896", + "Maps\u2014New Jersey\u2014Princeton\u20141896", + "Maps" + ], + "all_subject_sm": [ + "Real property\u2014New Jersey\u2014Princeton\u2014Maps", + "Princeton (N.J.)\u2014Maps", + "Fire insurance maps\u2014New Jersey\u2014Princeton\u20141896", + "Maps\u2014New Jersey\u2014Princeton\u20141896", + "Maps" + ], + "solr_year_i": 1895, + "layer_modified_dt": "2025-11-17T20:15:55Z", + "dct_references_s": "{\"http://schema.org/url\":\"https://catalog.princeton.edu/catalog/9942666573506421\",\"http://schema.org/downloadUrl\":\"https://figgy.princeton.edu/downloads/f7074845-f1c4-4993-95cc-1ac34b2d07de/file/dc07f19e-806b-49e0-8f3e-d93e795220cf\",\"http://schema.org/thumbnailUrl\":\"https://iiif-cloud.princeton.edu/iiif/2/dd%2Fa2%2F24%2Fdda2242de72546d1a91a91b0afcd500e%2Fthumbnail/full/!400,300/0/default.png\",\"http://iiif.io/api/image\":\"https://iiif-cloud.princeton.edu/iiif/2/0f%2F47%2Fa1%2F0f47a1a7d3de42d3870a03d7adde9846%2Fintermediate_file/info.json\",\"http://iiif.io/api/presentation#manifest\":\"https://figgy.princeton.edu/concern/scanned_maps/4bf7b087-3675-4791-bc3d-3fcbf5c1ba5e/manifest\"}", + "layer_geom_type_s": "Image", + "layer_geom_type_sm": [ + "Image" + ], + "dc_format_s": "TIFF", + "suppressed_b": true, + "dc_source_sm": [ + "princeton-1r66j405w" + ], + "call_number_s": "HMC04 (Princeton)", + "rights_statement_s": "No Known Copyright

Princeton University Library reasonably believes that the Item is not restricted by copyright or related rights, but a conclusive determination could not be made.\n
You are free to use this Item in any way that is permitted by the copyright and related rights legislation that applies to your use.

Princeton University Library claims no copyright or license governing this digital resource. It is provided for free, on a non-commercial, open-access basis, for fair-use academic and research purposes only. Anyone who claims copyright over any part of these resources and feels that they should not be presented in this manner is invited to contact Princeton University Library, who will in turn consider such concerns and make every effort to respond appropriately. We request that users reproducing this resource cite it according to the guidelines described at https://library.princeton.edu/about/policies/special-collections-copyright-credit-and-citation-guidelines.\n

" } diff --git a/spec/fixtures/solr_documents/figgy-image-work.json b/spec/fixtures/solr_documents/figgy-image-work.json index 1738df47..312437b3 100644 --- a/spec/fixtures/solr_documents/figgy-image-work.json +++ b/spec/fixtures/solr_documents/figgy-image-work.json @@ -1,24 +1,37 @@ { - "geoblacklight_version": "1.0", - "dc_identifier_s": "ark:/88435/cv43nz62s", - "layer_slug_s": "princeton-cv43nz62s", - "uuid": "princeton-cv43nz62s", - "dc_title_s": "Carte geologique de la France a1/80,000; Sierck-Sarreguemines", - "solr_geom": "ENVELOPE(6.2819, 7.1915, 49.4037, 49.0756)", - "dct_provenance_s": "Princeton", - "dc_rights_s": "Public", - "dc_description_s": "West Decimal Degree 6.2819 North Decimal Degree 49.4037 East Decimal Degree 7.1915 Explanatory text: 1 sheet in MC folder. South Decimal Degree 49.0756", - "dc_language_s": "French", - "dc_publisher_s": "Orléans : Bureau de recherches géogiques et minières, 1957.", - "dc_subject_sm": [ - "Geology", - "Mines and mineral resources", - "France—Maps" - ], - "layer_modified_dt": "2018-02-24T00:18:36Z", - "layer_id_s": "public-figgy:e5bf2360-6533-4f5d-b306-cf7a4ed461a6", - "dct_references_s": "{\"http://schema.org/url\":\"https://figgy.princeton.edu/concern/scanned_maps/32146ff6-c93d-4b14-b198-6fb518b44042\",\"http://schema.org/downloadUrl\":\"https://figgy.princeton.edu/downloads/e5bf2360-6533-4f5d-b306-cf7a4ed461a6/file/f7eebaac-7cab-446e-8466-194a44e0e718\",\"http://schema.org/thumbnailUrl\":\"https://figgy.princeton.edu/downloads/e5bf2360-6533-4f5d-b306-cf7a4ed461a6/file/2c4f5a95-6ade-49d8-9e49-3cc8378f7ed0\",\"http://iiif.io/api/image\":\"https://iiif.princeton.edu/loris/figgy_prod/bf%2F5d%2F7f%2Fbf5d7fc1dcbc48118dfc5831a3e08861%2Fintermediate_file.jp2/info.json\",\"http://iiif.io/api/presentation#manifest\":\"https://figgy.princeton.edu/concern/scanned_maps/32146ff6-c93d-4b14-b198-6fb518b44042/manifest\"}", - "layer_geom_type_s": "Image", - "dc_format_s": "TIFF", - "rights_statement_s": "No Known Copyright

Princeton University Library reasonably believes that the Item is not restricted by copyright or related rights, but a conclusive determination could not be made.\n
You are free to use this Item in any way that is permitted by the copyright and related rights legislation that applies to your use.

Princeton University Library claims no copyright or license governing this digital resource. It is provided for free, on a non-commercial, open-access basis, for fair-use academic and research purposes only. Anyone who claims copyright over any part of these resources and feels that they should not be presented in this manner is invited to contact Princeton University Library, who will in turn consider such concerns and make every effort to respond appropriately. We request that users reproducing this resource cite it according to the guidelines described at https://library.princeton.edu/special-collections/policies/forms-citation.\n

" + "geoblacklight_version": "1.0", + "dc_identifier_s": "ark:/88435/cv43nz62s", + "layer_slug_s": "princeton-cv43nz62s", + "uuid": "princeton-cv43nz62s", + "dc_title_s": "Carte geologique de la France a1/80,000; Sierck-Sarreguemines", + "solr_geom": "ENVELOPE(6.2819, 7.1915, 49.4037, 49.0756)", + "dct_provenance_s": "Princeton", + "dc_rights_s": "Public", + "dc_description_s": "Explanatory text: 1 sheet in MC folder. North Decimal Degree 49.4037 South Decimal Degree 49.0756 East Decimal Degree 7.1915 West Decimal Degree 6.2819", + "dc_language_s": "fr", + "dc_publisher_s": "Orle\u0301ans : Bureau de recherches ge\u0301ogiques et minie\u0300res, 1957.", + "dc_subject_sm": [ + "Geology", + "Mines and mineral resources", + "France\u2014Maps" + ], + "all_subject_sm": [ + "Geology", + "Mines and mineral resources", + "France\u2014Maps" + ], + "dct_spatial_sm": [ + "France" + ], + "solr_year_i": 1957, + "layer_modified_dt": "2025-11-17T20:14:21Z", + "dct_references_s": "{\"http://schema.org/url\":\"https://catalog.princeton.edu/catalog/9965184233506421\",\"http://schema.org/downloadUrl\":\"https://figgy.princeton.edu/downloads/e5bf2360-6533-4f5d-b306-cf7a4ed461a6/file/f7eebaac-7cab-446e-8466-194a44e0e718\",\"http://schema.org/thumbnailUrl\":\"https://iiif-cloud.princeton.edu/iiif/2/a3%2F78%2F12%2Fa37812b116f04b2c8818925203d18668%2Fthumbnail/full/!400,300/0/default.png\",\"http://iiif.io/api/image\":\"https://iiif-cloud.princeton.edu/iiif/2/93%2Fe9%2F60%2F93e960e592b647eea0c35ec03874657f%2Fintermediate_file/info.json\",\"http://iiif.io/api/presentation#manifest\":\"https://figgy.princeton.edu/concern/scanned_maps/32146ff6-c93d-4b14-b198-6fb518b44042/manifest\"}", + "layer_geom_type_s": "Image", + "layer_geom_type_sm": [ + "Image" + ], + "dc_format_s": "TIFF", + "suppressed_b": false, + "call_number_s": "G5831.C5.s80.F7 CG-37", + "rights_statement_s": "No Known Copyright

Princeton University Library reasonably believes that the Item is not restricted by copyright or related rights, but a conclusive determination could not be made.\n
You are free to use this Item in any way that is permitted by the copyright and related rights legislation that applies to your use.

Princeton University Library claims no copyright or license governing this digital resource. It is provided for free, on a non-commercial, open-access basis, for fair-use academic and research purposes only. Anyone who claims copyright over any part of these resources and feels that they should not be presented in this manner is invited to contact Princeton University Library, who will in turn consider such concerns and make every effort to respond appropriately. We request that users reproducing this resource cite it according to the guidelines described at https://library.princeton.edu/about/policies/special-collections-copyright-credit-and-citation-guidelines.\n

" } diff --git a/spec/fixtures/solr_documents/parent.json b/spec/fixtures/solr_documents/parent.json index d3a4539a..2266ab18 100644 --- a/spec/fixtures/solr_documents/parent.json +++ b/spec/fixtures/solr_documents/parent.json @@ -1,26 +1,40 @@ { - "geoblacklight_version": "1.0", - "dc_identifier_s": "ark:/88435/1r66j405w", - "layer_slug_s": "princeton-1r66j405w", - "uuid": "princeton-1r66j405w", - "dc_title_s": "Princeton, Mercer County, New Jersey", - "solr_geom": "ENVELOPE(-74.68, -74.63, 40.37, 40.33)", - "dct_provenance_s": "Princeton", - "dc_rights_s": "Public", - "dc_description_s": "Title taken from sheet 1 of 1927 map. Oriented with the north to the upper left. Includes location map and key. \"Feb. 1885.\"", - "dc_creator_sm": [ - "Sanborn Map Company" - ], - "dc_language_s": "English", - "dc_publisher_s": "New York : Sanborn Map & Publishing Co., Limited, 1885.", - "dc_subject_sm": [ - "Real property—New Jersey—Princeton—Maps", - "Princeton (N.J.)—Maps" - ], - "layer_modified_dt": "2018-02-23T23:53:45Z", - "layer_id_s": "ark:/88435/1r66j405w", - "dct_references_s": "{\"http://schema.org/url\":\"https://catalog.princeton.edu/catalog/4266648\",\"http://schema.org/thumbnailUrl\":\"https://figgy.princeton.edu/downloads/b6ba3091-fcf4-4d2d-9d6a-df7df5c8c588/file/0cb6b6c7-bce2-46a8-8c79-2864c7ec5459\",\"http://iiif.io/api/image\":\"https://iiif.princeton.edu/loris/figgy_prod/5a%2F20%2F58%2F5a20585db50d44959fe5ae44821fd174%2Fintermediate_file.jp2/info.json\",\"http://iiif.io/api/presentation#manifest\":\"https://figgy.princeton.edu/concern/scanned_maps/9a193476-5f2e-4f82-95a5-6db472e39b7b/manifest\"}", - "layer_geom_type_s": "Image", - "call_number_s": "HMC04 (Princeton)", - "rights_statement_s": "No Known Copyright

Princeton University Library reasonably believes that the Item is not restricted by copyright or related rights, but a conclusive determination could not be made.\n
You are free to use this Item in any way that is permitted by the copyright and related rights legislation that applies to your use.

Princeton University Library claims no copyright or license governing this digital resource. It is provided for free, on a non-commercial, open-access basis, for fair-use academic and research purposes only. Anyone who claims copyright over any part of these resources and feels that they should not be presented in this manner is invited to contact Princeton University Library, who will in turn consider such concerns and make every effort to respond appropriately. We request that users reproducing this resource cite it according to the guidelines described at https://library.princeton.edu/special-collections/policies/forms-citation.\n

" + "geoblacklight_version": "1.0", + "dc_identifier_s": "ark:/88435/1r66j405w", + "layer_slug_s": "princeton-1r66j405w", + "uuid": "princeton-1r66j405w", + "dc_title_s": "Princeton, Mercer County, New Jersey", + "solr_geom": "ENVELOPE(-74.68, -74.63, 40.37, 40.33)", + "dct_provenance_s": "Princeton", + "dc_rights_s": "Public", + "dc_description_s": "Title taken from sheet 1 of 1927 map. \"Feb. 1885.\" Includes location map and key. Oriented with the north to the upper left.", + "dc_creator_sm": [ + "Sanborn Map Company" + ], + "dc_language_s": "en", + "dc_publisher_s": "New York : Sanborn Map & Publishing Co., Limited, 1885.", + "dc_subject_sm": [ + "Real property\u2014New Jersey\u2014Princeton\u2014Maps", + "Princeton (N.J.)\u2014Maps", + "Fire insurance maps\u2014New Jersey\u2014Princeton\u20141885", + "Maps\u2014New Jersey\u2014Princeton\u20141885", + "Maps" + ], + "all_subject_sm": [ + "Real property\u2014New Jersey\u2014Princeton\u2014Maps", + "Princeton (N.J.)\u2014Maps", + "Fire insurance maps\u2014New Jersey\u2014Princeton\u20141885", + "Maps\u2014New Jersey\u2014Princeton\u20141885", + "Maps" + ], + "solr_year_i": 1885, + "layer_modified_dt": "2026-09-01T02:23:13Z", + "dct_references_s": "{\"http://schema.org/url\":\"https://catalog.princeton.edu/catalog/9942666483506421\",\"http://schema.org/thumbnailUrl\":\"https://iiif-cloud.princeton.edu/iiif/2/2b%2F7c%2F03%2F2b7c03e4d37e46c393b44992e9ad7694%2Fthumbnail/full/!400,300/0/default.png\",\"http://iiif.io/api/image\":\"https://iiif-cloud.princeton.edu/iiif/2/26%2F35%2Ffb%2F2635fb5da2074099af3c7748702ee2d0%2Fintermediate_file/info.json\",\"http://iiif.io/api/presentation#manifest\":\"https://figgy.princeton.edu/concern/scanned_maps/9a193476-5f2e-4f82-95a5-6db472e39b7b/manifest\"}", + "layer_geom_type_s": "Image", + "layer_geom_type_sm": [ + "Image" + ], + "suppressed_b": false, + "call_number_s": "HMC04 (Princeton)", + "rights_statement_s": "No Known Copyright

Princeton University Library reasonably believes that the Item is not restricted by copyright or related rights, but a conclusive determination could not be made.\n
You are free to use this Item in any way that is permitted by the copyright and related rights legislation that applies to your use.

Princeton University Library claims no copyright or license governing this digital resource. It is provided for free, on a non-commercial, open-access basis, for fair-use academic and research purposes only. Anyone who claims copyright over any part of these resources and feels that they should not be presented in this manner is invited to contact Princeton University Library, who will in turn consider such concerns and make every effort to respond appropriately. We request that users reproducing this resource cite it according to the guidelines described at https://library.princeton.edu/about/policies/special-collections-copyright-credit-and-citation-guidelines.\n

" } diff --git a/spec/fixtures/solr_documents/princeton-restricted-wms.json b/spec/fixtures/solr_documents/princeton-restricted-wms.json index 4b1d862b..2474aba1 100644 --- a/spec/fixtures/solr_documents/princeton-restricted-wms.json +++ b/spec/fixtures/solr_documents/princeton-restricted-wms.json @@ -1,36 +1,50 @@ { - "geoblacklight_version": "1.0", - "dc_identifier_s": "ark:/88435/m613n013z", - "layer_slug_s": "princeton-m613n013z", - "uuid": "princeton-m613n013z", - "dc_title_s": "Louisiana Tracts 2002", - "solr_geom": "ENVELOPE(-94.043341, -88.816516, 33.019544, 28.926454)", - "dct_provenance_s": "Princeton", - "dc_rights_s": "Restricted", - "dc_description_s": "Louisiana Tracts represents the U.S. Census tracts and block numbering areas (BNA) of Louisiana.", - "dc_creator_sm": [ - "Geographic Data Technology, Inc. (GDT)", - "Environmental Systems Research Institute, Inc. (ESRI)" - ], - "dc_publisher_s": "Environmental Systems Research Institute, Inc. (ESRI)", - "dc_subject_sm": [ - "Boundaries", - "Society" - ], - "dct_spatial_sm": [ - "United States", - "Louisiana" - ], - "dct_temporal_sm": [ - "2002", - "2000", - "2001" - ], - "solr_year_i": 2002, - "layer_modified_dt": "2018-06-13T18:42:36Z", - "layer_id_s": "restricted-figgy:p-735d9ddb-d293-4454-b85b-e4d972f0708a", - "dct_references_s": "{\"http://www.opengis.net/cat/csw/csdgm\":\"https://figgy.princeton.edu/downloads/295c9e22-1163-461b-aff3-862a995c0600/file/b61ded13-7b29-4652-af80-0678fef09f9e\",\"http://schema.org/downloadUrl\":\"https://figgy.princeton.edu/downloads/735d9ddb-d293-4454-b85b-e4d972f0708a/file/021997fa-ba79-4445-989a-fb79f8b7382d\",\"http://schema.org/thumbnailUrl\":\"https://figgy.princeton.edu/downloads/735d9ddb-d293-4454-b85b-e4d972f0708a/file/97427a6b-6e78-47a7-9515-27a21e4162fa\",\"http://www.opengis.net/def/serviceType/ogc/wms\":\"https://geoserver.princeton.edu/geoserver/restricted-figgy/wms\",\"http://www.opengis.net/def/serviceType/ogc/wfs\":\"https://geoserver.princeton.edu/geoserver/restricted-figgy/wfs\"}", - "layer_geom_type_s": "Polygon", - "dc_format_s": "Shapefile", - "rights_statement_s": "No Known Copyright

Princeton University Library reasonably believes that the Item is not restricted by copyright or related rights, but a conclusive determination could not be made.\n
You are free to use this Item in any way that is permitted by the copyright and related rights legislation that applies to your use.

Princeton University Library claims no copyright or license governing this digital resource. It is provided for free, on a non-commercial, open-access basis, for fair-use academic and research purposes only. Anyone who claims copyright over any part of these resources and feels that they should not be presented in this manner is invited to contact Princeton University Library, who will in turn consider such concerns and make every effort to respond appropriately. We request that users reproducing this resource cite it according to the guidelines described at https://library.princeton.edu/special-collections/policies/forms-citation.\n

" + "geoblacklight_version": "1.0", + "dc_identifier_s": "ark:/88435/m613n013z", + "layer_slug_s": "princeton-m613n013z", + "uuid": "princeton-m613n013z", + "dc_title_s": "Louisiana Tracts 2002", + "solr_geom": "ENVELOPE(-94.043341, -88.816516, 33.019544, 28.926454)", + "dct_provenance_s": "Princeton", + "dc_rights_s": "Restricted", + "dc_description_s": "Louisiana Tracts represents the U.S. Census tracts and block numbering areas (BNA) of Louisiana.", + "dc_creator_sm": [ + "Geographic Data Technology, Inc. (GDT)" + ], + "dc_publisher_s": "Environmental Systems Research Institute, Inc. (ESRI)", + "dc_subject_sm": [ + "Boundaries", + "Society" + ], + "all_subject_sm": [ + "polygon", + "census tracts", + "census block numbering areas", + "demographics", + "population", + "households", + "Boundaries", + "Society" + ], + "dct_spatial_sm": [ + "United States", + "Louisiana" + ], + "dct_temporal_sm": [ + "2002", + "2000", + "2001", + "2002" + ], + "solr_year_i": 2002, + "layer_modified_dt": "2025-11-04T14:46:30Z", + "dct_references_s": "{\"http://www.opengis.net/cat/csw/csdgm\":\"https://figgy.princeton.edu/downloads/295c9e22-1163-461b-aff3-862a995c0600/file/b61ded13-7b29-4652-af80-0678fef09f9e\",\"http://schema.org/downloadUrl\":\"https://figgy.princeton.edu/downloads/735d9ddb-d293-4454-b85b-e4d972f0708a/file/021997fa-ba79-4445-989a-fb79f8b7382d\",\"http://schema.org/thumbnailUrl\":\"https://iiif-cloud.princeton.edu/iiif/2/66%2Fa8%2F51%2F66a85126e09349a480b01868df304ba6%2Fthumbnail/full/!400,300/0/default.png\",\"https://github.com/protomaps/PMTiles\":\"https://geodata-restricted.lib.princeton.edu/ff/e3/e1/ffe3e12707614fb4ba5e97421523d71f/display_vector.pmtiles\"}", + "layer_geom_type_s": "Polygon", + "layer_geom_type_sm": [ + "Polygon" + ], + "dc_format_s": "Shapefile", + "dct_issued_dt": "2002-01-01T00:00:00Z", + "suppressed_b": false, + "rights_statement_s": "In Copyright

This Item is protected by copyright and/or related rights.\n
You are free to use this Item in any way that is permitted by the copyright and related rights legislation that applies to your use.\n
For other uses you need to obtain permission from the rights-holder(s).

Princeton University Library claims no copyright or license governing this digital resource. It is provided for free, on a non-commercial, open-access basis, for fair-use academic and research purposes only. Anyone who claims copyright over any part of these resources and feels that they should not be presented in this manner is invited to contact Princeton University Library, who will in turn consider such concerns and make every effort to respond appropriately. We request that users reproducing this resource cite it according to the guidelines described at https://library.princeton.edu/about/policies/special-collections-copyright-credit-and-citation-guidelines.\n

" } diff --git a/spec/fixtures/solr_documents/princeton_public_cog.json b/spec/fixtures/solr_documents/princeton_public_cog.json index 0410d347..89db92f1 100644 --- a/spec/fixtures/solr_documents/princeton_public_cog.json +++ b/spec/fixtures/solr_documents/princeton_public_cog.json @@ -25,9 +25,8 @@ "Himalaya Mountains" ], "solr_year_i": 1877, - "layer_modified_dt": "2023-09-01T18:49:36Z", - "layer_id_s": "public-figgy:p-67d9ca18-49ee-44a6-8d87-3d4cbc70b0c5", - "dct_references_s": "{\"http://schema.org/url\":\"https://catalog.princeton.edu/catalog/9971226563506421\",\"http://schema.org/downloadUrl\":\"https://figgy.princeton.edu/downloads/67d9ca18-49ee-44a6-8d87-3d4cbc70b0c5/file/a95c7f34-d4a8-49a5-a51a-ad782e43b37a\",\"http://schema.org/thumbnailUrl\":\"https://figgy.princeton.edu/downloads/67d9ca18-49ee-44a6-8d87-3d4cbc70b0c5/file/8b9b0834-0f3e-48ef-95d0-e065b30cd231\",\"http://www.opengis.net/def/serviceType/ogc/wmts\":\"https://map-tiles.princeton.edu/cog/WMTSCapabilities.xml?id=07f0ec69493248d6a0f69bd80e8cb1da\",\"https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames\":\"https://map-tiles.princeton.edu/cog/tiles/WebMercatorQuad/{z}/{x}/{y}@1x.png?id=07f0ec69493248d6a0f69bd80e8cb1da\",\"https://github.com/cogeotiff/cog-spec\":\"https://geodata.lib.princeton.edu/13/f5/58/13f5582c32a54be98fc2982077d0456e/display_raster.tif\"}", + "layer_modified_dt": "2025-11-17T20:12:16Z", + "dct_references_s": "{\"http://schema.org/url\":\"https://catalog.princeton.edu/catalog/9971226563506421\",\"http://schema.org/downloadUrl\":\"https://figgy.princeton.edu/downloads/67d9ca18-49ee-44a6-8d87-3d4cbc70b0c5/file/a95c7f34-d4a8-49a5-a51a-ad782e43b37a\",\"http://schema.org/thumbnailUrl\":\"https://iiif-cloud.princeton.edu/iiif/2/4f%2F37%2Fbb%2F4f37bb371e2249fb93acfa067e62c5b4%2Fthumbnail/full/!400,300/0/default.png\",\"http://www.opengis.net/def/serviceType/ogc/wmts\":\"https://map-tiles.princeton.edu/ae39f44bdb794f5e80cbdbc709592712/cog/WebMercatorQuad/WMTSCapabilities.xml\",\"https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames\":\"https://map-tiles.princeton.edu/ae39f44bdb794f5e80cbdbc709592712/cog/tiles/WebMercatorQuad/{z}/{x}/{y}@1x.png\",\"https://github.com/cogeotiff/cog-spec\":\"https://geodata.lib.princeton.edu/ae/39/f4/ae39f44bdb794f5e80cbdbc709592712/display_raster.tif\"}", "layer_geom_type_s": "Raster", "layer_geom_type_sm": [ "Raster" @@ -38,5 +37,5 @@ "princeton-j098zd574" ], "call_number_s": "G7402.H5B5 1877 .R6", - "rights_statement_s": "No Known Copyright

Princeton University Library reasonably believes that the Item is not restricted by copyright or related rights, but a conclusive determination could not be made.\n
You are free to use this Item in any way that is permitted by the copyright and related rights legislation that applies to your use.

Princeton University Library claims no copyright or license governing this digital resource. It is provided for free, on a non-commercial, open-access basis, for fair-use academic and research purposes only. Anyone who claims copyright over any part of these resources and feels that they should not be presented in this manner is invited to contact Princeton University Library, who will in turn consider such concerns and make every effort to respond appropriately. We request that users reproducing this resource cite it according to the guidelines described at https://library.princeton.edu/special-collections/policies/forms-citation.\n

" + "rights_statement_s": "No Known Copyright

Princeton University Library reasonably believes that the Item is not restricted by copyright or related rights, but a conclusive determination could not be made.\n
You are free to use this Item in any way that is permitted by the copyright and related rights legislation that applies to your use.

Princeton University Library claims no copyright or license governing this digital resource. It is provided for free, on a non-commercial, open-access basis, for fair-use academic and research purposes only. Anyone who claims copyright over any part of these resources and feels that they should not be presented in this manner is invited to contact Princeton University Library, who will in turn consider such concerns and make every effort to respond appropriately. We request that users reproducing this resource cite it according to the guidelines described at https://library.princeton.edu/about/policies/special-collections-copyright-credit-and-citation-guidelines.\n

" } diff --git a/spec/fixtures/solr_documents/princeton_restricted_cog.json b/spec/fixtures/solr_documents/princeton_restricted_cog.json index 61044c6f..6ba60e46 100644 --- a/spec/fixtures/solr_documents/princeton_restricted_cog.json +++ b/spec/fixtures/solr_documents/princeton_restricted_cog.json @@ -6,7 +6,7 @@ "dc_title_s": "Part of Kam in Eastern Tibet [cartographic material] / by Eric Teichman, C.I.E., B.A. (geotiff)", "solr_geom": "ENVELOPE(96.05, 100.2, 33.35, 28.8)", "dct_provenance_s": "Princeton", - "dc_rights_s": "Restricted", + "dc_rights_s": "Public", "dc_description_s": "Relief shown by spot heights. Mr. Teichman's routes, passes, and boundaries of states and provinces are shown. Includes information on terrain and ground cover. \"Names are all given in Tibetan, with Chinese names, where the latter are in common use, added in brackets.\" Includes East Tibetan Glossary of geographical terms. Includes inset showing area of map within Asia. From: Geographical Journal. Vol. 59, no. 1 (January 1922), pp. 1-19; held in Firestone Library. Call number: G7 .J6874", "dc_creator_sm": [ "Teichman, Eric, 1884-1944" @@ -24,18 +24,14 @@ "Tibet (China)" ], "solr_year_i": 1922, - "layer_modified_dt": "2023-11-10T21:04:40Z", - "layer_id_s": "public-figgy:p-726b457b-09a8-49ec-bf9b-fa37b488a693", - "dct_references_s": "{\"http://schema.org/url\":\"https://catalog.princeton.edu/catalog/9975632383506421\",\"http://schema.org/downloadUrl\":\"https://figgy.princeton.edu/downloads/726b457b-09a8-49ec-bf9b-fa37b488a693/file/91ebee67-0fd7-4689-9fad-aa295ec4239f\",\"http://schema.org/thumbnailUrl\":\"https://figgy.princeton.edu/downloads/726b457b-09a8-49ec-bf9b-fa37b488a693/file/ed5b7d8d-982a-46c7-9844-504ab821ef68\",\"http://www.opengis.net/def/serviceType/ogc/wmts\":\"https://map-tiles.princeton.edu/cog/WMTSCapabilities.xml?id=c2a0cc9fe29641e99a6981f71b0d773b\",\"https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames\":\"https://map-tiles.princeton.edu/cog/tiles/WebMercatorQuad/{z}/{x}/{y}@1x.png?id=c2a0cc9fe29641e99a6981f71b0d773b\",\"https://github.com/cogeotiff/cog-spec\":\"https://geodata.lib.princeton.edu/f6/df/29/f6df291284ad483bad2517d4c75273dd/display_raster.tif\"}", + "layer_modified_dt": "2025-11-17T19:39:50Z", + "dct_references_s": "{\"http://schema.org/url\":\"https://catalog.princeton.edu/catalog/9975632383506421\",\"http://schema.org/downloadUrl\":\"https://figgy.princeton.edu/downloads/726b457b-09a8-49ec-bf9b-fa37b488a693/file/91ebee67-0fd7-4689-9fad-aa295ec4239f\",\"http://schema.org/thumbnailUrl\":\"https://iiif-cloud.princeton.edu/iiif/2/33%2F35%2Fe9%2F3335e962ff5648369370961519180d6d%2Fthumbnail/full/!400,300/0/default.png\",\"http://www.opengis.net/def/serviceType/ogc/wmts\":\"https://map-tiles.princeton.edu/d793c678b7b34f92b3665d26da3aa583/cog/WebMercatorQuad/WMTSCapabilities.xml\",\"https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames\":\"https://map-tiles.princeton.edu/d793c678b7b34f92b3665d26da3aa583/cog/tiles/WebMercatorQuad/{z}/{x}/{y}@1x.png\",\"https://github.com/cogeotiff/cog-spec\":\"https://geodata.lib.princeton.edu/d7/93/c6/d793c678b7b34f92b3665d26da3aa583/display_raster.tif\"}", "layer_geom_type_s": "Raster", "layer_geom_type_sm": [ "Raster" ], "dc_format_s": "GeoTIFF", - "suppressed_b": true, - "dc_source_sm": [ - "princeton-70795b14w" - ], + "suppressed_b": false, "call_number_s": "G7823.T5C1 1922 .R6", - "rights_statement_s": "No Known Copyright

Princeton University Library reasonably believes that the Item is not restricted by copyright or related rights, but a conclusive determination could not be made.\n
You are free to use this Item in any way that is permitted by the copyright and related rights legislation that applies to your use.

Princeton University Library claims no copyright or license governing this digital resource. It is provided for free, on a non-commercial, open-access basis, for fair-use academic and research purposes only. Anyone who claims copyright over any part of these resources and feels that they should not be presented in this manner is invited to contact Princeton University Library, who will in turn consider such concerns and make every effort to respond appropriately. We request that users reproducing this resource cite it according to the guidelines described at https://library.princeton.edu/special-collections/policies/forms-citation.\n

" + "rights_statement_s": "No Known Copyright

Princeton University Library reasonably believes that the Item is not restricted by copyright or related rights, but a conclusive determination could not be made.\n
You are free to use this Item in any way that is permitted by the copyright and related rights legislation that applies to your use.

Princeton University Library claims no copyright or license governing this digital resource. It is provided for free, on a non-commercial, open-access basis, for fair-use academic and research purposes only. Anyone who claims copyright over any part of these resources and feels that they should not be presented in this manner is invited to contact Princeton University Library, who will in turn consider such concerns and make every effort to respond appropriately. We request that users reproducing this resource cite it according to the guidelines described at https://library.princeton.edu/about/policies/special-collections-copyright-credit-and-citation-guidelines.\n

" } diff --git a/spec/fixtures/solr_documents/scanned-map-restricted.json b/spec/fixtures/solr_documents/scanned-map-restricted.json index c1311fcd..27e7b5e7 100644 --- a/spec/fixtures/solr_documents/scanned-map-restricted.json +++ b/spec/fixtures/solr_documents/scanned-map-restricted.json @@ -1,26 +1,44 @@ { - "geoblacklight_version": "1.0", - "dc_identifier_s": "ark:/88435/kk91fn37z", - "layer_slug_s": "princeton-kk91fn37z", - "uuid": "princeton-kk91fn37z", - "dc_title_s": "Dublin", - "solr_geom": "ENVELOPE(-6.316666666666666, -6.033333333333333, 53.4, 53.266666666666666)", - "dct_provenance_s": "Princeton", - "dc_rights_s": "Restricted", - "dc_description_s": "Popular edition, revised 1962. Ireland. Ordnance Survey Office. Inset: map of Dublin city center. Postal districts are located. Index of national grid. In lower left margin: \"Revised in 1962.\" In lower right margin: \"6-63; 10,000.\".", - "dc_language_s": "eng", - "dc_publisher_s": "Dublin : [s.n.], 1963.", - "dc_subject_sm": [ - "Road maps", - "Cities and towns", - "Postal zones", - "Ireland—Maps" - ], - "layer_modified_dt": "2018-10-12T19:21:35Z", - "layer_id_s": "restricted-figgy:p-f0705bc6-2bda-4f61-8459-7651a93efdce", - "dct_references_s": "{\"http://schema.org/url\":\"https://catalog.princeton.edu/catalog/6865840\",\"http://schema.org/thumbnailUrl\":\"https://figgy.princeton.edu/downloads/f0705bc6-2bda-4f61-8459-7651a93efdce/file/6e0974f3-4bb8-40cb-81a7-baf82975617f\"}", - "layer_geom_type_s": "Image", - "dc_format_s": "TIFF", - "call_number_s": "G5784.D8.1963.I7", - "rights_statement_s": "No Known Copyright

Princeton University Library reasonably believes that the Item is not restricted by copyright or related rights, but a conclusive determination could not be made.\n
You are free to use this Item in any way that is permitted by the copyright and related rights legislation that applies to your use.

Princeton University Library claims no copyright or license governing this digital resource. It is provided for free, on a non-commercial, open-access basis, for fair-use academic and research purposes only. Anyone who claims copyright over any part of these resources and feels that they should not be presented in this manner is invited to contact Princeton University Library, who will in turn consider such concerns and make every effort to respond appropriately. We request that users reproducing this resource cite it according to the guidelines described at https://library.princeton.edu/special-collections/policies/forms-citation.\n

" + "geoblacklight_version": "1.0", + "dc_identifier_s": "ark:/88435/kk91fn37z", + "layer_slug_s": "princeton-kk91fn37z", + "uuid": "princeton-kk91fn37z", + "dc_title_s": "Dublin", + "solr_geom": "ENVELOPE(-6.376944, -6.045, 53.408889, 53.263611)", + "dct_provenance_s": "Princeton", + "dc_rights_s": "Restricted", + "dc_description_s": "Ireland. Ordinance Survey Office. Inset: map of Dublin city center. Postal districts are numbered. Index of national grid. In lower left margin: \"Revised in 1962.\" In lower right margin: \"6-63; 10,000.\" \u00a9 Government of Ireland 1963", + "dc_creator_sm": [ + "Ireland 1963" + ], + "dc_language_s": "en", + "dc_publisher_s": "Dublin Ordinance Survey Office, 1963.", + "dc_subject_sm": [ + "Roads\u2014Maps", + "Cities and towns", + "Postal zones", + "Dublin (Ireland)\u2014Maps", + "Maps" + ], + "all_subject_sm": [ + "Roads\u2014Maps", + "Cities and towns", + "Postal zones", + "Dublin (Ireland)\u2014Maps", + "Maps" + ], + "dct_spatial_sm": [ + "Ireland" + ], + "solr_year_i": 1963, + "layer_modified_dt": "2025-11-17T20:27:56Z", + "dct_references_s": "{\"http://schema.org/url\":\"https://catalog.princeton.edu/catalog/9968658403506421\",\"http://schema.org/thumbnailUrl\":\"https://iiif-cloud.princeton.edu/iiif/2/cd%2F50%2Fbb%2Fcd50bbd4a7024b1596bba2dd87b94193%2Fthumbnail/full/!400,300/0/default.png\"}", + "layer_geom_type_s": "Image", + "layer_geom_type_sm": [ + "Image" + ], + "dc_format_s": "TIFF", + "suppressed_b": false, + "call_number_s": "G5784.D8.1963.I7", + "rights_statement_s": "In Copyright

This Item is protected by copyright and/or related rights.\n
You are free to use this Item in any way that is permitted by the copyright and related rights legislation that applies to your use.\n
For other uses you need to obtain permission from the rights-holder(s).

Princeton University Library claims no copyright or license governing this digital resource. It is provided for free, on a non-commercial, open-access basis, for fair-use academic and research purposes only. Anyone who claims copyright over any part of these resources and feels that they should not be presented in this manner is invited to contact Princeton University Library, who will in turn consider such concerns and make every effort to respond appropriately. We request that users reproducing this resource cite it according to the guidelines described at https://library.princeton.edu/about/policies/special-collections-copyright-credit-and-citation-guidelines.\n

" } diff --git a/spec/models/solr_document_spec.rb b/spec/models/solr_document_spec.rb index 53a102c0..abd76936 100644 --- a/spec/models/solr_document_spec.rb +++ b/spec/models/solr_document_spec.rb @@ -9,7 +9,7 @@ document = SolrDocument.find("princeton-m613n013z") citation = document.geoblacklight_citation("http://example.com") expect(citation).not_to include "The Princeton University Library makes available" - expect(citation).to include "Environmental Systems Research Institute, Inc. (ESRI). Louisiana Tracts 2002." + expect(citation).to include "Environmental Systems Research Institute, Inc. (ESRI)" end end context "when creating a citation for a non-Princeton record" do diff --git a/spec/requests/search_field_spec.rb b/spec/requests/search_field_spec.rb index 6541a597..14933141 100644 --- a/spec/requests/search_field_spec.rb +++ b/spec/requests/search_field_spec.rb @@ -19,7 +19,7 @@ it "matches search against publisher index, terms tokenized as text" do get "/catalog.json?search_field=publisher&q=British+Survey" r = JSON.parse(response.body) - expect(r["data"].length).to eq 4 + expect(r["data"].length).to eq 5 end it "includes creator index" do get "/catalog.json?search_field=publisher&q=Circuit+Rider+Productions" From 32672114f69be923477581a65882ea9556985605 Mon Sep 17 00:00:00 2001 From: Eliot Jordan Date: Wed, 9 Sep 2026 15:16:21 -0500 Subject: [PATCH 2/3] Remove geoblacklight image sidecars and update thumbnail logic --- Gemfile | 3 - Gemfile.lock | 80 ------------------- app/assets/javascripts/application.js | 2 - app/assets/javascripts/modules/results.js | 3 - app/assets/javascripts/modules/thumbnail.js | 4 - app/assets/stylesheets/application.scss | 1 - .../stylesheets/components/results.scss | 34 ++++++++ .../stylesheets/components/thumbnail.scss | 9 --- app/models/solr_document.rb | 20 ++--- .../catalog/_index_split_default.html.erb | 14 ++-- app/views/catalog/_upper_metadata.html.erb | 8 +- config/environments/production.rb | 1 - .../initializers/monkeypatches/constants.rb | 5 +- config/initializers/statesman.rb | 7 -- config/schedule.rb | 14 ---- config/settings.yml | 3 +- config/storage.yml | 6 -- ...0260909190000_drop_sidecar_image_tables.rb | 33 ++++++++ db/schema.rb | 71 ++++++---------- lib/tasks/thumbnails.rake | 59 -------------- spec/features/bbox_overlay_spec.rb | 2 - spec/features/search_spec.rb | 6 +- spec/models/solr_document_spec.rb | 18 +++++ vendor/assets/javascripts/aload.js | 29 ------- 24 files changed, 128 insertions(+), 304 deletions(-) delete mode 100644 app/assets/javascripts/modules/thumbnail.js delete mode 100644 config/initializers/statesman.rb create mode 100644 db/migrate/20260909190000_drop_sidecar_image_tables.rb delete mode 100644 lib/tasks/thumbnails.rake delete mode 100644 vendor/assets/javascripts/aload.js diff --git a/Gemfile b/Gemfile index fd73ef40..d77ebd3a 100644 --- a/Gemfile +++ b/Gemfile @@ -21,9 +21,7 @@ gem "devise-guests" gem "faraday" gem "font-awesome-rails" gem "geoblacklight", "4.5.1" -gem "geoblacklight_sidecar_images", "1.1.2" gem "geo_combine" -gem "google-cloud-storage", "~> 1.11" gem "health-monitor-rails" gem "honeybadger" gem "jquery-rails" @@ -31,7 +29,6 @@ gem "lograge" gem "logstash-event" gem "loofah" gem "mail_form" -gem "mimemagic", "0.3.10" gem "modernizr-rails" gem "omniauth-cas", "~> 3.0" gem "omniauth-rails_csrf_protection", "~> 2.0" diff --git a/Gemfile.lock b/Gemfile.lock index 200a334f..d9450e1d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -172,7 +172,6 @@ GEM msgpack datadog-ruby_core_source (3.5.5) date (3.5.1) - declarative (0.0.20) deep_merge (1.2.2) deprecation (1.1.0) activesupport @@ -185,8 +184,6 @@ GEM devise-guests (0.8.3) devise diff-lcs (1.6.2) - digest-crc (0.7.0) - rake (>= 12.0.0, < 14.0.0) drb (2.2.3) dry-cli (1.4.1) dumb_delegator (1.1.0) @@ -204,8 +201,6 @@ GEM faraday-net_http (>= 2.0, < 3.5) json logger - faraday-follow_redirects (0.5.0) - faraday (>= 1, < 3) faraday-net_http (3.4.4) net-http (~> 0.5) faraday-net_http_persistent (2.3.1) @@ -246,14 +241,6 @@ GEM rgeo-geojson sprockets-rails (~> 3.0) vite_rails (~> 3.0) - geoblacklight_sidecar_images (1.1.2) - faraday (>= 2.0) - geoblacklight (~> 4.0) - image_processing (~> 1.6) - mimemagic (~> 0.3) - mini_magick (~> 4.9.4) - rails (>= 5.2, < 8.2) - statesman (>= 3.4) git (5.1.0) activesupport (>= 5.0) addressable (~> 2.8) @@ -261,36 +248,6 @@ GEM rchardet (~> 1.9) globalid (1.4.0) activesupport (>= 6.1) - google-apis-core (1.2.5) - addressable (~> 2.9) - faraday (~> 2.13) - faraday-follow_redirects (~> 0.3) - googleauth (~> 1.14) - mini_mime (~> 1.1) - multi_json (~> 1.11) - representable (~> 3.0) - retriable (>= 3.1, < 5.0) - google-apis-iamcredentials_v1 (0.28.0) - google-apis-core (>= 0.15.0, < 2.a) - google-apis-storage_v1 (0.66.0) - google-apis-core (>= 0.15.0, < 2.a) - google-cloud-core (1.9.0) - google-cloud-env (>= 1.0, < 3.a) - google-cloud-errors (~> 1.0) - google-cloud-env (2.4.0) - base64 (~> 0.2) - faraday (>= 1.0, < 3.a) - google-cloud-errors (1.7.0) - google-cloud-storage (1.62.0) - addressable (~> 2.8) - digest-crc (~> 0.4) - google-apis-core (>= 0.18, < 2) - google-apis-iamcredentials_v1 (~> 0.18) - google-apis-storage_v1 (>= 0.42) - google-cloud-core (~> 1.6) - googleauth (~> 1.9) - mini_mime (~> 1.0) - google-logging-utils (0.2.0) google-protobuf (4.36.0) bigdecimal rake (~> 13.3) @@ -314,14 +271,6 @@ GEM rake (~> 13.3) googleapis-common-protos-types (1.23.0) google-protobuf (~> 4.26) - googleauth (1.17.4) - faraday (>= 1.0, < 3.a) - google-cloud-env (~> 2.2) - google-logging-utils (~> 0.1) - jwt (>= 1.4, < 4.0) - os (>= 0.9, < 2.0) - pstore (~> 0.1) - signet (>= 0.16, < 2.a) handlebars_assets (0.23.10) execjs (~> 2.0) sprockets (>= 2.0.0) @@ -336,9 +285,6 @@ GEM ostruct i18n (1.15.2) concurrent-ruby (~> 1.0) - image_processing (1.14.0) - mini_magick (>= 4.9.5, < 6) - ruby-vips (>= 2.0.17, < 3) io-console (0.9.2) irb (1.18.0) pp (>= 0.6.0) @@ -356,8 +302,6 @@ GEM json-schema (6.2.0) addressable (~> 2.8) bigdecimal (>= 3.1, < 5) - jwt (3.2.0) - base64 kaminari (1.2.2) activesupport (>= 4.1.0) kaminari-actionview (= 1.2.2) @@ -416,10 +360,6 @@ GEM logger mime-types-data (~> 3.2025, >= 3.2025.0507) mime-types-data (3.2026.0701) - mimemagic (0.3.10) - nokogiri (~> 1) - rake - mini_magick (4.9.5) mini_mime (1.1.5) minitest (6.0.6) drb (~> 2.0) @@ -651,7 +591,6 @@ GEM opentelemetry-semantic_conventions (1.44.0) opentelemetry-api (~> 1.0) orm_adapter (0.5.0) - os (1.1.4) ostruct (0.6.3) parallel (2.1.0) parser (3.3.12.0) @@ -678,7 +617,6 @@ GEM pry-byebug (3.12.0) byebug (~> 13.0) pry (>= 0.13, < 0.17) - pstore (0.2.1) public_suffix (7.0.5) puma (8.0.2) nio4r (~> 2.0) @@ -751,16 +689,11 @@ GEM regexp_parser (2.12.0) reline (0.7.0) io-console (~> 0.5) - representable (3.2.0) - declarative (< 0.1.0) - trailblazer-option (>= 0.1.1, < 0.2.0) - uber (< 0.2.0) request_store (1.7.0) rack (>= 1.4) responders (3.2.0) actionpack (>= 7.0) railties (>= 7.0) - retriable (4.2.0) rexml (3.4.4) rgeo (3.1.0) rgeo-geojson (2.2.0) @@ -815,9 +748,6 @@ GEM rubocop-performance (>= 1.24) rubocop-rails (>= 2.30) ruby-progressbar (1.13.0) - ruby-vips (2.3.0) - ffi (~> 1.12) - logger rubyzip (3.5.0) sanitize (7.0.0) crass (~> 1.0.2) @@ -846,10 +776,6 @@ GEM rack (>= 3.2.0) redis-client (>= 0.29.0) sigdump (0.2.5) - signet (0.22.0) - addressable (~> 2.8) - faraday (>= 0.17.5, < 3.a) - jwt (>= 1.5, < 4.0) simple_form (5.4.1) actionpack (>= 7.0) activemodel (>= 7.0) @@ -882,13 +808,11 @@ GEM ostruct sshkit-interactive (0.3.0) sshkit (~> 1.12) - statesman (13.3.0) thor (1.5.0) tilt (2.9.0) timecop (0.9.11) timeout (0.6.1) track_open_instances (0.1.15) - trailblazer-option (0.1.2) tsort (0.2.0) turbolinks (5.2.1) turbolinks-source (~> 5.2) @@ -899,7 +823,6 @@ GEM railties (>= 3.1) tzinfo (2.0.6) concurrent-ruby (~> 1.0) - uber (0.1.0) unicode-display_width (3.2.0) unicode-emoji (~> 4.1) unicode-emoji (4.2.0) @@ -978,8 +901,6 @@ DEPENDENCIES font-awesome-rails geo_combine geoblacklight (= 4.5.1) - geoblacklight_sidecar_images (= 1.1.2) - google-cloud-storage (~> 1.11) health-monitor-rails honeybadger jquery-rails @@ -987,7 +908,6 @@ DEPENDENCIES logstash-event loofah mail_form - mimemagic (= 0.3.10) modernizr-rails omniauth-cas (~> 3.0) omniauth-rails_csrf_protection (~> 2.0) diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index ea54584b..621ff87b 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -13,7 +13,6 @@ //= require jquery //= require rails-ujs //= require twitter/typeahead -//= require aload // Required by Blacklight //= require popper @@ -25,7 +24,6 @@ //= stub modules/results //= require modules/map -//= require modules/thumbnail //= require modules/autocomplete //= require Leaflet.ExtraMarkers diff --git a/app/assets/javascripts/modules/results.js b/app/assets/javascripts/modules/results.js index 4d78a57e..68a15984 100644 --- a/app/assets/javascripts/modules/results.js +++ b/app/assets/javascripts/modules/results.js @@ -155,9 +155,6 @@ Blacklight.onLoad(function () { $('form.search-query-form.form-inline.home-search.navbar-form').prepend($doc.find('input[name=bbox]')[0]) } - // Reload thumbnail images - aload() - // Reload markers and listeners placeMarkers() setHoverListeners() diff --git a/app/assets/javascripts/modules/thumbnail.js b/app/assets/javascripts/modules/thumbnail.js deleted file mode 100644 index f89db227..00000000 --- a/app/assets/javascripts/modules/thumbnail.js +++ /dev/null @@ -1,4 +0,0 @@ -// asynchronously load images with aload.js -$(document).ready(function () { - aload() -}) diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index 7a847e11..f46097dc 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -14,4 +14,3 @@ @import 'geoblacklight'; @import 'pulmap'; @import 'leaflet-geosearch'; -@import 'geoblacklight_sidecar_images/gblsci'; diff --git a/app/assets/stylesheets/components/results.scss b/app/assets/stylesheets/components/results.scss index 1b6abafc..bf333061 100644 --- a/app/assets/stylesheets/components/results.scss +++ b/app/assets/stylesheets/components/results.scss @@ -14,6 +14,40 @@ margin: 0; padding: 0; } + + .index_title { + font-size: 1rem; + } + + .status-icons { + display: inline-block; + + span { + min-width: 0px; + } + } + + .thumbnail { + height: 100px; + width: 100px; + margin-left: auto; + margin-right: auto; + + img { + max-height: 160px; + width: inherit; + } + } + + .icon .blacklight-icons { + height: 4.5rem; + width: 4.5rem; + + svg { + height: 95%; + width: 95%; + } + } } .documentHeader.row { diff --git a/app/assets/stylesheets/components/thumbnail.scss b/app/assets/stylesheets/components/thumbnail.scss index 742bba24..c104b2f8 100644 --- a/app/assets/stylesheets/components/thumbnail.scss +++ b/app/assets/stylesheets/components/thumbnail.scss @@ -40,13 +40,6 @@ margin-top: 10px; } -// hides icon placeholder when thumbnail image is loaded -.thumbnail { - img[src]+span{ - display: none; - } -} - .media { display: -webkit-flex; /* Safari */ -webkit-flex-direction: row-reverse; /* Safari 6.1+ */ @@ -60,8 +53,6 @@ } } -[data-aload] { background-image: none !important; } - .more-info-area { width: 90px; float: right; diff --git a/app/models/solr_document.rb b/app/models/solr_document.rb index 34104864..0b343e17 100644 --- a/app/models/solr_document.rb +++ b/app/models/solr_document.rb @@ -25,21 +25,13 @@ def iiif_download false end - # Tests if record has a thumbnail reference for display on show page. - def thumbnail_reference? - return true if fetch(references.reference_field, {})["http://schema.org/thumbnailUrl"] - false + # Thumbnail image link + def thumbnail_url + references.thumbnail&.endpoint end - def sidecar - # Find or create, and set version - sidecar = SolrDocumentSidecar.where( - document_id: id, - document_type: self.class.to_s - ).first_or_create do |sc| - sc.version = _source["_version_"] - end - - sidecar + # Tests if record has a thumbnail reference + def thumbnail_reference? + thumbnail_url.present? end end diff --git a/app/views/catalog/_index_split_default.html.erb b/app/views/catalog/_index_split_default.html.erb index f9bb8e3b..75e03e76 100644 --- a/app/views/catalog/_index_split_default.html.erb +++ b/app/views/catalog/_index_split_default.html.erb @@ -16,16 +16,12 @@
- <% if document.sidecar.image.attached? %> - <% if document.sidecar.image.variable? %> - <%= image_tag document.sidecar.image.variant(resize: "200"), {class: 'mr-3'} %> - <% else %> - <%= image_tag document.sidecar.image, {class: 'mr-3'} %> - <% end %> + <% if document.thumbnail_reference? %> + <%= image_tag document.thumbnail_url, { class: 'mr-3', alt: '', loading: 'lazy' } %> <% else %> -
- <%= placeholder_thumbnail_icon(document[Settings.FIELDS.GEOM_TYPE], document) %> -
+
+ <%= placeholder_thumbnail_icon(document[Settings.FIELDS.GEOM_TYPE], document) %> +
<% end %>
diff --git a/app/views/catalog/_upper_metadata.html.erb b/app/views/catalog/_upper_metadata.html.erb index 2c3d05e0..bbc08288 100644 --- a/app/views/catalog/_upper_metadata.html.erb +++ b/app/views/catalog/_upper_metadata.html.erb @@ -11,13 +11,7 @@ <% if document.restricted? && document.thumbnail_reference? %>
Thumbnail:
- <% if document.sidecar.image.attached? %> - <% if document.sidecar.image.variable? %> - <%= image_tag document.sidecar.image.variant(resize: "200"), {class: 'mr-3'} %> - <% else %> - <%= image_tag document.sidecar.image, {class: 'mr-3'} %> - <% end %> - <% end %> + <%= image_tag document.thumbnail_url, { class: 'mr-3', alt: '', loading: 'lazy' } %>
<% end %> diff --git a/config/environments/production.rb b/config/environments/production.rb index ec6479fb..a2bd51ae 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -85,5 +85,4 @@ config.active_record.dump_schema_after_migration = false config.active_job.queue_adapter = :sidekiq - config.active_storage.service = :google end diff --git a/config/initializers/monkeypatches/constants.rb b/config/initializers/monkeypatches/constants.rb index 500a2cd5..16bbab57 100644 --- a/config/initializers/monkeypatches/constants.rb +++ b/config/initializers/monkeypatches/constants.rb @@ -2,7 +2,7 @@ # Overridden from: # https://github.com/geoblacklight/geoblacklight/blob/main/lib/geoblacklight/constants.rb -# Adds `cog` and `pmtiles` references +# Adds `cog`, `pmtiles`, and `thumbnail` references # If this work is merged upstream, this file can be removed. module Geoblacklight # Module to declare application level constants and lookup hash @@ -34,7 +34,8 @@ module Constants index_map: "https://openindexmaps.org", oembed: "https://oembed.com", cog: "https://github.com/cogeotiff/cog-spec", - pmtiles: "https://github.com/protomaps/PMTiles" + pmtiles: "https://github.com/protomaps/PMTiles", + thumbnail: "http://schema.org/thumbnailUrl" }.freeze end end diff --git a/config/initializers/statesman.rb b/config/initializers/statesman.rb deleted file mode 100644 index 6085cf93..00000000 --- a/config/initializers/statesman.rb +++ /dev/null @@ -1,7 +0,0 @@ -# frozen_string_literal: true - -require "statesman" - -Statesman.configure do - storage_adapter(Statesman::Adapters::ActiveRecord) -end diff --git a/config/schedule.rb b/config/schedule.rb index 856fc1f3..a336e629 100644 --- a/config/schedule.rb +++ b/config/schedule.rb @@ -13,20 +13,6 @@ rake "sitemap:refresh" end -# Run a daily rake task to harvest new thumbnail images. -# These could be from new records or from records -# where there was a previous error during harvesting. -every :day, at: "11:00 PM", roles: [ :index ] do - rake "gblsci:images:harvest_new" -end - -# Run a weekly rake task to harvest thumbnail in incomplete states. -# These could be from new records or from records -# where there was a previous error during harvesting. -every :saturday, at: "11:00 AM", roles: [ :index ] do - rake "gblsci:images:harvest_retry" -end - every 1.day, at: "10:00pm", roles: [ :db ] do rake "blacklight:delete_old_searches" end diff --git a/config/settings.yml b/config/settings.yml index cd0139d6..66553dfa 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -183,12 +183,11 @@ SIDEBAR_STATIC_MAP: - 'iiif' - 'iiif_manifest' -# Settings for thumbnail image generation and GeoServer proxy +# Settings for the GeoServer proxy INSTITUTION_LOCAL_NAME: 'Princeton' INSTITUTION_GEOSERVER_URL: <%= ENV['PRINCETON_GEOSERVER_URL'] || "https://geoserver.princeton.edu" %> PROXY_GEOSERVER_URL: <%= ENV['PROXY_GEOSERVER_URL'] || "http://localhost:3000" %> PROXY_GEOSERVER_AUTH: <%= ENV['PROXY_GEOSERVER_AUTH'] || "Basic base64encodedusername:password" %> -GBLSI_THUMBNAIL_FIELD: 'thumbnail_path_ss' # Metadata shown in tool card METADATA_SHOWN: diff --git a/config/storage.yml b/config/storage.yml index f2e2c390..84f724b1 100644 --- a/config/storage.yml +++ b/config/storage.yml @@ -1,9 +1,3 @@ local: service: Disk root: <%= Rails.root.join("tmp","storage") %> - -google: - service: GCS - credentials: <%= ENV["GOOGLE_CLOUD_CREDENTIALS"] %> - project: <%= ENV["GOOGLE_CLOUD_PROJECT"] %> - bucket: <%= ENV["GOOGLE_CLOUD_BUCKET"] %> diff --git a/db/migrate/20260909190000_drop_sidecar_image_tables.rb b/db/migrate/20260909190000_drop_sidecar_image_tables.rb new file mode 100644 index 00000000..02a45cb9 --- /dev/null +++ b/db/migrate/20260909190000_drop_sidecar_image_tables.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +# Drops the tables installed by the geoblacklight_sidecar_images gem. Thumbnails +# now come from the http://schema.org/thumbnailUrl reference published in each +# document's dct_references field, so harvested sidecar images are unused. +class DropSidecarImageTables < ActiveRecord::Migration[8.1] + def change + drop_table :sidecar_image_transitions do |t| + t.string :to_state, null: false + t.text :metadata + t.integer :sort_key, null: false + t.bigint :solr_document_sidecar_id, null: false + t.boolean :most_recent + t.timestamps null: false + + t.foreign_key :solr_document_sidecars + t.index [ :solr_document_sidecar_id, :most_recent ], + name: "index_sidecar_image_transitions_parent_most_recent", unique: true + t.index [ :solr_document_sidecar_id, :sort_key ], + name: "index_sidecar_image_transitions_parent_sort", unique: true + end + + drop_table :solr_document_sidecars do |t| + t.string :document_id + t.string :document_type + t.string :image + t.bigint :version + t.timestamps null: false + + t.index [ :document_type, :document_id ], name: "sidecars_solr_document" + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 1b8b94af..940e56b8 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,28 +10,28 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.2].define(version: 2022_05_12_201532) do +ActiveRecord::Schema[8.1].define(version: 2026_09_09_190000) do # These are extensions that must be enabled in order to support this database - enable_extension "plpgsql" + enable_extension "pg_catalog.plpgsql" create_table "active_storage_attachments", force: :cascade do |t| - t.string "name", null: false - t.string "record_type", null: false - t.bigint "record_id", null: false t.bigint "blob_id", null: false t.datetime "created_at", null: false + t.string "name", null: false + t.bigint "record_id", null: false + t.string "record_type", null: false t.index ["blob_id"], name: "index_active_storage_attachments_on_blob_id" t.index ["record_type", "record_id", "name", "blob_id"], name: "index_active_storage_attachments_uniqueness", unique: true end create_table "active_storage_blobs", force: :cascade do |t| - t.string "key", null: false - t.string "filename", null: false - t.string "content_type" - t.text "metadata" t.bigint "byte_size", null: false t.string "checksum", null: false + t.string "content_type" t.datetime "created_at", null: false + t.string "filename", null: false + t.string "key", null: false + t.text "metadata" t.string "service_name", null: false t.index ["key"], name: "index_active_storage_blobs_on_key", unique: true end @@ -43,63 +43,41 @@ end create_table "bookmarks", id: :serial, force: :cascade do |t| - t.integer "user_id", null: false - t.string "user_type" + t.datetime "created_at" t.string "document_id" + t.string "document_type" t.string "title" - t.datetime "created_at" t.datetime "updated_at" - t.string "document_type" + t.integer "user_id", null: false + t.string "user_type" t.index ["user_id"], name: "index_bookmarks_on_user_id" end create_table "searches", id: :serial, force: :cascade do |t| + t.datetime "created_at" t.text "query_params" + t.datetime "updated_at" t.integer "user_id" t.string "user_type" - t.datetime "created_at" - t.datetime "updated_at" t.index ["user_id"], name: "index_searches_on_user_id" end - create_table "sidecar_image_transitions", force: :cascade do |t| - t.string "to_state", null: false - t.text "metadata" - t.integer "sort_key", null: false - t.bigint "solr_document_sidecar_id", null: false - t.boolean "most_recent" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.index ["solr_document_sidecar_id", "most_recent"], name: "index_sidecar_image_transitions_parent_most_recent", unique: true - t.index ["solr_document_sidecar_id", "sort_key"], name: "index_sidecar_image_transitions_parent_sort", unique: true - end - - create_table "solr_document_sidecars", force: :cascade do |t| - t.string "document_id" - t.string "document_type" - t.string "image" - t.bigint "version" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.index ["document_type", "document_id"], name: "sidecars_solr_document" - end - create_table "users", id: :serial, force: :cascade do |t| + t.datetime "created_at", null: false + t.datetime "current_sign_in_at" + t.string "current_sign_in_ip" t.string "email", default: "", null: false t.string "encrypted_password", default: "", null: false - t.string "reset_password_token" - t.datetime "reset_password_sent_at" - t.datetime "remember_created_at" - t.integer "sign_in_count", default: 0, null: false - t.datetime "current_sign_in_at" + t.boolean "guest", default: false t.datetime "last_sign_in_at" - t.string "current_sign_in_ip" t.string "last_sign_in_ip" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.boolean "guest", default: false t.string "provider" + t.datetime "remember_created_at" + t.datetime "reset_password_sent_at" + t.string "reset_password_token" + t.integer "sign_in_count", default: 0, null: false t.string "uid" + t.datetime "updated_at", null: false t.string "username" t.index ["email"], name: "index_users_on_email", unique: true t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true @@ -108,5 +86,4 @@ add_foreign_key "active_storage_attachments", "active_storage_blobs", column: "blob_id" add_foreign_key "active_storage_variant_records", "active_storage_blobs", column: "blob_id" - add_foreign_key "sidecar_image_transitions", "solr_document_sidecars" end diff --git a/lib/tasks/thumbnails.rake b/lib/tasks/thumbnails.rake deleted file mode 100644 index 7db239c0..00000000 --- a/lib/tasks/thumbnails.rake +++ /dev/null @@ -1,59 +0,0 @@ -# frozen_string_literal: true - -namespace :gblsci do - namespace :images do - desc "Harvest all new thumbnails" - task harvest_new: :environment do - query = "*:*" - index = Geoblacklight::SolrDocument.index - results = index.send_and_receive(index.blacklight_config.solr_path, - q: query, - fl: "*", - rows: 100_000_000) - results.docs.each do |document| - if document.sidecar.image_state.last_transition.nil? - GeoblacklightSidecarImages::StoreImageJob.perform_later(document.id) - end - rescue Blacklight::Exceptions::RecordNotFound - next - end - end - - desc "Harvest all images without built-in pause between records" - task harvest_all_quick: :environment do - query = "*:*" - index = Geoblacklight::SolrDocument.index - results = index.send_and_receive(index.blacklight_config.solr_path, - q: query, - fl: "*", - rows: 100_000_000) - results.docs.each do |document| - GeoblacklightSidecarImages::StoreImageJob.perform_later(document.id) - rescue Blacklight::Exceptions::RecordNotFound - next - end - end - - desc "Harvest images by solr query" - task :harvest_by_query, [ :query ] => [ :environment ] do |_t, args| - raise 'Please supply required arguments [query]. harvest_by_query["layer_slug_s:*"]' unless args[:query] - query = args[:query] - begin - index = Geoblacklight::SolrDocument.index - results = index.send_and_receive(index.blacklight_config.solr_path, - q: query, - fl: "*", - rows: 100_000_000) - num_found = results.response[:numFound] - doc_counter = 0 - results.docs.each do |document| - doc_counter += 1 - puts "#{document[:layer_slug_s]} (#{doc_counter}/#{num_found})" - GeoblacklightSidecarImages::StoreImageJob.perform_later(document.id) - rescue Blacklight::Exceptions::RecordNotFound - next - end - end - end - end -end diff --git a/spec/features/bbox_overlay_spec.rb b/spec/features/bbox_overlay_spec.rb index 6c9b560a..cdee6d31 100644 --- a/spec/features/bbox_overlay_spec.rb +++ b/spec/features/bbox_overlay_spec.rb @@ -3,8 +3,6 @@ require "rails_helper" describe "leaflet bbox overlay", js: true do - let(:thumbnails_controller) { ThumbnailsController.new } - it "renders for restricted image works" do visit solr_document_path("stanford-cg357zz0321") expect(page).to have_css(".leaflet-overlay-pane > svg") diff --git a/spec/features/search_spec.rb b/spec/features/search_spec.rb index d14490e0..aade5510 100644 --- a/spec/features/search_spec.rb +++ b/spec/features/search_spec.rb @@ -69,8 +69,8 @@ end it "thumbnails in the results link to the items" do - visit "/?q=" - expect(page).to have_css ".document .row .thumbnail .placeholder a" - expect(first(".document .row .thumbnail .placeholder a")[:href]).to include("/catalog/") + visit "/?q=Dublin" + expect(page).to have_css ".document .row .thumbnail img[src^='https://iiif-cloud.princeton.edu/iiif/2/']" + expect(page).to have_css ".document .row .index_title a[href^='/catalog/princeton-kk91fn37z']" end end diff --git a/spec/models/solr_document_spec.rb b/spec/models/solr_document_spec.rb index abd76936..05c394c2 100644 --- a/spec/models/solr_document_spec.rb +++ b/spec/models/solr_document_spec.rb @@ -21,4 +21,22 @@ end end end + + describe "#thumbnail_url" do + context "when the document has a thumbnail reference" do + it "returns the url" do + document = SolrDocument.find("princeton-kk91fn37z") + expect(document.thumbnail_url).to start_with "https://iiif-cloud.princeton.edu/iiif/2/" + expect(document.thumbnail_reference?).to be true + end + end + + context "when the document has no thumbnail reference" do + it "returns nil" do + document = SolrDocument.find("princeton-fk4bk1p41f") + expect(document.thumbnail_url).to be_nil + expect(document.thumbnail_reference?).to be false + end + end + end end diff --git a/vendor/assets/javascripts/aload.js b/vendor/assets/javascripts/aload.js deleted file mode 100644 index f197e30a..00000000 --- a/vendor/assets/javascripts/aload.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * aload - v1.2.2 - * - * Copyright (c) 2016, @pazguille - * Released under the MIT license. - */ -/** - * Loads images, scripts, styles, iframes, videos and audios asynchronously. - * @param {NodeList} [nodes] - A NodeList of elements. By default, it is the result of `querySelectorAll('[data-aload]')`. - * @returns {NodeList} - */ -function aload(nodes) { - 'use strict'; - - var attribute = 'data-aload'; - - nodes = nodes || window.document.querySelectorAll('[' + attribute + ']'); - - if (nodes.length === undefined) { - nodes = [nodes]; - } - - [].forEach.call(nodes, function (node) { - node[ node.tagName !== 'LINK' ? 'src' : 'href' ] = node.getAttribute(attribute); - node.removeAttribute(attribute); - }); - - return nodes; -} From 9e8cd4d9ebde9bdc9fbae1ac5bf23d662fb5c88e Mon Sep 17 00:00:00 2001 From: Eliot Jordan Date: Wed, 9 Sep 2026 15:39:06 -0500 Subject: [PATCH 3/3] Remove Geoserver Controller --- app/controllers/geoserver_controller.rb | 67 ----------------------- app/models/solr_document.rb | 1 - config/settings.yml | 6 -- spec/requests/geoserver_requests_spec.rb | 70 ------------------------ 4 files changed, 144 deletions(-) delete mode 100644 app/controllers/geoserver_controller.rb delete mode 100644 spec/requests/geoserver_requests_spec.rb diff --git a/app/controllers/geoserver_controller.rb b/app/controllers/geoserver_controller.rb deleted file mode 100644 index 05ff75d3..00000000 --- a/app/controllers/geoserver_controller.rb +++ /dev/null @@ -1,67 +0,0 @@ -# frozen_string_literal: true - -class GeoserverController < ApplicationController - def index - url = Settings.INSTITUTION_GEOSERVER_URL - url += "/geoserver/" unless /geoserver\/?$/.match?(url) - url += "/" unless url.last == "/" - path = params[:path] - query = request.query_string - uri = Addressable::URI.parse("#{url}#{path}?#{query}") - - proxied_response = Faraday.get(uri) do |req| - req.headers["Authorization"] = Settings.PROXY_GEOSERVER_AUTH - end - - # Get the status code - status_code = proxied_response.status - case status_code - when 200..299 - proxy_success(proxied_response, status_code) - when 300..399 - proxy_redirect(proxied_response, status_code) - when 400..499 - Rails.logger.error("Authorization failure for GeoServer request: #{uri}: #{proxied_response.body}") - head status_code - when 500..599 - Rails.logger.error("Internal failure encountered for GeoServer request: #{uri}: #{proxied_response.body}") - head status_code - end - end - - private - - def headers - { - "Authorization" => Settings.PROXY_GEOSERVER_AUTH - } - end - - def proxy_redirect(proxied_response, code) - redirect_url = proxied_response["Location"] - request_uri = Addressable::URI.parse(request.url) - redirect_uri = Addressable::URI.parse(redirect_url) - - # Make redirect uri absolute if it's relative by - # joining it with the request url - redirect_uri = request_uri.join(redirect_url) if redirect_uri.host.nil? - - unless redirect_uri.port.nil? - # Make sure it's consistent with our request port - redirect_uri.port = request.port if redirect_uri.port == proxy_uri.port - end - - redirect_to redirect_uri.to_s, status: code - end - - def proxy_success(proxied_response, code) - content_type = proxied_response["Content-Type"] - body = proxied_response.body.to_s - - if content_type&.match(/image/) - send_data body, content_type: content_type, disposition: "inline", status: code - else - render body: body, content_type: content_type, status: code - end - end -end diff --git a/app/models/solr_document.rb b/app/models/solr_document.rb index 0b343e17..b31b0ab9 100644 --- a/app/models/solr_document.rb +++ b/app/models/solr_document.rb @@ -4,7 +4,6 @@ class SolrDocument include Blacklight::Solr::Document include Geoblacklight::SolrDocument include SanbornConcern - include WmsRewriteConcern self.unique_key = "layer_slug_s" diff --git a/config/settings.yml b/config/settings.yml index 66553dfa..a30bee3e 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -183,12 +183,6 @@ SIDEBAR_STATIC_MAP: - 'iiif' - 'iiif_manifest' -# Settings for the GeoServer proxy -INSTITUTION_LOCAL_NAME: 'Princeton' -INSTITUTION_GEOSERVER_URL: <%= ENV['PRINCETON_GEOSERVER_URL'] || "https://geoserver.princeton.edu" %> -PROXY_GEOSERVER_URL: <%= ENV['PROXY_GEOSERVER_URL'] || "http://localhost:3000" %> -PROXY_GEOSERVER_AUTH: <%= ENV['PROXY_GEOSERVER_AUTH'] || "Basic base64encodedusername:password" %> - # Metadata shown in tool card METADATA_SHOWN: - 'fgdc' diff --git a/spec/requests/geoserver_requests_spec.rb b/spec/requests/geoserver_requests_spec.rb deleted file mode 100644 index 7d4461b8..00000000 --- a/spec/requests/geoserver_requests_spec.rb +++ /dev/null @@ -1,70 +0,0 @@ -# frozen_string_literal: true - -require "rails_helper" - -describe "Geoserver requests", type: :request do - describe "#index" do - let(:query) { "service=WMS&request=GetMap&layers=restricted-figgy%3Ap-735d9ddb-d293-4454-b85b-e4d972f0708a&styles=&format=image%2Fpng&transparent=true&version=1.1.1&tiled=true&CRS=EPSG%3A900913&width=512&height=512&srs=EPSG%3A3857&bbox=-9705668.103538541,3443946.746416902,-9392582.03568246,3757032.8142729844" } - let(:proxied_response) { instance_double(Faraday::Response) } - let(:user) { FactoryBot.create(:user) } - - before do - sign_in user - allow(Faraday).to receive(:get).and_return(proxied_response) - end - - it "proxies GET requests to the GeoServer installation" do - allow(proxied_response).to receive(:status).and_return(200) - allow(proxied_response).to receive(:body).and_return("data") - allow(proxied_response).to receive(:[]).with("Content-Type").and_return("application/octet-stream") - - get "/geoserver/restricted-figgy/wms?#{query}" - - expect(response).to be_successful - expect(response.body).not_to be_empty - end - - context "when the response redirects the client" do - before do - allow(proxied_response).to receive(:status).and_return(301) - allow(proxied_response).to receive(:[]).with("Location").and_return("https://geoserver.institution.edu/geoserver") - end - - it "handles redirect responses from the GeoServer installation" do - get "/geoserver/restricted-figgy/wms?#{query}" - - expect(response).to redirect_to "https://geoserver.institution.edu/geoserver" - end - end - - context "when the response indicates an authorization failure" do - before do - allow(proxied_response).to receive(:status).and_return(403) - allow(proxied_response).to receive(:body).and_return("message") - allow(Rails.logger).to receive(:error) - end - - it "handles and logs authorization errors" do - get "/geoserver/restricted-figgy/wms?#{query}" - - expect(response.status).to eq 403 - expect(Rails.logger).to have_received(:error).with("Authorization failure for GeoServer request: https://geoserver.princeton.edu/geoserver/wms?#{query}: message") - end - end - - context "when the response indicates a internal service failure" do - before do - allow(proxied_response).to receive(:status).and_return(500) - allow(proxied_response).to receive(:body).and_return("message") - allow(Rails.logger).to receive(:error) - end - - it "handles and logs service errors" do - get "/geoserver/restricted-figgy/wms?#{query}" - - expect(response.status).to eq 500 - expect(Rails.logger).to have_received(:error).with("Internal failure encountered for GeoServer request: https://geoserver.princeton.edu/geoserver/wms?#{query}: message") - end - end - end -end