class DummyLogGenerator::Generator

Public Class Methods

new(setting) click to toggle source
# File lib/dummy_log_generator/generator.rb, line 3
def initialize(setting)
  @message_proc =
    if fields = setting.fields
      labeled, delimiter = setting.labeled, setting.delimiter
      prepare_message_proc_for_fields(fields, labeled, delimiter)
    elsif input = setting.input
      prepare_message_proc_for_input(input)
    else
      message = setting.message
      prepare_message_proc_for_message(message)
    end
end

Public Instance Methods

generate() click to toggle source
# File lib/dummy_log_generator/generator.rb, line 77
def generate
  @message_proc.call
end
prepare_field_procs(fields) click to toggle source
# File lib/dummy_log_generator/generator.rb, line 62
def prepare_field_procs(fields)
  rand = ::DummyLogGenerator::Random.new
  field_procs = {}
  fields.each do |key, opts|
    opts = opts.dup
    type = opts.delete(:type)
    if rand.respond_to?(type)
      field_procs[key] = rand.send(type, opts)
    else
      raise ConfigError.new(type)
    end
  end
  field_procs
end
prepare_format_proc(labeled, delimiter) click to toggle source
# File lib/dummy_log_generator/generator.rb, line 54
def prepare_format_proc(labeled, delimiter)
  if labeled
    Proc.new {|fields| "#{fields.map {|key, val| "#{key}:#{val}" }.join(delimiter)}\n" }
  else
    Proc.new {|fields| "#{fields.values.join(delimiter)}\n" }
  end
end
prepare_message_proc_for_fields(fields, labeled, delimiter) click to toggle source
# File lib/dummy_log_generator/generator.rb, line 38
def prepare_message_proc_for_fields(fields, labeled, delimiter)
  format_proc = prepare_format_proc(labeled, delimiter)
  field_procs = prepare_field_procs(fields)

  prev_data = {}
  Proc.new {
    data = {}
    field_procs.each do |key, proc|
      prev = prev_data[key] || -1
      data[key] = proc.call(prev)
    end
    prev_data = data
    format_proc.call(data)
  }
end
prepare_message_proc_for_input(input) click to toggle source
# File lib/dummy_log_generator/generator.rb, line 16
def prepare_message_proc_for_input(input)
  messages = nil
  begin
    open(input) do |in_file|
      messages = in_file.readlines
    end
  rescue Errno::ENOENT
    raise ConfigError.new("Input file `#{input}` is not readable")
  end
  idx = -1
  size = messages.size
  Proc.new {
    idx = (idx + 1) % size
    messages[idx]
  }
end
prepare_message_proc_for_message(message) click to toggle source
# File lib/dummy_log_generator/generator.rb, line 33
def prepare_message_proc_for_message(message)
  message = "#{message.chomp}\n"
  Proc.new { message }
end