Sha256: 9bacd0a17617480e9ebf04339ffb9a6f90088dedb89e3786b329c99a79c15839

Contents?: true

Size: 1.78 KB

Versions: 1

Compression:

Stored size: 1.78 KB

Contents

module RelatonIeee
  class IeeeBibliography
    GH_URL = "https://raw.githubusercontent.com/relaton/relaton-data-ieee/main/".freeze
    INDEX_FILE = "index-v1.yaml".freeze

    class << self
      #
      # Search IEEE bibliography item by reference.
      #
      # @param code [String]
      #
      # @return [RelatonIeee::IeeeBibliographicItem]
      #
      def search(code) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
        ref = code.sub(/Std\s/i, "") # .gsub(/[\s,:\/]/, "_").squeeze("_").upcase
        index = Relaton::Index.find_or_create :ieee, url: "#{GH_URL}index-v1.zip", file: INDEX_FILE
        row = index.search(ref).min_by { |r| r[:id] }
        return unless row

        resp = Faraday.get "#{GH_URL}#{row[:file]}"
        return unless resp.status == 200

        hash = YAML.safe_load resp.body
        hash["fetched"] = Date.today.to_s
        IeeeBibliographicItem.from_hash hash
      rescue Faraday::ConnectionFailed
        raise RelatonBib::RequestError, "Could not access #{GH_URL}"
      end

      #
      # Get IEEE bibliography item by reference.
      #
      # @param code [String] the IEEE standard Code to look up (e..g "528-2019")
      # @param year [String] the year the standard was published (optional)
      # @param opts [Hash] options
      #
      # @return [Hash, NilClass] returns { ret: RelatonBib::BibliographicItem }
      #   if document is found else returns NilClass
      #
      def get(code, _year = nil, _opts = {}) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
        Util.warn "(#{code}) fetching..."
        item = search(code)
        if item
          Util.warn "(#{code}) found `#{item.docidentifier.first.id}`"
          item
        else
          Util.warn "(#{code}) not found"
          nil
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
relaton-ieee-1.16.1 lib/relaton_ieee/ieee_bibliography.rb