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/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: []