ffaker 1.15.0 → 1.16.0

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.
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