namey 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -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
@@ -0,0 +1,3 @@
1
+ module Namey
2
+ VERSION = "0.0.2"
3
+ 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: []