ffaker 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -7,8 +7,8 @@ module FFaker
7
7
  end
8
8
 
9
9
  def self.random_pick(array, n)
10
- indexes = (0...array.length).sort_by{Kernel.rand}[0...n]
11
- indexes.map { |n| array[n].dup }
10
+ warn '[ArrayUtils.random_pick] is deprecated. Please use the Array#sample method'
11
+ array.sample(n)
12
12
  end
13
13
 
14
14
  def self.rand(array)
@@ -27,7 +27,8 @@ module FFaker
27
27
  end
28
28
 
29
29
  def random_pick(n)
30
- ArrayUtils.random_pick(self, n)
30
+ warn '[ArrayUtils#random_pick] is deprecated. Please use the Array#sample method'
31
+ self.sample(n)
31
32
  end
32
33
 
33
34
  def rand
@@ -26,7 +26,7 @@ module FFaker
26
26
 
27
27
  def manufacturer_color(n=2)
28
28
  # Take two prefixes because it's more fun than one
29
- [COLOR_PREFIXES.random_pick(n), self.base_color].flatten.join(' ')
29
+ (COLOR_PREFIXES.sample(n) + [base_color]).join(' ')
30
30
  end
31
31
  alias_method :mfg_color, :manufacturer_color
32
32
 
@@ -0,0 +1,89 @@
1
+ $: << File.dirname(__FILE__) + '/../lib'
2
+ require 'ffaker'
3
+
4
+ ICONS = {
5
+ :error => "‼️",
6
+ :warning => "❗"
7
+ }
8
+
9
+ # Get a list of sections
10
+ def faker_modules
11
+ FFaker.constants.map do |const|
12
+ mod = FFaker.const_get(const)
13
+ next unless mod.is_a?(Module)
14
+ next if mod == FFaker::ArrayUtils
15
+ next if mod == FFaker::ModuleUtils
16
+ mod
17
+ end.compact
18
+ end
19
+
20
+ # Returns faker methods for a given module
21
+ def faker_methods(mod)
22
+ methods = mod.methods - Module.methods - [:k, :underscore]
23
+
24
+ # For Company.name (et al), don't discard :name if it was reimplemented
25
+ methods << :name if mod.send(:name) != mod.to_s
26
+ methods
27
+ end
28
+
29
+ # Catch deprecation warnings.
30
+ # This `#warn` overrides Kernel#warn
31
+ def warn(msg)
32
+ $warnings << msg if $warnings
33
+ end
34
+
35
+ def catch_warnings(&blk)
36
+ $warnings = []
37
+ [yield, $warnings]
38
+ end
39
+
40
+ def escape(str)
41
+ str.gsub('&', '&amp;').gsub('<', '&lt;').gsub('>', '&gt;').gsub("\n", '')
42
+ end
43
+
44
+ sections = faker_modules.each.map do |mod|
45
+ lines = []
46
+
47
+ methods = faker_methods(mod)
48
+ lines << "## #{mod}"
49
+ lines << ""
50
+ lines << "| Method | Example |"
51
+ lines << "| ------ | ------- |"
52
+
53
+ methods.sort.each do |meth|
54
+ arity = mod.method(meth).arity
55
+
56
+ left = "`#{meth}`"
57
+ right =''
58
+
59
+ if arity > 0
60
+ left = "`#{meth}`(#{arity.times.map{'...'}.join(', ')})"
61
+ else
62
+ begin
63
+ examples, warnings = catch_warnings {
64
+ 3.times.map { mod.send meth }
65
+ }
66
+ if warnings.any?
67
+ right = "#{ICONS[:warning]} *#{warnings.first}*"
68
+ else
69
+ right = "#{escape examples.join(', ')}"
70
+ end
71
+ rescue => e
72
+ right = "#{ICONS[:error]} #{e.class}: #{e.message}"
73
+ end
74
+ end
75
+
76
+ lines << "| #{left} | #{right} |"
77
+ end
78
+
79
+ lines << ""
80
+ end
81
+
82
+ puts "# FFaker reference"
83
+ puts ""
84
+ faker_modules.each do |mod|
85
+ name = mod.to_s.downcase.gsub(':', '')
86
+ puts " * [#{mod}](##{name})"
87
+ end
88
+ puts ""
89
+ puts sections.flatten.join("\n")
@@ -4,18 +4,20 @@ require 'helper'
4
4
 
5
5
  class TestAddressCA < Test::Unit::TestCase
6
6
  def test_province
7
- assert_match /[ a-z]/, FFaker::AddressCA.province
7
+ assert_match(/\A[ a-z]+\z/i, FFaker::AddressCA.province)
8
8
  end
9
9
 
10
10
  def test_province_abbr
11
- assert_match /[A-Z][A-Z]/, FFaker::AddressCA.province_abbr
11
+ assert_match(/\A[A-Z]{2}\z/, FFaker::AddressCA.province_abbr)
12
12
  end
13
13
 
14
14
  def test_city
15
- assert FFaker::AddressCA::CITY.include?(FFaker::AddressCA.city)
15
+ assert_include(FFaker::AddressCA::CITY, FFaker::AddressCA.city)
16
16
  end
17
17
 
18
18
  def test_postal_code
19
- assert_match /[A-Z]\d[A-Z]\W\d[A-Z]\d/, FFaker::AddressCA.postal_code
19
+ assert_match(
20
+ /\A[A-CEGHJK-NPR-TVXY]\d[A-CEGHJK-NPR-TV-Z] \d[A-CEGHJK-NPR-TV-Z]\d\z/,
21
+ FFaker::AddressCA.postal_code)
20
22
  end
21
23
  end
@@ -22,12 +22,12 @@ class TestArrayUtils < Test::Unit::TestCase
22
22
  assert set == @elems
23
23
  end
24
24
 
25
- def test_provides_a_way_of_getting_n_random_elements
26
- assert_equal @array.random_pick(3).sort, @array.sort
25
+ def test_provides_a_way_of_getting_n_random_elements
26
+ assert_equal @array.sample(3).sort, @array.sort
27
27
 
28
28
  1.upto(3) do |n|
29
29
  1000.times do
30
- new_arr = @array.random_pick(n)
30
+ new_arr = @array.sample(n)
31
31
  assert_equal n, new_arr.length
32
32
  new_arr.each do |e|
33
33
  assert @elems.include? e
@@ -0,0 +1,50 @@
1
+ require 'helper'
2
+
3
+ class TestAvatar < Test::Unit::TestCase
4
+ def setup
5
+ @tester = FFaker::Avatar
6
+ end
7
+
8
+ def test_avatar
9
+ assert_match(/\Ahttp:\/\/robohash\.org\/.+\.png\?size=300x300\z/,
10
+ @tester.image)
11
+ end
12
+
13
+ def test_avatar_with_param
14
+ assert_equal('http://robohash.org/faker.png?size=300x300',
15
+ @tester.image('faker'))
16
+ end
17
+
18
+ def test_avatar_with_correct_size
19
+ assert_equal('http://robohash.org/faker.png?size=150x320',
20
+ @tester.image('faker', '150x320'))
21
+ end
22
+
23
+ def test_avatar_with_incorrect_size
24
+ assert_raise ArgumentError do
25
+ @tester.image(nil, '150x320z')
26
+ end
27
+ end
28
+
29
+ def test_avatar_with_supported_format
30
+ assert_equal('http://robohash.org/faker.jpg?size=300x300',
31
+ @tester.image('faker', '300x300', 'jpg'))
32
+ end
33
+
34
+ def test_avatar_with_incorrect_format
35
+ assert_raise ArgumentError do
36
+ @tester.image(nil, '300x300', 'wrong_format')
37
+ end
38
+ end
39
+
40
+ def test_avatar_with_correct_background
41
+ assert_equal('http://robohash.org/faker.png?size=300x300&bgset=bg1',
42
+ @tester.image('faker', '300x300', 'png', '1'))
43
+ end
44
+
45
+ def test_avatar_with_incorrect_background
46
+ assert_raise ArgumentError do
47
+ @tester.image('faker', '300x300', 'png', 'not_a_number')
48
+ end
49
+ end
50
+ end
@@ -3,21 +3,23 @@
3
3
  require 'helper'
4
4
 
5
5
  class TestCompany < Test::Unit::TestCase
6
+ def setup
7
+ @tester = FFaker::Company
8
+ end
9
+
6
10
  def test_bs
7
- assert_match /[ a-z]+/, FFaker::Company.bs
8
- assert_match /\s/, FFaker::Company.bs
11
+ assert_match(/\A[ \w'\/-]+\z/, @tester.bs)
9
12
  end
10
13
 
11
14
  def test_catch_phrase
12
- assert_match /[ a-z]+/, FFaker::Company.catch_phrase
13
- assert_match /\s/, FFaker::Company.catch_phrase
15
+ assert_match(/\A[ \w'\/-]+\z/, @tester.catch_phrase)
14
16
  end
15
17
 
16
18
  def test_name
17
- assert_match /[ a-z]+/, FFaker::Company.name
19
+ assert_match(/\A[ \w,'-]+\z/, @tester.name)
18
20
  end
19
21
 
20
22
  def test_suffix
21
- assert_match /[ a-z]+/i, FFaker::Company.suffix
23
+ assert_include @tester::SUFFIXES, @tester.suffix
22
24
  end
23
25
  end
@@ -9,19 +9,20 @@ class TestFakerIdentification < Test::Unit::TestCase
9
9
 
10
10
  def test_drivers_license
11
11
  ###-###-##-###-#
12
- assert_match /[A-Z]\d{3}-\d{3}-\d{2}-\d{3}-\d{1}/, @tester.drivers_license
12
+ drivers_license_regex = /\A[A-Z]\d{3}-\d{3}-\d{2}-\d{3}-\d{1}\z/
13
+ assert_match drivers_license_regex, @tester.drivers_license
13
14
  end
14
15
 
15
16
  def test_ssn
16
- assert_match /\d{3}-\d{2}-\d{4}/, @tester.ssn
17
+ assert_match(/\A\d{3}-\d{2}-\d{4}\z/, @tester.ssn)
17
18
  end
18
19
 
19
20
  def test_gender
20
- assert_match /(Male|Female)/, @tester.gender
21
+ assert_match(/\A(Male|Female)\z/, @tester.gender)
21
22
  end
22
23
 
23
24
  def test_ethnicity
24
- ethnicity_regex = /(African American|Asian\/Pacific Islander|Caucasian|Hispanic|Native American|Multiracial|Other|Prefer not to respond)/
25
+ ethnicity_regex = /\A(African American|Asian\/Pacific Islander|Caucasian|Hispanic|Native American|Multiracial|Other|Prefer not to respond)\z/
25
26
  assert_match ethnicity_regex, @tester.ethnicity
26
27
  end
27
28
  end
@@ -0,0 +1,13 @@
1
+ # encoding: utf-8
2
+
3
+ require 'helper'
4
+
5
+ class TestFakerIdentificationKr < Test::Unit::TestCase
6
+ def setup
7
+ @tester = FFaker::IdentificationKr
8
+ end
9
+
10
+ def test_rrn
11
+ assert_match(/\A\d{6}-\d{7}\z/, @tester.rrn)
12
+ end
13
+ end
@@ -81,6 +81,10 @@ class TestFakerInternet < Test::Unit::TestCase
81
81
  assert @tester.password(1, 3).length < 4
82
82
  end
83
83
 
84
+ def test_password_fixed_length
85
+ assert @tester.password(20, 20).length == 20
86
+ end
87
+
84
88
  def test_password_strange_argument
85
89
  assert @tester.password(10, 2).length > 9
86
90
  assert @tester.password(3, 1).length > 2
@@ -8,7 +8,6 @@ class TestFakerJob < Test::Unit::TestCase
8
8
  end
9
9
 
10
10
  def test_title
11
- assert @tester.title.match(/(\w+\.? ?){2,3}/)
11
+ assert_match(/\A(\w+\.? ?){2,3}\z/, @tester.title)
12
12
  end
13
13
  end
14
-
@@ -0,0 +1,17 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'helper'
4
+
5
+ class TestFakerJobCN < Test::Unit::TestCase
6
+ def setup
7
+ @tester = FFaker::JobCN
8
+ end
9
+
10
+ def test_title
11
+ assert @tester.title.length >= 1
12
+ end
13
+
14
+ def test_nouns
15
+ assert_kind_of Array, @tester::JOB_NOUNS
16
+ end
17
+ end
@@ -8,15 +8,12 @@ class TestFakerJobFr < Test::Unit::TestCase
8
8
  end
9
9
 
10
10
  def test_title
11
- assert @tester.title.match(/(\w+\.? ?){2,3}/)
11
+ assert_match(/\A([a-zàâçéèêëîïôûùüÿñæœ]+\.? ?){2,}\z/, @tester.title)
12
12
  end
13
13
 
14
-
15
14
  def test_prefix
16
- assert @tester::JOB_PREFIXES.is_a?(Array)
17
- assert @tester::JOB_ADJECTIVES.is_a?(Array)
18
- assert @tester::JOB_NOUNS.is_a?(Array)
15
+ assert_kind_of Array, @tester::JOB_PREFIXES
16
+ assert_kind_of Array, @tester::JOB_ADJECTIVES
17
+ assert_kind_of Array, @tester::JOB_NOUNS
19
18
  end
20
19
  end
21
-
22
-
@@ -12,6 +12,6 @@ class TestFakerJobJA < Test::Unit::TestCase
12
12
  end
13
13
 
14
14
  def test_nouns
15
- assert @tester::JOB_NOUNS.is_a?(Array)
15
+ assert_kind_of Array, @tester::JOB_NOUNS
16
16
  end
17
17
  end
@@ -12,6 +12,6 @@ class TestFakerJobKR < Test::Unit::TestCase
12
12
  end
13
13
 
14
14
  def test_nouns
15
- assert @tester::JOB_NOUNS.is_a?(Array)
15
+ assert_kind_of Array, @tester::JOB_NOUNS
16
16
  end
17
17
  end
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+
3
+ require 'helper'
4
+
5
+ class TestLocale < Test::Unit::TestCase
6
+ def test_code
7
+ assert_match /./, FFaker::Locale.code
8
+ end
9
+
10
+ def test_language
11
+ assert_match /./, FFaker::Locale.language
12
+ end
13
+
14
+ def test_language_with_args
15
+ assert_match 'French', FFaker::Locale.language('FR')
16
+ end
17
+
18
+ def test_code_with_args
19
+ assert_match 'FR', FFaker::Locale.code('French')
20
+ end
21
+ end
@@ -17,7 +17,7 @@ class TestLoremKR < Test::Unit::TestCase
17
17
  def test_sentence
18
18
  assert_match KOREAN_SENTENCE_MATCHER, @tester.sentence
19
19
  assert_nothing_thrown do
20
- 100.times { FFaker::Lorem.sentence 0 }
20
+ 100.times { @tester.sentence 0 }
21
21
  end
22
22
  end
23
23
 
@@ -3,7 +3,15 @@
3
3
  require 'helper'
4
4
 
5
5
  class TestMovie < Test::Unit::TestCase
6
+ def setup
7
+ @tester = FFaker::Movie
8
+ end
9
+
6
10
  def test_title
7
11
  assert_match /[ a-z]+/, FFaker::Movie.title
8
12
  end
13
+
14
+ def test_rating
15
+ assert FFaker::Movie::RATINGS.include? @tester.rating
16
+ end
9
17
  end
@@ -8,14 +8,14 @@ class TestFakerName < Test::Unit::TestCase
8
8
  end
9
9
 
10
10
  def test_name
11
- assert @tester.name.match(/(\w+\.? ?){2,3}/)
11
+ assert_match(/(\w+\.? ?){2,3}/, @tester.name)
12
12
  end
13
13
 
14
14
  def test_prefix
15
- assert @tester.prefix.match(/[A-Z][a-z]+\.?/)
15
+ assert_match(/[A-Z][a-z]+\.?/, @tester.prefix)
16
16
  end
17
17
 
18
18
  def test_suffix
19
- assert @tester.suffix.match(/[A-Z][a-z]*\.?/)
19
+ assert_match(/[A-Z][a-z]*\.?/, @tester.suffix)
20
20
  end
21
21
  end
@@ -8,25 +8,24 @@ class TestFakerNameBR < Test::Unit::TestCase
8
8
  end
9
9
 
10
10
  def test_name
11
- assert_match /[[:alpha:]]+ [[:alpha:]]+/, @tester.name
11
+ assert_match(/\A[[:alpha:]]+ [[:alpha:]]+\z/, @tester.name)
12
12
  end
13
13
 
14
14
  def test_name_with_prefix
15
- prefixes = @tester::PREFIXES
16
- parts = @tester.name_with_prefix.split(/\s+/)
17
- assert prefixes.include?(parts.first)
18
- assert(parts[1].length > 0)
15
+ prefix, name = @tester.name_with_prefix.split(/\s+/)
16
+ assert_include(@tester::PREFIXES, prefix)
17
+ assert(name.length > 0)
19
18
  end
20
19
 
21
20
  def test_first_name
22
- assert @tester::FIRST_NAMES.include? @tester.first_name
21
+ assert_include(@tester::FIRST_NAMES, @tester.first_name)
23
22
  end
24
23
 
25
24
  def test_last_name
26
- assert @tester::LAST_NAMES.include? @tester.last_name
25
+ assert_include(@tester::LAST_NAMES, @tester.last_name)
27
26
  end
28
27
 
29
28
  def test_prefix
30
- assert @tester::PREFIXES.include? @tester.prefix
29
+ assert_include(@tester::PREFIXES, @tester.prefix)
31
30
  end
32
31
  end