36 lines
		
	
	
		
			766 B
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			766 B
		
	
	
	
		
			Ruby
		
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
require 'yaml'
 | 
						|
 | 
						|
module Database
 | 
						|
  class QueryAnalyzers
 | 
						|
    attr_reader :analyzers
 | 
						|
 | 
						|
    def initialize
 | 
						|
      config = YAML.safe_load_file(File.expand_path('query_analyzers.yml', __dir__))
 | 
						|
      @analyzers = self.class.all.map do |subclass|
 | 
						|
        subclass_name = subclass.to_s.split('::').last
 | 
						|
        subclass.new(config[subclass_name])
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    def analyze(query)
 | 
						|
      analyzers.each { |analyzer| analyzer.analyze(query) }
 | 
						|
    end
 | 
						|
 | 
						|
    def save!
 | 
						|
      analyzers.each(&:save!)
 | 
						|
    end
 | 
						|
 | 
						|
    class << self
 | 
						|
      def all
 | 
						|
        ObjectSpace.each_object(::Class).select { |c| c < Base }
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
Dir[File.join(File.expand_path('query_analyzers', __dir__), '*.rb')].each do |plugin|
 | 
						|
  require plugin
 | 
						|
end
 |