geo_combine 0.5.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/.github/workflows/ruby.yml +53 -0
 - data/.gitignore +2 -0
 - data/.rubocop.yml +20 -0
 - data/.rubocop_todo.yml +165 -0
 - data/Gemfile +3 -1
 - data/README.md +15 -1
 - data/Rakefile +4 -2
 - data/bin/geocombine +1 -0
 - data/geo_combine.gemspec +5 -0
 - data/lib/geo_combine/bounding_box.rb +7 -1
 - data/lib/geo_combine/ckan_metadata.rb +10 -8
 - data/lib/geo_combine/cli.rb +3 -1
 - data/lib/geo_combine/esri_open_data.rb +2 -0
 - data/lib/geo_combine/exceptions.rb +3 -0
 - data/lib/geo_combine/fgdc.rb +2 -2
 - data/lib/geo_combine/formats.rb +2 -0
 - data/lib/geo_combine/formatting.rb +3 -1
 - data/lib/geo_combine/geo_blacklight_harvester.rb +20 -13
 - data/lib/geo_combine/geoblacklight.rb +20 -6
 - data/lib/geo_combine/geometry_types.rb +2 -0
 - data/lib/geo_combine/iso19139.rb +2 -1
 - data/lib/geo_combine/ogp.rb +13 -11
 - data/lib/geo_combine/railtie.rb +2 -0
 - data/lib/geo_combine/subjects.rb +2 -0
 - data/lib/geo_combine/version.rb +3 -1
 - data/lib/geo_combine.rb +4 -3
 - data/lib/tasks/geo_combine.rake +47 -26
 - data/lib/xslt/fgdc2html.xsl +38 -9
 - data/spec/features/fgdc2html_spec.rb +53 -1
 - data/spec/features/iso2html_spec.rb +10 -1
 - data/spec/fixtures/docs/princeton_fgdc.xml +374 -0
 - data/spec/fixtures/docs/repos.json +3224 -0
 - data/spec/fixtures/docs/simple_xml.xml +10 -0
 - data/spec/fixtures/docs/simple_xslt.xsl +11 -0
 - data/spec/fixtures/docs/stanford_iso.xml +652 -0
 - data/spec/fixtures/docs/tufts_fgdc.xml +977 -0
 - data/spec/fixtures/indexing/basic_geoblacklight.json +27 -0
 - data/spec/fixtures/indexing/geoblacklight.json +33 -0
 - data/spec/fixtures/indexing/layers.json +16119 -0
 - data/spec/fixtures/indexing/test.txt +1 -0
 - data/spec/fixtures/json_docs.rb +2 -0
 - data/spec/fixtures/xml_docs.rb +9 -1659
 - data/spec/helpers.rb +7 -7
 - data/spec/lib/geo_combine/bounding_box_spec.rb +18 -0
 - data/spec/lib/geo_combine/ckan_metadata_spec.rb +34 -11
 - data/spec/lib/geo_combine/esri_open_data_spec.rb +23 -2
 - data/spec/lib/geo_combine/fgdc_spec.rb +41 -10
 - data/spec/lib/geo_combine/formatting_spec.rb +13 -5
 - data/spec/lib/geo_combine/geo_blacklight_harvester_spec.rb +32 -28
 - data/spec/lib/geo_combine/geoblacklight_spec.rb +41 -11
 - data/spec/lib/geo_combine/iso19139_spec.rb +26 -14
 - data/spec/lib/geo_combine/ogp_spec.rb +28 -8
 - data/spec/lib/geo_combine_spec.rb +7 -4
 - data/spec/lib/tasks/geo_combine_spec.rb +45 -0
 - data/spec/spec_helper.rb +19 -84
 - data/spec/support/fixtures.rb +9 -0
 - metadata +102 -7
 - data/.coveralls.yml +0 -1
 - data/.travis.yml +0 -8
 
| 
         @@ -1,3 +1,5 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
       1 
3 
     | 
    
         
             
            require 'active_support/core_ext/object/blank'
         
     | 
| 
       2 
4 
     | 
    
         
             
            require 'active_support/core_ext/hash/except'
         
     | 
| 
       3 
5 
     | 
    
         
             
            require 'open-uri'
         
     | 
| 
         @@ -10,8 +12,8 @@ module GeoCombine 
     | 
|
| 
       10 
12 
     | 
    
         | 
| 
       11 
13 
     | 
    
         
             
                attr_reader :metadata
         
     | 
| 
       12 
14 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
                GEOBLACKLIGHT_VERSION = ' 
     | 
| 
       14 
     | 
    
         
            -
                SCHEMA_JSON_URL = "https://raw.githubusercontent.com/geoblacklight/geoblacklight 
     | 
| 
      
 15 
     | 
    
         
            +
                GEOBLACKLIGHT_VERSION = '1.0'
         
     | 
| 
      
 16 
     | 
    
         
            +
                SCHEMA_JSON_URL = "https://raw.githubusercontent.com/geoblacklight/geoblacklight/main/schema/geoblacklight-schema-#{GEOBLACKLIGHT_VERSION}.json"
         
     | 
| 
       15 
17 
     | 
    
         
             
                DEPRECATED_KEYS_V1 = %w[
         
     | 
| 
       16 
18 
     | 
    
         
             
                  uuid
         
     | 
| 
       17 
19 
     | 
    
         
             
                  georss_polygon_s
         
     | 
| 
         @@ -29,7 +31,6 @@ module GeoCombine 
     | 
|
| 
       29 
31 
     | 
    
         
             
                # @param [Hash] fields enhancements to metadata that are merged with @metadata
         
     | 
| 
       30 
32 
     | 
    
         
             
                def initialize(metadata, fields = {})
         
     | 
| 
       31 
33 
     | 
    
         
             
                  @metadata = JSON.parse(metadata).merge(fields)
         
     | 
| 
       32 
     | 
    
         
            -
                  @schema = nil
         
     | 
| 
       33 
34 
     | 
    
         
             
                end
         
     | 
| 
       34 
35 
     | 
    
         | 
| 
       35 
36 
     | 
    
         
             
                ##
         
     | 
| 
         @@ -58,8 +59,7 @@ module GeoCombine 
     | 
|
| 
       58 
59 
     | 
    
         
             
                # Validates a GeoBlacklight-Schema json document
         
     | 
| 
       59 
60 
     | 
    
         
             
                # @return [Boolean]
         
     | 
| 
       60 
61 
     | 
    
         
             
                def valid?
         
     | 
| 
       61 
     | 
    
         
            -
                   
     | 
| 
       62 
     | 
    
         
            -
                  JSON::Validator.validate!(@schema, to_json, fragment: '#/properties/layer') &&
         
     | 
| 
      
 62 
     | 
    
         
            +
                  JSON::Validator.validate!(schema, to_json, fragment: '#/definitions/layer') &&
         
     | 
| 
       63 
63 
     | 
    
         
             
                    dct_references_validate! &&
         
     | 
| 
       64 
64 
     | 
    
         
             
                    spatial_validate!
         
     | 
| 
       65 
65 
     | 
    
         
             
                end
         
     | 
| 
         @@ -69,9 +69,14 @@ module GeoCombine 
     | 
|
| 
       69 
69 
     | 
    
         
             
                # @return [Boolean]
         
     | 
| 
       70 
70 
     | 
    
         
             
                def dct_references_validate!
         
     | 
| 
       71 
71 
     | 
    
         
             
                  return true unless metadata.key?('dct_references_s') # TODO: shouldn't we require this field?
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
       72 
73 
     | 
    
         
             
                  begin
         
     | 
| 
       73 
74 
     | 
    
         
             
                    ref = JSON.parse(metadata['dct_references_s'])
         
     | 
| 
       74 
     | 
    
         
            -
                     
     | 
| 
      
 75 
     | 
    
         
            +
                    unless ref.is_a?(Hash)
         
     | 
| 
      
 76 
     | 
    
         
            +
                      raise GeoCombine::Exceptions::InvalidDCTReferences,
         
     | 
| 
      
 77 
     | 
    
         
            +
                            'dct_references must be parsed to a Hash'
         
     | 
| 
      
 78 
     | 
    
         
            +
                    end
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
       75 
80 
     | 
    
         
             
                    true
         
     | 
| 
       76 
81 
     | 
    
         
             
                  rescue JSON::ParserError => e
         
     | 
| 
       77 
82 
     | 
    
         
             
                    raise e, "Invalid JSON in dct_references_s: #{e.message}"
         
     | 
| 
         @@ -89,6 +94,7 @@ module GeoCombine 
     | 
|
| 
       89 
94 
     | 
    
         
             
                # GeoBlacklight-Schema format
         
     | 
| 
       90 
95 
     | 
    
         
             
                def translate_formats(key, value)
         
     | 
| 
       91 
96 
     | 
    
         
             
                  return unless key == 'dc_format_s' && formats.include?(value)
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
       92 
98 
     | 
    
         
             
                  metadata[key] = formats[value]
         
     | 
| 
       93 
99 
     | 
    
         
             
                end
         
     | 
| 
       94 
100 
     | 
    
         | 
| 
         @@ -96,6 +102,7 @@ module GeoCombine 
     | 
|
| 
       96 
102 
     | 
    
         
             
                # Enhances the 'layer_geom_type_s' field by translating from known types
         
     | 
| 
       97 
103 
     | 
    
         
             
                def translate_geometry_type(key, value)
         
     | 
| 
       98 
104 
     | 
    
         
             
                  return unless key == 'layer_geom_type_s' && geometry_types.include?(value)
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
       99 
106 
     | 
    
         
             
                  metadata[key] = geometry_types[value]
         
     | 
| 
       100 
107 
     | 
    
         
             
                end
         
     | 
| 
       101 
108 
     | 
    
         | 
| 
         @@ -104,6 +111,7 @@ module GeoCombine 
     | 
|
| 
       104 
111 
     | 
    
         
             
                # categories
         
     | 
| 
       105 
112 
     | 
    
         
             
                def enhance_subjects(key, value)
         
     | 
| 
       106 
113 
     | 
    
         
             
                  return unless key == 'dc_subject_sm'
         
     | 
| 
      
 114 
     | 
    
         
            +
             
     | 
| 
       107 
115 
     | 
    
         
             
                  metadata[key] = value.map do |val|
         
     | 
| 
       108 
116 
     | 
    
         
             
                    if subjects.include?(val)
         
     | 
| 
       109 
117 
     | 
    
         
             
                      subjects[val]
         
     | 
| 
         @@ -118,11 +126,13 @@ module GeoCombine 
     | 
|
| 
       118 
126 
     | 
    
         
             
                # and ISO8601 (for indexing into Solr)
         
     | 
| 
       119 
127 
     | 
    
         
             
                def format_proper_date(key, value)
         
     | 
| 
       120 
128 
     | 
    
         
             
                  return unless key == 'layer_modified_dt'
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
       121 
130 
     | 
    
         
             
                  metadata[key] = Time.parse(value).utc.iso8601
         
     | 
| 
       122 
131 
     | 
    
         
             
                end
         
     | 
| 
       123 
132 
     | 
    
         | 
| 
       124 
133 
     | 
    
         
             
                def fields_should_be_array(key, value)
         
     | 
| 
       125 
134 
     | 
    
         
             
                  return unless should_be_array.include?(key) && !value.is_a?(Array)
         
     | 
| 
      
 135 
     | 
    
         
            +
             
     | 
| 
       126 
136 
     | 
    
         
             
                  metadata[key] = [value]
         
     | 
| 
       127 
137 
     | 
    
         
             
                end
         
     | 
| 
       128 
138 
     | 
    
         | 
| 
         @@ -155,5 +165,9 @@ module GeoCombine 
     | 
|
| 
       155 
165 
     | 
    
         
             
                  # ensure we have a proper v1 record
         
     | 
| 
       156 
166 
     | 
    
         
             
                  valid?
         
     | 
| 
       157 
167 
     | 
    
         
             
                end
         
     | 
| 
      
 168 
     | 
    
         
            +
             
     | 
| 
      
 169 
     | 
    
         
            +
                def schema
         
     | 
| 
      
 170 
     | 
    
         
            +
                  @schema ||= JSON.parse(URI.open(SCHEMA_JSON_URL).read)
         
     | 
| 
      
 171 
     | 
    
         
            +
                end
         
     | 
| 
       158 
172 
     | 
    
         
             
              end
         
     | 
| 
       159 
173 
     | 
    
         
             
            end
         
     | 
    
        data/lib/geo_combine/iso19139.rb
    CHANGED
    
    
    
        data/lib/geo_combine/ogp.rb
    CHANGED
    
    | 
         @@ -1,3 +1,5 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
       1 
3 
     | 
    
         
             
            require 'active_support/core_ext/object/blank'
         
     | 
| 
       2 
4 
     | 
    
         
             
            require 'cgi'
         
     | 
| 
       3 
5 
     | 
    
         | 
| 
         @@ -77,15 +79,13 @@ module GeoCombine 
     | 
|
| 
       77 
79 
     | 
    
         
             
                end
         
     | 
| 
       78 
80 
     | 
    
         | 
| 
       79 
81 
     | 
    
         
             
                def date
         
     | 
| 
       80 
     | 
    
         
            -
                   
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
                   
     | 
| 
       83 
     | 
    
         
            -
                    nil
         
     | 
| 
       84 
     | 
    
         
            -
                  end
         
     | 
| 
      
 82 
     | 
    
         
            +
                  DateTime.rfc3339(metadata['ContentDate'])
         
     | 
| 
      
 83 
     | 
    
         
            +
                rescue StandardError
         
     | 
| 
      
 84 
     | 
    
         
            +
                  nil
         
     | 
| 
       85 
85 
     | 
    
         
             
                end
         
     | 
| 
       86 
86 
     | 
    
         | 
| 
       87 
87 
     | 
    
         
             
                def year
         
     | 
| 
       88 
     | 
    
         
            -
                  date 
     | 
| 
      
 88 
     | 
    
         
            +
                  date&.year
         
     | 
| 
       89 
89 
     | 
    
         
             
                end
         
     | 
| 
       90 
90 
     | 
    
         | 
| 
       91 
91 
     | 
    
         
             
                ##
         
     | 
| 
         @@ -104,9 +104,9 @@ module GeoCombine 
     | 
|
| 
       104 
104 
     | 
    
         
             
                def ogp_formats
         
     | 
| 
       105 
105 
     | 
    
         
             
                  case metadata['DataType']
         
     | 
| 
       106 
106 
     | 
    
         
             
                  when 'Paper Map', 'Raster'
         
     | 
| 
       107 
     | 
    
         
            -
                     
     | 
| 
      
 107 
     | 
    
         
            +
                    'GeoTIFF'
         
     | 
| 
       108 
108 
     | 
    
         
             
                  when 'Polygon', 'Point', 'Line'
         
     | 
| 
       109 
     | 
    
         
            -
                     
     | 
| 
      
 109 
     | 
    
         
            +
                    'Shapefile'
         
     | 
| 
       110 
110 
     | 
    
         
             
                  else
         
     | 
| 
       111 
111 
     | 
    
         
             
                    raise ArgumentError, metadata['DataType']
         
     | 
| 
       112 
112 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -128,6 +128,7 @@ module GeoCombine 
     | 
|
| 
       128 
128 
     | 
    
         
             
                                             north >= -90 && north <= 90 &&
         
     | 
| 
       129 
129 
     | 
    
         
             
                                             south >= -90 && south <= 90 &&
         
     | 
| 
       130 
130 
     | 
    
         
             
                                             west <= east && south <= north
         
     | 
| 
      
 131 
     | 
    
         
            +
             
     | 
| 
       131 
132 
     | 
    
         
             
                  "ENVELOPE(#{west}, #{east}, #{north}, #{south})"
         
     | 
| 
       132 
133 
     | 
    
         
             
                end
         
     | 
| 
       133 
134 
     | 
    
         | 
| 
         @@ -165,6 +166,7 @@ module GeoCombine 
     | 
|
| 
       165 
166 
     | 
    
         | 
| 
       166 
167 
     | 
    
         
             
                def download_uri
         
     | 
| 
       167 
168 
     | 
    
         
             
                  return 'http://schema.org/DownloadAction' if institution == 'Harvard'
         
     | 
| 
      
 169 
     | 
    
         
            +
             
     | 
| 
       168 
170 
     | 
    
         
             
                  'http://schema.org/downloadUrl'
         
     | 
| 
       169 
171 
     | 
    
         
             
                end
         
     | 
| 
       170 
172 
     | 
    
         | 
| 
         @@ -205,7 +207,7 @@ module GeoCombine 
     | 
|
| 
       205 
207 
     | 
    
         
             
                  sluggify(filter_name(name))
         
     | 
| 
       206 
208 
     | 
    
         
             
                end
         
     | 
| 
       207 
209 
     | 
    
         | 
| 
       208 
     | 
    
         
            -
                 
     | 
| 
      
 210 
     | 
    
         
            +
                SLUG_STRIP_VALUES = %w[
         
     | 
| 
       209 
211 
     | 
    
         
             
                  SDE_DATA.
         
     | 
| 
       210 
212 
     | 
    
         
             
                  SDE.
         
     | 
| 
       211 
213 
     | 
    
         
             
                  SDE2.
         
     | 
| 
         @@ -216,8 +218,8 @@ module GeoCombine 
     | 
|
| 
       216 
218 
     | 
    
         | 
| 
       217 
219 
     | 
    
         
             
                def filter_name(name)
         
     | 
| 
       218 
220 
     | 
    
         
             
                  # strip out schema and usernames
         
     | 
| 
       219 
     | 
    
         
            -
                   
     | 
| 
       220 
     | 
    
         
            -
                    name.sub!( 
     | 
| 
      
 221 
     | 
    
         
            +
                  SLUG_STRIP_VALUES.each do |strip_val|
         
     | 
| 
      
 222 
     | 
    
         
            +
                    name.sub!(strip_val, '')
         
     | 
| 
       221 
223 
     | 
    
         
             
                  end
         
     | 
| 
       222 
224 
     | 
    
         
             
                  unless name.size > 1
         
     | 
| 
       223 
225 
     | 
    
         
             
                    # use first word of title is empty name
         
     | 
    
        data/lib/geo_combine/railtie.rb
    CHANGED
    
    
    
        data/lib/geo_combine/subjects.rb
    CHANGED
    
    
    
        data/lib/geo_combine/version.rb
    CHANGED
    
    
    
        data/lib/geo_combine.rb
    CHANGED
    
    | 
         @@ -1,10 +1,11 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
       1 
3 
     | 
    
         
             
            require 'nokogiri'
         
     | 
| 
       2 
4 
     | 
    
         
             
            require 'json'
         
     | 
| 
       3 
5 
     | 
    
         
             
            require 'json-schema'
         
     | 
| 
       4 
6 
     | 
    
         
             
            require 'sanitize'
         
     | 
| 
       5 
7 
     | 
    
         | 
| 
       6 
8 
     | 
    
         
             
            module GeoCombine
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
9 
     | 
    
         
             
              ##
         
     | 
| 
       9 
10 
     | 
    
         
             
              # TODO: Create a parse method that can interpret the type of metadata being
         
     | 
| 
       10 
11 
     | 
    
         
             
              # passed in.
         
     | 
| 
         @@ -23,7 +24,7 @@ module GeoCombine 
     | 
|
| 
       23 
24 
     | 
    
         
             
                # @param [String] metadata can be a File path
         
     | 
| 
       24 
25 
     | 
    
         
             
                # "./tmp/edu.stanford.purl/bb/338/jh/0716/iso19139.xml" or a String of XML
         
     | 
| 
       25 
26 
     | 
    
         
             
                # metadata
         
     | 
| 
       26 
     | 
    
         
            -
                def initialize 
     | 
| 
      
 27 
     | 
    
         
            +
                def initialize(metadata)
         
     | 
| 
       27 
28 
     | 
    
         
             
                  metadata = File.read metadata if File.readable? metadata
         
     | 
| 
       28 
29 
     | 
    
         
             
                  metadata = Nokogiri::XML(metadata) if metadata.instance_of? String
         
     | 
| 
       29 
30 
     | 
    
         
             
                  @metadata = metadata
         
     | 
| 
         @@ -35,7 +36,7 @@ module GeoCombine 
     | 
|
| 
       35 
36 
     | 
    
         
             
                # GeoCombine::Geoblacklight on its instantiation
         
     | 
| 
       36 
37 
     | 
    
         
             
                # @return [GeoCombine::Geoblacklight] the data transformed into
         
     | 
| 
       37 
38 
     | 
    
         
             
                # geoblacklight schema, returned as a GeoCombine::Geoblacklight
         
     | 
| 
       38 
     | 
    
         
            -
                def to_geoblacklight 
     | 
| 
      
 39 
     | 
    
         
            +
                def to_geoblacklight(fields = {})
         
     | 
| 
       39 
40 
     | 
    
         
             
                  GeoCombine::Geoblacklight.new(xsl_geoblacklight.apply_to(@metadata), fields)
         
     | 
| 
       40 
41 
     | 
    
         
             
                end
         
     | 
| 
       41 
42 
     | 
    
         | 
    
        data/lib/tasks/geo_combine.rake
    CHANGED
    
    | 
         @@ -1,3 +1,5 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
       1 
3 
     | 
    
         
             
            require 'net/http'
         
     | 
| 
       2 
4 
     | 
    
         
             
            require 'json'
         
     | 
| 
       3 
5 
     | 
    
         
             
            require 'rsolr'
         
     | 
| 
         @@ -5,13 +7,6 @@ require 'find' 
     | 
|
| 
       5 
7 
     | 
    
         
             
            require 'geo_combine/geo_blacklight_harvester'
         
     | 
| 
       6 
8 
     | 
    
         | 
| 
       7 
9 
     | 
    
         
             
            namespace :geocombine do
         
     | 
| 
       8 
     | 
    
         
            -
              commit_within = (ENV['SOLR_COMMIT_WITHIN'] || 5000).to_i
         
     | 
| 
       9 
     | 
    
         
            -
              ogm_path = ENV['OGM_PATH'] || 'tmp/opengeometadata'
         
     | 
| 
       10 
     | 
    
         
            -
              solr_url = ENV['SOLR_URL'] || 'http://127.0.0.1:8983/solr/blacklight-core'
         
     | 
| 
       11 
     | 
    
         
            -
              whitelist = %w[
         
     | 
| 
       12 
     | 
    
         
            -
                https://github.com/OpenGeoMetadata/big-ten.git
         
     | 
| 
       13 
     | 
    
         
            -
              ]
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
10 
     | 
    
         
             
              desc 'Clone OpenGeoMetadata repositories'
         
     | 
| 
       16 
11 
     | 
    
         
             
              task :clone, [:repo] do |_t, args|
         
     | 
| 
       17 
12 
     | 
    
         
             
                if args.repo
         
     | 
| 
         @@ -19,44 +14,44 @@ namespace :geocombine do 
     | 
|
| 
       19 
14 
     | 
    
         
             
                else
         
     | 
| 
       20 
15 
     | 
    
         
             
                  ogm_api_uri = URI('https://api.github.com/orgs/opengeometadata/repos')
         
     | 
| 
       21 
16 
     | 
    
         
             
                  ogm_repos = JSON.parse(Net::HTTP.get(ogm_api_uri)).map do |repo|
         
     | 
| 
       22 
     | 
    
         
            -
                    repo['clone_url'] if repo['size'] 
     | 
| 
      
 17 
     | 
    
         
            +
                    repo['clone_url'] if (repo['size']).positive?
         
     | 
| 
       23 
18 
     | 
    
         
             
                  end.compact
         
     | 
| 
       24 
     | 
    
         
            -
                  ogm_repos. 
     | 
| 
      
 19 
     | 
    
         
            +
                  ogm_repos.reject! { |repo| GeoCombineRake.denylist.include?(repo) }
         
     | 
| 
       25 
20 
     | 
    
         
             
                end
         
     | 
| 
       26 
21 
     | 
    
         
             
                ogm_repos.each do |repo|
         
     | 
| 
       27 
     | 
    
         
            -
                  system "echo #{repo} && mkdir -p #{ogm_path} && cd #{ogm_path} && git clone --depth 1 #{repo}"
         
     | 
| 
      
 22 
     | 
    
         
            +
                  Kernel.system "echo #{repo} && mkdir -p #{GeoCombineRake.ogm_path} && cd #{GeoCombineRake.ogm_path} && git clone --depth 1 #{repo}"
         
     | 
| 
       28 
23 
     | 
    
         
             
                end
         
     | 
| 
       29 
24 
     | 
    
         
             
              end
         
     | 
| 
       30 
25 
     | 
    
         | 
| 
       31 
26 
     | 
    
         
             
              desc '"git pull" OpenGeoMetadata repositories'
         
     | 
| 
       32 
27 
     | 
    
         
             
              task :pull, [:repo] do |_t, args|
         
     | 
| 
       33 
28 
     | 
    
         
             
                paths = if args.repo
         
     | 
| 
       34 
     | 
    
         
            -
                          [File.join(ogm_path, args.repo)]
         
     | 
| 
      
 29 
     | 
    
         
            +
                          [File.join(GeoCombineRake.ogm_path, args.repo)]
         
     | 
| 
       35 
30 
     | 
    
         
             
                        else
         
     | 
| 
       36 
     | 
    
         
            -
                          Dir.glob("#{ogm_path}/*")
         
     | 
| 
      
 31 
     | 
    
         
            +
                          Dir.glob("#{GeoCombineRake.ogm_path}/*")
         
     | 
| 
       37 
32 
     | 
    
         
             
                        end
         
     | 
| 
       38 
33 
     | 
    
         
             
                paths.each do |path|
         
     | 
| 
       39 
34 
     | 
    
         
             
                  next unless File.directory?(path)
         
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                  Kernel.system "echo #{path} && cd #{path} && git pull origin"
         
     | 
| 
       41 
37 
     | 
    
         
             
                end
         
     | 
| 
       42 
38 
     | 
    
         
             
              end
         
     | 
| 
       43 
39 
     | 
    
         | 
| 
       44 
     | 
    
         
            -
              desc 'Index all  
     | 
| 
      
 40 
     | 
    
         
            +
              desc 'Index all JSON documents except Layers.json'
         
     | 
| 
       45 
41 
     | 
    
         
             
              task :index do
         
     | 
| 
       46 
     | 
    
         
            -
                puts "Indexing #{ogm_path} into #{solr_url}"
         
     | 
| 
       47 
     | 
    
         
            -
                solr = RSolr.connect url: solr_url, adapter: :net_http_persistent
         
     | 
| 
       48 
     | 
    
         
            -
                Find.find(ogm_path) do |path|
         
     | 
| 
       49 
     | 
    
         
            -
                  next unless File.basename(path)  
     | 
| 
      
 42 
     | 
    
         
            +
                puts "Indexing #{GeoCombineRake.ogm_path} into #{GeoCombineRake.solr_url}"
         
     | 
| 
      
 43 
     | 
    
         
            +
                solr = RSolr.connect url: GeoCombineRake.solr_url, adapter: :net_http_persistent
         
     | 
| 
      
 44 
     | 
    
         
            +
                Find.find(GeoCombineRake.ogm_path) do |path|
         
     | 
| 
      
 45 
     | 
    
         
            +
                  next unless File.basename(path).include?('.json') && File.basename(path) != 'layers.json'
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
       50 
47 
     | 
    
         
             
                  doc = JSON.parse(File.read(path))
         
     | 
| 
       51 
48 
     | 
    
         
             
                  [doc].flatten.each do |record|
         
     | 
| 
       52 
     | 
    
         
            -
                     
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
                     
     | 
| 
       58 
     | 
    
         
            -
                      puts error
         
     | 
| 
       59 
     | 
    
         
            -
                    end
         
     | 
| 
      
 49 
     | 
    
         
            +
                    puts "Indexing #{record['layer_slug_s']}: #{path}" if $DEBUG
         
     | 
| 
      
 50 
     | 
    
         
            +
                    solr.update params: { commitWithin: GeoCombineRake.commit_within, overwrite: true },
         
     | 
| 
      
 51 
     | 
    
         
            +
                                data: [record].to_json,
         
     | 
| 
      
 52 
     | 
    
         
            +
                                headers: { 'Content-Type' => 'application/json' }
         
     | 
| 
      
 53 
     | 
    
         
            +
                  rescue RSolr::Error::Http => e
         
     | 
| 
      
 54 
     | 
    
         
            +
                    puts e
         
     | 
| 
       60 
55 
     | 
    
         
             
                  end
         
     | 
| 
       61 
56 
     | 
    
         
             
                end
         
     | 
| 
       62 
57 
     | 
    
         
             
                solr.commit
         
     | 
| 
         @@ -71,3 +66,29 @@ namespace :geocombine do 
     | 
|
| 
       71 
66 
     | 
    
         
             
                end
         
     | 
| 
       72 
67 
     | 
    
         
             
              end
         
     | 
| 
       73 
68 
     | 
    
         
             
            end
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
            # Class to hold helper methods for use in GeoCombine rake tasks
         
     | 
| 
      
 71 
     | 
    
         
            +
            class GeoCombineRake
         
     | 
| 
      
 72 
     | 
    
         
            +
              def self.commit_within
         
     | 
| 
      
 73 
     | 
    
         
            +
                (ENV['SOLR_COMMIT_WITHIN'] || 5000).to_i
         
     | 
| 
      
 74 
     | 
    
         
            +
              end
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
              def self.denylist
         
     | 
| 
      
 77 
     | 
    
         
            +
                [
         
     | 
| 
      
 78 
     | 
    
         
            +
                  'https://github.com/OpenGeoMetadata/GeoCombine.git',
         
     | 
| 
      
 79 
     | 
    
         
            +
                  'https://github.com/OpenGeoMetadata/aardvark.git',
         
     | 
| 
      
 80 
     | 
    
         
            +
                  'https://github.com/OpenGeoMetadata/metadata-issues.git',
         
     | 
| 
      
 81 
     | 
    
         
            +
                  'https://github.com/OpenGeoMetadata/ogm_utils-python.git',
         
     | 
| 
      
 82 
     | 
    
         
            +
                  'https://github.com/OpenGeoMetadata/opengeometadata.github.io.git',
         
     | 
| 
      
 83 
     | 
    
         
            +
                  'https://github.com/OpenGeoMetadata/opengeometadata-rails.git'
         
     | 
| 
      
 84 
     | 
    
         
            +
                ]
         
     | 
| 
      
 85 
     | 
    
         
            +
              end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
              def self.ogm_path
         
     | 
| 
      
 88 
     | 
    
         
            +
                ENV['OGM_PATH'] || 'tmp/opengeometadata'
         
     | 
| 
      
 89 
     | 
    
         
            +
              end
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
              def self.solr_url
         
     | 
| 
      
 92 
     | 
    
         
            +
                ENV['SOLR_URL'] || 'http://127.0.0.1:8983/solr/blacklight-core'
         
     | 
| 
      
 93 
     | 
    
         
            +
              end
         
     | 
| 
      
 94 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/xslt/fgdc2html.xsl
    CHANGED
    
    | 
         @@ -93,7 +93,7 @@ 
     | 
|
| 
       93 
93 
     | 
    
         
             
                            <xsl:value-of select="." />
         
     | 
| 
       94 
94 
     | 
    
         
             
                          </dd>
         
     | 
| 
       95 
95 
     | 
    
         
             
                        </xsl:for-each>
         
     | 
| 
       96 
     | 
    
         
            -
                        <xsl:for-each select=" 
     | 
| 
      
 96 
     | 
    
         
            +
                        <xsl:for-each select="descript/supplinf">
         
     | 
| 
       97 
97 
     | 
    
         
             
                          <dt>Supplemental Information</dt>
         
     | 
| 
       98 
98 
     | 
    
         
             
                          <dd>
         
     | 
| 
       99 
99 
     | 
    
         
             
                            <xsl:value-of select="." />
         
     | 
| 
         @@ -204,6 +204,22 @@ 
     | 
|
| 
       204 
204 
     | 
    
         
             
                            </dd>
         
     | 
| 
       205 
205 
     | 
    
         
             
                          </xsl:if>
         
     | 
| 
       206 
206 
     | 
    
         
             
                        </xsl:for-each>
         
     | 
| 
      
 207 
     | 
    
         
            +
                        <dt>Temporal Keyword</dt>
         
     | 
| 
      
 208 
     | 
    
         
            +
                        <xsl:for-each select="keywords/temporal/tempkey">
         
     | 
| 
      
 209 
     | 
    
         
            +
                          <dd>
         
     | 
| 
      
 210 
     | 
    
         
            +
                            <xsl:value-of select="." />
         
     | 
| 
      
 211 
     | 
    
         
            +
                          </dd>
         
     | 
| 
      
 212 
     | 
    
         
            +
                          <xsl:if test="position()=last()">
         
     | 
| 
      
 213 
     | 
    
         
            +
                            <dd>
         
     | 
| 
      
 214 
     | 
    
         
            +
                              <dl>
         
     | 
| 
      
 215 
     | 
    
         
            +
                                <dt>Temporal Keyword Thesaurus</dt>
         
     | 
| 
      
 216 
     | 
    
         
            +
                                <dd>
         
     | 
| 
      
 217 
     | 
    
         
            +
                                  <xsl:value-of select="ancestor-or-self::*/tempkt" />
         
     | 
| 
      
 218 
     | 
    
         
            +
                                </dd>
         
     | 
| 
      
 219 
     | 
    
         
            +
                              </dl>
         
     | 
| 
      
 220 
     | 
    
         
            +
                            </dd>
         
     | 
| 
      
 221 
     | 
    
         
            +
                          </xsl:if>
         
     | 
| 
      
 222 
     | 
    
         
            +
                        </xsl:for-each>
         
     | 
| 
       207 
223 
     | 
    
         
             
                        <xsl:for-each select="accconst">
         
     | 
| 
       208 
224 
     | 
    
         
             
                          <dt>Access Restrictions</dt>
         
     | 
| 
       209 
225 
     | 
    
         
             
                          <dd>
         
     | 
| 
         @@ -234,6 +250,9 @@ 
     | 
|
| 
       234 
250 
     | 
    
         
             
                            <dl>
         
     | 
| 
       235 
251 
     | 
    
         
             
                              <xsl:for-each select="cntinfo/cntperp/cntper">
         
     | 
| 
       236 
252 
     | 
    
         
             
                                <dt>Contact Person</dt>
         
     | 
| 
      
 253 
     | 
    
         
            +
                                <dd>
         
     | 
| 
      
 254 
     | 
    
         
            +
                                  <xsl:value-of select="." />
         
     | 
| 
      
 255 
     | 
    
         
            +
                                </dd>
         
     | 
| 
       237 
256 
     | 
    
         
             
                              </xsl:for-each>
         
     | 
| 
       238 
257 
     | 
    
         
             
                              <xsl:for-each select="cntinfo/cntorgp/cntorg">
         
     | 
| 
       239 
258 
     | 
    
         
             
                                <dt>Contact Organization</dt>
         
     | 
| 
         @@ -277,31 +296,31 @@ 
     | 
|
| 
       277 
296 
     | 
    
         
             
                                  <xsl:value-of select="." />
         
     | 
| 
       278 
297 
     | 
    
         
             
                                </dd>
         
     | 
| 
       279 
298 
     | 
    
         
             
                              </xsl:for-each>
         
     | 
| 
       280 
     | 
    
         
            -
                              <xsl:for-each select="cntvoice">
         
     | 
| 
      
 299 
     | 
    
         
            +
                              <xsl:for-each select="cntinfo/cntvoice">
         
     | 
| 
       281 
300 
     | 
    
         
             
                                <dt>Contact Telephone</dt>
         
     | 
| 
       282 
301 
     | 
    
         
             
                                <dd>
         
     | 
| 
       283 
302 
     | 
    
         
             
                                  <xsl:value-of select="." />
         
     | 
| 
       284 
303 
     | 
    
         
             
                                </dd>
         
     | 
| 
       285 
304 
     | 
    
         
             
                              </xsl:for-each>
         
     | 
| 
       286 
     | 
    
         
            -
                              <xsl:for-each select="cntfax">
         
     | 
| 
      
 305 
     | 
    
         
            +
                              <xsl:for-each select="cntinfo/cntfax">
         
     | 
| 
       287 
306 
     | 
    
         
             
                                <dt>Contact Facsimile Telephone</dt>
         
     | 
| 
       288 
307 
     | 
    
         
             
                                <dd>
         
     | 
| 
       289 
308 
     | 
    
         
             
                                  <xsl:value-of select="." />
         
     | 
| 
       290 
309 
     | 
    
         
             
                                </dd>
         
     | 
| 
       291 
310 
     | 
    
         
             
                              </xsl:for-each>
         
     | 
| 
       292 
     | 
    
         
            -
                              <xsl:for-each select="cntemail">
         
     | 
| 
      
 311 
     | 
    
         
            +
                              <xsl:for-each select="cntinfo/cntemail">
         
     | 
| 
       293 
312 
     | 
    
         
             
                                <dt>Contact Electronic Mail Address</dt>
         
     | 
| 
       294 
313 
     | 
    
         
             
                                <dd>
         
     | 
| 
       295 
314 
     | 
    
         
             
                                  <xsl:value-of select="." />
         
     | 
| 
       296 
315 
     | 
    
         
             
                                </dd>
         
     | 
| 
       297 
316 
     | 
    
         
             
                              </xsl:for-each>
         
     | 
| 
       298 
     | 
    
         
            -
                              <xsl:for-each select="hours">
         
     | 
| 
      
 317 
     | 
    
         
            +
                              <xsl:for-each select="cntinfo/hours">
         
     | 
| 
       299 
318 
     | 
    
         
             
                                <dt>Hours of Service</dt>
         
     | 
| 
       300 
319 
     | 
    
         
             
                                <dd>
         
     | 
| 
       301 
320 
     | 
    
         
             
                                  <xsl:value-of select="." />
         
     | 
| 
       302 
321 
     | 
    
         
             
                                </dd>
         
     | 
| 
       303 
322 
     | 
    
         
             
                              </xsl:for-each>
         
     | 
| 
       304 
     | 
    
         
            -
                              <xsl:for-each select="cntinst">
         
     | 
| 
      
 323 
     | 
    
         
            +
                              <xsl:for-each select="cntfo/cntinst">
         
     | 
| 
       305 
324 
     | 
    
         
             
                                <dt>Contact Instructions</dt>
         
     | 
| 
       306 
325 
     | 
    
         
             
                                <dd>
         
     | 
| 
       307 
326 
     | 
    
         
             
                                  <xsl:value-of select="." />
         
     | 
| 
         @@ -475,6 +494,12 @@ 
     | 
|
| 
       475 
494 
     | 
    
         
             
                                    </dl>
         
     | 
| 
       476 
495 
     | 
    
         
             
                                  </dd>
         
     | 
| 
       477 
496 
     | 
    
         
             
                                </xsl:for-each>
         
     | 
| 
      
 497 
     | 
    
         
            +
                                <xsl:for-each select="srccontr">
         
     | 
| 
      
 498 
     | 
    
         
            +
                                  <dt>Contribution</dt>
         
     | 
| 
      
 499 
     | 
    
         
            +
                                  <dd>
         
     | 
| 
      
 500 
     | 
    
         
            +
                                    <xsl:value-of select="." />
         
     | 
| 
      
 501 
     | 
    
         
            +
                                  </dd>
         
     | 
| 
      
 502 
     | 
    
         
            +
                                </xsl:for-each>
         
     | 
| 
       478 
503 
     | 
    
         
             
                              </dl>
         
     | 
| 
       479 
504 
     | 
    
         
             
                              <xsl:for-each select="procstep">
         
     | 
| 
       480 
505 
     | 
    
         
             
                                <dt>Process Step</dt>
         
     | 
| 
         @@ -1186,6 +1211,12 @@ 
     | 
|
| 
       1186 
1211 
     | 
    
         
             
                          <xsl:value-of select="attrdef" />
         
     | 
| 
       1187 
1212 
     | 
    
         
             
                          <xsl:apply-templates select="attrdomv" />
         
     | 
| 
       1188 
1213 
     | 
    
         
             
                          <dl>
         
     | 
| 
      
 1214 
     | 
    
         
            +
                            <xsl:for-each select="attrdefs">
         
     | 
| 
      
 1215 
     | 
    
         
            +
                              <dt>Definition Source</dt>
         
     | 
| 
      
 1216 
     | 
    
         
            +
                              <dd>
         
     | 
| 
      
 1217 
     | 
    
         
            +
                                <xsl:value-of select="." />
         
     | 
| 
      
 1218 
     | 
    
         
            +
                              </dd>
         
     | 
| 
      
 1219 
     | 
    
         
            +
                            </xsl:for-each>
         
     | 
| 
       1189 
1220 
     | 
    
         
             
                            <xsl:for-each select="begdatea">
         
     | 
| 
       1190 
1221 
     | 
    
         
             
                              <dt>Beginning Date of Attribute Values</dt>
         
     | 
| 
       1191 
1222 
     | 
    
         
             
                              <dd>
         
     | 
| 
         @@ -1234,9 +1265,7 @@ 
     | 
|
| 
       1234 
1265 
     | 
    
         
             
              </xsl:template>
         
     | 
| 
       1235 
1266 
     | 
    
         | 
| 
       1236 
1267 
     | 
    
         
             
              <xsl:template match="attrdomv[edom]">
         
     | 
| 
       1237 
     | 
    
         
            -
                < 
     | 
| 
       1238 
     | 
    
         
            -
                <button onclick="this.nextElementSibling.style.display = (this.nextElementSibling.style.display==='none') ? '' : 'none';">show/hide coded values</button>
         
     | 
| 
       1239 
     | 
    
         
            -
                <dl style="display:none">
         
     | 
| 
      
 1268 
     | 
    
         
            +
                <dl>
         
     | 
| 
       1240 
1269 
     | 
    
         
             
                  <xsl:for-each select="edom">
         
     | 
| 
       1241 
1270 
     | 
    
         
             
                    <dt><xsl:value-of select="edomv" /></dt>
         
     | 
| 
       1242 
1271 
     | 
    
         
             
                    <dd><xsl:value-of select="edomvd" /></dd>
         
     | 
| 
         @@ -1,9 +1,12 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
       1 
3 
     | 
    
         
             
            require 'spec_helper'
         
     | 
| 
       2 
4 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            #TODO Provide additional expectations on html structure
         
     | 
| 
      
 5 
     | 
    
         
            +
            # TODO: Provide additional expectations on html structure
         
     | 
| 
       4 
6 
     | 
    
         
             
            describe 'FGDC to html' do
         
     | 
| 
       5 
7 
     | 
    
         
             
              include XmlDocs
         
     | 
| 
       6 
8 
     | 
    
         
             
              let(:page) { GeoCombine::Fgdc.new(tufts_fgdc).to_html }
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
       7 
10 
     | 
    
         
             
              describe 'Identification Information' do
         
     | 
| 
       8 
11 
     | 
    
         
             
                it 'has sections' do
         
     | 
| 
       9 
12 
     | 
    
         
             
                  expect(page).to have_tag '#fgdc-identification-info' do
         
     | 
| 
         @@ -14,29 +17,78 @@ describe 'FGDC to html' do 
     | 
|
| 
       14 
17 
     | 
    
         
             
                  end
         
     | 
| 
       15 
18 
     | 
    
         
             
                end
         
     | 
| 
       16 
19 
     | 
    
         
             
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
       17 
21 
     | 
    
         
             
              describe 'Data Quality Information' do
         
     | 
| 
       18 
22 
     | 
    
         
             
                it 'has sections' do
         
     | 
| 
       19 
23 
     | 
    
         
             
                  expect(page).to have_tag '#fgdc-data-quality-info'
         
     | 
| 
       20 
24 
     | 
    
         
             
                end
         
     | 
| 
       21 
25 
     | 
    
         
             
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
       22 
27 
     | 
    
         
             
              describe 'Spatial Data Organization Information' do
         
     | 
| 
       23 
28 
     | 
    
         
             
                it 'has sections' do
         
     | 
| 
       24 
29 
     | 
    
         
             
                  expect(page).to have_tag '#fgdc-spatialdataorganization-info'
         
     | 
| 
       25 
30 
     | 
    
         
             
                end
         
     | 
| 
       26 
31 
     | 
    
         
             
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
       27 
33 
     | 
    
         
             
              describe 'Entity and Attribute Information' do
         
     | 
| 
       28 
34 
     | 
    
         
             
                it 'has sections' do
         
     | 
| 
       29 
35 
     | 
    
         
             
                  expect(page).to have_tag '#fgdc-spatialreference-info'
         
     | 
| 
       30 
36 
     | 
    
         
             
                end
         
     | 
| 
       31 
37 
     | 
    
         
             
              end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
       32 
39 
     | 
    
         
             
              describe 'Distribution Information' do
         
     | 
| 
       33 
40 
     | 
    
         
             
                it 'has sections' do
         
     | 
| 
       34 
41 
     | 
    
         
             
                  expect(page).to have_tag '#fgdc-distribution-info'
         
     | 
| 
       35 
42 
     | 
    
         
             
                end
         
     | 
| 
       36 
43 
     | 
    
         
             
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
       37 
45 
     | 
    
         
             
              describe 'Metadata Reference Information' do
         
     | 
| 
       38 
46 
     | 
    
         
             
                it 'has sections' do
         
     | 
| 
       39 
47 
     | 
    
         
             
                  expect(page).to have_tag '#fgdc-metadata-reference-info'
         
     | 
| 
       40 
48 
     | 
    
         
             
                end
         
     | 
| 
       41 
49 
     | 
    
         
             
              end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
              describe 'Point of Contact' do
         
     | 
| 
      
 52 
     | 
    
         
            +
                it 'has contact info' do
         
     | 
| 
      
 53 
     | 
    
         
            +
                  expect(page).to have_tag '#fgdc-identification-info'
         
     | 
| 
      
 54 
     | 
    
         
            +
                end
         
     | 
| 
      
 55 
     | 
    
         
            +
              end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
              context 'with fgdc metadata from another institution' do
         
     | 
| 
      
 58 
     | 
    
         
            +
                let(:page) { GeoCombine::Fgdc.new(princeton_fgdc).to_html }
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                it 'has temporal keywords' do
         
     | 
| 
      
 61 
     | 
    
         
            +
                  expect(page).to have_tag 'dt', text: 'Temporal Keyword'
         
     | 
| 
      
 62 
     | 
    
         
            +
                  expect(page).to have_tag 'dd', text: '2030'
         
     | 
| 
      
 63 
     | 
    
         
            +
                end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                it 'has supplemental information' do
         
     | 
| 
      
 66 
     | 
    
         
            +
                  expect(page).to have_tag 'dt', text: 'Supplemental Information'
         
     | 
| 
      
 67 
     | 
    
         
            +
                  expect(page).to have_tag 'dd', text: /The E\+ scenario/
         
     | 
| 
      
 68 
     | 
    
         
            +
                end
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
                it 'has a contact person' do
         
     | 
| 
      
 71 
     | 
    
         
            +
                  expect(page).to have_tag 'dt', text: 'Contact Person'
         
     | 
| 
      
 72 
     | 
    
         
            +
                  expect(page).to have_tag 'dd', text: 'Andrew Pascale'
         
     | 
| 
      
 73 
     | 
    
         
            +
                end
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                it 'has a contact telephone' do
         
     | 
| 
      
 76 
     | 
    
         
            +
                  expect(page).to have_tag 'dt', text: 'Contact Telephone'
         
     | 
| 
      
 77 
     | 
    
         
            +
                  expect(page).to have_tag 'dd', text: '609-258-1097'
         
     | 
| 
      
 78 
     | 
    
         
            +
                end
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                it 'has an attribute description source and a list of values' do
         
     | 
| 
      
 81 
     | 
    
         
            +
                  expect(page).to have_tag 'dt', text: 'Definition Source'
         
     | 
| 
      
 82 
     | 
    
         
            +
                  expect(page).to have_tag 'dd', text: 'Andlinger Center/HMEI'
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
                  # Attribute elements are show by default
         
     | 
| 
      
 85 
     | 
    
         
            +
                  expect(page).not_to have_tag 'button'
         
     | 
| 
      
 86 
     | 
    
         
            +
                  expect(page).to have_tag 'dd', text: 'Desert Southwest'
         
     | 
| 
      
 87 
     | 
    
         
            +
                end
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
                it 'has a attribute source contribution' do
         
     | 
| 
      
 90 
     | 
    
         
            +
                  expect(page).to have_tag 'dt', text: 'Contribution'
         
     | 
| 
      
 91 
     | 
    
         
            +
                  expect(page).to have_tag 'dd', text: 'Net-Zero America report, 2020'
         
     | 
| 
      
 92 
     | 
    
         
            +
                end
         
     | 
| 
      
 93 
     | 
    
         
            +
              end
         
     | 
| 
       42 
94 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,9 +1,12 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
       1 
3 
     | 
    
         
             
            require 'spec_helper'
         
     | 
| 
       2 
4 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            #TODO Provide additional expectations on html structure
         
     | 
| 
      
 5 
     | 
    
         
            +
            # TODO: Provide additional expectations on html structure
         
     | 
| 
       4 
6 
     | 
    
         
             
            describe 'ISO 19139 to html' do
         
     | 
| 
       5 
7 
     | 
    
         
             
              include XmlDocs
         
     | 
| 
       6 
8 
     | 
    
         
             
              let(:page) { GeoCombine::Iso19139.new(stanford_iso).to_html }
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
       7 
10 
     | 
    
         
             
              describe 'Identification Information' do
         
     | 
| 
       8 
11 
     | 
    
         
             
                it 'has sections' do
         
     | 
| 
       9 
12 
     | 
    
         
             
                  expect(page).to have_tag '#iso-identification-info' do
         
     | 
| 
         @@ -17,36 +20,42 @@ describe 'ISO 19139 to html' do 
     | 
|
| 
       17 
20 
     | 
    
         
             
                  end
         
     | 
| 
       18 
21 
     | 
    
         
             
                end
         
     | 
| 
       19 
22 
     | 
    
         
             
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
       20 
24 
     | 
    
         
             
              describe 'Spatial Reference Information' do
         
     | 
| 
       21 
25 
     | 
    
         
             
                it 'has sections' do
         
     | 
| 
       22 
26 
     | 
    
         
             
                  expect(page).to have_tag '#iso-spatial-reference-info'
         
     | 
| 
       23 
27 
     | 
    
         
             
                  expect(page).to have_tag 'h2', text: 'Identification Information'
         
     | 
| 
       24 
28 
     | 
    
         
             
                end
         
     | 
| 
       25 
29 
     | 
    
         
             
              end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
       26 
31 
     | 
    
         
             
              describe 'Data Quality Information' do
         
     | 
| 
       27 
32 
     | 
    
         
             
                it 'has sections' do
         
     | 
| 
       28 
33 
     | 
    
         
             
                  expect(page).to have_tag '#iso-data-quality-info'
         
     | 
| 
       29 
34 
     | 
    
         
             
                  expect(page).to have_tag 'h2', text: 'Data Quality Information'
         
     | 
| 
       30 
35 
     | 
    
         
             
                end
         
     | 
| 
       31 
36 
     | 
    
         
             
              end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
       32 
38 
     | 
    
         
             
              describe 'Distribution Information' do
         
     | 
| 
       33 
39 
     | 
    
         
             
                it 'has sections' do
         
     | 
| 
       34 
40 
     | 
    
         
             
                  expect(page).to have_tag '#iso-distribution-info'
         
     | 
| 
       35 
41 
     | 
    
         
             
                  expect(page).to have_tag 'h2', text: 'Distribution Information'
         
     | 
| 
       36 
42 
     | 
    
         
             
                end
         
     | 
| 
       37 
43 
     | 
    
         
             
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
       38 
45 
     | 
    
         
             
              describe 'Content Information' do
         
     | 
| 
       39 
46 
     | 
    
         
             
                it 'has sections' do
         
     | 
| 
       40 
47 
     | 
    
         
             
                  expect(page).to have_tag '#iso-content-info'
         
     | 
| 
       41 
48 
     | 
    
         
             
                  expect(page).to have_tag 'h2', text: 'Content Information'
         
     | 
| 
       42 
49 
     | 
    
         
             
                end
         
     | 
| 
       43 
50 
     | 
    
         
             
              end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
       44 
52 
     | 
    
         
             
              describe 'Spatial Representation Information' do
         
     | 
| 
       45 
53 
     | 
    
         
             
                it 'has sections' do
         
     | 
| 
       46 
54 
     | 
    
         
             
                  expect(page).to have_tag '#iso-spatial-representation-info'
         
     | 
| 
       47 
55 
     | 
    
         
             
                  expect(page).to have_tag 'h2', text: 'Spatial Representation Information'
         
     | 
| 
       48 
56 
     | 
    
         
             
                end
         
     | 
| 
       49 
57 
     | 
    
         
             
              end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
       50 
59 
     | 
    
         
             
              describe 'Metadata Reference Information' do
         
     | 
| 
       51 
60 
     | 
    
         
             
                it 'has sections' do
         
     | 
| 
       52 
61 
     | 
    
         
             
                  expect(page).to have_tag '#iso-metadata-reference-info'
         
     |