class GeoCombine::CkanMetadata

Constants

MAX_STRING_LENGTH

Attributes

metadata[R]

Public Class Methods

new(metadata) click to toggle source
# File lib/geo_combine/ckan_metadata.rb, line 6
def initialize(metadata)
  @metadata = JSON.parse(metadata)
end

Public Instance Methods

downloadable?() click to toggle source
# File lib/geo_combine/ckan_metadata.rb, line 97
def downloadable?
  resource_urls('download').first =~ /.*\.zip/im
end
envelope() click to toggle source
# File lib/geo_combine/ckan_metadata.rb, line 41
def envelope
  return envelope_from_bbox unless envelope_from_bbox.nil?
  return envelope_from_spatial(',') unless envelope_from_spatial(',').nil?
  return envelope_from_spatial(' ') unless envelope_from_spatial(' ').nil?
end
envelope_from_bbox() click to toggle source
# File lib/geo_combine/ckan_metadata.rb, line 47
def envelope_from_bbox
  bbox = GeoCombine::BoundingBox.new(
    west: extras('bbox-west-long'),
    south: extras('bbox-south-lat'),
    east: extras('bbox-east-long'),
    north: extras('bbox-north-lat')
  )
  begin
    return bbox.to_envelope if bbox.valid?
  rescue GeoCombine::Exceptions::InvalidGeometry
    return nil
  end
end
envelope_from_spatial(delimiter) click to toggle source
# File lib/geo_combine/ckan_metadata.rb, line 61
def envelope_from_spatial(delimiter)
  bbox = GeoCombine::BoundingBox.from_string_delimiter(
    extras('spatial'),
    delimiter: delimiter
  )
  begin
    return bbox.to_envelope if bbox.valid?
  rescue GeoCombine::Exceptions::InvalidGeometry
    return nil
  end
end
external_references() click to toggle source
# File lib/geo_combine/ckan_metadata.rb, line 85
def external_references
  h = {
    'http://schema.org/url' => resource_urls('information').first
  }

  if downloadable?
    h['http://schema.org/downloadUrl'] = resource_urls('download').first
  end

  h.select { |_k, v| !v.nil? }
end
extras(key) click to toggle source
# File lib/geo_combine/ckan_metadata.rb, line 77
def extras(key)
  if @metadata['extras']
    @metadata['extras'].select { |h| h['key'] == key }.collect { |v| v['value'] }[0] || ''
  else
    ''
  end
end
geoblacklight_terms() click to toggle source

Builds a Geoblacklight Schema type hash from Esri Open Data portal metadata @return [Hash]

# File lib/geo_combine/ckan_metadata.rb, line 21
def geoblacklight_terms
  {
    dc_identifier_s: @metadata['id'],
    dc_title_s: @metadata['title'],
    dc_rights_s: 'Public',
    layer_geom_type_s: 'Not Specified',
    dct_provenance_s: organization['title'],
    dc_description_s: @metadata['notes'].respond_to?(:[]) ? @metadata['notes'][0..MAX_STRING_LENGTH] : nil,
    layer_slug_s: @metadata['name'],
    solr_geom: envelope,
    dc_subject_sm: subjects,
    dct_references_s: external_references.to_json.to_s,
    dc_format_s: downloadable? ? 'ZIP' : nil # TODO: we only allow direct ZIP file downloads
  }.select { |_k, v| !v.nil? }
end
organization() click to toggle source
# File lib/geo_combine/ckan_metadata.rb, line 37
def organization
  @metadata['organization'] || { title: '' }
end
resource_urls(type) click to toggle source
# File lib/geo_combine/ckan_metadata.rb, line 106
def resource_urls(type)
  resources(type).collect do |resource|
    resource['url'] if resource.respond_to?(:[])
  end
end
resources(type) click to toggle source
# File lib/geo_combine/ckan_metadata.rb, line 101
def resources(type)
  return [] if @metadata['resources'].nil?
  @metadata['resources'].select { |resource| resource['resource_locator_function'] == type }
end
subjects() click to toggle source
# File lib/geo_combine/ckan_metadata.rb, line 73
def subjects
  extras('tags').split(',').map(&:strip)
end
to_geoblacklight() click to toggle source

Creates and returns a Geoblacklight schema object from this metadata @return [GeoCombine::Geoblacklight]

# File lib/geo_combine/ckan_metadata.rb, line 13
def to_geoblacklight
  GeoCombine::Geoblacklight.new(geoblacklight_terms.to_json)
end