Class: Relaton::Registry

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/relaton/registry.rb

Constant Summary collapse

SUPPORTED_GEMS =
%w[
  relaton_gb relaton_iec relaton_ietf relaton_iso relaton_itu relaton_nist
  relaton_ogc relaton_calconnect relaton_omg relaton_un relaton_w3c
  relaton_ieee relaton_iho relaton_bipm relaton_ecma relaton_cie relaton_bsi
  relaton_cen relaton_iana relaton_3gpp relaton_oasis relaton_doi relaton_jis
  relaton_xsf relaton_ccsds relaton_etsi relaton_isbn relaton/plateau
].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeRegistry

Returns a new instance of Registry.



20
21
22
23
# File 'lib/relaton/registry.rb', line 20

def initialize
  @processors = {}
  register_gems
end

Instance Attribute Details

#processorsObject (readonly)

Returns the value of attribute processors.



18
19
20
# File 'lib/relaton/registry.rb', line 18

def processors
  @processors
end

Instance Method Details

#by_type(type) ⇒ RelatonIso::Processor, ...

Find processor by type

Parameters:

  • type (String)

Returns:

  • (RelatonIso::Processor, RelatonIec::Processor, RelatonNist::Processor, RelatonIetf::Processot, RelatonItu::Processor, RelatonGb::Processor, RelatonOgc::Processor, RelatonCalconnect::Processor)


75
76
77
# File 'lib/relaton/registry.rb', line 75

def by_type(type)
  processors.values.detect { |v| v.prefix == type&.upcase }
end

#class_by_ref(ref) ⇒ Symbol?

Find processor by refernce or prefix

Parameters:

  • ref (String)

    reference or prefix

Returns:

  • (Symbol, nil)

    standard class name



97
98
99
100
101
102
103
104
105
# File 'lib/relaton/registry.rb', line 97

def class_by_ref(ref)
  ref = ref.match(/^\w+\((.*)\)$/) ? Regexp.last_match(1) : ref
  @processors.each do |class_name, processor|
    return class_name if /^(urn:)?#{processor.prefix}\b/i.match?(ref) ||
      processor.defaultprefix.match(ref)
  end
  Util.info "`#{ref}` does not have a recognised prefix", key: ref
  nil
end

#find_processor(short) ⇒ Object



47
48
49
# File 'lib/relaton/registry.rb', line 47

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

#find_processor_by_dataset(dataset) ⇒ Relaton::Processor?

Search a rpocessos by dataset name

Parameters:

  • dataset (String)

Returns:



63
64
65
# File 'lib/relaton/registry.rb', line 63

def find_processor_by_dataset(dataset)
  processors.values.detect { |p| p.datasets&.include? dataset }
end

#processor_by_ref(ref) ⇒ Relaton::Processor

Find processor by reference or prefix

Parameters:

  • ref (String)

    reference or prefix

Returns:



86
87
88
# File 'lib/relaton/registry.rb', line 86

def processor_by_ref(ref)
  @processors[class_by_ref(ref)]
end

#register(processor) ⇒ Object

Raises:



37
38
39
40
41
42
43
44
45
# File 'lib/relaton/registry.rb', line 37

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

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

  Util.debug("processor \"#{p.short}\" registered")
  processors[p.short] = p
end

#register_gemsObject



25
26
27
28
29
30
31
32
33
34
35
# File 'lib/relaton/registry.rb', line 25

def register_gems
  # Util.info("Info: detecting backends:")

  SUPPORTED_GEMS.each do |b|
    require b
    require "#{b}/processor"
    register Kernel.const_get "#{camel_case(b)}::Processor"
  rescue LoadError => e
    Util.error "backend #{b} not present\n#{e.message}\n#{e.backtrace.join "\n"}"
  end
end

#supported_processorsArray<Symbol>

Returns:

  • (Array<Symbol>)


52
53
54
# File 'lib/relaton/registry.rb', line 52

def supported_processors
  processors.keys
end