Class: DummyLogGenerator::Generator

Inherits:
Object
  • Object
show all
Defined in:
lib/dummy_log_generator/generator.rb

Instance Method Summary collapse

Constructor Details

#initialize(setting) ⇒ Generator

Returns a new instance of Generator.



3
4
5
6
7
8
9
10
11
12
13
14
# 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

Instance Method Details

#generateObject



77
78
79
# File 'lib/dummy_log_generator/generator.rb', line 77

def generate
  @message_proc.call
end

#prepare_field_procs(fields) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
73
74
75
# 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) ⇒ Object



54
55
56
57
58
59
60
# 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) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# 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) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 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) ⇒ Object



33
34
35
36
# File 'lib/dummy_log_generator/generator.rb', line 33

def prepare_message_proc_for_message(message)
  message = "#{message.chomp}\n"
  Proc.new { message }
end