geoblacklight 1.5.1 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +7 -3
  3. data/app/assets/javascripts/geoblacklight/geoblacklight.js +1 -1
  4. data/app/assets/javascripts/geoblacklight/modules/metadata.js +7 -0
  5. data/app/assets/javascripts/geoblacklight/modules/metadata_download_button.js +58 -0
  6. data/app/assets/javascripts/geoblacklight/modules/results.js +10 -15
  7. data/app/assets/stylesheets/geoblacklight/_geoblacklight.scss +3 -2
  8. data/app/assets/stylesheets/geoblacklight/modules/metadata.scss +27 -3
  9. data/app/assets/stylesheets/geoblacklight/modules/metadata_content.scss +38 -0
  10. data/app/assets/stylesheets/geoblacklight/modules/metadata_markup.scss +9 -0
  11. data/app/assets/stylesheets/geoblacklight/modules/metadata_missing.scss +7 -0
  12. data/app/helpers/geoblacklight_helper.rb +24 -0
  13. data/app/presenters/geoblacklight/document_presenter.rb +2 -1
  14. data/app/views/catalog/_metadata.html.erb +21 -6
  15. data/app/views/catalog/metadata/_content.html.erb +3 -0
  16. data/app/views/catalog/metadata/_markup.html.erb +8 -0
  17. data/app/views/catalog/metadata/_missing.html.erb +6 -0
  18. data/app/views/catalog/metadata.js.erb +8 -4
  19. data/config/locales/geoblacklight.en.yml +1 -0
  20. data/geoblacklight.gemspec +4 -1
  21. data/lib/generators/geoblacklight/templates/settings.yml +2 -2
  22. data/lib/geoblacklight/engine.rb +2 -1
  23. data/lib/geoblacklight/metadata/base.rb +88 -0
  24. data/lib/geoblacklight/metadata/fgdc.rb +14 -0
  25. data/lib/geoblacklight/metadata/iso19139.rb +14 -0
  26. data/lib/geoblacklight/metadata.rb +12 -31
  27. data/lib/geoblacklight/metadata_transformer/base.rb +49 -0
  28. data/lib/geoblacklight/metadata_transformer/fgdc.rb +16 -0
  29. data/lib/geoblacklight/metadata_transformer/iso19139.rb +16 -0
  30. data/lib/geoblacklight/metadata_transformer.rb +33 -0
  31. data/lib/geoblacklight/references.rb +14 -0
  32. data/lib/geoblacklight/version.rb +1 -1
  33. data/lib/geoblacklight/view_helper_override.rb +3 -2
  34. data/lib/geoblacklight.rb +7 -0
  35. data/spec/features/download_layer_spec.rb +5 -2
  36. data/spec/features/layer_inspection_spec.rb +1 -1
  37. data/spec/features/metadata_panel_spec.rb +15 -4
  38. data/spec/features/saved_searches_spec.rb +1 -1
  39. data/spec/features/split_view.html.erb_spec.rb +2 -2
  40. data/spec/fixtures/solr_documents/harvard_raster.json +2 -2
  41. data/spec/fixtures/solr_documents/public_iiif_princeton.json +1 -1
  42. data/spec/helpers/{geoblacklight_helpers_spec.rb → geoblacklight_helper_spec.rb} +54 -0
  43. data/spec/javascripts/geoblacklight_spec.js +4 -0
  44. data/spec/javascripts/metadata_download_button_spec.js +14 -0
  45. data/spec/lib/geoblacklight/metadata/base_spec.rb +85 -0
  46. data/spec/lib/geoblacklight/metadata_spec.rb +26 -18
  47. data/spec/lib/geoblacklight/metadata_transformer/base_spec.rb +35 -0
  48. data/spec/lib/geoblacklight/metadata_transformer/fgdc_spec.rb +23 -0
  49. data/spec/lib/geoblacklight/metadata_transformer/iso19139_spec.rb +23 -0
  50. data/spec/lib/geoblacklight/metadata_transformer_spec.rb +69 -0
  51. data/spec/lib/geoblacklight/references_spec.rb +12 -1
  52. data/spec/lib/geoblacklight/view_helper_override_spec.rb +1 -0
  53. data/spec/spec_helper.rb +11 -8
  54. data/spec/test_app_templates/lib/generators/test_app_generator.rb +2 -0
  55. data/spec/test_app_templates/metadata/fgdc.html +129 -0
  56. data/spec/test_app_templates/metadata/fgdc.xml +145 -0
  57. data/spec/test_app_templates/metadata/iso.html +275 -0
  58. data/spec/test_app_templates/metadata/iso.xml +511 -0
  59. data/spec/test_app_templates/solr_documents +1 -1
  60. metadata +83 -7
  61. data/app/assets/stylesheets/geoblacklight/modules/coderay.scss +0 -147
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 39929d92f69fc2ae2167f47e4d587f16f082ce35
4
- data.tar.gz: 1b71af84ccfc5da591f39b072a35bf4180e07285
3
+ metadata.gz: d3c10c3715efdc9443e4deec764b0d3d7855fc11
4
+ data.tar.gz: cdce289bfb3b6427ed07c3b68a09f5626bd49298
5
5
  SHA512:
6
- metadata.gz: 72578066955f12d215d6e0f1734d124d7affeeee831f2ac823d489b48af8b3e53bc32712aba80343db5043bdac9d94ab1106677c5ca653e4edf0db98f1c74aec
7
- data.tar.gz: 72973c1fd525117a395aaf9ac5b3d81d05573346cabb4f1dfc337838918d5be52648e90d9e84aa606cec20bc04337f4f37dbfbe7996907bc017a42623da4bebb
6
+ metadata.gz: d7e11f1386470600bdb5052784c0edfadd4d4b82f18a866a2275499e9574fd536869c79e15f8c8f5f55cf01b24e19605e0e40d2b21c671717a6c247f3e91b3dc
7
+ data.tar.gz: ff81e343deba1e7cb2f76b11ec9a4a80e9e170e8ea025bf2958297bb73ecac62f69087a3e2d333fdbfa9372c5c51622508f8d8394647c2a3a9c63515dc8d5c70
data/.travis.yml CHANGED
@@ -1,3 +1,6 @@
1
+ dist: trusty
2
+ addons:
3
+ chrome: stable
1
4
  language: ruby
2
5
  sudo: false
3
6
 
@@ -5,19 +8,20 @@ notifications:
5
8
  email: false
6
9
 
7
10
  rvm:
8
- - 2.3.4
11
+ - 2.4.1
9
12
 
10
13
  matrix:
11
14
  include:
12
15
  - rvm: 2.3.4
13
- env: "RAILS_VERSION=5.0.3"
16
+ env: "RAILS_VERSION=5.0.5"
14
17
 
15
18
  before_install:
16
19
  - gem update --system
17
20
  - gem install bundler
21
+ - google-chrome-stable --headless --disable-gpu --remote-debugging-port=9222 http://localhost &
18
22
 
19
23
  env:
20
- - "RAILS_VERSION=5.0.3"
24
+ - "RAILS_VERSION=5.1.3"
21
25
 
22
26
  global_env:
23
27
  - NOKOGIRI_USE_SYSTEM_LIBRARIES=true
@@ -14,7 +14,7 @@
14
14
  if (bbox.length === 4) {
15
15
  return L.latLngBounds([[bbox[1], bbox[0]], [bbox[3], bbox[2]]]);
16
16
  } else {
17
- return null;
17
+ throw "Invalid bounding box string";
18
18
  }
19
19
  };
20
20
 
@@ -0,0 +1,7 @@
1
+ Blacklight.onLoad(function() {
2
+ $('#ajax-modal').on('loaded.blacklight.ajax-modal', function() {
3
+ $(this).find('.pill-metadata').each(function(i, element) {
4
+ GeoBlacklight.metadataDownloadButton(element);
5
+ });
6
+ });
7
+ });
@@ -0,0 +1,58 @@
1
+ //= require bootstrap/tab
2
+
3
+ !(function(global) {
4
+
5
+ /** Download button for the metadata Bootstrap Modal dialog */
6
+ var MetadataDownloadButton = L.Class.extend({
7
+ options: {
8
+ target: '#btn-metadata-download'
9
+ },
10
+
11
+ /**
12
+ * Initialize with the DOM element
13
+ * @param {Element} el - <button>, <a>, or other jQuery selector
14
+ * @param {Object} options - Properties for the new instance
15
+ */
16
+ initialize: function initialize(el, options) {
17
+ L.Util.setOptions(this, options);
18
+ this.$el = $(el);
19
+ this.$download = $(this.target || this.$el.data('ref-download'));
20
+ this.setRefUrl();
21
+ this.configureHandler();
22
+ },
23
+
24
+ /**
25
+ * Bind Elements to DOM element event listeners using jQuery
26
+ */
27
+ configureHandler: function configureHandler() {
28
+ this.$el.on('click',this.onclick);
29
+ this.$el.on('click',L.Util.bind(this.setRefUrl, this));
30
+ },
31
+
32
+ /**
33
+ * Set the hyperlink URL using the metadata URI
34
+ */
35
+ setRefUrl: function setRefUrl() {
36
+ var refUrl = this.$el.data('ref-endpoint');
37
+ if(refUrl == null || refUrl.length === 0) {
38
+ this.$download.hide();
39
+ } else {
40
+ this.$download.show();
41
+ this.$download.attr('href', refUrl);
42
+ }
43
+ },
44
+
45
+ /**
46
+ *
47
+ */
48
+ onclick: function onclick(e) {
49
+ e.preventDefault();
50
+ $(this).tab('show');
51
+ }
52
+ });
53
+
54
+ global.GeoBlacklight.MetadataDownloadButton = MetadataDownloadButton;
55
+ global.GeoBlacklight.metadataDownloadButton = function metadataDownloadButton(el, options) {
56
+ return new MetadataDownloadButton(el, options);
57
+ };
58
+ })(this);
@@ -11,29 +11,25 @@ Blacklight.onLoad(function() {
11
11
  $('[data-map="index"]').each(function() {
12
12
  var data = $(this).data(),
13
13
  opts = { baseUrl: data.catalogPath },
14
+ world = L.latLngBounds([[-90, -180], [90, 180]]),
14
15
  geoblacklight, bbox;
15
16
 
16
- var lngRe = '(-?[0-9]{1,2}(\\.[0-9]+)?)';
17
- var latRe = '(-?[0-9]{1,3}(\\.[0-9]+)?)';
18
-
19
- var parseableBbox = new RegExp(
20
- [lngRe,latRe,lngRe,latRe].join('\\s+')
21
- );
22
-
23
17
  if (typeof data.mapBbox === 'string') {
24
18
  bbox = L.bboxToBounds(data.mapBbox);
25
19
  } else {
26
20
  $('.document [data-bbox]').each(function() {
27
- var currentBbox = $(this).data().bbox;
28
- if (parseableBbox.test(currentBbox)) {
21
+
22
+ try {
23
+ var currentBounds = L.bboxToBounds($(this).data().bbox);
24
+ if (!world.contains(currentBounds)) {
25
+ throw "Invalid bounds";
26
+ }
29
27
  if (typeof bbox === 'undefined') {
30
- bbox = L.bboxToBounds(currentBbox);
28
+ bbox = currentBounds;
31
29
  } else {
32
- bbox.extend(L.bboxToBounds(currentBbox));
30
+ bbox.extend(currentBounds);
33
31
  }
34
- } else {
35
- // bbox not parseable, use default value.
36
- // [[-180, -90], [180, 90]];
32
+ } catch (e) {
37
33
  bbox = L.bboxToBounds("-180 -90 180 90");
38
34
  }
39
35
  });
@@ -80,5 +76,4 @@ Blacklight.onLoad(function() {
80
76
  }
81
77
  });
82
78
  }
83
-
84
79
  });
@@ -11,10 +11,8 @@
11
11
  */
12
12
  @import 'leaflet';
13
13
  @import 'geoblacklight-icons-rails';
14
-
15
14
  @import 'font-awesome';
16
15
  @import 'geoblacklight/styles';
17
- @import 'modules/coderay';
18
16
  @import 'modules/facets';
19
17
  @import 'modules/mixins';
20
18
  @import 'modules/icon-customization';
@@ -22,6 +20,9 @@
22
20
  @import 'modules/item';
23
21
  @import 'modules/layer_opacity';
24
22
  @import 'modules/metadata';
23
+ @import 'modules/metadata_content';
24
+ @import 'modules/metadata_missing';
25
+ @import 'modules/metadata_markup';
25
26
  @import 'modules/results';
26
27
  @import 'modules/geosearch';
27
28
  @import 'modules/search_widgets';
@@ -1,5 +1,29 @@
1
- .metadata-view {
2
- pre {
3
- @extend .pre-scrollable;
1
+ /**
2
+ * Rules for the geospatial metadata Bootstrap Modal dialog
3
+ */
4
+ .modal-dialog {
5
+ width: 1148px;
6
+ }
7
+
8
+ .modal-header {
9
+ .modal-title {
10
+ font-weight: 400;
11
+ font-size: 20px;
12
+ }
13
+ }
14
+
15
+ .modal-body {
16
+ overflow-y: scroll;
17
+ height: calc(100vh - 190px);
18
+
19
+ .metadata-view {
20
+ .nav-pills {
21
+ text-align: center;
22
+
23
+ li {
24
+ float: none;
25
+ display: inline-block;
26
+ }
27
+ }
4
28
  }
5
29
  }
@@ -0,0 +1,38 @@
1
+ /*
2
+ * Rules for the geospatial metadata markup generated by GeoCombine
3
+ *
4
+ */
5
+ #metadata-container {
6
+ height: 1024px;
7
+
8
+ ul {
9
+ margin-top: 0;
10
+ margin-bottom: 10px;
11
+ display: inline-block;
12
+ border: 1px solid black;
13
+ background-color: #f5f5f5;
14
+ padding-right: 40px;
15
+
16
+ li {
17
+ margin-top: 6px;
18
+ margin-bottom: 6px;
19
+ list-style-type: decimal;
20
+ }
21
+ }
22
+
23
+ div dl {
24
+ padding-right: 8px;
25
+ padding-left: 8px;
26
+
27
+ dt {
28
+ margin-top: 12px;
29
+ }
30
+ }
31
+
32
+ /*
33
+ * Highest level heading in the attribute tree
34
+ */
35
+ div > dl > dt {
36
+ font-size: 22px;
37
+ }
38
+ }
@@ -0,0 +1,9 @@
1
+ /*
2
+ * Rules for untransformed geospatial metadata markup
3
+ *
4
+ */
5
+ #metadata-markup-container {
6
+ .alert {
7
+ margin-top: 20px;
8
+ }
9
+ }
@@ -0,0 +1,7 @@
1
+ /*
2
+ * Rules for missing geospatial metadata content
3
+ *
4
+ */
5
+ #metadata-error-container {
6
+ text-align: center;
7
+ }
@@ -153,4 +153,28 @@ module GeoblacklightHelper
153
153
  .add_previous_sibling(geoblacklight_icon(item.value))
154
154
  doc.to_html.html_safe
155
155
  end
156
+
157
+ ##
158
+ # Renders the transformed metadata
159
+ # (Renders a partial when the metadata isn't available)
160
+ # @param [Geoblacklight::Metadata::Base] metadata the metadata object
161
+ # @return [String]
162
+ def render_transformed_metadata(metadata)
163
+ render partial: 'catalog/metadata/content', locals: { content: metadata.transform.html_safe }
164
+ rescue Geoblacklight::MetadataTransformer::TransformError => transform_err
165
+ Geoblacklight.logger.warn transform_err.message
166
+ render partial: 'catalog/metadata/markup', locals: { content: metadata.to_xml }
167
+ rescue => err
168
+ Geoblacklight.logger.warn err.message
169
+ render partial: 'catalog/metadata/missing'
170
+ end
171
+
172
+ ##
173
+ # Determines whether or not the metadata is the first within the array of References
174
+ # @param [SolrDocument] document the Solr Document for the item
175
+ # @param [Geoblacklight::Metadata::Base] metadata the object for the metadata resource
176
+ # @return [Boolean]
177
+ def first_metadata?(document, metadata)
178
+ document.references.shown_metadata.first.type == metadata.type
179
+ end
156
180
  end
@@ -2,6 +2,7 @@ module Geoblacklight
2
2
  ##
3
3
  # Adds custom functionality for Geoblacklight document presentation
4
4
  class DocumentPresenter < Blacklight::IndexPresenter
5
+ include ActionView::Helpers::OutputSafetyHelper
5
6
  ##
6
7
  # Presents configured index fields in search results. Passes values through
7
8
  # configured helper_method. Multivalued fields separated by presenter
@@ -16,7 +17,7 @@ module Geoblacklight
16
17
  fields_values << val
17
18
  end
18
19
  end
19
- fields_values.join(' ')
20
+ safe_join(fields_values, ' ')
20
21
  end
21
22
  end
22
23
  end
@@ -1,12 +1,27 @@
1
1
  <% document ||= @document %>
2
2
 
3
3
  <div class='metadata-view'>
4
- <% document.references.refs.each do |ref| %>
5
- <% if Settings.METADATA_SHOWN.include?(ref.type.to_s) %>
6
- <div class='label label-default'>
7
- <%= formatted_name_reference(ref.type) %>
4
+ <div class="container-fluid">
5
+ <ul class="nav nav-pills" role="tablist">
6
+ <% document.references.shown_metadata.each do |metadata| %>
7
+ <li role="presentation" class="<%= first_metadata?(document, metadata) ? 'active' : nil %>">
8
+ <a class="pill-metadata"
9
+ href="#<%= metadata.type %>"
10
+ aria-controls="<%= metadata.type %>"
11
+ role="tab"
12
+ data-toggle="pill"
13
+ data-ref-endpoint="<%= metadata.endpoint %>"
14
+ data-ref-download="#btn-metadata-download"><%= formatted_name_reference(metadata.type) %></a>
15
+ </li>
16
+ <% end %>
17
+ </ul>
18
+ </div>
19
+
20
+ <div class="tab-content">
21
+ <% document.references.shown_metadata.each do |metadata| %>
22
+ <div role="tabpanel" class="tab-pane<%= first_metadata?(document, metadata) ? ' active' : nil %>" id="<%= metadata.type %>">
23
+ <%= render_transformed_metadata(metadata) %>
8
24
  </div>
9
- <%= CodeRay.scan(Geoblacklight::Metadata.new(ref).metadata, :xml).div(css: :class, tab_width: 2).html_safe %>
10
25
  <% end %>
11
- <% end %>
26
+ </div>
12
27
  </div>
@@ -0,0 +1,3 @@
1
+ <div id="metadata-container" class="container-fluid">
2
+ <%= content %>
3
+ </div>
@@ -0,0 +1,8 @@
1
+ <div id="metadata-markup-container" class="container-fluid">
2
+ <div class="alert alert-warning" role="alert">
3
+ <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
4
+ <span class="sr-only">Error:</span>
5
+ <span>The metadata for this item cannot be transformed.</span>
6
+ </div>
7
+ <%= CodeRay.scan(content, :xml).div.html_safe %>
8
+ </div>
@@ -0,0 +1,6 @@
1
+ <div id="metadata-error-container" class="container-fluid">
2
+ <div>
3
+ <h1>The metadata for this item doesn't exist.</h1>
4
+ </div>
5
+ <p>If you are the application owner check the logs for more information.</p>
6
+ </div>
@@ -1,7 +1,11 @@
1
1
  <div class="modal-header">
2
2
  <button type="button" class="ajax-modal-close close" data-dismiss="modal" aria-hidden="true">×</button>
3
- <h1 class="modal-title">Metadata</h1>
4
- <div class="modal-body">
5
- <%= render partial: 'metadata' %>
6
- </div>
3
+ <h3 class="modal-title">View Metadata</h3>
4
+ </div>
5
+ <div class="modal-body">
6
+ <%= render partial: 'metadata' %>
7
+ </div>
8
+ <div class="modal-footer">
9
+ <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
10
+ <a href="#" target="_blank" rel="noopener noreferrer" id="btn-metadata-download" class="btn btn-primary">Download</a>
7
11
  </div>
@@ -1,5 +1,6 @@
1
1
  en:
2
2
  geoblacklight:
3
+ bbox_label: 'Bounding Box'
3
4
  download:
4
5
  download: 'Download'
5
6
  success: 'Your file %{title} is ready for download'
@@ -25,16 +25,19 @@ Gem::Specification.new do |spec|
25
25
  spec.add_dependency 'font-awesome-rails'
26
26
  spec.add_dependency 'config'
27
27
  spec.add_dependency 'faraday'
28
+ spec.add_dependency 'faraday_middleware'
28
29
  spec.add_dependency 'coderay'
29
30
  spec.add_dependency 'geoblacklight-icons', '>= 0.2'
30
31
  spec.add_dependency 'deprecation'
32
+ spec.add_dependency 'geo_combine', '>= 0.3'
31
33
 
32
34
  spec.add_development_dependency 'solr_wrapper'
33
35
  spec.add_development_dependency 'rails-controller-testing'
34
36
  spec.add_development_dependency 'rspec-rails', '~> 3.1'
35
37
  spec.add_development_dependency 'engine_cart', '~> 1.0'
36
38
  spec.add_development_dependency 'capybara', '>= 2.5.0'
37
- spec.add_development_dependency 'poltergeist'
39
+ spec.add_development_dependency 'selenium-webdriver'
40
+ spec.add_development_dependency 'chromedriver-helper'
38
41
  spec.add_development_dependency 'factory_girl_rails'
39
42
  spec.add_development_dependency 'database_cleaner', '~> 1.3'
40
43
  end
@@ -38,9 +38,9 @@ INSTITUTION: 'Stanford'
38
38
 
39
39
  # Metadata shown in tool panel
40
40
  METADATA_SHOWN:
41
+ - 'mods'
41
42
  - 'fgdc'
42
43
  - 'iso19139'
43
- - 'mods'
44
44
 
45
45
  # (For external Download) timeout and open_timeout parameters for Faraday
46
46
  TIMEOUT_DOWNLOAD: 16
@@ -68,7 +68,7 @@ WMS_PARAMS:
68
68
  :EXCEPTIONS: 'application/json'
69
69
  :INFO_FORMAT: 'text/html'
70
70
 
71
- # Settings for leaflet
71
+ # Settings for leaflet
72
72
  OPACITY_CONTROL: &opacity_control
73
73
  CONTROLS:
74
74
  - 'Opacity'
@@ -1,10 +1,11 @@
1
1
  require 'blacklight'
2
2
  require 'leaflet-rails'
3
3
  require 'font-awesome-rails'
4
+ require 'coderay'
4
5
  require 'config'
5
6
  require 'faraday'
7
+ require 'faraday_middleware'
6
8
  require 'nokogiri'
7
- require 'coderay'
8
9
  require 'geoblacklight-icons'
9
10
 
10
11
  module Geoblacklight
@@ -0,0 +1,88 @@
1
+ module Geoblacklight
2
+ module Metadata
3
+ ##
4
+ # Abstract Class for metadata
5
+ class Base
6
+ attr_reader :reference
7
+ delegate :type, to: :reference
8
+ delegate :to_html, to: :metadata
9
+ delegate :transform, to: :transformer
10
+ delegate :to_xml, to: :document
11
+
12
+ ##
13
+ # Instantiates a Geoblacklight::Metadata object used for retrieving and
14
+ # formatting metadata
15
+ # @param reference [Geoblacklight::Reference] the reference object
16
+ def initialize(reference)
17
+ @reference = reference
18
+ end
19
+
20
+ ##
21
+ # Retrieves the XML Document for the metadata
22
+ # @return [Nokogiri::XML::Document]
23
+ def document
24
+ @document ||= metadata.metadata
25
+ end
26
+
27
+ ##
28
+ # Determines whether or not a metadata resources is empty
29
+ # @return [Boolean]
30
+ def blank?
31
+ document.nil? || document.children.empty?
32
+ end
33
+
34
+ ##
35
+ # Retrieves the URI for the reference resource (e. g. a service endpoint)
36
+ # @return [String, nil]
37
+ def endpoint
38
+ blank? ? nil : @reference.endpoint
39
+ end
40
+
41
+ private
42
+
43
+ ##
44
+ # Retrieves metadata from a url source
45
+ # @return [String, nil] metadata string or nil if there is a
46
+ # connection error
47
+ def retrieve_metadata
48
+ connection = Faraday.new(url: @reference.endpoint) do |conn|
49
+ conn.use FaradayMiddleware::FollowRedirects
50
+ conn.adapter Faraday.default_adapter
51
+ end
52
+ response = connection.get
53
+ return response.body unless response.nil? || response.status == 404
54
+ Geoblacklight.logger.error "Could not reach #{@reference.endpoint}"
55
+ ''
56
+ rescue Faraday::Error::ConnectionFailed => error
57
+ Geoblacklight.logger.error error.inspect
58
+ ''
59
+ rescue Faraday::Error::TimeoutError => error
60
+ Geoblacklight.logger.error error.inspect
61
+ ''
62
+ end
63
+
64
+ ##
65
+ # Retrieve the Class for the GeoCombine data model
66
+ # @return [GeoCombine::Metadata]
67
+ def metadata_class
68
+ GeoCombine::Metadata
69
+ end
70
+
71
+ ##
72
+ # Handles metadata and returns the retrieved metadata or an error message if
73
+ # something went wrong
74
+ # @return [String] returned metadata string
75
+ def metadata
76
+ response_body = retrieve_metadata
77
+ metadata_class.new(response_body)
78
+ end
79
+
80
+ ##
81
+ # Initialize the MetadataTransformer Object for the metadata
82
+ # @return [GeoBlacklight::MetadataTransformer] MetadataTransformer instance
83
+ def transformer
84
+ MetadataTransformer.instance(self)
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,14 @@
1
+ module Geoblacklight
2
+ module Metadata
3
+ class Fgdc < Base
4
+ private
5
+
6
+ ##
7
+ # Retrieve the Class for the GeoCombine data model
8
+ # @return [GeoCombine::Fgdc]
9
+ def metadata_class
10
+ GeoCombine::Fgdc
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module Geoblacklight
2
+ module Metadata
3
+ class Iso19139 < Base
4
+ private
5
+
6
+ ##
7
+ # Retrieve the Class for the GeoCombine data model
8
+ # @return [GeoCombine::Iso19139]
9
+ def metadata_class
10
+ GeoCombine::Iso19139
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,37 +1,18 @@
1
1
  module Geoblacklight
2
- class Metadata
2
+ module Metadata
3
3
  ##
4
- # Instantiates a Geoblacklight::Metadata object used for retrieving and
5
- # formatting metadata
6
- # @param reference [Geoblacklight::Reference] the reference object
7
- def initialize(reference)
8
- @reference = reference
9
- end
4
+ # Initialize a new Metadata instance
5
+ # @param [Geoblacklight::Reference] reference the reference for the metadata resource
6
+ # @return [Geoblacklight::Metadata::Base]
7
+ def self.instance(reference)
8
+ begin
9
+ klass = "Geoblacklight::Metadata::#{reference.type.capitalize}".constantize
10
+ rescue
11
+ Geoblacklight.logger.warn "Metadata type #{reference.type} is not supported"
12
+ klass = Geoblacklight::Metadata::Base
13
+ end
10
14
 
11
- ##
12
- # Handles metadata and returns the retrieved metadata or an error message if
13
- # something went wrong
14
- # @return [String] returned metadata string
15
- def metadata
16
- response = retrieve_metadata
17
- return response.body unless response.nil? || response.status == 404
18
- Geoblacklight.logger.error "Could not reach #{@reference.endpoint}"
19
- "Could not reach #{@reference.endpoint}"
20
- end
21
-
22
- ##
23
- # Retrieves metadata from a url source
24
- # @return [Faraday::Response, nil] Faraday::Response or nil if there is a
25
- # connection error
26
- def retrieve_metadata
27
- conn = Faraday.new(url: @reference.endpoint)
28
- conn.get
29
- rescue Faraday::Error::ConnectionFailed => error
30
- Geoblacklight.logger.error error.inspect
31
- nil
32
- rescue Faraday::Error::TimeoutError => error
33
- Geoblacklight.logger.error error.inspect
34
- nil
15
+ klass.new(reference)
35
16
  end
36
17
  end
37
18
  end