lib/fluent/plugin/out_datacalculator.rb in fluent-plugin-datacalculator-0.0.3 vs lib/fluent/plugin/out_datacalculator.rb in fluent-plugin-datacalculator-0.0.4

- old
+ new

@@ -68,13 +68,17 @@ end def createFunc (cnt, str) str.strip! left, right = str.split(/\s*=\s*/, 2) - # Fluent moduleだけはOK - rights = right.scan(/[a-zA-Z][\w\d_\.\$\:\@]*/).uniq.select{|x| x.index('Fluent') != 0} + rights = right.gsub(/([^\\]|^)\".+[^\\]\"/, '') + rights = rights.scan(/[a-zA-Z][\w\d_\.\$\:\@]*/).uniq.select{|x| not x.match(/^[A-Z]/)} + rights = rights.map do|var| + var.sub(/[\.:].+$/, '') + end + begin f = eval('lambda {|'+rights.join(',')+'| '+right + '}') rescue SyntaxError raise Fluent::ConfigError, "'" + str + "' is not valid" end @@ -92,10 +96,14 @@ if tag != nil and tag != 'all' arg = tag + '_' + arg end _argv.push obj[arg] } - formula.call(*_argv) + begin + formula.call(*_argv) + rescue ArgumentError + raise Fluent::RuntimeError, "argument error " + _argv + " are adapted to "+ formula + end end @_formulas = [] if conf.has_key?('formulas') fs = conf['formulas'].split(/\s*,\s*/)