lib/connectors/registry.rb (34 lines of code) (raw):

# # Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one # or more contributor license agreements. Licensed under the Elastic License; # you may not use this file except in compliance with the Elastic License. # module Connectors class Factory attr_reader :connectors def initialize @connectors = {} end def register(name, klass) @connectors[name] = klass end def registered?(name) @connectors.has_key?(name) end def connector_class(name) @connectors[name] end def connector(name, configuration, job_description: nil) klass = connector_class(name) if klass.present? return klass.new(configuration: configuration, job_description: job_description) end raise "Connector #{name} is not yet registered. You need to register it before use" end def registered_connectors @connectors.keys.sort end end REGISTRY = Factory.new require_relative './example/connector' REGISTRY.register(Connectors::Example::Connector.service_type, Connectors::Example::Connector) # loading plugins (might replace this with a directory scan and conventions on names) require_relative './gitlab/connector' REGISTRY.register(Connectors::GitLab::Connector.service_type, Connectors::GitLab::Connector) require_relative 'mongodb/connector' REGISTRY.register(Connectors::MongoDB::Connector.service_type, Connectors::MongoDB::Connector) end