module Fluent::Config::Expander
Public Class Methods
expand(element, mapping)
click to toggle source
# File lib/fluent/plugin/expander.rb, line 8 def self.expand(element, mapping) name = replace(element.name, mapping) arg = replace(element.arg, mapping) attrs = element.reduce({}){|r, pair| r[replace(pair[0], mapping)] = replace(pair[1], mapping); r} elements = [] element.elements.each do |e| if e.name == 'for' unless e.arg =~ /^([a-zA-Z0-9]+) in (.+)$/ raise Fluent::ConfigError, "invalid for tag syntax: <for NAME in ARG1 ARG2 ...>" end vkey = $1.dup vargs = $2.split(/ +/).select{|v| v.size > 0} vname = '__' + vkey + '__' vname2 = '${' + vkey + '}' vargs.each do |v| expanded = expand(e, mapping.merge({vname => v, vname2 => v})) attrs.update(expanded) elements += expanded.elements.map{|xe| expand(xe, mapping)} end else elements.push(expand(e, mapping)) end end Fluent::Config::Element.new(name, arg, attrs, elements, []) end
replace(str, mapping)
click to toggle source
# File lib/fluent/plugin/expander.rb, line 4 def self.replace(str, mapping) mapping.reduce(str){|r, pair| r.gsub(pair[0], pair[1])} end