ffaker 1.15.0 → 1.16.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. data/Changelog.rdoc +4 -1
  2. data/Gemfile +2 -0
  3. data/README.rdoc +1 -1
  4. data/ffaker.gemspec +43 -2
  5. data/lib/ffaker.rb +31 -5
  6. data/lib/ffaker/address.rb +57 -4
  7. data/lib/ffaker/address_au.rb +41 -42
  8. data/lib/ffaker/address_de.rb +16 -0
  9. data/lib/ffaker/address_mx.rb +448 -0
  10. data/lib/ffaker/address_se.rb +1074 -0
  11. data/lib/ffaker/company_se.rb +24 -0
  12. data/lib/ffaker/conference.rb +52 -0
  13. data/lib/ffaker/dizzle_ipsum.rb +30 -0
  14. data/lib/ffaker/identification.rb +25 -0
  15. data/lib/ffaker/internet_se.rb +105 -0
  16. data/lib/ffaker/lorem.rb +1 -1
  17. data/lib/ffaker/lorem_ar.rb +45 -0
  18. data/lib/ffaker/lorem_cn.rb +6 -6
  19. data/lib/ffaker/movie.rb +64 -0
  20. data/lib/ffaker/name_ga.rb +57 -0
  21. data/lib/ffaker/name_mx.rb +198 -0
  22. data/lib/ffaker/name_ph.rb +91 -0
  23. data/lib/ffaker/name_se.rb +97 -0
  24. data/lib/ffaker/name_sn.rb +1 -1
  25. data/lib/ffaker/phone_number_mx.rb +57 -0
  26. data/lib/ffaker/phone_number_se.rb +111 -0
  27. data/lib/ffaker/ssn.rb +15 -0
  28. data/lib/ffaker/ssn_se.rb +111 -0
  29. data/lib/ffaker/string.rb +90 -0
  30. data/lib/ffaker/time.rb +28 -0
  31. data/lib/ffaker/venue.rb +45 -0
  32. data/test/test_address.rb +15 -7
  33. data/test/test_address_au.rb +10 -14
  34. data/test/test_address_de.rb +8 -0
  35. data/test/test_address_mx.rb +25 -0
  36. data/test/test_address_se.rb +36 -0
  37. data/test/test_company_se.rb +14 -0
  38. data/test/test_conference.rb +8 -0
  39. data/test/test_dizzle_ipsum.rb +28 -0
  40. data/test/test_faker.rb +20 -4
  41. data/test/test_faker_internet_se.rb +66 -0
  42. data/test/test_faker_name_ga.rb +54 -0
  43. data/test/test_faker_name_mx.rb +177 -0
  44. data/test/test_faker_name_ph.rb +15 -0
  45. data/test/test_faker_name_se.rb +37 -0
  46. data/test/test_faker_name_sn.rb +1 -0
  47. data/test/test_identification.rb +25 -0
  48. data/test/test_lorem_ar.rb +35 -0
  49. data/test/test_movie.rb +7 -0
  50. data/test/test_phone_number_mx.rb +42 -0
  51. data/test/test_phone_number_se.rb +58 -0
  52. data/test/test_ssn.rb +9 -0
  53. data/test/test_ssn_se.rb +43 -0
  54. data/test/test_string.rb +69 -0
  55. data/test/test_time.rb +17 -0
  56. data/test/test_venue.rb +8 -0
  57. metadata +64 -4
@@ -0,0 +1,111 @@
1
+ # encoding: utf-8
2
+
3
+ module Faker
4
+
5
+ # Format for swedish numbers, from here
6
+ # from http://sv.wikipedia.org/wiki/Telefonnummer
7
+ #
8
+ # All area codes are from this list
9
+ # http://sv.wikipedia.org/wiki/Lista_%C3%B6ver_svenska_riktnummer
10
+ #
11
+ # - Length 9
12
+ # 08-xxx xxx xx, 0xx-xxx xx xx, 0xxx-xx xx xx
13
+ # - Length 8
14
+ # 08-xxx xx xx, 0xx-xx xx xx, 0xxx-xxx xx
15
+ # - Length 7
16
+ # 08-xx xx xx, 0xx-xxx xx
17
+ #
18
+ module PhoneNumberSE
19
+ extend ModuleUtils
20
+ extend self
21
+
22
+ def phone_number
23
+ case rand(2)
24
+ when 0 then home_work_phone_number
25
+ when 1 then mobile_phone_number
26
+ end
27
+ end
28
+
29
+ def home_work_phone_number
30
+ Faker.numerify("0#{phone_number_format}")
31
+ end
32
+
33
+ def mobile_phone_number
34
+ Faker.numerify("0#{mobile_phone_number_format}")
35
+ end
36
+
37
+ def international_phone_number
38
+ case rand(2)
39
+ when 0 then international_mobile_phone_number
40
+ when 1 then international_home_work_phone_number
41
+ end
42
+ end
43
+
44
+ def country_prefix
45
+ COUNTRY_PREFIX.rand
46
+ end
47
+
48
+ def international_mobile_phone_number
49
+ Faker.numerify("#{country_prefix} (0)#{mobile_phone_number_format}")
50
+ end
51
+
52
+ def international_home_work_phone_number
53
+ Faker.numerify("#{country_prefix} (0)#{phone_number_format}")
54
+ end
55
+
56
+ def area_prefix
57
+ PHONE_PREFIX.rand
58
+ end
59
+
60
+ def phone_number_format
61
+ prefix = area_prefix
62
+ case prefix.length
63
+ when 1 then PHONE_FORMAT_PREFIX_2.rand
64
+ when 2 then PHONE_FORMAT_PREFIX_3.rand
65
+ when 3 then PHONE_FORMAT_PREFIX_4.rand
66
+ end % prefix
67
+ end
68
+
69
+ def mobile_prefix
70
+ MOBILE_PHONE_PREFIX.rand
71
+ end
72
+
73
+ def mobile_phone_number_format
74
+ MOBILE_PHONE_FORMAT.rand % mobile_prefix
75
+ end
76
+
77
+ PHONE_FORMAT_PREFIX_2 = k ["%s-### ### ##",
78
+ "%s-### ## ##",
79
+ "%s-## ## ##"]
80
+ PHONE_FORMAT_PREFIX_3 = k ["%s-### ## ##",
81
+ "%s-## ## ##",
82
+ "%s-## ###"]
83
+ PHONE_FORMAT_PREFIX_4 = k ["%s-## ## ##",
84
+ "%s-### ##"]
85
+
86
+ MOBILE_PHONE_FORMAT = k ["%s#-## ## ##", "%s#-######"]
87
+ COUNTRY_PREFIX = k ["+46", "0046"]
88
+ MOBILE_PHONE_PREFIX = k %w(70 72 73 76 74)
89
+
90
+ PHONE_PREFIX = k %w(8 11 120 121 122 123 125 13 140 141 142 143 144 150 151
91
+ 152 155 156 157 158 159 16 171 173 174 175 176 18 19 21
92
+ 220 221 222 223 224 225 226 227 23 240 241 243 246 247
93
+ 248 250 251 253 258 26 270 271 278 280 281 290 291 292
94
+ 293 294 295 297 300 301 302 303 304 31 320 321 322 325
95
+ 33 340 345 346 35 36 370 371 372 380 381 382 383 390
96
+ 392 393 40 410 411 413 414 415 416 417 418 42 430 431
97
+ 433 435 44 451 454 455 456 457 459 46 470 471 472 474
98
+ 476 477 478 479 480 481 485 486 490 491 492 493 494 495
99
+ 496 498 499 500 501 502 503 504 505 506 510 511 512 513
100
+ 514 515 520 521 522 523 524 525 526 528 530 531 532 533
101
+ 534 54 550 551 552 553 554 555 560 563 564 565 570 571
102
+ 573 580 581 582 583 584 585 586 587 589 590 591 60 611
103
+ 612 613 620 621 622 623 624 63 640 642 643 644 645 647
104
+ 650 651 652 653 657 660 661 662 663 670 671 672 680 682
105
+ 684 687 690 691 692 693 695 696 8 90 910 911 912 913
106
+ 914 915 916 918 920 921 922 923 924 925 926 927 928 929
107
+ 930 932 933 934 935 940 941 942 943 950 951 952 953 954
108
+ 960 961 970 971 973 975 976 977 978 980 981)
109
+
110
+ end
111
+ end
data/lib/ffaker/ssn.rb ADDED
@@ -0,0 +1,15 @@
1
+ module Faker
2
+ module SSN
3
+ extend ModuleUtils
4
+ extend self
5
+
6
+ # The Social Security number is a nine-digit number in the format
7
+ # "AAA-GG-SSSS". More info here:
8
+ #
9
+ # http://en.wikipedia.org/wiki/Social_Security_number
10
+ #
11
+ def ssn
12
+ Faker.numerify('###-##-####')
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,111 @@
1
+ # encoding: utf-8
2
+ require 'date'
3
+
4
+ module Faker
5
+
6
+ # The Social Security number is a 12-digit number in the format:
7
+ # "YYYYDDMM-XXXX'
8
+ #
9
+ # http://sv.wikipedia.org/wiki/Personnummer_i_Sverige
10
+ #
11
+ # The 4 last digits (XXXX) are generated based on what region the person are
12
+ # born # in, the gender and the last one is a check digit using the luhn
13
+ # algorithm.
14
+ #
15
+ # http://en.wikipedia.org/wiki/Luhn_algorithm
16
+ #
17
+ # Usage:
18
+ # ssn(from: Time.local(1980, 2, 28),
19
+ # to: Time.local(2000, 2, 28),
20
+ # gender: :male)
21
+ #
22
+ module SSNSE
23
+ extend ModuleUtils
24
+ extend self
25
+
26
+ def ssn(opts = {})
27
+ from = opts[:from] || ::Time.local(1940, 1, 1)
28
+ to = opts[:to] || ::Time.now
29
+ gender = opts[:gender] || genders.sample
30
+
31
+ raise_error_on_bad_arguments(from, to, gender)
32
+
33
+ generate_ssn(from, to, gender)
34
+ end
35
+
36
+ private
37
+
38
+ def generate_ssn(from, to, gender)
39
+ birth_date = random_birth_time_between(from, to)
40
+ birth_date_str = birth_date.strftime("%Y%m%d") # "19800228"
41
+ region = get_random_region_for(gender) # "413"
42
+ ssn_without_check_digit = birth_date_str + region # "19800228413"
43
+ check_digit = luhn_check(ssn_without_check_digit) # "9"
44
+ ssn_without_check_digit + check_digit # "198002284139"
45
+ end
46
+
47
+ def raise_error_on_bad_arguments(from, to, gender)
48
+ raise ArgumentError, "Invalid from argument: from" unless to.is_a? ::Time
49
+ raise ArgumentError, "Invalid from argument: from" unless from.is_a? ::Time
50
+ raise ArgumentError, "Invalid argument: from > to" if from > to
51
+ raise ArgumentError, "Invalid argument: gender" unless genders.include?(gender)
52
+ end
53
+
54
+ def genders
55
+ # XXX Don't like this def.
56
+ [:female, :male]
57
+ end
58
+
59
+ def random_birth_time_between(from=::Time.local(1940, 1, 1), to=::Time.now)
60
+ ::Time.at(from + rand * (to.to_f - from.to_f))
61
+ end
62
+
63
+ def get_random_region_for(gender)
64
+ region_number = case gender
65
+ when :female then get_random_region_even
66
+ when :male then get_random_region_odd
67
+ end
68
+ three_character_string(region_number)
69
+ end
70
+
71
+ def get_random_region_even
72
+ (0..998).step(2).to_a.sample
73
+ end
74
+
75
+ def get_random_region_odd
76
+ get_random_region_even + 1
77
+ end
78
+
79
+ def three_character_string(number)
80
+ "%03d" % number
81
+ end
82
+
83
+ # http://en.wikipedia.org/wiki/Luhn_algorithm
84
+ def luhn_check(number)
85
+ multiplications = []
86
+
87
+ number.split(//).each_with_index do |digit, i|
88
+ if i % 2 == 0
89
+ multiplications << digit.to_i * 2
90
+ else
91
+ multiplications << digit.to_i
92
+ end
93
+ end
94
+
95
+ sum = 0
96
+ multiplications.each do |num|
97
+ num.to_s.each_byte do |character|
98
+ sum += character.chr.to_i
99
+ end
100
+ end
101
+
102
+ if sum % 10 == 0
103
+ control_digit = 0
104
+ else
105
+ control_digit = (sum / 10 + 1) * 10 - sum
106
+ end
107
+
108
+ control_digit.to_s
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,90 @@
1
+ module Faker
2
+ module String
3
+ extend ModuleUtils
4
+ extend self
5
+
6
+ BACKSLASH = '\\'
7
+
8
+ LOWERS = k(('a'..'z').to_a)
9
+ UPPERS = k(('A'..'Z').to_a)
10
+ LETTERS = k(LOWERS + UPPERS)
11
+ NUMBERS = k(('0'..'9').to_a)
12
+ WORD_CHARS = k(LETTERS + NUMBERS + ['_'])
13
+ SPACES = k([" ", "\t"])
14
+ ESCAPEABLE_CHARS = '\\', '/', '.', '(', ')', '[', ']', '{', '}'
15
+
16
+ def from_regexp(exp)
17
+ result = ''
18
+ @last_token = nil
19
+
20
+ # Drop surrounding /'s and split into characters
21
+ tokens = exp.inspect[1...-1].split(//)
22
+ until tokens.empty?
23
+ result << process_token(tokens)
24
+ end
25
+
26
+ result
27
+ end
28
+
29
+ private
30
+
31
+ def join_escapes(tokens)
32
+ result = []
33
+ while tokens.any?
34
+ token = tokens.shift
35
+ token << tokens.shift if token == BACKSLASH
36
+ result << token
37
+ end
38
+ result
39
+ end
40
+
41
+ def process_token(tokens)
42
+ return '' if tokens.empty?
43
+
44
+ token = tokens.shift
45
+
46
+ case token
47
+ when '?' then
48
+ # TODO: Let ? generate nothong
49
+ return '' # We already printed its target
50
+ when '+' then
51
+ tokens.unshift(token) if rand(2) == 1 # Leave the `+` on to run again
52
+ return process_token(@last_token) # Run the last one at least once
53
+ when '*' then
54
+ tokens.unshift(token) if rand(2) == 1 # Leave the `*` on to run again
55
+ return '' if rand(2) == 1 # Or maybe do nothing
56
+ return process_token(@last_token) # Else run the last one again
57
+ end
58
+
59
+ generate_token token, tokens
60
+ end
61
+
62
+ def generate_token(token, tokens)
63
+ case token
64
+ when /\w/ then
65
+ @last_token = [token]
66
+ token
67
+ when BACKSLASH then
68
+ token = tokens.shift
69
+ @last_token = ['\\', token]
70
+ special(token)
71
+ when '[' then
72
+ set = []
73
+ while (ch = tokens.shift) != ']'
74
+ set << ch
75
+ end
76
+ @last_token = ['['] + set + [']']
77
+ process_token([ArrayUtils.rand(join_escapes(set))])
78
+ end
79
+ end
80
+
81
+ def special(token)
82
+ case token
83
+ when 'w' then WORD_CHARS.rand
84
+ when 'd' then NUMBERS.rand
85
+ when 's' then SPACES.rand
86
+ when *ESCAPEABLE_CHARS then token
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,28 @@
1
+ module Faker
2
+ module Time
3
+ extend ModuleUtils
4
+ extend self
5
+
6
+ def month
7
+ MONTHS.rand
8
+ end
9
+
10
+ def date(params={})
11
+ years_back = params[:year_range] || 5
12
+ latest_year = params [:year_latest] || 0
13
+ year = (rand * (years_back)).ceil + (Object::Time.now.year - latest_year - years_back)
14
+ month = (rand * 12).ceil
15
+ day = (rand * 31).ceil
16
+ series = [date = Object::Time.local(year, month, day)]
17
+ if params[:series]
18
+ params[:series].each do |some_time_after|
19
+ series << series.last + (rand * some_time_after).ceil
20
+ end
21
+ return series
22
+ end
23
+ date
24
+ end
25
+
26
+ MONTHS = k %w(January February March April May June July August September October November December)
27
+ end
28
+ end
@@ -0,0 +1,45 @@
1
+ module Faker
2
+ # thanks to http://hipsteripsum.me
3
+ module Venue
4
+ extend ModuleUtils
5
+ extend self
6
+
7
+ def name
8
+ VENUE_LIST.rand
9
+ end
10
+
11
+ VENUE_LIST = k ["Barcelona Business Center",
12
+ "Business Planet",
13
+ "Can Domenge. Centre Tecnologic",
14
+ "Casapiedra",
15
+ "Centro de Convenciones Puebla William O. Jenkins",
16
+ "Centro de Convenciones Torreon",
17
+ "Centro de Eventos Castillo Hidalgo",
18
+ "Centro de Exposiciones y Convenciones Las Americas",
19
+ "Centro de Exposiciones y Convenciones del World Trade Center",
20
+ "Centro de Exposiciones y Convenciones de Chihuahua",
21
+ "Chez Moi",
22
+ "Expo CenterNet de Argentina",
23
+ "Expotrade",
24
+ "Expourense",
25
+ "Feria de Muestras de Navarra, S.L.",
26
+ "Feria de Zaragoza",
27
+ "Feria Internacional de Bilbao",
28
+ "Feria Internacional de Galicia",
29
+ "Feria Internacional de Muestras de Asturias",
30
+ "Ferias y Congresos de Baleares",
31
+ "Fundacion de Ferias y Exposiciones de Lugo",
32
+ "Institucion Ferial de Calamocha",
33
+ "Los Almendros de Huechuraba",
34
+ "Oficina de Convenciones y Visitantes de Monterrey",
35
+ "Oficina de Convenciones y Visitantes de Acapulco",
36
+ "Palacio de Congresos de Cadiz",
37
+ "Palacio de Congresos de Galicia",
38
+ "Palacio de Congresos de La Coruna",
39
+ "Palacio de Exposiciones y Congresos de Sevilla",
40
+ "Palau de Congressos de Catalunya",
41
+ "Parque Ferial On Line",
42
+ "World Trade Center Barcelona",
43
+ "World Trade Center Sevilla"]
44
+ end
45
+ end
data/test/test_address.rb CHANGED
@@ -1,6 +1,10 @@
1
1
  require 'helper'
2
2
 
3
3
  class TestAddress < Test::Unit::TestCase
4
+ def test_building_number
5
+ assert_match /\A\d{3,5}\z/, Faker::Address.building_number
6
+ end
7
+
4
8
  def test_city
5
9
  assert_match /[ a-z]+/, Faker::Address.city
6
10
  end
@@ -30,34 +34,38 @@ class TestAddress < Test::Unit::TestCase
30
34
  end
31
35
 
32
36
  def test_uk_country
33
- assert_match /[ a-z]/, Faker::Address.uk_country
37
+ assert_match /[ a-z]/, Faker::AddressUK.country
34
38
  end
35
39
 
36
40
  def test_uk_county
37
- assert_match /[ a-z]/, Faker::Address.uk_county
41
+ assert_match /[ a-z]/, Faker::AddressUK.county
38
42
  end
39
43
 
40
44
  def test_uk_postcode
41
- assert_match /[ a-z]/, Faker::Address.uk_postcode
45
+ assert_match /[ a-z]/, Faker::AddressUK.postcode
42
46
  end
43
47
 
44
48
  def test_us_state
45
- assert_match /[ a-z]/, Faker::Address.us_state
49
+ assert_match /[ a-z]/, Faker::AddressUS.state
46
50
  end
47
51
 
48
52
  def test_us_state_abbr
49
- assert_match /[A-Z]/, Faker::Address.us_state_abbr
53
+ assert_match /[A-Z]/, Faker::AddressUS.state_abbr
50
54
  end
51
55
 
52
56
  def test_zip_code
53
- assert_match /[0-9]/, Faker::Address.zip_code
57
+ assert_match /[0-9]/, Faker::AddressUS.zip_code
54
58
  end
55
59
 
56
60
  def test_zip_code_frozen
57
- assert Faker::Address.zip_code.frozen? == false
61
+ assert Faker::AddressUS.zip_code.frozen? == false
58
62
  end
59
63
 
60
64
  def test_neighborhood
61
65
  assert_match /[ a-z]+/, Faker::Address::neighborhood
62
66
  end
67
+
68
+ def test_country
69
+ assert_match /[ a-z]+/, Faker::Address::country
70
+ end
63
71
  end