namey 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/Rakefile +2 -0
- data/bin/load-data +10 -0
- data/bin/random-name +7 -0
- data/data/dist.female.first +4275 -0
- data/data/dist.male.first +1219 -0
- data/data/names.db +0 -0
- data/lib/namey.rb +17 -0
- data/lib/namey/generator.rb +71 -0
- data/lib/namey/parser.rb +63 -0
- data/lib/namey/version.rb +3 -0
- data/namey.gemspec +39 -0
- metadata +83 -0
data/data/names.db
ADDED
|
Binary file
|
data/lib/namey.rb
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require 'sqlite3'
|
|
2
|
+
|
|
3
|
+
module Namey
|
|
4
|
+
def self.db_path
|
|
5
|
+
@@db_path
|
|
6
|
+
end
|
|
7
|
+
def self.db_path=(x)
|
|
8
|
+
@@db_path = x
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
# Your code goes here...
|
|
13
|
+
@@db_path = File.join(File.dirname(__FILE__), "..", "data", "names.db")
|
|
14
|
+
|
|
15
|
+
require 'namey/generator'
|
|
16
|
+
end
|
|
17
|
+
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
module Namey
|
|
2
|
+
class Generator
|
|
3
|
+
|
|
4
|
+
def initialize(dbname = Namey.db_path)
|
|
5
|
+
@db = SQLite3::Database.open dbname
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def name(frequency = :common, surname = true)
|
|
9
|
+
method = rand > 0.5 ? :male : :female
|
|
10
|
+
send(method, frequency, surname)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def male(frequency = :common, surname = true)
|
|
14
|
+
generate(:type => :male, :frequency => frequency, :with_surname => surname)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def female(frequency = :common, surname = true)
|
|
18
|
+
generate(:type => :female, :frequency => frequency, :with_surname => surname)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def surname(frequency = :common)
|
|
22
|
+
generate(:type => :surname, :frequency => frequency)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def generate(params = {})
|
|
26
|
+
params = {
|
|
27
|
+
:type => :female,
|
|
28
|
+
:frequency => :common,
|
|
29
|
+
:with_surname => true
|
|
30
|
+
}.merge(params)
|
|
31
|
+
|
|
32
|
+
if ! ( params[:min_freq] || params[:max_freq] )
|
|
33
|
+
params[:min_freq], params[:max_freq] = frequency_values(params[:frequency])
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
name = get_name(params[:type], params[:min_freq], params[:max_freq])
|
|
37
|
+
if params[:type] != :surname && params[:with_surname] == true
|
|
38
|
+
name = "#{name} #{get_name(:surname, params[:min_freq], params[:max_freq])}"
|
|
39
|
+
end
|
|
40
|
+
name
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def frequency_values(f)
|
|
45
|
+
low = case f
|
|
46
|
+
when :common then 0
|
|
47
|
+
when :rare then 40
|
|
48
|
+
when :all then 0
|
|
49
|
+
else 0
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
high = case f
|
|
53
|
+
when :common then 20
|
|
54
|
+
when :rare then 100
|
|
55
|
+
when :all then 100
|
|
56
|
+
else 100
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
[ low, high ]
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
protected
|
|
63
|
+
def get_name(src, min_freq = 0, max_freq = 100)
|
|
64
|
+
@db.get_first_row("SELECT name FROM #{src.to_s} WHERE freq > ? AND freq < ? ORDER BY RANDOM() LIMIT 1;",
|
|
65
|
+
min_freq, max_freq).first
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
end
|
|
71
|
+
end
|
data/lib/namey/parser.rb
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
module Namey
|
|
2
|
+
class Parser
|
|
3
|
+
|
|
4
|
+
attr_accessor :db
|
|
5
|
+
|
|
6
|
+
def initialize(dbname)
|
|
7
|
+
# Open a database
|
|
8
|
+
@db = SQLite3::Database.new dbname
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def load_male_names(src)
|
|
12
|
+
parse_file(src, "male")
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def load_female_names(src)
|
|
16
|
+
parse_file(src, "female")
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def load_surnames(src)
|
|
20
|
+
parse_file(src, "surname")
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
protected
|
|
24
|
+
def parse_file(src, dest)
|
|
25
|
+
create_table(dest)
|
|
26
|
+
|
|
27
|
+
file = File.new(src, "r")
|
|
28
|
+
while (line = file.gets)
|
|
29
|
+
data = line.split
|
|
30
|
+
|
|
31
|
+
name = data.first.capitalize
|
|
32
|
+
freq = data[2].to_f
|
|
33
|
+
|
|
34
|
+
if dest == "surname"
|
|
35
|
+
name = cleanup_surname(name)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
puts "#{name} #{freq}"
|
|
39
|
+
@db.execute "insert into #{dest} (name, freq) values ( ?, ? )", name, freq
|
|
40
|
+
end
|
|
41
|
+
file.close
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def create_table(name)
|
|
45
|
+
# Create a database
|
|
46
|
+
@db.execute "drop table IF EXISTS #{name};"
|
|
47
|
+
@db.execute "create table #{name} (name varchar(20), freq REAL);"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def cleanup_surname(name)
|
|
51
|
+
if name.length > 4
|
|
52
|
+
name.gsub!(/^Mc(\w+)/) { |s| "Mc#{$1.capitalize}" }
|
|
53
|
+
name.gsub!(/^Mac(\w+)/) { |s| "Mac#{$1.capitalize}" }
|
|
54
|
+
name.gsub!(/^Mac(\w+)/) { |s| "Mac#{$1.capitalize}" }
|
|
55
|
+
name.gsub!(/^Osh(\w+)/) { |s| "O'sh#{$1}" }
|
|
56
|
+
name.gsub!(/^Van(\w+)/) { |s| "Van#{$1.capitalize}" }
|
|
57
|
+
name.gsub!(/^Von(\w+)/) { |s| "Von#{$1.capitalize}" }
|
|
58
|
+
name.gsub!(/^De(\w+)/) { |s| "De#{$1.capitalize}" }
|
|
59
|
+
end
|
|
60
|
+
name
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
data/namey.gemspec
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
|
3
|
+
require "namey/version"
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |s|
|
|
6
|
+
s.name = "namey"
|
|
7
|
+
s.version = Namey::VERSION
|
|
8
|
+
s.platform = Gem::Platform::RUBY
|
|
9
|
+
s.authors = ["Colin Mitchell"]
|
|
10
|
+
s.email = ["colin@muffinlabs.com"]
|
|
11
|
+
s.homepage = "https://github.com/muffinista/namey"
|
|
12
|
+
s.summary = %q{Simple name generator based on US Census Data}
|
|
13
|
+
s.description = %q{Simple name generator, which can generate male/female names based on US Census Data}
|
|
14
|
+
|
|
15
|
+
s.rubyforge_project = "namey"
|
|
16
|
+
|
|
17
|
+
s.files = `git ls-files`.split("\n")
|
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
|
20
|
+
s.require_paths = ["lib"]
|
|
21
|
+
|
|
22
|
+
if s.respond_to? :specification_version then
|
|
23
|
+
s.specification_version = 3
|
|
24
|
+
|
|
25
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
|
26
|
+
s.add_runtime_dependency(%q<sqlite3>, [">= 0"])
|
|
27
|
+
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
|
28
|
+
else
|
|
29
|
+
s.add_dependency(%q<sqlite3>, [">= 0"])
|
|
30
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
|
31
|
+
end
|
|
32
|
+
else
|
|
33
|
+
s.add_dependency(%q<sqlite3>, [">= 0"])
|
|
34
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
# http://www.census.gov/genealogy/names/
|
metadata
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: namey
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.2
|
|
5
|
+
prerelease:
|
|
6
|
+
platform: ruby
|
|
7
|
+
authors:
|
|
8
|
+
- Colin Mitchell
|
|
9
|
+
autorequire:
|
|
10
|
+
bindir: bin
|
|
11
|
+
cert_chain: []
|
|
12
|
+
date: 2011-07-13 00:00:00.000000000Z
|
|
13
|
+
dependencies:
|
|
14
|
+
- !ruby/object:Gem::Dependency
|
|
15
|
+
name: sqlite3
|
|
16
|
+
requirement: &13358580 !ruby/object:Gem::Requirement
|
|
17
|
+
none: false
|
|
18
|
+
requirements:
|
|
19
|
+
- - ! '>='
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: '0'
|
|
22
|
+
type: :runtime
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: *13358580
|
|
25
|
+
- !ruby/object:Gem::Dependency
|
|
26
|
+
name: shoulda
|
|
27
|
+
requirement: &13358080 !ruby/object:Gem::Requirement
|
|
28
|
+
none: false
|
|
29
|
+
requirements:
|
|
30
|
+
- - ! '>='
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '0'
|
|
33
|
+
type: :development
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: *13358080
|
|
36
|
+
description: Simple name generator, which can generate male/female names based on
|
|
37
|
+
US Census Data
|
|
38
|
+
email:
|
|
39
|
+
- colin@muffinlabs.com
|
|
40
|
+
executables:
|
|
41
|
+
- load-data
|
|
42
|
+
- random-name
|
|
43
|
+
extensions: []
|
|
44
|
+
extra_rdoc_files: []
|
|
45
|
+
files:
|
|
46
|
+
- .gitignore
|
|
47
|
+
- Gemfile
|
|
48
|
+
- Rakefile
|
|
49
|
+
- bin/load-data
|
|
50
|
+
- bin/random-name
|
|
51
|
+
- data/dist.female.first
|
|
52
|
+
- data/dist.male.first
|
|
53
|
+
- data/names.db
|
|
54
|
+
- lib/namey.rb
|
|
55
|
+
- lib/namey/generator.rb
|
|
56
|
+
- lib/namey/parser.rb
|
|
57
|
+
- lib/namey/version.rb
|
|
58
|
+
- namey.gemspec
|
|
59
|
+
homepage: https://github.com/muffinista/namey
|
|
60
|
+
licenses: []
|
|
61
|
+
post_install_message:
|
|
62
|
+
rdoc_options: []
|
|
63
|
+
require_paths:
|
|
64
|
+
- lib
|
|
65
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
66
|
+
none: false
|
|
67
|
+
requirements:
|
|
68
|
+
- - ! '>='
|
|
69
|
+
- !ruby/object:Gem::Version
|
|
70
|
+
version: '0'
|
|
71
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
72
|
+
none: false
|
|
73
|
+
requirements:
|
|
74
|
+
- - ! '>='
|
|
75
|
+
- !ruby/object:Gem::Version
|
|
76
|
+
version: '0'
|
|
77
|
+
requirements: []
|
|
78
|
+
rubyforge_project: namey
|
|
79
|
+
rubygems_version: 1.8.3
|
|
80
|
+
signing_key:
|
|
81
|
+
specification_version: 3
|
|
82
|
+
summary: Simple name generator based on US Census Data
|
|
83
|
+
test_files: []
|