summaryrefslogtreecommitdiffstats
path: root/storage/mroonga/vendor/groonga/lib/mrb/scripts/expression_rewriters.rb
blob: ae773541eedddfde39f4ae175c877319c89d199c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
module Groonga
  module ExpressionRewriters
    @rewriters = {}

    class << self
      def register(name, rewriter_class)
        @rewriters[name] = rewriter_class
      end

      def enabled?
        rewriters_table_name =
          Config["expression_rewriter.table"] || "expression_rewriters"
        rewriters_table = Context.instance[rewriters_table_name]
        return false if rewriters_table.nil?
        return false if rewriters_table.empty?

        true
      end

      def classes
        rewriters_table_name =
          Config["expression_rewriter.table"] || "expression_rewriters"
        rewriters_table = Context.instance[rewriters_table_name]
        return [] if rewriters_table.nil?

        rewriters_table.collect do |id|
          record = Record.new(rewriters_table, id)
          name = record.key
          rewriter = @rewriters[name]
          if rewriter.nil?
            plugin_name = record.plugin_name.value
            require plugin_name
            rewriter = @rewriters[name]
            raise "unknown rewriter: <#{name}>:<#{plugin_name}>" if rewriter.nil?
          end
          rewriter
        end
      end
    end
  end
end