Sha256: 01ba5f014e2cb1763c2c31add85e58d3cee14bd8f4b2dc6af6d2ada57c69feb5

Contents?: true

Size: 1.04 KB

Versions: 8

Compression:

Stored size: 1.04 KB

Contents

module RelatonCie
  module Scrapper
    ENDPOINT = "https://raw.githubusercontent.com/relaton/relaton-data-cie/master/".freeze
    INDEX_FILE = "index-v1.yaml".freeze

    class << self
      # @param code [String]
      # @return [RelatonCie::BibliographicItem]
      def scrape_page(code)
        index = Relaton::Index.find_or_create :cie, url: "#{ENDPOINT}index-v1.zip", file: INDEX_FILE
        row = index.search(code).min_by { |r| r[:id] }
        return unless row

        parse_page "#{ENDPOINT}#{row[:file]}"
      rescue OpenURI::HTTPError => e
        return if e.io.status.first == "404"

        raise RelatonBib::RequestError, "No document found for #{code} reference. #{e.message}"
      end

      private

      # @param url [String]
      # @retrurn [RelatoCie::BibliographicItem]
      def parse_page(url)
        doc = OpenURI.open_uri url
        bib_hash = RelatonBib::HashConverter.hash_to_bib YAML.safe_load(doc)
        bib_hash[:fetched] = Date.today.to_s
        RelatonCie::BibliographicItem.new(**bib_hash)
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
relaton-cie-1.19.0 lib/relaton_cie/scrapper.rb
relaton-cie-1.18.1 lib/relaton_cie/scrapper.rb
relaton-cie-1.18.0 lib/relaton_cie/scrapper.rb
relaton-cie-1.17.0 lib/relaton_cie/scrapper.rb
relaton-cie-1.16.2 lib/relaton_cie/scrapper.rb
relaton-cie-1.16.1 lib/relaton_cie/scrapper.rb
relaton-cie-1.16.0 lib/relaton_cie/scrapper.rb
relaton-cie-1.14.1 lib/relaton_cie/scrapper.rb