class Imasgen::GeneratorBase

Attributes

auto_reset[RW]
be_strict[R]

Public Class Methods

getyaml() click to toggle source
# File lib/imasgen/generator_base.rb, line 72
def self.getyaml
  throw NotImplementedError
end
new() click to toggle source
# File lib/imasgen/generator_base.rb, line 8
def initialize
  @namedic = []
  @used_pair = []
  @auto_reset = false
  @be_strict = true
end

Public Instance Methods

be_strict=(val) click to toggle source
# File lib/imasgen/generator_base.rb, line 27
def be_strict=(val)
  @be_strict = val
  reset
end
hotchpotch() click to toggle source
# File lib/imasgen/generator_base.rb, line 49
def hotchpotch
  # hotchpotch mode
  item = lambda {
    @basedic ||= @be_strict ? @namedic.select {|i| i[:last_name] != '' && i[:first_name] != ''} : @namedic
    # make shuffle dictionary
    @first_names ||= @basedic.map {|i| {first_name: i[:first_name], first_name_furigana: i[:first_name_furigana]}}
    @last_names ||= @basedic.map {|i| {last_name: i[:last_name], last_name_furigana: i[:last_name_furigana]}}
    # shuffle!!
    @comb ||= @first_names.product(@last_names).map {|i| i[0].merge(i[1])}
    # get non duplicate item
    ret = @comb.reject {|i| i[:used]}.sample
    return ret unless ret.nil?
    if @auto_reset
      @comb.each {|i| i.delete(:used)}
      ret
    else
      raise StandardError.new('Already used all name pairs.')
    end
  }.call
  item[:used] = true
  Imasgen::Name.new(item)
end
name() click to toggle source
# File lib/imasgen/generator_base.rb, line 32
def name
  # return random item.(no shuffle in first name and last name)
  item = lambda {
    @basedic ||= @be_strict ? @namedic.select {|i| i[:last_name] != '' && i[:first_name] != ''} : @namedic
    retval = @basedic.reject {|i| i[:used]}.sample
    raise StandardError.new('Already used all name pairs.') if retval.nil? && !@auto_reset
    if retval.nil? && @auto_reset
      # delete used flag
      @basedic.each {|i| i.delete(:used)}
      retval = @namedic.sample
    end
    retval
  }.call
  item[:used] = true
  Imasgen::Name.new(item)
end
reset() click to toggle source
# File lib/imasgen/generator_base.rb, line 19
def reset
  # reset dictonary cache
  @basedic = nil
  @first_names = nil
  @last_names = nil
  @comb = nil
end
unique() click to toggle source
# File lib/imasgen/generator_base.rb, line 15
def unique
  @unique_i ||= self.class.new
end