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
17
18
19
20
# File 'lib/namey/generator.rb', line 13

def initialize(dbname = nil)
  if dbname.is_a? Sequel::Database
    @db = dbname
  else
    dbname = Namey.db_path if dbname.nil?
    @db = Sequel.connect(dbname)
  end
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



45
46
47
# File 'lib/namey/generator.rb', line 45

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



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
98
99
100
101
# File 'lib/namey/generator.rb', line 67

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



36
37
38
# File 'lib/namey/generator.rb', line 36

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



27
28
29
# File 'lib/namey/generator.rb', line 27

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

#surname(frequency = :common) ⇒ Object

generate a surname

  • frequency - :common, :rare, :all



53
54
55
# File 'lib/namey/generator.rb', line 53

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