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