Sha256: 2e6b92dbb7309e1236dbb825c243f752333fcbcec852c9630e31d05620370d27

Contents?: true

Size: 1.34 KB

Versions: 1

Compression:

Stored size: 1.34 KB

Contents

module NistBib
  class XMLParser < RelatonBib::XMLParser
    class << self
      def from_xml(xml)
        doc = Nokogiri::XML xml
        nistitem = doc.at("/bibitem") || doc.at("/bibdata")
        NistBibliographicItem.new(item_data(nistitem))
      end

      private

      def item_data(nistitem)
        data = super
        data.delete :series
        data[:nistseries] = fetch_nistseries(nistitem)
        data[:keyword] = fetch_keyword(nistitem)
        data[:commentperiod] = fetch_commentperiod(nistitem)
        data
      end

      def fetch_status(item)
        status = item.at "./status"
        return unless status

        DocumentStatus.new(
          stage: status.at("stage")&.text,
          substage: status.at("substage")&.text,
          iteration: status.at("iteraton")&.text,
        )
      end

      def fetch_commentperiod(item)
        cp = item.at "./commentperiod"
        return unless cp

        CommentPeriod.new cp.at("from").text, cp.at("to")&.text, cp.at("extended")&.text
      end

      def fetch_keyword(item)
        item.xpath("./keyword").map do |kw|
          Keyword.new kw.children.first.to_xml
        end
      end

      def fetch_nistseries(item)
        series = item.at "./series"
        return unless series

        NistSeries.new series.at("./abbreviation").text.upcase.gsub("-", " ")
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
nistbib-0.1.5 lib/nistbib/xml_parser.rb