Class: Fluent::RecordReformerOutput::RubyPlaceholderExpander

Inherits:
Object
  • Object
show all
Defined in:
lib/fluent/plugin/out_record_reformer.rb

Defined Under Namespace

Classes: UndefOpenStruct

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(params) ⇒ RubyPlaceholderExpander

Returns a new instance of RubyPlaceholderExpander.



237
238
239
240
# File 'lib/fluent/plugin/out_record_reformer.rb', line 237

def initialize(params)
  @log = params[:log]
  @auto_typecast = params[:auto_typecast]
end

Instance Attribute Details

#logObject (readonly)

Returns the value of attribute log.



235
236
237
# File 'lib/fluent/plugin/out_record_reformer.rb', line 235

def log
  @log
end

#placeholdersObject (readonly)

Returns the value of attribute placeholders.



235
236
237
# File 'lib/fluent/plugin/out_record_reformer.rb', line 235

def placeholders
  @placeholders
end

Instance Method Details

#expand(str, force_stringify = false) ⇒ Object

Replace placeholders in a string

Parameters:

  • str (String)

    the string to be replaced



257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
# File 'lib/fluent/plugin/out_record_reformer.rb', line 257

def expand(str, force_stringify=false)
  if @auto_typecast and !force_stringify
    single_placeholder_matched = str.match(/\A\${([^}]+)}\z/)
    if single_placeholder_matched
      code = single_placeholder_matched[1]
      return eval code, @placeholders.instance_eval { binding }
    end
  end
  interpolated = str.gsub(/\$\{([^}]+)\}/, '#{\1}') # ${..} => #{..}
  eval "\"#{interpolated}\"", @placeholders.instance_eval { binding }
rescue => e
  log.warn "record_reformer: failed to expand `#{str}`", :error_class => e.class, :error => e.message
  log.warn_backtrace
  nil
end

#prepare_placeholders(time, record, opts) ⇒ Object

Get placeholders as a struct

Parameters:

  • time (Time)

    the time

  • record (Hash)

    the record

  • opts (Hash)

    others



247
248
249
250
251
252
# File 'lib/fluent/plugin/out_record_reformer.rb', line 247

def prepare_placeholders(time, record, opts)
  struct = UndefOpenStruct.new(record)
  struct.time = Time.at(time)
  opts.each {|key, value| struct.__send__("#{key}=", value) }
  @placeholders = struct
end