Module: Norikra::UDFSpecHelper

Defined in:
lib/norikra/udf_spec_helper.rb

Defined Under Namespace

Modules: UDFHelper Classes: UDFAggregationFactoryInstance, UDFAggregationInstance, UDFInstance

Constant Summary collapse

@@plugins =
{}

Instance Method Summary collapse

Instance Method Details

#fcall(name, *args) ⇒ Object



9
10
11
# File 'lib/norikra/udf_spec_helper.rb', line 9

def fcall(name, *args)
  @@plugins[name.to_s]._call(*args)
end

#function(name) ⇒ Object



5
6
7
# File 'lib/norikra/udf_spec_helper.rb', line 5

def function(name)
  @@plugins[name.to_s]
end

#udf_function(mojule, params = {}) ⇒ Object

params: for AggregationSingle only

required keys: :valueType, :windowed, :distinct, :parameters
  :parameters => [[parameterType, constant?, contantValue], ... ]


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
# File 'lib/norikra/udf_spec_helper.rb', line 16

def udf_function(mojule, params={})
  esper_jars_dir = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'esper'))
  esper_jar = Dir.entries(esper_jars_dir).select{|f| f =~ /^esper-\d+\.\d+\.\d+\.jar$/}.first
  require esper_jar

  unless mojule.is_a?(Class)
    mojule.init if mojule.respond_to?(:init)
    ps = []
    mojule.plugins.each{|p| ps.push(udf_function(p))} if mojule.respond_to?(:plugins)
    return ps
  end

  klass = mojule
  klass.init if klass.respond_to?(:init)

  if klass.superclass == Norikra::UDF::SingleRow
    name, classname, methodname = klass.new.definition
    @@plugins[name] = UDFInstance.new(classname, methodname)

  elsif klass.superclass == Norikra::UDF::AggregationSingle
    name, factoryclassname = klass.new.definition
    factory = UDFAggregationFactoryInstance.new(factoryclassname)
    factory.check(name, params[:valueType], params[:parameters], params.fetch(:distinct, false), params.fetch(:windowed, true))
    @@plugins[name] = factory.create
  end
end