faux_data 1.0.1 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
  module FauxData
5
- VERSION = "1.0.1".freeze if not defined?(FauxData::VERSION)
5
+ VERSION = "1.1.1".freeze if not defined?(FauxData::VERSION)
6
6
  end
7
7
 
8
8
  require 'faux_data/person_generator'
@@ -3,46 +3,49 @@
3
3
  module FauxData
4
4
  class AddressGenerator
5
5
 
6
- def initialize
7
- @city_state_zipcodes = Array.new
8
- @street_names = Array.new
9
- @filename_city_state_zip = File.join(File.dirname(__FILE__),'data','us','city_state_zipcode.txt')
10
- @filename_street_names = File.join(File.dirname(__FILE__),'data','us','street_names_top_1500.txt')
6
+ def initialize
7
+ @city_state_zipcodes = Array.new
8
+ @street_names = Array.new
9
+ @filename_city_state_zip = File.join(File.dirname(__FILE__),'data','us','city_state_zipcode.txt')
10
+ @filename_street_names = File.join(File.dirname(__FILE__),'data','us','street_names_top_1500.txt')
11
+ end
12
+
13
+ def address
14
+ load_csz_file if @city_state_zipcodes.size < 1
15
+ load_street_file if @street_names.size < 1
16
+ street = "#{rand(9899) + 100} #{@street_names.choice[:street]}"
17
+ if rand(5) == 4 # 20 % of the time
18
+ street << ", Apt ##{(100..999).to_a.choice}"
11
19
  end
12
-
13
- def address
14
- load_csz_file if @city_state_zipcodes.size < 1
15
- load_street_file if @street_names.size < 1
16
- street = "#{rand(9899) + 100} #{@street_names.choice[:street]}"
17
- return @city_state_zipcodes.choice.merge({:street => street.upcase.strip})
18
- end
19
-
20
-
21
- private
22
- def load_csz_file
23
- col_headers = %w[zip city state].map {|e| e.downcase.to_sym}
24
- if File.readable?(@filename_city_state_zip)
25
- File.open(@filename_city_state_zip,'r') do |file|
26
- file.each do |line|
27
- next if $. == 1 #skip header line
28
- rec = Hash[*col_headers.zip(line.chomp.split("\t")).flatten]
29
- @city_state_zipcodes << rec
30
- end
31
- end
20
+ return @city_state_zipcodes.choice.merge({:street => street.upcase.strip})
21
+ end
22
+
23
+
24
+ private
25
+ def load_csz_file
26
+ col_headers = %w[zip city state].map {|e| e.downcase.to_sym}
27
+ if File.readable?(@filename_city_state_zip)
28
+ File.open(@filename_city_state_zip,'r') do |file|
29
+ file.each do |line|
30
+ next if $. == 1 #skip header line
31
+ rec = Hash[*col_headers.zip(line.chomp.split("\t")).flatten]
32
+ @city_state_zipcodes << rec
32
33
  end
34
+ end
33
35
  end
34
- def load_street_file
35
- col_headers = %w[street occurence].map {|e| e.downcase.to_sym}
36
- if File.readable?(@filename_street_names)
37
- File.open(@filename_street_names,'r') do |file|
38
- file.each do |line|
39
- #next if $. == 1 #skip header line
40
- rec = Hash[*col_headers.zip(line.chomp.split("\t")).flatten]
41
- @street_names << rec
42
- end
43
- end
36
+ end
37
+ def load_street_file
38
+ col_headers = %w[street occurence].map {|e| e.downcase.to_sym}
39
+ if File.readable?(@filename_street_names)
40
+ File.open(@filename_street_names,'r') do |file|
41
+ file.each do |line|
42
+ #next if $. == 1 #skip header line
43
+ rec = Hash[*col_headers.zip(line.chomp.split("\t")).flatten]
44
+ @street_names << rec
44
45
  end
46
+ end
45
47
  end
48
+ end
46
49
 
47
50
 
48
51
 
@@ -3,60 +3,60 @@
3
3
  module FauxData
4
4
  class NationalIdGenerator
5
5
 
6
-
7
- def initialize(opts = {})
8
- options = {
9
- :country_code => 'us'
10
- }.merge(opts)
11
- @country_code = options[:country_code]
12
- @@consumed_national_ids = Array.new
13
- end
14
-
15
-
16
- def national_id
17
- id = ''
18
- while (not valid_national_id_us?(id))
19
- id = generate_national_id_us if @country_code == 'us'
20
- #pp id
21
- end
22
- @@consumed_national_ids << id
23
- return id
24
- end
25
- def national_ids
26
- ids = Array.new
27
- ids.replace @@consumed_national_ids
28
- return ids
29
- end
30
-
31
-
32
- private
33
- def generate_national_id_us
34
- ssn = "#{rand(1000).to_s.rjust(3,'0')}-#{rand(100).to_s.rjust(2,'0')}-#{rand(10000).to_s.rjust(4,'0')}"
35
- return ssn
36
- end
37
-
38
-
39
- # Test to see if valid SSN using IRS rules on SSN
40
- #
41
- # SSN can be broken down into Area, Group, and Serial Number as AAA-GG-SSSS
42
- #
43
- # Area Numbers: excluding area numbers 000, 666 and 900-999.
44
- # Group Numbers: SSN randomization will not assign group number 00
45
- # Serial NUmbers: SSN randomization will not assign serial number 0000.
46
- # SSNs containing group number 00 or serial number 0000 will continue to be invalid.
47
- #
48
- def valid_national_id_us?(ssn)
49
- return false if @@consumed_national_ids.include?(ssn)
50
- ssn = ssn.delete('-')
51
- return false if not ssn =~ /^(\d){9}$/ #test for 9 digits
52
- ssn = Hash[* [:area, :group, :serial].zip(ssn.unpack("A3A2A4")).flatten]
53
- return false if ssn[:group] == '00'
54
- return false if ssn[:serial] == '0000'
55
- return false if ssn[:area] == '000'
56
- return false if ssn[:area] == '666'
57
- return false if ssn[:area].to_i >= 900 and ssn[:area].to_i <=999
58
- return true
6
+
7
+ def initialize(opts = {})
8
+ options = {
9
+ :country_code => 'us'
10
+ }.merge(opts)
11
+ @country_code = options[:country_code]
12
+ @@consumed_national_ids = Array.new
13
+ end
14
+
15
+
16
+ def national_id
17
+ id = ''
18
+ while (not valid_national_id_us?(id))
19
+ id = generate_national_id_us if @country_code == 'us'
20
+ #pp id
59
21
  end
22
+ @@consumed_national_ids << id
23
+ return id
24
+ end
25
+ def national_ids
26
+ ids = Array.new
27
+ ids.replace @@consumed_national_ids
28
+ return ids
29
+ end
30
+
31
+
32
+ private
33
+ def generate_national_id_us
34
+ ssn = "#{rand(1000).to_s.rjust(3,'0')}-#{rand(100).to_s.rjust(2,'0')}-#{rand(10000).to_s.rjust(4,'0')}"
35
+ return ssn
36
+ end
37
+
38
+
39
+ # Test to see if valid SSN using IRS rules on SSN
40
+ #
41
+ # SSN can be broken down into Area, Group, and Serial Number as AAA-GG-SSSS
42
+ #
43
+ # Area Numbers: excluding area numbers 000, 666 and 900-999.
44
+ # Group Numbers: SSN randomization will not assign group number 00
45
+ # Serial NUmbers: SSN randomization will not assign serial number 0000.
46
+ # SSNs containing group number 00 or serial number 0000 will continue to be invalid.
47
+ #
48
+ def valid_national_id_us?(ssn)
49
+ return false if @@consumed_national_ids.include?(ssn)
50
+ ssn = ssn.delete('-')
51
+ return false if not ssn =~ /^(\d){9}$/ #test for 9 digits
52
+ ssn = Hash[* [:area, :group, :serial].zip(ssn.unpack("A3A2A4")).flatten]
53
+ return false if ssn[:group] == '00'
54
+ return false if ssn[:serial] == '0000'
55
+ return false if ssn[:area] == '000'
56
+ return false if ssn[:area] == '666'
57
+ return false if ssn[:area].to_i >= 900 and ssn[:area].to_i <=999
58
+ return true
59
+ end
60
60
 
61
61
 
62
62
  end
@@ -9,38 +9,38 @@ require 'faux_data/national_id_generator'
9
9
 
10
10
  module FauxData
11
11
  class PersonGenerator
12
- def initialize
13
- @name = PersonalNameGenerator.new
14
- @address = AddressGenerator.new
15
- @national_id = NationalIdGenerator.new(:county_code => 'us')
16
- @max_age_in_days = (365.2524 * 100).to_i
17
- end
18
-
19
- def person
20
- sex = pick_sex()
21
- address = @address.address
22
- person = address.merge({
23
- :sex => sex,
24
- :surname => @name.surname,
25
- :first_name => sex == :male ? @name.given_name_male : @name.given_name_female,
26
- :middle_name => sex == :male ? @name.given_name_male : @name.given_name_female,
27
- :ssn => @national_id.national_id,
28
- :date_of_birth => Date.today - (rand(@max_age_in_days))
29
- })
30
- person[:email] = "#{person[:first_name].strip.downcase}.#{person[:surname].strip.downcase}@" + pick_email_domain()
31
- return person
32
- end
33
-
34
-
35
- private
36
-
37
- def pick_sex
38
- return [:male, :female].choice
39
- end
40
-
41
- def pick_email_domain
42
- return %w[ example.com example.net example.org].choice
43
- end
12
+ def initialize
13
+ @name = PersonalNameGenerator.new
14
+ @address = AddressGenerator.new
15
+ @national_id = NationalIdGenerator.new(:county_code => 'us')
16
+ @max_age_in_days = (365.2524 * 100).to_i
17
+ end
18
+
19
+ def person
20
+ sex = pick_sex()
21
+ address = @address.address
22
+ person = address.merge({
23
+ :sex => sex,
24
+ :surname => @name.surname,
25
+ :first_name => sex == :male ? @name.given_name_male : @name.given_name_female,
26
+ :middle_name => sex == :male ? @name.given_name_male : @name.given_name_female,
27
+ :ssn => @national_id.national_id,
28
+ :date_of_birth => Date.today - (rand(@max_age_in_days))
29
+ })
30
+ person[:email] = "#{person[:first_name].strip.downcase}.#{person[:surname].strip.downcase}@" + pick_email_domain()
31
+ return person
32
+ end
33
+
34
+
35
+ private
36
+
37
+ def pick_sex
38
+ return [:male, :female].choice
39
+ end
40
+
41
+ def pick_email_domain
42
+ return %w[ example.com example.net example.org].choice
43
+ end
44
44
  end
45
45
  end
46
46
 
@@ -3,54 +3,54 @@
3
3
  module FauxData
4
4
  class PersonalNameGenerator
5
5
 
6
- def initialize
7
- @surnames = Array.new
8
- @given_names_female = Array.new
9
- @given_names_male = Array.new
10
- @filename_surnames = File.join(File.dirname(__FILE__),'data','us','surnames.txt')
11
- @filename_given_names_female = File.join(File.dirname(__FILE__),'data','us','female_given_names.txt')
12
- @filename_given_names_male = File.join(File.dirname(__FILE__),'data','us','male_given_names.txt')
13
-
14
- end
15
-
16
- def surname
17
- load_surname if @surnames.size < 1
18
- return @surnames.choice
19
- end
20
- def given_name_female
21
- load_given_names_female if @given_names_female.size < 1
22
- return @given_names_female.choice
23
- end
24
- def given_name_male
25
- load_given_names_male if @given_names_male.size < 1
26
- return @given_names_male.choice
27
- end
28
-
29
-
30
-
31
-
32
- private
33
- def load_name_file(filename)
34
- names = Array.new
35
- if File.readable?(filename)
36
- File.open(filename,'r') do |file|
37
- file.each do |line|
38
- names << line[0,15].strip
39
- end
40
- end
6
+ def initialize
7
+ @surnames = Array.new
8
+ @given_names_female = Array.new
9
+ @given_names_male = Array.new
10
+ @filename_surnames = File.join(File.dirname(__FILE__),'data','us','surnames.txt')
11
+ @filename_given_names_female = File.join(File.dirname(__FILE__),'data','us','female_given_names.txt')
12
+ @filename_given_names_male = File.join(File.dirname(__FILE__),'data','us','male_given_names.txt')
13
+
14
+ end
15
+
16
+ def surname
17
+ load_surname if @surnames.size < 1
18
+ return @surnames.choice
19
+ end
20
+ def given_name_female
21
+ load_given_names_female if @given_names_female.size < 1
22
+ return @given_names_female.choice
23
+ end
24
+ def given_name_male
25
+ load_given_names_male if @given_names_male.size < 1
26
+ return @given_names_male.choice
27
+ end
28
+
29
+
30
+
31
+
32
+ private
33
+ def load_name_file(filename)
34
+ names = Array.new
35
+ if File.readable?(filename)
36
+ File.open(filename,'r') do |file|
37
+ file.each do |line|
38
+ names << line[0,15].strip
41
39
  end
42
- names << "" if names.size == 0
43
- return names
44
- end
45
- def load_surname
46
- @surnames = load_name_file(@filename_surnames)
47
- end
48
- def load_given_names_female
49
- @given_names_female = load_name_file(@filename_given_names_female)
50
- end
51
- def load_given_names_male
52
- @given_names_male = load_name_file(@filename_given_names_male)
53
- end
40
+ end
41
+ end
42
+ names << "" if names.size == 0
43
+ return names
44
+ end
45
+ def load_surname
46
+ @surnames = load_name_file(@filename_surnames)
47
+ end
48
+ def load_given_names_female
49
+ @given_names_female = load_name_file(@filename_given_names_female)
50
+ end
51
+ def load_given_names_male
52
+ @given_names_male = load_name_file(@filename_given_names_male)
53
+ end
54
54
 
55
55
  end
56
56
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faux_data
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 17
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
- - 0
9
8
  - 1
10
- version: 1.0.1
9
+ - 1
10
+ version: 1.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Chris Stansbury
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-03-12 00:00:00 -05:00
18
+ date: 2012-07-08 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies: []
21
21