Sha256: 530d21673ee055aaea48cbbeec941b66540d3a1fc94b896defd82c3dc77eae6b

Contents?: true

Size: 1.38 KB

Versions: 2

Compression:

Stored size: 1.38 KB

Contents

require "singleton"

class Error < StandardError
end

module Relaton
  class Registry
    SUPPORTED_GEMS = %w[
      relaton_gb relaton_iec relaton_ietf relaton_iso relaton_itu relaton_nist
      relaton_ogc
    ].freeze

    include Singleton

    attr_reader :processors

    def initialize
      @processors = {}
      register_gems
    end

    def register_gems
      puts "[relaton] Info: detecting backends:"
      SUPPORTED_GEMS.each do |b|
        begin
          require b
          require "#{b}/processor"
          register Kernel.const_get "#{camel_case(b)}::Processor"
        rescue LoadError
          puts "[relaton] Error: backend #{b} not present"
        end
      end
    end

    def register(processor)
      raise Error unless processor < ::Relaton::Processor

      p = processor.new
      return if processors[p.short]

      puts "[relaton] processor \"#{p.short}\" registered"
      processors[p.short] = p
    end

    def find_processor(short)
      processors[short.to_sym]
    end

    # @return [Array]
    def supported_processors
      processors.keys
    end

    #
    # Find processor by type
    #
    # @param type [String]
    # @return [Relaton::RelatonIso::Processor]
    def by_type(type)
      processors.values.detect { |v| v.idtype == type }
    end

    private

    def camel_case(gem_name)
      gem_name.split("_").map(&:capitalize).join
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
relaton-0.5.5 lib/relaton/registry.rb
relaton-0.5.4 lib/relaton/registry.rb