Class: Dummer::Generator::FieldMode

Inherits:
AbstractMode show all
Defined in:
lib/dummer/generator/field_mode.rb

Class Method Summary collapse

Class Method Details

.field_procs(fields) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/dummer/generator/field_mode.rb', line 53

def self.field_procs(fields)
  rand = ::Dummer::Random.new
  field_procs = {}
  fields.each do |key, opts|
    opts = opts.dup
    type = opts.delete(:type)
    field_procs[key] =
      case type
      when :string
        rand.string(opts)
      when :integer
        rand.integer(opts)
      when :float
        rand.float(opts)
      when :datetime
        rand.datetime(opts)
      else
        raise ConfigError.new("type: `#{type}` is not defined.")
      end
  end
  field_procs
end

.format_proc(labeled, delimiter, label_delimiter) ⇒ Object

private



45
46
47
48
49
50
51
# File 'lib/dummer/generator/field_mode.rb', line 45

def self.format_proc(labeled, delimiter, label_delimiter)
  if labeled
    Proc.new {|fields| "#{fields.map {|key, val| "#{key}#{label_delimiter}#{val}" }.join(delimiter)}\n" }
  else
    Proc.new {|fields| "#{fields.values.join(delimiter)}\n" }
  end
end

.message_proc(fields, labeled, delimiter, label_delimiter) ⇒ Object

file



5
6
7
8
9
10
11
12
13
# File 'lib/dummer/generator/field_mode.rb', line 5

def self.message_proc(fields, labeled, delimiter, label_delimiter)
  format_proc = format_proc(labeled, delimiter, label_delimiter)
  record_proc = record_proc(fields)

  Proc.new {
    hash = record_proc.call
    format_proc.call(hash)
  }
end

.record_proc(fields) ⇒ Object

fluent-logger



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/dummer/generator/field_mode.rb', line 16

def self.record_proc(fields)
  field_procs = field_procs(fields)

  prev_data = {}
  Proc.new {
    data = {}
    field_procs.each do |key, proc|
      prev = prev_data[key] || -1
      value, raw = proc.call(prev)
      data[key] = value
      prev_data[key] = raw || value
    end
    data
  }
end

.tag_proc(tag_opts) ⇒ Object

fluent-logger



33
34
35
36
37
38
39
40
41
# File 'lib/dummer/generator/field_mode.rb', line 33

def self.tag_proc(tag_opts)
  proc = field_procs({"tag" => tag_opts})["tag"]
  prev = -1
  Proc.new {
    value, raw = proc.call(prev)
    prev = raw || value
    value
  }
end