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