Sha256: a91fad1eeee0814ad7450ff2712fd0dfaf2505f67f8ddb70b2082e803cb7bf3f

Contents?: true

Size: 1.94 KB

Versions: 5

Compression:

Stored size: 1.94 KB

Contents

require "thor"
require "relaton"
require_relative "cli/command"

module Relaton
  def self.db
    Cli.relaton
  end

  module Cli
    class RelatonDb
      include Singleton

      def db
        @db ||= Relaton::Db.new("#{Dir.home}/.relaton/cache", nil)
      end
    end

    class << self
      def start(arguments)
        Relaton::Cli::Command.start(arguments)
      end

      # Relaton
      #
      # Based on current setup, we need to initiate a Db instance to
      # register all of it's supported processor backends. To make it
      # easier we have added it as a class method so we can use this
      # whenever necessary.
      #
      def relaton
        RelatonDb.instance.db
      end

      # @param content [Nokogiri::XML::Document]
      # @return [RelatonBib::BibliographicItem,
      #   RelatonIsoBib::IsoBibliongraphicItem]
      def parse_xml(doc)
        if (proc = Cli.processor(doc))
          proc.from_xml(doc.to_s)
        else
          RelatonBib::XMLParser.from_xml(doc.to_s)
        end
      end

      # @param doc [Nokogiri::XML::Element]
      # @return [RelatonIso::Processor, RelatonIec::Processor,
      #   RelatonNist::Processor, RelatonIetf::Processot,
      #   RelatonItu::Processor, RelatonGb::Processor,
      #   RelatonOgc::Processor, RelatonCalconnect::Processor]
      def processor(doc)
        docid = doc.at "docidentifier"
        proc = get_proc docid
        return proc if proc

        Relaton::Registry.instance.by_type(docid&.text&.match(/^\w+/)&.to_s)
      end

      private

      # @param doc [Nokogiri::XML::Element]
      # @return [RelatonIso::Processor, RelatonIec::Processor,
      #   RelatonNist::Processor, RelatonIetf::Processot,
      #   RelatonItu::Processor, RelatonGb::Processor,
      #   RelatonOgc::Processor, RelatonCalconnect::Processor]
      def get_proc(docid)
        return unless docid && docid[:type]

        Relaton::Registry.instance.by_type(docid[:type])
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
relaton-cli-1.7.2 lib/relaton/cli.rb
relaton-cli-1.7.1 lib/relaton/cli.rb
relaton-cli-1.7.0 lib/relaton/cli.rb
relaton-cli-1.6.0 lib/relaton/cli.rb
relaton-cli-1.6.pre1 lib/relaton/cli.rb