ffaker 2.0.0 → 2.1.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 (75) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +32 -0
  3. data/README.md +7 -6
  4. data/REFERENCE.md +1355 -0
  5. data/Rakefile +6 -6
  6. data/ffaker.gemspec +16 -3
  7. data/lib/ffaker.rb +1 -1
  8. data/lib/ffaker/address_ca.rb +3 -3
  9. data/lib/ffaker/avatar.rb +20 -0
  10. data/lib/ffaker/bacon_ipsum.rb +1 -1
  11. data/lib/ffaker/data/job_cn/job_nouns +300 -0
  12. data/lib/ffaker/data/sport/names +34 -0
  13. data/lib/ffaker/dizzle_ipsum.rb +1 -1
  14. data/lib/ffaker/healthcare_ipsum.rb +1 -1
  15. data/lib/ffaker/hipster_ipsum.rb +1 -1
  16. data/lib/ffaker/html_ipsum.rb +1 -1
  17. data/lib/ffaker/identification_kr.rb +20 -0
  18. data/lib/ffaker/identification_mx.rb +3 -3
  19. data/lib/ffaker/internet.rb +3 -3
  20. data/lib/ffaker/internet_se.rb +1 -1
  21. data/lib/ffaker/job_cn.rb +12 -0
  22. data/lib/ffaker/job_fr.rb +6 -2
  23. data/lib/ffaker/locale.rb +1 -1
  24. data/lib/ffaker/lorem.rb +7 -5
  25. data/lib/ffaker/lorem_ar.rb +1 -1
  26. data/lib/ffaker/lorem_cn.rb +1 -1
  27. data/lib/ffaker/lorem_fr.rb +1 -1
  28. data/lib/ffaker/lorem_kr.rb +1 -1
  29. data/lib/ffaker/movie.rb +6 -0
  30. data/lib/ffaker/phone_number.rb +46 -17
  31. data/lib/ffaker/product.rb +1 -1
  32. data/lib/ffaker/skill.rb +1 -1
  33. data/lib/ffaker/sport.rb +10 -0
  34. data/lib/ffaker/string.rb +22 -11
  35. data/lib/ffaker/utils/array_utils.rb +4 -3
  36. data/lib/ffaker/vehicle.rb +1 -1
  37. data/scripts/reference.rb +89 -0
  38. data/test/test_address_ca.rb +6 -4
  39. data/test/test_array_utils.rb +3 -3
  40. data/test/test_avatar.rb +50 -0
  41. data/test/test_company.rb +8 -6
  42. data/test/test_identification.rb +5 -4
  43. data/test/test_identification_kr.rb +13 -0
  44. data/test/test_internet.rb +4 -0
  45. data/test/test_job.rb +1 -2
  46. data/test/test_job_cn.rb +17 -0
  47. data/test/test_job_fr.rb +4 -7
  48. data/test/test_job_ja.rb +1 -1
  49. data/test/test_job_kr.rb +1 -1
  50. data/test/test_locale.rb +21 -0
  51. data/test/test_lorem_kr.rb +1 -1
  52. data/test/test_movie.rb +8 -0
  53. data/test/test_name.rb +3 -3
  54. data/test/test_name_br.rb +7 -8
  55. data/test/test_name_cs.rb +8 -6
  56. data/test/test_name_de.rb +3 -3
  57. data/test/test_name_fr.rb +15 -17
  58. data/test/test_name_ga.rb +12 -14
  59. data/test/test_name_it.rb +14 -15
  60. data/test/test_name_ja.rb +1 -1
  61. data/test/test_name_mx.rb +82 -80
  62. data/test/test_name_nb.rb +6 -9
  63. data/test/test_name_nl.rb +3 -3
  64. data/test/test_name_ph.rb +12 -2
  65. data/test/test_name_ru.rb +14 -10
  66. data/test/test_name_se.rb +6 -9
  67. data/test/test_name_sn.rb +39 -52
  68. data/test/test_name_th.rb +7 -9
  69. data/test/test_phone_number.rb +9 -0
  70. data/test/test_sports.rb +13 -0
  71. data/test/test_string.rb +26 -16
  72. data/test/test_units.rb +8 -10
  73. data/test/test_units_english.rb +15 -22
  74. data/test/test_units_metric.rb +15 -21
  75. metadata +22 -4
@@ -0,0 +1,34 @@
1
+ Surfing
2
+ Bodyboarding
3
+ Wakeboarding
4
+ Kitesurfing
5
+ Mountain Bike
6
+ Longboard
7
+ Skateboarding
8
+ Windsurfing
9
+ Bodysurfing
10
+ BMX
11
+ Base jumping
12
+ Ski
13
+ Skimboarding
14
+ Snowboarding
15
+ Sandboarding
16
+ Soccer
17
+ Volleyball
18
+ Football
19
+ Hockey
20
+ Basketball
21
+ Rugby
22
+ Running
23
+ Jiu Jitsu
24
+ Mixed Martial Arts
25
+ Karate
26
+ Judo
27
+ Wrestling
28
+ Kickboxing
29
+ Muay-Thai
30
+ Rapel
31
+ Formula One
32
+ Formula Indy
33
+ Nascar
34
+ Rafting
@@ -15,7 +15,7 @@ module FFaker
15
15
  end
16
16
 
17
17
  def words(num = 3)
18
- DIZZLE_WORDS.random_pick(num)
18
+ DIZZLE_WORDS.sample(num)
19
19
  end
20
20
  end
21
21
  end
@@ -14,7 +14,7 @@ module FFaker
14
14
  end
15
15
 
16
16
  def words(num = 3)
17
- HEALTHCARE_WORDS.random_pick(num)
17
+ HEALTHCARE_WORDS.sample(num)
18
18
  end
19
19
  end
20
20
  end
@@ -15,7 +15,7 @@ module FFaker
15
15
  end
16
16
 
17
17
  def words(num = 3)
18
- HIPSTER_WORDS.random_pick(num)
18
+ HIPSTER_WORDS.sample(num)
19
19
  end
20
20
  end
21
21
  end
@@ -129,7 +129,7 @@ module FFaker
129
129
  "<code>#{words 2}</code>",
130
130
  "#{a 2}"
131
131
  ] + FFaker::Lorem::paragraphs(count))
132
- a.random_pick(count).join(sep)
132
+ a.sample(count).join(sep)
133
133
  end
134
134
 
135
135
  private
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+
3
+ module FFaker
4
+ module IdentificationKr
5
+ extend ModuleUtils
6
+ extend self
7
+
8
+ # Resident Registration Number
9
+ # http://ko.wikipedia.org/wiki/%EC%A3%BC%EB%AF%BC%EB%93%B1%EB%A1%9D%EB%B2%88%ED%98%B8
10
+ def rrn
11
+ birth = [*Date.new(1970, 1, 1)..Date.new(1999, 12, 31)].sample.strftime("%y%d%m")
12
+ sex = [1, 2].sample
13
+ loc = FFaker.numerify("#{[*"00".."95"].sample}###")
14
+ a, b, c, d, e, f, g, h, i, j, k, l = "#{birth}#{sex}#{loc}".split(//).map(&:to_i)
15
+ checksum = (11 - (2 * a + 3 * b + 4 * c + 5 * d + 6 * e + 7 * f + 8 * g + 9 * h + 2 * i + 3 * j + 4 * k + 5 * l) % 11) % 10
16
+ "#{birth}-#{sex}#{loc}#{checksum}"
17
+ end
18
+ end
19
+ end
20
+
@@ -18,7 +18,7 @@ module FFaker
18
18
  consonants_n = CONSONANTS + ["Ñ"]
19
19
  all_letters = consonants_n + VOWELS
20
20
  date = ::Time.at(rand * ::Time.now.to_f).strftime("%y%m%d")
21
- "#{consonants_n.sample}#{VOWELS.sample}#{ArrayUtils.random_pick(all_letters,2).join}#{date}#{ArrayUtils.random_pick(HOMOCLAVE,3).join}"
21
+ "#{consonants_n.sample}#{VOWELS.sample}#{all_letters.sample(2).join}#{date}#{HOMOCLAVE.sample(3).join}"
22
22
  end
23
23
 
24
24
  # http://es.wikipedia.org/wiki/Registro_Federal_de_Contribuyentes_(M%C3%A9xico)
@@ -27,7 +27,7 @@ module FFaker
27
27
  consonants_n_amp = CONSONANTS + ["Ñ", "&"]
28
28
  all_letters = consonants_n_amp + VOWELS
29
29
  date = ::Time.at(rand * ::Time.now.to_f).strftime("%y%m%d")
30
- "#{ArrayUtils.random_pick(all_letters,3).join}#{date}#{ArrayUtils.random_pick(HOMOCLAVE,3).join}"
30
+ "#{all_letters.sample(3).join}#{date}#{HOMOCLAVE.sample(3).join}"
31
31
  end
32
32
 
33
33
  # http://es.wikipedia.org/wiki/Registro_Federal_de_Contribuyentes_(M%C3%A9xico)
@@ -42,7 +42,7 @@ module FFaker
42
42
  all_letters = CONSONANTS + VOWELS
43
43
  hm = ["H","M"]
44
44
  date = ::Time.at(rand * ::Time.now.to_f).strftime("%y%m%d")
45
- "#{CONSONANTS.sample}#{VOWELS.sample}#{ArrayUtils.random_pick(all_letters,2).join}#{date}#{hm.sample}#{ESTADOS_CURP.sample}#{ArrayUtils.random_pick(CONSONANTS,3).join}#{HOMOCLAVE.sample}#{rand(10)}"
45
+ "#{CONSONANTS.sample}#{VOWELS.sample}#{all_letters.sample(2).join}#{date}#{hm.sample}#{ESTADOS_CURP.sample}#{CONSONANTS.sample(3).join}#{HOMOCLAVE.sample}#{rand(10)}"
46
46
  end
47
47
  end
48
48
  end
@@ -26,12 +26,12 @@ module FFaker
26
26
  end
27
27
 
28
28
  def safe_email(name = nil)
29
- [user_name(name), 'example.'+ %w[org com net].shuffle.first].join('@')
29
+ [user_name(name), 'example.'+ %w[org com net].sample].join('@')
30
30
  end
31
31
 
32
32
  def user_name(name = nil)
33
33
  if name
34
- parts = ArrayUtils.shuffle(name.scan(/\w+/)).join(%w(. _).sample)
34
+ parts = name.scan(/\w+/).shuffle.join(%w(. _).sample)
35
35
  parts.downcase
36
36
  else
37
37
  case rand(2)
@@ -84,7 +84,7 @@ module FFaker
84
84
  while temp.length < min_length
85
85
  temp += Lorem.word
86
86
  end
87
- if max_length > min_length && temp.length > max_length
87
+ if max_length >= min_length && temp.length > max_length
88
88
  temp = temp.slice(0, max_length)
89
89
  end
90
90
 
@@ -63,7 +63,7 @@ module FFaker
63
63
  end
64
64
 
65
65
  def user_name_from_name(name)
66
- array_parts = ArrayUtils.shuffle(name.scan(/\w+/))
66
+ array_parts = name.scan(/\w+/).shuffle
67
67
  join_to_user_name(array_parts)
68
68
  end
69
69
 
@@ -0,0 +1,12 @@
1
+ # encoding: utf-8
2
+
3
+ module FFaker
4
+ module JobCN
5
+ extend ModuleUtils
6
+ extend self
7
+
8
+ def title
9
+ JOB_NOUNS.sample
10
+ end
11
+ end
12
+ end
@@ -5,10 +5,14 @@ module FFaker
5
5
  extend ModuleUtils
6
6
  extend self
7
7
 
8
- JOB_ADJECTIVES = ['', 'general', '', 'adjoint', '', 'associé', '']
8
+ JOB_ADJECTIVES = %w(general adjoint associé)
9
9
 
10
10
  def title
11
- "#{JOB_PREFIXES.sample} #{JOB_ADJECTIVES.sample} #{JOB_NOUNS.sample}"
11
+ if rand(2).zero?
12
+ "#{JOB_PREFIXES.sample} #{JOB_ADJECTIVES.sample} #{JOB_NOUNS.sample}"
13
+ else
14
+ "#{JOB_PREFIXES.sample} #{JOB_NOUNS.sample}"
15
+ end
12
16
  end
13
17
  end
14
18
  end
@@ -15,7 +15,7 @@ module FFaker
15
15
  end
16
16
 
17
17
  def language(given_code = nil)
18
- language_index = LANGUAGE_CODE.index(given_code.upcase)
18
+ language_index = LANGUAGE_CODE.index(given_code && given_code.upcase)
19
19
  if given_code && language_index
20
20
  LANGUAGE[language_index]
21
21
  else
@@ -15,14 +15,16 @@ module FFaker
15
15
  end
16
16
 
17
17
  def words(num = 3)
18
- WORDS.random_pick(num)
18
+ WORDS.sample(num)
19
19
  end
20
20
 
21
21
  def sentence(word_count = 4)
22
- s = words(word_count + rand(5) + 1)
23
- s[0].capitalize!
24
- s = s.join(' ')
25
- "#{s}."
22
+ first_word, *last_words = words(word_count + rand(5) + 1)
23
+ if last_words.nil?
24
+ first_word.capitalize
25
+ else
26
+ "#{first_word.capitalize} #{last_words.join(' ')}."
27
+ end
26
28
  end
27
29
 
28
30
  alias_method :phrase, :sentence
@@ -11,7 +11,7 @@ module FFaker
11
11
  end
12
12
 
13
13
  def words(num = 3)
14
- WORDS.random_pick(num)
14
+ WORDS.sample(num)
15
15
  end
16
16
 
17
17
  def sentence(word_count = 4)
@@ -11,7 +11,7 @@ module FFaker
11
11
  end
12
12
 
13
13
  def words(num = 3)
14
- WORDS.random_pick(num)
14
+ WORDS.sample(num)
15
15
  end
16
16
 
17
17
  def sentence(word_count = 4)
@@ -10,7 +10,7 @@ module FFaker
10
10
  end
11
11
 
12
12
  def words(num = 3)
13
- WORDS.random_pick(num)
13
+ WORDS.sample(num)
14
14
  end
15
15
 
16
16
  def sentence(word_count = 4)
@@ -10,7 +10,7 @@ module FFaker
10
10
  end
11
11
 
12
12
  def words(num = 3)
13
- WORDS.random_pick(num)
13
+ WORDS.sample(num)
14
14
  end
15
15
 
16
16
  def sentence(word_count = 4)
@@ -11,6 +11,8 @@ module FFaker
11
11
  ]
12
12
  COLORS = %w{Red Yellow Black White}
13
13
 
14
+ RATINGS = %w(G PG PG-13 R NC-17) # According to MPAA
15
+
14
16
  def title
15
17
  case rand(4)
16
18
  when 0 then title_with_prefix
@@ -20,6 +22,10 @@ module FFaker
20
22
  end
21
23
  end
22
24
 
25
+ def rating
26
+ RATINGS.sample
27
+ end
28
+
23
29
  private
24
30
 
25
31
  def title_with_prefix
@@ -7,27 +7,56 @@ module FFaker
7
7
 
8
8
  def phone_number
9
9
  FFaker.numerify case rand(20)
10
- when 0 then '###-###-#### x#####'
11
- when 1 then '###-###-#### x####'
12
- when 2 then '###-###-#### x###'
13
- when 3..4 then '###-###-####'
14
- when 5 then '###.###.#### x#####'
15
- when 6 then '###.###.#### x####'
16
- when 7 then '###.###.#### x###'
17
- when 8..9 then '###.###.####'
18
- when 10 then '(###)###-#### x#####'
19
- when 11 then '(###)###-#### x####'
20
- when 12 then '(###)###-#### x###'
21
- when 13..14 then '(###)###-####'
22
- when 15 then '1-###-###-#### x#####'
23
- when 16 then '1-###-###-#### x####'
24
- when 17 then '1-###-###-#### x###'
25
- when 18..19 then '1-###-###-####'
10
+ when 0 then "#{area_code}-###-#### x#####"
11
+ when 1 then "#{area_code}-###-#### x####"
12
+ when 2 then "#{area_code}-###-#### x###"
13
+ when 3..4 then "#{area_code}-###-####"
14
+ when 5 then "#{area_code}.###.#### x#####"
15
+ when 6 then "#{area_code}.###.#### x####"
16
+ when 7 then "#{area_code}.###.#### x###"
17
+ when 8..9 then "#{area_code}.###.####"
18
+ when 10 then "(#{area_code})###-#### x#####"
19
+ when 11 then "(#{area_code})###-#### x####"
20
+ when 12 then "(#{area_code})###-#### x###"
21
+ when 13..14 then "(#{area_code})###-####"
22
+ when 15 then "1-#{area_code}-###-#### x#####"
23
+ when 16 then "1-#{area_code}-###-#### x####"
24
+ when 17 then "1-#{area_code}-###-#### x###"
25
+ when 18..19 then "1-#{area_code}-###-####"
26
26
  end
27
27
  end
28
28
 
29
+ def area_code
30
+ # The North American Numbering Plan (NANP) does not permit the digits 0
31
+ # and 1 as the leading digit of an area code.
32
+ # https://en.wikipedia.org/wiki/List_of_North_American_Numbering_Plan_area_codes
33
+ rand(201..999)
34
+ end
35
+
29
36
  def short_phone_number
30
- FFaker.numerify('###-###-####')
37
+ FFaker.numerify("#{area_code}-###-####")
38
+ end
39
+
40
+ def imei(serial_number=nil)
41
+ # IMEI Format:
42
+ # AA-BBBBBB-CCCCCC-D
43
+
44
+ rbi = "00" # Test IMEI for countries with 2-digit country codes
45
+ tac = "#{rbi}124500" # iPhone
46
+
47
+ serial_number ||= rand(1_000_000)
48
+ serial_number = sprintf('%06d', serial_number)
49
+
50
+ imei_base = tac + serial_number
51
+
52
+ check_digit = 0
53
+ base_digits = imei_base.split('').map(&:to_i)
54
+ base_digits.each_with_index do |digit, i|
55
+ check_digit += i.even? ? 2*digit : digit
56
+ end
57
+ check_digit = (10 - check_digit % 10) % 10
58
+
59
+ "#{imei_base}#{check_digit}"
31
60
  end
32
61
 
33
62
  end
@@ -31,7 +31,7 @@ module FFaker
31
31
  end
32
32
 
33
33
  def letters(n)
34
- max = n.is_a?(Range) ? n.to_a.shuffle.first : n
34
+ max = n.is_a?(Range) ? n.to_a.sample : n
35
35
  (0...max).map { LETTERS.sample.upcase }.join
36
36
  end
37
37
 
@@ -10,7 +10,7 @@ module FFaker
10
10
  end
11
11
 
12
12
  def tech_skills(num = 3)
13
- TECH_SKILLS.random_pick(num)
13
+ TECH_SKILLS.sample(num)
14
14
  end
15
15
 
16
16
  def specialty
@@ -0,0 +1,10 @@
1
+ module FFaker
2
+ module Sport
3
+ extend ModuleUtils
4
+ extend self
5
+
6
+ def name
7
+ NAMES.sample
8
+ end
9
+ end
10
+ end
@@ -6,13 +6,14 @@ module FFaker
6
6
  extend self
7
7
 
8
8
  BACKSLASH = '\\'
9
+ DASH = '-'
9
10
 
10
11
  LOWERS = [*'a'..'z']
11
12
  UPPERS = [*'A'..'Z']
12
13
  LETTERS = LOWERS + UPPERS
13
14
  NUMBERS = [*'0'..'9']
14
15
  WORD_CHARS = LETTERS + NUMBERS + ['_']
15
- SPACES = [" ", "\t"]
16
+ SPACES = [' ', "\t"]
16
17
  ESCAPEABLE_CHARS = '\\', '/', '.', '(', ')', '[', ']', '{', '}'
17
18
 
18
19
  def from_regexp(exp)
@@ -30,12 +31,17 @@ module FFaker
30
31
 
31
32
  private
32
33
 
33
- def join_escapes(tokens)
34
+ def generate_range(tokens)
34
35
  result = []
35
36
  while tokens.any?
36
37
  token = tokens.shift
37
- token << tokens.shift if token == BACKSLASH
38
- result << token
38
+ if token == DASH && tokens.first && result.last
39
+ result += [*result.pop..tokens.shift]
40
+ elsif token == BACKSLASH
41
+ result << special(tokens.shift)
42
+ else
43
+ result << token
44
+ end
39
45
  end
40
46
  result
41
47
  end
@@ -47,18 +53,18 @@ module FFaker
47
53
 
48
54
  case token
49
55
  when '?' then
50
- # TODO: Let ? generate nothong
51
- return '' # We already printed its target
56
+ # TODO: Let ? generate nothing
57
+ '' # We already printed its target
52
58
  when '+' then
53
59
  tokens.unshift(token) if rand(2) == 1 # Leave the `+` on to run again
54
- return process_token(@last_token) # Run the last one at least once
60
+ process_token(@last_token) # Run the last one at least once
55
61
  when '*' then
56
62
  tokens.unshift(token) if rand(2) == 1 # Leave the `*` on to run again
57
63
  return '' if rand(2) == 1 # Or maybe do nothing
58
- return process_token(@last_token) # Else run the last one again
64
+ process_token(@last_token) # Else run the last one again
65
+ else
66
+ generate_token token, tokens
59
67
  end
60
-
61
- generate_token token, tokens
62
68
  end
63
69
 
64
70
  def generate_token(token, tokens)
@@ -76,7 +82,10 @@ module FFaker
76
82
  set << ch
77
83
  end
78
84
  @last_token = ['['] + set + [']']
79
- process_token([join_escapes(set).sample])
85
+
86
+ process_token([generate_range(set).sample])
87
+ else
88
+ token
80
89
  end
81
90
  end
82
91
 
@@ -86,6 +95,8 @@ module FFaker
86
95
  when 'd' then NUMBERS.sample
87
96
  when 's' then SPACES.sample
88
97
  when *ESCAPEABLE_CHARS then token
98
+ else
99
+ ''
89
100
  end
90
101
  end
91
102
  end