faker 2.2.2 → 2.7.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 (126) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +135 -0
  3. data/README.md +5 -2
  4. data/lib/faker/blockchain/aeternity.rb +70 -0
  5. data/lib/faker/blockchain/bitcoin.rb +26 -0
  6. data/lib/faker/blockchain/ethereum.rb +10 -0
  7. data/lib/faker/blockchain/tezos.rb +56 -0
  8. data/lib/faker/books/book.rb +36 -0
  9. data/lib/faker/books/culture_series.rb +49 -0
  10. data/lib/faker/books/dune.rb +56 -3
  11. data/lib/faker/books/lovecraft.rb +172 -0
  12. data/lib/faker/creature/animal.rb +9 -0
  13. data/lib/faker/creature/cat.rb +27 -0
  14. data/lib/faker/creature/dog.rb +72 -0
  15. data/lib/faker/creature/horse.rb +18 -0
  16. data/lib/faker/default/alphanumeric.rb +23 -6
  17. data/lib/faker/default/app.rb +46 -0
  18. data/lib/faker/default/appliance.rb +18 -0
  19. data/lib/faker/default/artist.rb +9 -0
  20. data/lib/faker/default/avatar.rb +32 -0
  21. data/lib/faker/default/boolean.rb +12 -1
  22. data/lib/faker/default/chuck_norris.rb +1 -1
  23. data/lib/faker/default/date.rb +83 -2
  24. data/lib/faker/default/dessert.rb +27 -0
  25. data/lib/faker/default/device.rb +54 -0
  26. data/lib/faker/default/driving_licence.rb +2 -2
  27. data/lib/faker/default/electrical_components.rb +27 -0
  28. data/lib/faker/default/gender.rb +18 -0
  29. data/lib/faker/default/greek_philosophers.rb +18 -0
  30. data/lib/faker/default/hacker.rb +59 -1
  31. data/lib/faker/default/house.rb +18 -0
  32. data/lib/faker/default/id_number.rb +29 -0
  33. data/lib/faker/default/industry_segments.rb +36 -0
  34. data/lib/faker/default/internet.rb +19 -11
  35. data/lib/faker/default/lorem.rb +8 -7
  36. data/lib/faker/default/marketing.rb +9 -0
  37. data/lib/faker/default/military.rb +45 -0
  38. data/lib/faker/default/nation.rb +48 -5
  39. data/lib/faker/default/nato_phonetic_alphabet.rb +9 -0
  40. data/lib/faker/default/number.rb +124 -0
  41. data/lib/faker/default/omniauth.rb +42 -0
  42. data/lib/faker/default/programming_language.rb +18 -0
  43. data/lib/faker/default/restaurant.rb +54 -2
  44. data/lib/faker/default/science.rb +27 -0
  45. data/lib/faker/default/source.rb +43 -2
  46. data/lib/faker/default/subscription.rb +45 -0
  47. data/lib/faker/default/superhero.rb +45 -0
  48. data/lib/faker/default/time.rb +85 -8
  49. data/lib/faker/default/world_cup.rb +50 -0
  50. data/lib/faker/games/dota.rb +47 -0
  51. data/lib/faker/games/elder_scrolls.rb +72 -0
  52. data/lib/faker/games/fallout.rb +37 -0
  53. data/lib/faker/games/game.rb +27 -0
  54. data/lib/faker/games/half_life.rb +27 -0
  55. data/lib/faker/games/heroes.rb +27 -0
  56. data/lib/faker/games/heroes_of_the_storm.rb +36 -0
  57. data/lib/faker/games/league_of_legends.rb +54 -0
  58. data/lib/faker/games/myst.rb +45 -0
  59. data/lib/faker/games/overwatch.rb +27 -0
  60. data/lib/faker/games/pokemon.rb +27 -0
  61. data/lib/faker/games/sonic_the_hedgehog.rb +27 -0
  62. data/lib/faker/games/super_smash_bros.rb +18 -0
  63. data/lib/faker/games/witcher.rb +54 -0
  64. data/lib/faker/games/world_of_warcraft.rb +18 -0
  65. data/lib/faker/games/zelda.rb +37 -1
  66. data/lib/faker/japanese_media/dragon_ball.rb +9 -0
  67. data/lib/faker/japanese_media/one_piece.rb +54 -0
  68. data/lib/faker/japanese_media/sword_art_online.rb +36 -0
  69. data/lib/faker/movies/back_to_the_future.rb +28 -0
  70. data/lib/faker/movies/ghostbusters.rb +28 -0
  71. data/lib/faker/movies/harry_potter.rb +54 -0
  72. data/lib/faker/movies/hitchhikers_guide_to_the_galaxy.rb +69 -0
  73. data/lib/faker/movies/hobbit.rb +37 -0
  74. data/lib/faker/movies/lebowski.rb +27 -0
  75. data/lib/faker/movies/lord_of_the_rings.rb +28 -0
  76. data/lib/faker/movies/movie.rb +9 -0
  77. data/lib/faker/movies/princess_bride.rb +19 -0
  78. data/lib/faker/movies/star_wars.rb +94 -0
  79. data/lib/faker/movies/v_for_vendetta.rb +29 -0
  80. data/lib/faker/music/grateful_dead.rb +18 -0
  81. data/lib/faker/music/phish.rb +9 -0
  82. data/lib/faker/music/rock_band.rb +9 -0
  83. data/lib/faker/music/umphreys_mcgee.rb +9 -0
  84. data/lib/faker/sports/basketball.rb +36 -0
  85. data/lib/faker/sports/football.rb +45 -0
  86. data/lib/faker/tv_shows/aqua_teen_hunger_force.rb +9 -0
  87. data/lib/faker/tv_shows/bojack_horseman.rb +28 -0
  88. data/lib/faker/tv_shows/breaking_bad.rb +18 -0
  89. data/lib/faker/tv_shows/buffy.rb +45 -0
  90. data/lib/faker/tv_shows/community.rb +19 -0
  91. data/lib/faker/tv_shows/dr_who.rb +78 -2
  92. data/lib/faker/tv_shows/dumb_and_dumber.rb +28 -0
  93. data/lib/faker/tv_shows/family_guy.rb +28 -0
  94. data/lib/faker/tv_shows/friends.rb +27 -0
  95. data/lib/faker/tv_shows/game_of_thrones.rb +46 -0
  96. data/lib/faker/tv_shows/hey_arnold.rb +27 -0
  97. data/lib/faker/tv_shows/how_i_met_your_mother.rb +37 -0
  98. data/lib/faker/tv_shows/michael_scott.rb +13 -0
  99. data/lib/faker/tv_shows/new_girl.rb +19 -0
  100. data/lib/faker/tv_shows/parks_and_rec.rb +18 -0
  101. data/lib/faker/tv_shows/rick_and_morty.rb +28 -0
  102. data/lib/faker/tv_shows/ru_paul.rb +18 -0
  103. data/lib/faker/tv_shows/seinfeld.rb +28 -0
  104. data/lib/faker/tv_shows/silicon_valley.rb +75 -0
  105. data/lib/faker/tv_shows/simpsons.rb +28 -0
  106. data/lib/faker/tv_shows/south_park.rb +19 -0
  107. data/lib/faker/tv_shows/star_trek.rb +36 -0
  108. data/lib/faker/tv_shows/stargate.rb +28 -0
  109. data/lib/faker/tv_shows/stranger_things.rb +19 -0
  110. data/lib/faker/tv_shows/the_expanse.rb +36 -0
  111. data/lib/faker/tv_shows/the_fresh_prince_of_bel_air.rb +28 -0
  112. data/lib/faker/tv_shows/the_it_crowd.rb +37 -0
  113. data/lib/faker/tv_shows/the_thick_of_it.rb +28 -0
  114. data/lib/faker/tv_shows/twin_peaks.rb +28 -0
  115. data/lib/faker/tv_shows/venture_bros.rb +38 -0
  116. data/lib/faker/version.rb +1 -1
  117. data/lib/locales/en-CA.yml +2 -1
  118. data/lib/locales/en-TH.yml +360 -0
  119. data/lib/locales/en/color.yml +1 -1
  120. data/lib/locales/en/dr_who.yml +1 -1
  121. data/lib/locales/en/science.yml +1 -1
  122. data/lib/locales/en/super_smash_bros.yml +1 -0
  123. data/lib/locales/fr-CA.yml +1 -1
  124. data/lib/locales/ja.yml +12 -9
  125. data/lib/locales/th.yml +380 -0
  126. metadata +41 -16
@@ -6,34 +6,106 @@ module Faker
6
6
  flexible :dog
7
7
 
8
8
  class << self
9
+ ##
10
+ # Produces a random name for a dog
11
+ #
12
+ # @return [String]
13
+ #
14
+ # @example
15
+ # Faker::Creature::Dog.name #=> "Spike"
16
+ #
17
+ # @faker.version 1.9.2
9
18
  def name
10
19
  fetch('creature.dog.name')
11
20
  end
12
21
 
22
+ ##
23
+ # Produces a random dog breed
24
+ #
25
+ # @return [String]
26
+ #
27
+ # @example
28
+ # Faker::Creature::Dog.breed #=> "Yorkshire Terrier"
29
+ #
30
+ # @faker.version 1.9.2
13
31
  def breed
14
32
  fetch('creature.dog.breed')
15
33
  end
16
34
 
35
+ ##
36
+ # Produces a random sound made by a dog
37
+ #
38
+ # @return [String]
39
+ #
40
+ # @example
41
+ # Faker::Creature::Dog.sound #=> "woof woof"
42
+ #
43
+ # @faker.version 1.9.2
17
44
  def sound
18
45
  fetch('creature.dog.sound')
19
46
  end
20
47
 
48
+ ##
49
+ # Produces a random dog meme phrase
50
+ #
51
+ # @return [String]
52
+ #
53
+ # @example
54
+ # Faker::Creature::Dog.meme_phrase #=> "smol pupperino"
55
+ #
56
+ # @faker.version 1.9.2
21
57
  def meme_phrase
22
58
  fetch('creature.dog.meme_phrase')
23
59
  end
24
60
 
61
+ ##
62
+ # Produces a random dog age
63
+ #
64
+ # @return [String]
65
+ #
66
+ # @example
67
+ # Faker::Creature::Dog.age #=> "puppy"
68
+ #
69
+ # @faker.version 1.9.2
25
70
  def age
26
71
  fetch('creature.dog.age')
27
72
  end
28
73
 
74
+ ##
75
+ # Produces a random gender
76
+ #
77
+ # @return [String]
78
+ #
79
+ # @example
80
+ # Faker::Creature::Dog.gender #=> "Female"
81
+ #
82
+ # @faker.version 1.9.2
29
83
  def gender
30
84
  Faker::Gender.binary_type
31
85
  end
32
86
 
87
+ ##
88
+ # Produces a random coat length
89
+ #
90
+ # @return [String]
91
+ #
92
+ # @example
93
+ # Faker::Creature::Dog.coat_length #=> "short"
94
+ #
95
+ # @faker.version 1.9.2
33
96
  def coat_length
34
97
  fetch('creature.dog.coat_length')
35
98
  end
36
99
 
100
+ ##
101
+ # Produces a random size of a dog
102
+ #
103
+ # @return [String]
104
+ #
105
+ # @example
106
+ # Faker::Creature::Dog.size #=> "small"
107
+ #
108
+ # @faker.version 1.9.2
37
109
  def size
38
110
  fetch('creature.dog.size')
39
111
  end
@@ -6,10 +6,28 @@ module Faker
6
6
  flexible :horse
7
7
 
8
8
  class << self
9
+ ##
10
+ # Produces a random name for a horse
11
+ #
12
+ # @return [String]
13
+ #
14
+ # @example
15
+ # Faker::Creature::Horse.name #=> "Noir"
16
+ #
17
+ # @faker.version 1.9.2
9
18
  def name
10
19
  fetch('creature.horse.name')
11
20
  end
12
21
 
22
+ ##
23
+ # Produces a random horse breed
24
+ #
25
+ # @return [String]
26
+ #
27
+ # @example
28
+ # Faker::Creature::Horse.breed #=> "Spanish Barb see Barb Horse"
29
+ #
30
+ # @faker.version 1.9.2
13
31
  def breed
14
32
  fetch('creature.horse.breed')
15
33
  end
@@ -2,9 +2,23 @@
2
2
 
3
3
  module Faker
4
4
  class Alphanumeric < Base
5
+ ##
6
+ # List of characters allowed for alphanumeric strings
7
+ # @private
5
8
  ALPHANUMS = LLetters + Numbers
6
9
 
7
10
  class << self
11
+ ##
12
+ # Produces a random string of alphabetic characters (no digits)
13
+ #
14
+ # @param number [Integer] The length of the string to generate
15
+ #
16
+ # @return [String]
17
+ #
18
+ # @example
19
+ # Faker::Alphanumeric.alpha(number: 10) #=> "zlvubkrwga"
20
+ #
21
+ # @faker.version 1.9.2
8
22
  def alpha(legacy_number = NOT_GIVEN, number: 32)
9
23
  warn_for_deprecated_arguments do |keywords|
10
24
  keywords << :number if legacy_number != NOT_GIVEN
@@ -18,15 +32,18 @@ module Faker
18
32
  ##
19
33
  # Produces a random string of alphanumeric characters
20
34
  #
21
- # @param [Integer] number
22
- # @param [Integer] min_alpha
23
- # @param [Integer] min_numeric
35
+ # @param number [Integer] The number of characters to generate
36
+ # @param min_alpha [Integer] The minimum number of alphabetic to add to the string
37
+ # @param min_numeric [Integer] The minimum number of numbers to add to the string
24
38
  #
25
39
  # @return [String]
26
40
  #
27
- # @example Faker::Alphanumeric.alphanumeric(number: 10) #=> "3yfq2phxtb"
28
- # @example Faker::Alphanumeric.alphanumeric(number: 10, min_alpha: 3) #=> "3yfq2phxtb"
29
- # @example Faker::Alphanumeric.alphanumeric(number: 10, min_alpha: 3, min_numeric: 3) #=> "3yfq2phx8b"
41
+ # @example
42
+ # Faker::Alphanumeric.alphanumeric(number: 10) #=> "3yfq2phxtb"
43
+ # @example
44
+ # Faker::Alphanumeric.alphanumeric(number: 10, min_alpha: 3) #=> "3yfq2phxtb"
45
+ # @example
46
+ # Faker::Alphanumeric.alphanumeric(number: 10, min_alpha: 3, min_numeric: 3) #=> "3yfq2phx8b"
30
47
  #
31
48
  # @faker.version 2.1.3
32
49
  def alphanumeric(legacy_number = NOT_GIVEN, number: 32, min_alpha: 0, min_numeric: 0)
@@ -3,19 +3,65 @@
3
3
  module Faker
4
4
  class App < Base
5
5
  class << self
6
+ ##
7
+ # Produces an app name.
8
+ #
9
+ # @return [String]
10
+ #
11
+ # @example
12
+ # Faker::App.name #=> "Treeflex"
13
+ #
14
+ # @faker.version 1.4.3
6
15
  def name
7
16
  fetch('app.name')
8
17
  end
9
18
 
19
+ ##
20
+ # Produces a version string.
21
+ #
22
+ # @return [String]
23
+ #
24
+ # @example
25
+ # Faker::App.version #=> "1.85"
26
+ #
27
+ # @faker.version 1.4.3
10
28
  def version
11
29
  parse('app.version')
12
30
  end
13
31
 
32
+ ##
33
+ # Produces the name of an app's author.
34
+ #
35
+ # @return [String]
36
+ #
37
+ # @example
38
+ # Faker::App.author #=> "Daphne Swift"
39
+ #
40
+ # @faker.version 1.4.3
14
41
  def author
15
42
  parse('app.author')
16
43
  end
17
44
 
18
45
  # rubocop:disable Metrics/ParameterLists
46
+
47
+ ##
48
+ # Produces a String representing a semantic version identifier.
49
+ #
50
+ # @param major [Integer, Range] An integer to use or a range to pick the integer from.
51
+ # @param minor [Integer, Range] An integer to use or a range to pick the integer from.
52
+ # @param patch [Integer, Range] An integer to use or a range to pick the integer from.
53
+ # @return [String]
54
+ #
55
+ # @example
56
+ # Faker::App.semantic_version #=> "3.2.5"
57
+ # @example
58
+ # Faker::App.semantic_version(major: 42) #=> "42.5.2"
59
+ # @example
60
+ # Faker::App.semantic_version(minor: 100..101) #=> "42.100.4"
61
+ # @example
62
+ # Faker::App.semantic_version(patch: 5..6) #=> "7.2.6"
63
+ #
64
+ # @faker.version 1.4.3
19
65
  def semantic_version(legacy_major = NOT_GIVEN, legacy_minor = NOT_GIVEN, legacy_patch = NOT_GIVEN, major: 0..9, minor: 0..9, patch: 1..9)
20
66
  # rubocop:enable Metrics/ParameterLists
21
67
  warn_for_deprecated_arguments do |keywords|
@@ -3,10 +3,28 @@
3
3
  module Faker
4
4
  class Appliance < Base
5
5
  class << self
6
+ ##
7
+ # Produces the name of an appliance brand.
8
+ #
9
+ # @return [String]
10
+ #
11
+ # @example
12
+ # Faker::Appliance.brand #=> "Bosch"
13
+ #
14
+ # @faker.version 1.9.0
6
15
  def brand
7
16
  fetch('appliance.brand')
8
17
  end
9
18
 
19
+ ##
20
+ # Produces the name of a type of appliance equipment.
21
+ #
22
+ # @return [String]
23
+ #
24
+ # @example
25
+ # Faker::Appliance.equipment #=> "Appliance plug"
26
+ #
27
+ # @faker.version 1.9.0
10
28
  def equipment
11
29
  fetch('appliance.equipment')
12
30
  end
@@ -3,6 +3,15 @@
3
3
  module Faker
4
4
  class Artist < Base
5
5
  class << self
6
+ ##
7
+ # Produces the name of an artist.
8
+ #
9
+ # @return [String]
10
+ #
11
+ # @example
12
+ # Faker::Artist.name #=> "Michelangelo"
13
+ #
14
+ # @faker.version 1.8.8
6
15
  def name
7
16
  fetch('artist.names')
8
17
  end
@@ -3,9 +3,41 @@
3
3
  module Faker
4
4
  class Avatar < Base
5
5
  class << self
6
+ # @private
6
7
  SUPPORTED_FORMATS = %w[png jpg bmp].freeze
7
8
 
8
9
  # rubocop:disable Metrics/ParameterLists
10
+
11
+ ##
12
+ # Produces a URL for an avatar from robohash.org
13
+ #
14
+ # @param slug [String, nil]
15
+ # @param size [String] image size in pixels, in the format of 'AxB'
16
+ # @param format [String] The image file format
17
+ # @param set [String] The avatar set to use
18
+ # @param bgset [String, nil] The background set to use
19
+ # @return [String] A robohash.org URL
20
+ #
21
+ # @example
22
+ # Faker::Avatar.image
23
+ # #=> "https://robohash.org/sitsequiquia.png?size=300x300&set=set1"
24
+ # @example
25
+ # Faker::Avatar.image(slug: "my-own-slug")
26
+ # #=> "https://robohash.org/my-own-slug.png?size=300x300&set=set1"
27
+ # @example
28
+ # Faker::Avatar.image(slug: "my-own-slug", size: "50x50")
29
+ # #=> "https://robohash.org/my-own-slug.png?size=50x50&set=set1"
30
+ # @example
31
+ # Faker::Avatar.image(slug: "my-own-slug", size: "50x50", format: "jpg")
32
+ # #=> "https://robohash.org/my-own-slug.jpg?size=50x50&set=set1"
33
+ # @example
34
+ # Faker::Avatar.image(slug: "my-own-slug", size: "50x50", format: "bmp")
35
+ # #=> "https://robohash.org/my-own-slug.bmp?size=50x50&set=set1"
36
+ # @example
37
+ # Faker::Avatar.image(slug: "my-own-slug", size: "50x50", format: "bmp", set: "set1", bgset: "bg1")
38
+ # #=> "https://robohash.org/my-own-slug.bmp?size=50x50&set=set1&bgset=bg1"
39
+ #
40
+ # @faker.version 1.4.3
9
41
  def image(legacy_slug = NOT_GIVEN, legacy_size = NOT_GIVEN, legacy_format = NOT_GIVEN, legacy_set = NOT_GIVEN, legacy_bgset = NOT_GIVEN, slug: nil, size: '300x300', format: 'png', set: 'set1', bgset: nil)
10
42
  # rubocop:enable Metrics/ParameterLists
11
43
  warn_for_deprecated_arguments do |keywords|
@@ -3,11 +3,22 @@
3
3
  module Faker
4
4
  class Boolean < Base
5
5
  class << self
6
+ ##
7
+ # Produces a boolean
8
+ #
9
+ # @param true_ratio [Float] The likelihood (as a float, out of 1.0) for the method to return `true`.
10
+ # @return [Boolean]
11
+ #
12
+ # @example
13
+ # Faker::Boolean.boolean #=> true
14
+ # @example
15
+ # Faker::Boolean.boolean(true_ratio: 0.2) #=> false
16
+ #
17
+ # @faker.version 1.6.2
6
18
  def boolean(legacy_true_ratio = NOT_GIVEN, true_ratio: 0.5)
7
19
  warn_for_deprecated_arguments do |keywords|
8
20
  keywords << :true_ratio if legacy_true_ratio != NOT_GIVEN
9
21
  end
10
-
11
22
  (rand < true_ratio)
12
23
  end
13
24
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Faker
4
4
  class ChuckNorris < Base
5
- flexible :name
5
+ flexible :chuck_norris
6
6
 
7
7
  class << self
8
8
  # from: https://github.com/jenkinsci/chucknorris-plugin/blob/master/src/main/java/hudson/plugins/chucknorris/FactGenerator.java
@@ -3,6 +3,18 @@
3
3
  module Faker
4
4
  class Date < Base
5
5
  class << self
6
+ ##
7
+ # Produce a random date between two dates.
8
+ #
9
+ # @param from [Date] The start of the usable date range.
10
+ # @param to [Date] The end of the usable date range.
11
+ # @return [Date]
12
+ #
13
+ # @example
14
+ # Faker::Date.between(from: 2.days.ago, to: Date.today)
15
+ # #=> #<Date: 2014-09-24>
16
+ #
17
+ # @faker.version 1.0.0
6
18
  def between(legacy_from = NOT_GIVEN, legacy_to = NOT_GIVEN, from:, to:)
7
19
  warn_for_deprecated_arguments do |keywords|
8
20
  keywords << :from if legacy_from != NOT_GIVEN
@@ -16,8 +28,21 @@ module Faker
16
28
  end
17
29
 
18
30
  # rubocop:disable Metrics/ParameterLists
31
+
32
+ ##
33
+ # Produce a random date between two dates.
34
+ #
35
+ # @param from [Date] The start of the usable date range.
36
+ # @param to [Date] The end of the usable date range.
37
+ # @param excepted [Date] A date to exclude.
38
+ # @return [Date]
39
+ #
40
+ # @example
41
+ # Faker::Date.between_except(from: 1.year.ago, to: 1.year.from_now, excepted: Date.today)
42
+ # #=> #<Date: 2014-10-03>
43
+ #
44
+ # @faker.version 1.6.2
19
45
  def between_except(legacy_from = NOT_GIVEN, legacy_to = NOT_GIVEN, legacy_excepted = NOT_GIVEN, from:, to:, excepted:)
20
- # rubocop:enable Metrics/ParameterLists
21
46
  warn_for_deprecated_arguments do |keywords|
22
47
  keywords << :from if legacy_from != NOT_GIVEN
23
48
  end
@@ -37,7 +62,18 @@ module Faker
37
62
  break date.to_date if date != excepted
38
63
  end
39
64
  end
40
-
65
+ # rubocop:enable Metrics/ParameterLists
66
+
67
+ ##
68
+ # Produce a random date in the future (up to N days).
69
+ #
70
+ # @param days [Integer] The maximum number of days to go into the future.
71
+ # @return [Date]
72
+ #
73
+ # @example
74
+ # Faker::Date.forward(days: 23) #=> #<Date: 2014-10-03>
75
+ #
76
+ # @faker.version 1.0.0
41
77
  def forward(legacy_days = NOT_GIVEN, days: 365)
42
78
  warn_for_deprecated_arguments do |keywords|
43
79
  keywords << :days if legacy_days != NOT_GIVEN
@@ -49,6 +85,16 @@ module Faker
49
85
  between(from: from, to: to).to_date
50
86
  end
51
87
 
88
+ ##
89
+ # Produce a random date in the past (up to N days).
90
+ #
91
+ # @param days [Integer] The maximum number of days to go into the past.
92
+ # @return [Date]
93
+ #
94
+ # @example
95
+ # Faker::Date.backward(days: 14) #=> #<Date: 2019-09-12>
96
+ #
97
+ # @faker.version 1.0.0
52
98
  def backward(legacy_days = NOT_GIVEN, days: 365)
53
99
  warn_for_deprecated_arguments do |keywords|
54
100
  keywords << :days if legacy_days != NOT_GIVEN
@@ -60,6 +106,17 @@ module Faker
60
106
  between(from: from, to: to).to_date
61
107
  end
62
108
 
109
+ ##
110
+ # Produce a random date in the past (up to N days).
111
+ #
112
+ # @param min_age [Integer] The minimum age that the birthday would imply.
113
+ # @param max_age [Integer] The maximum age that the birthday would imply.
114
+ # @return [Date]
115
+ #
116
+ # @example
117
+ # Faker::Date.birthday(min_age: 18, max_age: 65) #=> #<Date: 1986-03-28>
118
+ #
119
+ # @faker.version 1.4.3
63
120
  def birthday(legacy_min_age = NOT_GIVEN, legacy_max_age = NOT_GIVEN, min_age: 18, max_age: 65)
64
121
  warn_for_deprecated_arguments do |keywords|
65
122
  keywords << :min_age if legacy_min_age != NOT_GIVEN
@@ -76,6 +133,30 @@ module Faker
76
133
  between(from: from, to: to).to_date
77
134
  end
78
135
 
136
+ ##
137
+ # Produces a date in the year and/or month specified.
138
+ #
139
+ # @param month [Integer] represents the month of the date
140
+ # @param year [Integer] represents the year of the date
141
+ # @return [Date]
142
+ #
143
+ # @example
144
+ # Faker::Date.in_date_period #=> #<Date: 2019-09-01>
145
+ #
146
+ # @example
147
+ # Faker::Date.in_date_period(year: 2018, month: 2) #=> #<Date: 2018-02-26>
148
+ #
149
+ # @example
150
+ # Faker::Date.in_date_period(month: 2) #=> #<Date: 2019-02-26>
151
+ #
152
+ # @faker.version next
153
+ def in_date_period(month: nil, year: ::Date.today.year)
154
+ from = ::Date.new(year, month || 1, 1)
155
+ to = ::Date.new(year, month || 12, ::Date.civil(year, month || 12, -1).day)
156
+
157
+ between(from: from, to: to).to_date
158
+ end
159
+
79
160
  private
80
161
 
81
162
  def birthday_date(date, age)