geoblacklight_sidecar_images 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +8 -0
  3. data/README.md +27 -4
  4. data/Rakefile +2 -0
  5. data/app/controllers/geoblacklight_sidecar_images/application_controller.rb +2 -0
  6. data/app/helpers/geoblacklight_sidecar_images/application_helper.rb +2 -0
  7. data/app/jobs/geoblacklight_sidecar_images/application_job.rb +2 -0
  8. data/app/mailers/geoblacklight_sidecar_images/application_mailer.rb +2 -0
  9. data/app/models/geoblacklight_sidecar_images/application_record.rb +2 -0
  10. data/config/routes.rb +2 -0
  11. data/lib/generators/geoblacklight_sidecar_images/install_generator.rb +2 -1
  12. data/lib/generators/geoblacklight_sidecar_images/templates/jobs/store_image_job.rb +2 -0
  13. data/lib/generators/geoblacklight_sidecar_images/templates/models/concerns/wms_rewrite_concern.rb +2 -0
  14. data/lib/generators/geoblacklight_sidecar_images/templates/models/solr_document_sidecar.rb +2 -0
  15. data/lib/generators/geoblacklight_sidecar_images/templates/services/image_service.rb +22 -1
  16. data/lib/generators/geoblacklight_sidecar_images/templates/services/image_service/dynamic_map_layer.rb +2 -0
  17. data/lib/generators/geoblacklight_sidecar_images/templates/services/image_service/iiif.rb +2 -0
  18. data/lib/generators/geoblacklight_sidecar_images/templates/services/image_service/image_map_layer.rb +2 -0
  19. data/lib/generators/geoblacklight_sidecar_images/templates/services/image_service/tiled_map_layer.rb +2 -0
  20. data/lib/generators/geoblacklight_sidecar_images/templates/services/image_service/wms.rb +2 -0
  21. data/lib/generators/geoblacklight_sidecar_images/templates/uploaders/image_uploader.rb +2 -0
  22. data/lib/generators/geoblacklight_sidecar_images/templates/views/catalog/_index_split_default.html.erb +9 -12
  23. data/lib/geoblacklight_sidecar_images.rb +2 -0
  24. data/lib/geoblacklight_sidecar_images/engine.rb +2 -0
  25. data/lib/geoblacklight_sidecar_images/version.rb +3 -1
  26. data/screenshot.png +0 -0
  27. data/spec/fixtures/files/umn_solr_thumb.json +34 -0
  28. data/spec/models/solr_document_sidecar_spec.rb +2 -0
  29. data/spec/models/solr_document_spec.rb +2 -0
  30. data/spec/rails_helper.rb +2 -0
  31. data/spec/services/image_service_spec.rb +16 -2
  32. data/spec/spec_helper.rb +1 -0
  33. data/spec/test_app_templates/lib/generators/test_app_generator.rb +2 -0
  34. metadata +5 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cc93c6c4a8f6d2660d5b56b672c6cf1c335a3b2f
4
- data.tar.gz: 2e0427f83e4e4a4046de0717ade4bf356ed08779
3
+ metadata.gz: 3233e1aaff539c85ba41a37cd3e87b7a8ff083d7
4
+ data.tar.gz: 330ef9966073b81e5fdc539287e25ef2333b98f8
5
5
  SHA512:
6
- metadata.gz: 9693ebfde32f4c886734d1a42aa65b2027cec8093d9d3720bfb2903642d4cf036ab5a830a280234852ff3038d7fe29076672bb9dc34a9ee5ca616957a890438d
7
- data.tar.gz: ed64611169594cfbdd8e83f8823a3df3f5ac31caa49d21293d32f276cb0ba9dbd07935da0055ff88b29a623a306942aa5a5f268714c937f4dc514718565ac95b
6
+ metadata.gz: 5a8af424a1f10bec71d607c4997810b054aab5948b662a83cdf2325ed3005cf90d6dc0bd0b5a496a2a0303d454941b38b968e9c81c3fd8b3c56a97fc36ebfcf7
7
+ data.tar.gz: d3fa62b61a58cbb07edd93ad94b1e93c2e652d9a06947a2011c9a40ffa30afd8949e33e3d68c3d7072f8c085bb3d82f794592c4f2984f6552e9b5711a2272542
data/.rubocop.yml CHANGED
@@ -19,6 +19,14 @@ AllCops:
19
19
  - 'template.rb'
20
20
  - Gemfile
21
21
 
22
+ Lint/RescueException:
23
+ Exclude:
24
+ - 'lib/generators/geoblacklight_sidecar_images/templates/services/image_service.rb'
25
+
26
+ Metrics/BlockLength:
27
+ Exclude:
28
+ - 'spec/**/*'
29
+
22
30
  Metrics/LineLength:
23
31
  Max: 100
24
32
  Exclude:
data/README.md CHANGED
@@ -3,12 +3,16 @@
3
3
  [![Build Status](https://travis-ci.org/ewlarson/geoblacklight_sidecar_images.svg?branch=master)](https://travis-ci.org/ewlarson/geoblacklight_sidecar_images)
4
4
  [![Maintainability](https://api.codeclimate.com/v1/badges/88c14165af5459963011/maintainability)](https://codeclimate.com/github/ewlarson/geoblacklight_sidecar_images/maintainability)
5
5
  [![Coverage Status](https://coveralls.io/repos/github/ewlarson/geoblacklight_sidecar_images/badge.svg?branch=master)](https://coveralls.io/github/ewlarson/geoblacklight_sidecar_images?branch=master)
6
+ [![Gem Version](https://badge.fury.io/rb/geoblacklight_sidecar_images.svg)](https://badge.fury.io/rb/geoblacklight_sidecar_images)
6
7
 
7
8
  Store local copies of remote imagery in GeoBlacklight.
8
9
 
9
10
  ## Description
10
11
  This GeoBlacklight plugin helps capture remote images from geo web services and save them locally. It borrows the concept of a [SolrDocumentSidecar](https://github.com/projectblacklight/spotlight/blob/master/app/models/spotlight/solr_document_sidecar.rb) from [Spotlight](https://github.com/projectblacklight/spotlight), to have an ActiveRecord-based "sidecar" to match each non-AR SolrDocument. This allows us to use [carrierwave](https://github.com/carrierwaveuploader/carrierwave) to attach images to our documents.
11
12
 
13
+ ### Example Screenshot
14
+ ![Screenshot](screenshot.png)
15
+
12
16
  ## Requirements
13
17
 
14
18
  * [GeoBlacklight](https://github.com/geoblacklight/geoblacklight)
@@ -65,6 +69,25 @@ rake geoblacklight_sidecar_images:images:precache_all
65
69
  rake geoblacklight_sidecar_images:images:precache_id['minnesota-iiif-jpg-83f4648a-125c-4000-a12f-aba2b432e7cd']
66
70
  ```
67
71
 
72
+ ## Prioritize Solr Thumbnail Field URIs
73
+
74
+ If you add a thumbnail uri to your geoblacklight solr documents...
75
+
76
+ ### Example Doc
77
+
78
+ ```json
79
+ {
80
+ ...
81
+ "dc_format_s":"TIFF",
82
+ "dc_creator_sm":["Minnesota. Department of Highways."],
83
+ "thumbnail_path_ss":"https://umedia.lib.umn.edu/sites/default/files/imagecache/square300/reference/562/image/jpeg/1089695.jpg",
84
+ "dc_type_s":"Still image",
85
+ ...
86
+ }
87
+ ```
88
+
89
+ Then you can edit your GeoBlacklight settings.yml file to point at that solr field (Settings.GBLSI_THUMBNAIL_FIELD). Any docs in your index that have a value for that field will harvest the image at that URI instead of trying to retrieve an image via IIIF or the other web services.
90
+
68
91
  ## Development
69
92
 
70
93
  ```bash
@@ -77,8 +100,8 @@ Now you'll have an instance of GBLSI running. Follow the rake tasks above to ing
77
100
 
78
101
  ## TODOs
79
102
 
80
- * 0.0.1 - Initial gem
81
- * 0.1.0 - Forgo attaching placeholder imagery
82
- * 0.2.0 - Prioritize local thumbnail solr field
103
+ * ~~0.0.1 - Initial gem~~
104
+ * ~~0.1.0 - Prioritize local thumbnail solr field~~
105
+ * 0.2.0 - Forgo attaching placeholder imagery
83
106
  * 0.3.0 - Add Statesman (state machine library)
84
- * Future - Rails 5.2 branch / ActionStorage
107
+ * 1.0.0 - Rails 5.2 branch / Switch to ActionStorage
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  begin
2
4
  require 'bundler/setup'
3
5
  rescue LoadError
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module GeoblacklightSidecarImages
2
4
  class ApplicationController < ActionController::Base
3
5
  protect_from_forgery with: :exception
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module GeoblacklightSidecarImages
2
4
  module ApplicationHelper
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module GeoblacklightSidecarImages
2
4
  class ApplicationJob < ActiveJob::Base
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module GeoblacklightSidecarImages
2
4
  class ApplicationMailer < ActionMailer::Base
3
5
  default from: 'from@example.com'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module GeoblacklightSidecarImages
2
4
  class ApplicationRecord < ActiveRecord::Base
3
5
  self.abstract_class = true
data/config/routes.rb CHANGED
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  GeoblacklightSidecarImages::Engine.routes.draw do
2
4
  end
@@ -11,7 +11,8 @@ module GeoblacklightSidecarImages
11
11
  "INSTITUTION_LOCAL_NAME: 'Princeton'
12
12
  INSTITUTION_GEOSERVER_URL: 'https://geoserver.princeton.edu'
13
13
  PROXY_GEOSERVER_URL: 'http://localhost:3000'
14
- PROXY_GEOSERVER_AUTH: 'Basic base64encodedusername:password'"
14
+ PROXY_GEOSERVER_AUTH: 'Basic base64encodedusername:password'
15
+ GBLSI_THUMBNAIL_FIELD: 'thumbnail_path_ss'"
15
16
  end
16
17
  end
17
18
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class StoreImageJob < ApplicationJob
2
4
  queue_as :default
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module WmsRewriteConcern
2
4
  extend Geoblacklight::SolrDocument
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ##
2
4
  # Metadata for indexed documents
3
5
  class SolrDocumentSidecar < ApplicationRecord
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rack/mime'
2
4
 
3
5
  class ImageService
@@ -65,6 +67,19 @@ class ImageService
65
67
  Settings.PROXY_GEOSERVER_AUTH != 'Basic base64encodedusername:password'
66
68
  end
67
69
 
70
+ # Tests if local thumbnail method is configured
71
+ def gblsi_thumbnail_field?
72
+ Settings.GBLSI_THUMBNAIL_FIELD
73
+ end
74
+
75
+ def gblsi_thumbnail_uri
76
+ if gblsi_thumbnail_field? && @document[Settings.GBLSI_THUMBNAIL_FIELD]
77
+ @document[Settings.GBLSI_THUMBNAIL_FIELD]
78
+ else
79
+ false
80
+ end
81
+ end
82
+
68
83
  def placeholder_base_path
69
84
  Rails.root.join('app', 'assets', 'images')
70
85
  end
@@ -111,6 +126,10 @@ class ImageService
111
126
  placeholder_data[:type]
112
127
  rescue Faraday::Error::TimeoutError
113
128
  placeholder_data[:type]
129
+
130
+ # Rescuing Exception intentionally
131
+ rescue Exception
132
+ placeholder_data[:type]
114
133
  end
115
134
 
116
135
  # Gets thumbnail image from URL. On error, returns document's placeholder image.
@@ -134,7 +153,9 @@ class ImageService
134
153
  # dct references is used instead.
135
154
  def image_url
136
155
  @image_url ||= begin
137
- if restricted_scanned_map?
156
+ if gblsi_thumbnail_uri
157
+ gblsi_thumbnail_uri
158
+ elsif restricted_scanned_map?
138
159
  image_reference
139
160
  elsif restricted_wms_layer? && !geoserver_credentials_valid?
140
161
  image_reference
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class ImageService
2
4
  module DynamicMapLayer
3
5
  ##
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class ImageService
2
4
  module Iiif
3
5
  ##
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class ImageService
2
4
  module ImageMapLayer
3
5
  ##
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class ImageService
2
4
  module TiledMapLayer
3
5
  ##
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class ImageService
2
4
  module Wms
3
5
  ##
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class ImageUploader < CarrierWave::Uploader::Base
2
4
  # Include RMagick or MiniMagick support:
3
5
  # include CarrierWave::RMagick
@@ -1,13 +1,5 @@
1
1
  <% # header bar for doc items in index view -%>
2
2
  <%= content_tag :div, class: 'documentHeader row', data: { layer_id: document.id, bbox: document.bounding_box_as_wsen } do %>
3
- <div class='more-info-area-split'>
4
- <div class='status-icons'>
5
- <%= render partial: 'header_icons', locals: { document: document } %>
6
- </div>
7
- <div class="thumbnail">
8
- <img src="<%=document.sidecar.image_url%>"/>
9
- </div>
10
- </div>
11
3
  <div class="document-wrapper">
12
4
  <h3 class="index_title col-sm-9s cosl-lg-10 text-span">
13
5
  <% counter = document_counter_with_offset(document_counter) %>
@@ -17,10 +9,15 @@
17
9
  <%= link_to_document document, document_show_link_field(document), counter: counter, title: document[blacklight_config.index.title_field] %>
18
10
  </h3>
19
11
  <div class='col-xs-12'>
20
- <div>
21
- <small>
22
- <%= geoblacklight_present(:index_fields_display, document) %>
23
- </small>
12
+ <div class='media'>
13
+ <div class='media-left'>
14
+ <img class='media-object' src="<%=document.sidecar.image_url(:square)%>"/>
15
+ </div>
16
+ <div class='media-body'>
17
+ <small>
18
+ <%= geoblacklight_present(:index_fields_display, document) %>
19
+ </small>
20
+ </div>
24
21
  </div>
25
22
  </div>
26
23
  </div>
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'geoblacklight_sidecar_images/engine'
2
4
 
3
5
  module GeoblacklightSidecarImages
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module GeoblacklightSidecarImages
2
4
  class Engine < ::Rails::Engine
3
5
  isolate_namespace GeoblacklightSidecarImages
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module GeoblacklightSidecarImages
2
- VERSION = '0.0.2'.freeze
4
+ VERSION = '0.1.0'.freeze
3
5
  end
data/screenshot.png ADDED
Binary file
@@ -0,0 +1,34 @@
1
+ {
2
+ "dc_description_s":"Cartographic Details: Scale approximately 1:1,530,000. Description based on: 1932 sheet. Each sheet lists the Commissioner of highways and the Chief Engineer. On verso: Distance tables for various cities in Minnesota.",
3
+ "layer_modified_dt":"2017-06-12T13:36:50Z",
4
+ "solr_geom":"ENVELOPE(-97.2509765625, -90.9228515625, 49.3787965644, 43.4648808289)",
5
+ "dct_references_s":"{\"http://schema.org/url\":\"http://purl.umn.edu/231125\",\"http://schema.org/downloadUrl\":\"https://umedia.lib.umn.edu/sites/default/files/archive/562/image/tiff/1089695.tif\",\"http://iiif.io/api/image\":\"https://umedia.lib.umn.edu/fcgi-bin/iipsrv.fcgi?IIIF=sites/default/files/reference/562/image/jp2/1089695.jp2/info.json\"}",
6
+ "dc_rights_s":"Public",
7
+ "uuid":"aaf63e35-3d5f-4e62-b59d-377f008e9aad",
8
+ "dct_provenance_s":"Minnesota",
9
+ "dc_subject_sm":["Roads -- Minnesota -- Maps",
10
+ "Minnesota -- Distances -- Tables",
11
+ "Minnesota -- Maps",
12
+ "Maps"],
13
+ "dct_temporal_sm":["1925"],
14
+ "layer_slug_s":"aaf63e35-3d5f-4e62-b59d-377f008e9aad",
15
+ "dc_format_s":"TIFF",
16
+ "dc_creator_sm":["Minnesota. Department of Highways."],
17
+ "thumbnail_path_ss":"https://umedia.lib.umn.edu/sites/default/files/imagecache/square300/reference/562/image/jpeg/1089695.jpg",
18
+ "dc_type_s":"Still image",
19
+ "dc_identifier_s":"aaf63e35-3d5f-4e62-b59d-377f008e9aad",
20
+ "dc_relation_sm":["http://sws.geonames.org/5037779/about/rdf"],
21
+ "dct_isPartOf_sm":["John R. Borchert Map Library"],
22
+ "solr_year_i":1925,
23
+ "dct_spatial_sm":["Minnesota, United States"],
24
+ "dc_publisher_sm":["The Department"],
25
+ "layer_id_s":"urn:aaf63e35-3d5f-4e62-b59d-377f008e9aad",
26
+ "georss_box_s":"43.4648808289 -97.2509765625 49.3787965644 -90.9228515625",
27
+ "dc_title_s":"Condition map of Minnesota Trunk Highways : a 7,000 mile primary system showing national and state markings",
28
+ "dct_issued_s":"1925",
29
+ "georss_polygon_s":"43.4648808289 -97.2509765625 49.3787965644 -97.2509765625 49.3787965644 -90.9228515625 43.4648808289 -90.9228515625 43.4648808289 -97.2509765625",
30
+ "layer_geom_type_s":"Paper Map",
31
+ "dc_language_s":"eng",
32
+ "timestamp":"2017-06-12T22:01:27.649Z",
33
+ "centroid_s":"46.42183869665,-94.0869140625"
34
+ }
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rails_helper'
2
4
 
3
5
  describe SolrDocumentSidecar do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rails_helper'
2
4
 
3
5
  describe Geoblacklight::SolrDocument do
data/spec/rails_helper.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ENV['RAILS_ENV'] ||= 'test'
2
4
 
3
5
  require 'spec_helper'
@@ -1,15 +1,29 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rails_helper'
2
4
 
3
5
  describe ImageService do
4
- let(:iiif_document) { SolrDocument.new(json_data('umn_iiif_jpg')) }
6
+ let(:iiif_document) { SolrDocument.new(json_data('umich_iiif_jpg')) }
5
7
  let(:iiif_imgsvc) { ImageService.new(iiif_document) }
6
8
  let(:wms_document) { SolrDocument.new(json_data('public_polygon_mit')) }
7
- let(:wms_imgsvc) { ImageService.new(iiif_document) }
9
+ let(:wms_imgsvc) { ImageService.new(wms_document) }
10
+ let(:thumb_document) { SolrDocument.new(json_data('umn_solr_thumb')) }
11
+ let(:thumb_imgsvc) { ImageService.new(thumb_document) }
8
12
 
9
13
  describe '#store' do
10
14
  it 'should respond to store' do
11
15
  expect(iiif_imgsvc).to respond_to(:store)
12
16
  end
17
+
18
+ it 'should prioritize settings thumbnail field' do
19
+ expect(thumb_imgsvc.send(:gblsi_thumbnail_field?)).to be_truthy
20
+ expect(thumb_imgsvc.send(:image_url)).to eq 'https://umedia.lib.umn.edu/sites/default/files/imagecache/square300/reference/562/image/jpeg/1089695.jpg'
21
+ end
22
+
23
+ it 'should choose references if no settings thumbnail field value' do
24
+ expect(wms_imgsvc.send(:gblsi_thumbnail_field?)).to be_truthy
25
+ expect(wms_imgsvc.send(:image_url)).to include 'wms'
26
+ end
13
27
  end
14
28
 
15
29
  context '#iiif' do
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  def json_data(filename)
3
4
  file_content = file_fixture("#{filename}.json").read
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rails/generators'
2
4
 
3
5
  class TestAppGenerator < Rails::Generators::Base
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geoblacklight_sidecar_images
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Larson
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-03-07 00:00:00.000000000 Z
12
+ date: 2018-03-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: carrierwave
@@ -275,6 +275,7 @@ files:
275
275
  - lib/geoblacklight_sidecar_images/engine.rb
276
276
  - lib/geoblacklight_sidecar_images/version.rb
277
277
  - lib/tasks/geoblacklight_sidecar_images_tasks.rake
278
+ - screenshot.png
278
279
  - solr/conf/_rest_managed.json
279
280
  - solr/conf/admin-extra.html
280
281
  - solr/conf/elevate.xml
@@ -314,6 +315,7 @@ files:
314
315
  - spec/fixtures/files/umn_iiif_jpg.json
315
316
  - spec/fixtures/files/umn_metro_result1.json
316
317
  - spec/fixtures/files/umn_metro_result2.json
318
+ - spec/fixtures/files/umn_solr_thumb.json
317
319
  - spec/fixtures/files/umn_state_result1.json
318
320
  - spec/fixtures/files/umn_state_result2.json
319
321
  - spec/models/solr_document_sidecar_spec.rb
@@ -371,6 +373,7 @@ test_files:
371
373
  - spec/fixtures/files/umn_iiif_jpg.json
372
374
  - spec/fixtures/files/umn_metro_result1.json
373
375
  - spec/fixtures/files/umn_metro_result2.json
376
+ - spec/fixtures/files/umn_solr_thumb.json
374
377
  - spec/fixtures/files/umn_state_result1.json
375
378
  - spec/fixtures/files/umn_state_result2.json
376
379
  - spec/models/solr_document_sidecar_spec.rb