Class: Namey::Generator

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

Overview

Main class for namey, handles generating a name.

Instance Method Summary collapse

Constructor Details

#initialize(dbname = nil) ⇒ Generator

initialize the name generator

  • dbname - Sequel style db URI ex: ‘sqlite://foo.db’



13
14
15
16
# File 'lib/namey/generator.rb', line 13

def initialize(dbname = nil)
  dbname = Namey.db_path if dbname.nil?
  @db = Sequel.connect(dbname)
end

Instance Method Details

#female(frequency = :common, surname = true) ⇒ Object

generate a female name

  • frequency - :common, :rare, :all

  • surname - true if you want a full name, false if you just want a first name



41
42
43
# File 'lib/namey/generator.rb', line 41

def female(frequency = :common, surname = true)
  generate(:type => :female, :frequency => frequency, :with_surname => surname)      
end

#generate(params = {}) ⇒ Object

generate a name using the supplied parameter hash

  • params - A hash of parameters

Params

  • :type - :male, :female, :surname

  • :frequency - :common, :rare, :all

  • :min_freq - raw frequency values to specify a precise range

  • :max_freq - raw frequency values to specify a precise range



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/namey/generator.rb', line 63

def generate(params = {})
  params = {
    :type => random_gender,
    :frequency => :common,
    :with_surname => true
  }.merge(params)

  
  if ! ( params[:min_freq] || params[:max_freq] )
    params[:min_freq], params[:max_freq] = frequency_values(params[:frequency])
  else

    #
    # do some basic data validation in case someone is being a knucklehead
    #
    params[:min_freq] = params[:min_freq].to_i
    params[:max_freq] = params[:max_freq].to_i

    params[:max_freq] = params[:min_freq] + 1 if params[:max_freq] <= params[:min_freq]

    # max_freq needs to be at least 4 to get any results back,
    # because the most common male name only rates 3.3
    # JAMES          3.318  3.318      1
    params[:max_freq] = 4 if params[:max_freq] < 4
  end

  
  name = get_name(params[:type], params[:min_freq], params[:max_freq])

  # add surname if needed
  if params[:type] != :surname && params[:with_surname] == true
    name = "#{name} #{get_name(:surname, params[:min_freq], params[:max_freq])}"
  end
  name
end

#male(frequency = :common, surname = true) ⇒ Object

generate a male name

  • frequency - :common, :rare, :all

  • surname - true if you want a full name, false if you just want a first name



32
33
34
# File 'lib/namey/generator.rb', line 32

def male(frequency = :common, surname = true)
  generate(:type => :male, :frequency => frequency, :with_surname => surname)
end

#name(frequency = :common, surname = true) ⇒ Object

generate a name

  • frequency - :common, :rare, :all

  • surname - true if you want a full name, false if you just want a first name



23
24
25
# File 'lib/namey/generator.rb', line 23

def name(frequency = :common, surname = true)
  generate(:frequency => frequency, :with_surname =>surname)
end

#surname(frequency = :common) ⇒ Object

generate a surname

  • frequency - :common, :rare, :all



49
50
51
# File 'lib/namey/generator.rb', line 49

def surname(frequency = :common)
  generate(:type => :surname, :frequency => frequency)
end