Sha256: e487487882a1c4815cf10dc85566e01b9402bedf48a04af7e23b12abd1ee216f
Contents?: true
Size: 1.69 KB
Versions: 1
Compression:
Stored size: 1.69 KB
Contents
module Chronicle module Etl # Utility methods to catalogue which Extractor, Transformer, and # Loader classes are available to chronicle-etl module Catalog def self.available_classes parent_klasses = [ Chronicle::Etl::Extractor, Chronicle::Etl::Transformer, Chronicle::Etl::Loader ] # TODO: have a registry of plugins plugins = ['email', 'bash'] # Attempt to load each chronicle plugin that we might know about so # that we can later search for subclasses to build our list of # available classes plugins.each do |plugin| require "chronicle/#{plugin}" rescue LoadError # this will happen if the gem isn't available globally end klasses = [] parent_klasses.each do |parent| klasses += ObjectSpace.each_object(Class).select { |klass| klass < parent } end klasses.map do |klass| { name: klass.name, built_in: klass.built_in?, provider: klass.provider, phase: klass.phase } end end def phase ancestors = self.ancestors return :extractor if ancestors.include? Chronicle::Etl::Extractor return :transformer if ancestors.include? Chronicle::Etl::Transformer return :loader if ancestors.include? Chronicle::Etl::Loader end def provider # TODO: needs better convention for a gem reporting its provider name provider = to_s.split('::')[1].downcase provider == 'etl' ? 'chronicle' : provider end def built_in? to_s.include? 'Chronicle::Etl' end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
chronicle-etl-0.1.4 | lib/chronicle/etl/catalog.rb |