GlobalNamesArchitecture/dwc-archive

View on GitHub
lib/dwc_archive/metadata.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

class DarwinCore
  # Represents data from EML (Ecological Metadata Language) file
  class Metadata
    attr_reader :metadata
    alias data metadata

    def initialize(archive = nil)
      @archive = archive
      @metadata = @archive.eml
    end

    def id
      fix_nil { @metadata[:eml][:dataset][:attributes][:id] }
    end

    def package_id
      fix_nil { @metadata.data[:eml][:attributes][:packageId] }
    end

    def title
      fix_nil { @metadata[:eml][:dataset][:title] }
    end

    def authors
      return nil unless defined?(@metadata[:eml][:dataset][:creator])

      authors = [@metadata[:eml][:dataset][:creator]].flatten
      authors.map do |au|
        { first_name: au[:individualName][:givenName],
          last_name: au[:individualName][:surName],
          email: au[:electronicMailAddress] }
      end
    end

    def abstract
      fix_nil { @metadata[:eml][:dataset][:abstract] }
    end

    def citation
      fix_nil { @metadata[:eml][:additionalMetadata][:metadata][:citation] }
    end

    def url
      fix_nil { @metadata[:eml][:dataset][:distribution][:online][:url] }
    end

    private

    def fix_nil
      yield
    rescue NoMethodError
      nil
    end
  end
end