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



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

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



42
43
44
45
46
47
48
# File 'lib/dummer/generator/field_mode.rb', line 42

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



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

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



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

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



30
31
32
33
34
35
36
37
38
# File 'lib/dummer/generator/field_mode.rb', line 30

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