faker 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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +1417 -0
- data/History.md +176 -0
- data/License.txt +20 -0
- data/README.md +367 -0
- data/bin/faker +5 -0
- data/lib/faker.rb +308 -0
- data/lib/faker/blockchain/aeternity.rb +70 -0
- data/lib/faker/blockchain/bitcoin.rb +60 -0
- data/lib/faker/blockchain/ethereum.rb +26 -0
- data/lib/faker/blockchain/tezos.rb +107 -0
- data/lib/faker/books/book.rb +61 -0
- data/lib/faker/books/culture_series.rb +83 -0
- data/lib/faker/books/dune.rb +119 -0
- data/lib/faker/books/lovecraft.rb +276 -0
- data/lib/faker/creature/animal.rb +22 -0
- data/lib/faker/creature/cat.rb +50 -0
- data/lib/faker/creature/dog.rb +115 -0
- data/lib/faker/creature/horse.rb +37 -0
- data/lib/faker/default/address.rb +123 -0
- data/lib/faker/default/alphanumeric.rb +73 -0
- data/lib/faker/default/ancient.rb +23 -0
- data/lib/faker/default/app.rb +77 -0
- data/lib/faker/default/appliance.rb +33 -0
- data/lib/faker/default/artist.rb +20 -0
- data/lib/faker/default/avatar.rb +60 -0
- data/lib/faker/default/bank.rb +108 -0
- data/lib/faker/default/beer.rb +41 -0
- data/lib/faker/default/boolean.rb +26 -0
- data/lib/faker/default/bossa_nova.rb +15 -0
- data/lib/faker/default/business.rb +23 -0
- data/lib/faker/default/cannabis.rb +45 -0
- data/lib/faker/default/chile_rut.rb +54 -0
- data/lib/faker/default/chuck_norris.rb +14 -0
- data/lib/faker/default/code.rb +201 -0
- data/lib/faker/default/coffee.rb +37 -0
- data/lib/faker/default/coin.rb +15 -0
- data/lib/faker/default/color.rb +32 -0
- data/lib/faker/default/commerce.rb +80 -0
- data/lib/faker/default/company.rb +264 -0
- data/lib/faker/default/compass.rb +67 -0
- data/lib/faker/default/construction.rb +29 -0
- data/lib/faker/default/cosmere.rb +48 -0
- data/lib/faker/default/crypto.rb +21 -0
- data/lib/faker/default/crypto_coin.rb +49 -0
- data/lib/faker/default/currency.rb +19 -0
- data/lib/faker/default/date.rb +182 -0
- data/lib/faker/default/dc_comics.rb +25 -0
- data/lib/faker/default/demographic.rb +41 -0
- data/lib/faker/default/dessert.rb +48 -0
- data/lib/faker/default/device.rb +85 -0
- data/lib/faker/default/driving_licence.rb +65 -0
- data/lib/faker/default/educator.rb +35 -0
- data/lib/faker/default/electrical_components.rb +48 -0
- data/lib/faker/default/esport.rb +27 -0
- data/lib/faker/default/file.rb +49 -0
- data/lib/faker/default/fillmurray.rb +23 -0
- data/lib/faker/default/finance.rb +44 -0
- data/lib/faker/default/food.rb +49 -0
- data/lib/faker/default/funny_name.rb +45 -0
- data/lib/faker/default/gender.rb +33 -0
- data/lib/faker/default/greek_philosophers.rb +33 -0
- data/lib/faker/default/hacker.rb +103 -0
- data/lib/faker/default/hipster.rb +97 -0
- data/lib/faker/default/house.rb +33 -0
- data/lib/faker/default/id_number.rb +193 -0
- data/lib/faker/default/industry_segments.rb +61 -0
- data/lib/faker/default/internet.rb +291 -0
- data/lib/faker/default/invoice.rb +109 -0
- data/lib/faker/default/job.rb +25 -0
- data/lib/faker/default/json.rb +87 -0
- data/lib/faker/default/kpop.rb +31 -0
- data/lib/faker/default/lorem.rb +151 -0
- data/lib/faker/default/lorem_flickr.rb +78 -0
- data/lib/faker/default/lorem_pixel.rb +47 -0
- data/lib/faker/default/markdown.rb +84 -0
- data/lib/faker/default/marketing.rb +22 -0
- data/lib/faker/default/measurement.rb +116 -0
- data/lib/faker/default/military.rb +72 -0
- data/lib/faker/default/name.rb +58 -0
- data/lib/faker/default/nation.rb +76 -0
- data/lib/faker/default/nato_phonetic_alphabet.rb +20 -0
- data/lib/faker/default/nhs.rb +38 -0
- data/lib/faker/default/number.rb +274 -0
- data/lib/faker/default/omniauth.rb +413 -0
- data/lib/faker/default/phone_number.rb +54 -0
- data/lib/faker/default/placeholdit.rb +41 -0
- data/lib/faker/default/programming_language.rb +33 -0
- data/lib/faker/default/relationship.rb +46 -0
- data/lib/faker/default/restaurant.rb +63 -0
- data/lib/faker/default/science.rb +46 -0
- data/lib/faker/default/slack_emoji.rb +43 -0
- data/lib/faker/default/source.rb +76 -0
- data/lib/faker/default/south_africa.rb +51 -0
- data/lib/faker/default/space.rb +64 -0
- data/lib/faker/default/string.rb +49 -0
- data/lib/faker/default/stripe.rb +81 -0
- data/lib/faker/default/subscription.rb +70 -0
- data/lib/faker/default/superhero.rb +72 -0
- data/lib/faker/default/team.rb +29 -0
- data/lib/faker/default/time.rb +179 -0
- data/lib/faker/default/twitter.rb +188 -0
- data/lib/faker/default/types.rb +101 -0
- data/lib/faker/default/university.rb +30 -0
- data/lib/faker/default/vehicle.rb +162 -0
- data/lib/faker/default/verb.rb +27 -0
- data/lib/faker/default/world_cup.rb +86 -0
- data/lib/faker/games/dota.rb +80 -0
- data/lib/faker/games/elder_scrolls.rb +113 -0
- data/lib/faker/games/fallout.rb +62 -0
- data/lib/faker/games/game.rb +48 -0
- data/lib/faker/games/half_life.rb +48 -0
- data/lib/faker/games/heroes.rb +48 -0
- data/lib/faker/games/heroes_of_the_storm.rb +61 -0
- data/lib/faker/games/league_of_legends.rb +87 -0
- data/lib/faker/games/myst.rb +74 -0
- data/lib/faker/games/overwatch.rb +48 -0
- data/lib/faker/games/pokemon.rb +48 -0
- data/lib/faker/games/sonic_the_hedgehog.rb +48 -0
- data/lib/faker/games/super_smash_bros.rb +35 -0
- data/lib/faker/games/witcher.rb +87 -0
- data/lib/faker/games/world_of_warcraft.rb +35 -0
- data/lib/faker/games/zelda.rb +62 -0
- data/lib/faker/japanese_media/dragon_ball.rb +22 -0
- data/lib/faker/japanese_media/one_piece.rb +87 -0
- data/lib/faker/japanese_media/sword_art_online.rb +61 -0
- data/lib/faker/movies/back_to_the_future.rb +49 -0
- data/lib/faker/movies/ghostbusters.rb +49 -0
- data/lib/faker/movies/harry_potter.rb +87 -0
- data/lib/faker/movies/hitchhikers_guide_to_the_galaxy.rb +106 -0
- data/lib/faker/movies/hobbit.rb +62 -0
- data/lib/faker/movies/lebowski.rb +48 -0
- data/lib/faker/movies/lord_of_the_rings.rb +49 -0
- data/lib/faker/movies/movie.rb +20 -0
- data/lib/faker/movies/princess_bride.rb +36 -0
- data/lib/faker/movies/star_wars.rb +201 -0
- data/lib/faker/movies/v_for_vendetta.rb +50 -0
- data/lib/faker/music/grateful_dead.rb +37 -0
- data/lib/faker/music/music.rb +47 -0
- data/lib/faker/music/opera.rb +26 -0
- data/lib/faker/music/phish.rb +22 -0
- data/lib/faker/music/rock_band.rb +22 -0
- data/lib/faker/music/umphreys_mcgee.rb +22 -0
- data/lib/faker/quotes/quote.rb +32 -0
- data/lib/faker/quotes/shakespeare.rb +41 -0
- data/lib/faker/sports/basketball.rb +61 -0
- data/lib/faker/sports/football.rb +74 -0
- data/lib/faker/tv_shows/aqua_teen_hunger_force.rb +24 -0
- data/lib/faker/tv_shows/bojack_horseman.rb +51 -0
- data/lib/faker/tv_shows/breaking_bad.rb +37 -0
- data/lib/faker/tv_shows/buffy.rb +76 -0
- data/lib/faker/tv_shows/community.rb +38 -0
- data/lib/faker/tv_shows/dr_who.rb +115 -0
- data/lib/faker/tv_shows/dumb_and_dumber.rb +51 -0
- data/lib/faker/tv_shows/family_guy.rb +51 -0
- data/lib/faker/tv_shows/friends.rb +50 -0
- data/lib/faker/tv_shows/game_of_thrones.rb +77 -0
- data/lib/faker/tv_shows/hey_arnold.rb +50 -0
- data/lib/faker/tv_shows/how_i_met_your_mother.rb +64 -0
- data/lib/faker/tv_shows/michael_scott.rb +26 -0
- data/lib/faker/tv_shows/new_girl.rb +38 -0
- data/lib/faker/tv_shows/parks_and_rec.rb +37 -0
- data/lib/faker/tv_shows/rick_and_morty.rb +51 -0
- data/lib/faker/tv_shows/ru_paul.rb +37 -0
- data/lib/faker/tv_shows/seinfeld.rb +51 -0
- data/lib/faker/tv_shows/silicon_valley.rb +118 -0
- data/lib/faker/tv_shows/simpsons.rb +51 -0
- data/lib/faker/tv_shows/south_park.rb +38 -0
- data/lib/faker/tv_shows/star_trek.rb +63 -0
- data/lib/faker/tv_shows/stargate.rb +51 -0
- data/lib/faker/tv_shows/stranger_things.rb +38 -0
- data/lib/faker/tv_shows/the_expanse.rb +63 -0
- data/lib/faker/tv_shows/the_fresh_prince_of_bel_air.rb +51 -0
- data/lib/faker/tv_shows/the_it_crowd.rb +64 -0
- data/lib/faker/tv_shows/the_thick_of_it.rb +51 -0
- data/lib/faker/tv_shows/twin_peaks.rb +51 -0
- data/lib/faker/tv_shows/venture_bros.rb +65 -0
- data/lib/faker/version.rb +5 -0
- data/lib/helpers/base58.rb +22 -0
- data/lib/helpers/char.rb +66 -0
- data/lib/helpers/unique_generator.rb +56 -0
- data/lib/locales/README.md +40 -0
- data/lib/locales/ar.yml +102 -0
- data/lib/locales/bg.yml +44 -0
- data/lib/locales/ca-CAT.yml +24 -0
- data/lib/locales/ca.yml +31 -0
- data/lib/locales/da-DK.yml +73 -0
- data/lib/locales/de-AT.yml +56 -0
- data/lib/locales/de-CH.yml +19 -0
- data/lib/locales/de.yml +174 -0
- data/lib/locales/ee.yml +61 -0
- data/lib/locales/en-AU.yml +28 -0
- data/lib/locales/en-BORK.yml +4 -0
- data/lib/locales/en-CA.yml +37 -0
- data/lib/locales/en-GB.yml +14 -0
- data/lib/locales/en-IND.yml +25 -0
- data/lib/locales/en-MS.yml +47 -0
- data/lib/locales/en-NEP.yml +49 -0
- data/lib/locales/en-NG.yml +77 -0
- data/lib/locales/en-NZ.yml +39 -0
- data/lib/locales/en-PAK.yml +18 -0
- data/lib/locales/en-SG.yml +35 -0
- data/lib/locales/en-TH.yml +360 -0
- data/lib/locales/en-UG.yml +128 -0
- data/lib/locales/en-US.yml +103 -0
- data/lib/locales/en-ZA.yml +148 -0
- data/lib/locales/en-au-ocker.yml +33 -0
- data/lib/locales/en.yml +11 -0
- data/lib/locales/en/README.md +13 -0
- data/lib/locales/en/address.yml +581 -0
- data/lib/locales/en/ancient.yml +7 -0
- data/lib/locales/en/animal.yml +6 -0
- data/lib/locales/en/app.yml +8 -0
- data/lib/locales/en/appliance.yml +5 -0
- data/lib/locales/en/aqua_teen_hunger_force.yml +4 -0
- data/lib/locales/en/artist.yml +4 -0
- data/lib/locales/en/back_to_the_future.yml +120 -0
- data/lib/locales/en/bank.yml +302 -0
- data/lib/locales/en/basketball.yml +99 -0
- data/lib/locales/en/beer.yml +9 -0
- data/lib/locales/en/bojack_horseman.yml +6 -0
- data/lib/locales/en/book.yml +7 -0
- data/lib/locales/en/bossa_nova.yml +6 -0
- data/lib/locales/en/breaking_bad.yml +28 -0
- data/lib/locales/en/buffy.yml +260 -0
- data/lib/locales/en/business.yml +5 -0
- data/lib/locales/en/cannabis.yml +13 -0
- data/lib/locales/en/cat.yml +7 -0
- data/lib/locales/en/chuck_norris.yml +82 -0
- data/lib/locales/en/code.yml +4 -0
- data/lib/locales/en/coffee.yml +31 -0
- data/lib/locales/en/coin.yml +6 -0
- data/lib/locales/en/color.yml +4 -0
- data/lib/locales/en/commerce.yml +11 -0
- data/lib/locales/en/community.yml +33 -0
- data/lib/locales/en/company.yml +22 -0
- data/lib/locales/en/compass.yml +34 -0
- data/lib/locales/en/construction.yml +425 -0
- data/lib/locales/en/cosmere.yml +57 -0
- data/lib/locales/en/crypto_coin.yml +25 -0
- data/lib/locales/en/culture_series.yml +307 -0
- data/lib/locales/en/currency.yml +6 -0
- data/lib/locales/en/dc_comics.yml +52 -0
- data/lib/locales/en/demographic.yml +8 -0
- data/lib/locales/en/dessert.yml +6 -0
- data/lib/locales/en/device.yml +7 -0
- data/lib/locales/en/dog.yml +11 -0
- data/lib/locales/en/dota.yml +105 -0
- data/lib/locales/en/dr_who.yml +96 -0
- data/lib/locales/en/dragon_ball.yml +4 -0
- data/lib/locales/en/dumb_and_dumber.yml +59 -0
- data/lib/locales/en/dune.yml +159 -0
- data/lib/locales/en/educator.yml +11 -0
- data/lib/locales/en/elder_scrolls.yml +11 -0
- data/lib/locales/en/electrical_components.yml +6 -0
- data/lib/locales/en/esport.yml +8 -0
- data/lib/locales/en/fallout.yml +137 -0
- data/lib/locales/en/family_guy.yml +7 -0
- data/lib/locales/en/file.yml +5 -0
- data/lib/locales/en/finance.yml +113 -0
- data/lib/locales/en/food.yml +13 -0
- data/lib/locales/en/football.yml +8 -0
- data/lib/locales/en/fresh_prince_of_bel_air.yml +73 -0
- data/lib/locales/en/friends.yml +6 -0
- data/lib/locales/en/funny_name.yml +4 -0
- data/lib/locales/en/game.yml +283 -0
- data/lib/locales/en/game_of_thrones.yml +8 -0
- data/lib/locales/en/gender.yml +5 -0
- data/lib/locales/en/ghostbusters.yml +91 -0
- data/lib/locales/en/grateful_dead.yml +48 -0
- data/lib/locales/en/greek_philosophers.yml +26 -0
- data/lib/locales/en/hacker.yml +8 -0
- data/lib/locales/en/half_life.yml +7 -0
- data/lib/locales/en/harry_potter.yml +9 -0
- data/lib/locales/en/heroes.yml +6 -0
- data/lib/locales/en/heroes_of_the_storm.yml +7 -0
- data/lib/locales/en/hey_arnold.yml +24 -0
- data/lib/locales/en/hipster.yml +4 -0
- data/lib/locales/en/hitchhikers_guide_to_the_galaxy.yml +45 -0
- data/lib/locales/en/hobbit.yml +19 -0
- data/lib/locales/en/horse.yml +6 -0
- data/lib/locales/en/house.yml +5 -0
- data/lib/locales/en/how_i_met_your_mother.yml +28 -0
- data/lib/locales/en/id_number.yml +5 -0
- data/lib/locales/en/industry_segments.yml +7 -0
- data/lib/locales/en/internet.yml +21 -0
- data/lib/locales/en/invoice.yml +6 -0
- data/lib/locales/en/job.yml +15 -0
- data/lib/locales/en/kpop.yml +83 -0
- data/lib/locales/en/league_of_legends.yml +10 -0
- data/lib/locales/en/lebowski.yml +43 -0
- data/lib/locales/en/lord_of_the_rings.yml +6 -0
- data/lib/locales/en/lorem.yml +11 -0
- data/lib/locales/en/lovecraft.yml +9 -0
- data/lib/locales/en/markdown.yml +5 -0
- data/lib/locales/en/marketing.yml +4 -0
- data/lib/locales/en/measurement.yml +11 -0
- data/lib/locales/en/michael_scott.yml +45 -0
- data/lib/locales/en/military.yml +8 -0
- data/lib/locales/en/movie.yml +5 -0
- data/lib/locales/en/music.yml +32 -0
- data/lib/locales/en/myst.yml +48 -0
- data/lib/locales/en/name.yml +25 -0
- data/lib/locales/en/nation.yml +11 -0
- data/lib/locales/en/nato_phonetic_alphabet.yml +4 -0
- data/lib/locales/en/new_girl.yml +40 -0
- data/lib/locales/en/one_piece.yml +9 -0
- data/lib/locales/en/opera.yml +172 -0
- data/lib/locales/en/overwatch.yml +41 -0
- data/lib/locales/en/parks_and_rec.yml +7 -0
- data/lib/locales/en/phish.yml +4 -0
- data/lib/locales/en/phone_number.yml +7 -0
- data/lib/locales/en/pokemon.yml +8 -0
- data/lib/locales/en/princess_bride.yml +5 -0
- data/lib/locales/en/programming_language.yml +6 -0
- data/lib/locales/en/quote.yml +166 -0
- data/lib/locales/en/relationship.yml +10 -0
- data/lib/locales/en/restaurant.yml +129 -0
- data/lib/locales/en/rick_and_morty.yml +6 -0
- data/lib/locales/en/rock_band.yml +4 -0
- data/lib/locales/en/rupaul.yml +125 -0
- data/lib/locales/en/science.yml +6 -0
- data/lib/locales/en/seinfeld.yml +6 -0
- data/lib/locales/en/shakespeare.yml +56 -0
- data/lib/locales/en/silicon_valley.yml +53 -0
- data/lib/locales/en/simpsons.yml +26 -0
- data/lib/locales/en/slack_emoji.yml +20 -0
- data/lib/locales/en/sonic_the_hedgehog.yml +410 -0
- data/lib/locales/en/source.yml +16 -0
- data/lib/locales/en/south_park.yml +5 -0
- data/lib/locales/en/space.yml +17 -0
- data/lib/locales/en/star_trek.yml +7 -0
- data/lib/locales/en/star_wars.yml +258 -0
- data/lib/locales/en/stargate.yml +21 -0
- data/lib/locales/en/stranger_thing.yml +36 -0
- data/lib/locales/en/stripe.yml +42 -0
- data/lib/locales/en/subscription.yml +8 -0
- data/lib/locales/en/super_smash_bros.yml +206 -0
- data/lib/locales/en/superhero.yml +12 -0
- data/lib/locales/en/sword_art_online.yml +334 -0
- data/lib/locales/en/team.yml +8 -0
- data/lib/locales/en/the_expanse.yml +7 -0
- data/lib/locales/en/the_it_crowd.yml +155 -0
- data/lib/locales/en/the_thick_of_it.yml +6 -0
- data/lib/locales/en/twin_peaks.yml +6 -0
- data/lib/locales/en/umphreys_mcgee.yml +4 -0
- data/lib/locales/en/university.yml +10 -0
- data/lib/locales/en/v_for_vendetta.yml +163 -0
- data/lib/locales/en/vehicle.yml +80 -0
- data/lib/locales/en/venture_bros.yml +7 -0
- data/lib/locales/en/verbs.yml +8 -0
- data/lib/locales/en/witcher.yml +11 -0
- data/lib/locales/en/world_cup.yml +271 -0
- data/lib/locales/en/world_of_warcraft.yml +8 -0
- data/lib/locales/en/yoda.yml +4 -0
- data/lib/locales/en/zelda.yml +8 -0
- data/lib/locales/es-MX.yml +102 -0
- data/lib/locales/es.yml +94 -0
- data/lib/locales/fa.yml +10 -0
- data/lib/locales/fi-FI.yml +35 -0
- data/lib/locales/fr-CA.yml +90 -0
- data/lib/locales/fr-CH.yml +78 -0
- data/lib/locales/fr.yml +114 -0
- data/lib/locales/he.yml +27 -0
- data/lib/locales/hy.yml +416 -0
- data/lib/locales/id.yml +23 -0
- data/lib/locales/it.yml +70 -0
- data/lib/locales/ja.yml +101 -0
- data/lib/locales/ko.yml +40 -0
- data/lib/locales/lv.yml +55 -0
- data/lib/locales/nb-NO.yml +62 -0
- data/lib/locales/nl.yml +92 -0
- data/lib/locales/no.yml +7 -0
- data/lib/locales/pl.yml +77 -0
- data/lib/locales/pt-BR.yml +697 -0
- data/lib/locales/pt.yml +66 -0
- data/lib/locales/ru.yml +76 -0
- data/lib/locales/sk.yml +78 -0
- data/lib/locales/sv.yml +81 -0
- data/lib/locales/th.yml +380 -0
- data/lib/locales/tr.yml +40 -0
- data/lib/locales/uk.yml +86 -0
- data/lib/locales/vi.yml +68 -0
- data/lib/locales/zh-CN.yml +56 -0
- data/lib/locales/zh-TW.yml +29 -0
- metadata +568 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Faker
|
|
4
|
+
class Food < Base
|
|
5
|
+
flexible :food
|
|
6
|
+
|
|
7
|
+
class << self
|
|
8
|
+
# Retrieves a typical dish from each country
|
|
9
|
+
def dish
|
|
10
|
+
fetch('food.dish')
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Retrieves a description about some dish
|
|
14
|
+
def description
|
|
15
|
+
fetch('food.descriptions')
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Retrieves an ingredient
|
|
19
|
+
def ingredient
|
|
20
|
+
fetch('food.ingredients')
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Retrieves a fruit
|
|
24
|
+
def fruits
|
|
25
|
+
fetch('food.fruits')
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Retrieves a vegetable
|
|
29
|
+
def vegetables
|
|
30
|
+
fetch('food.vegetables')
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Retrieves some random spice
|
|
34
|
+
def spice
|
|
35
|
+
fetch('food.spices')
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Retrieves cooking measures
|
|
39
|
+
def measurement
|
|
40
|
+
fetch('food.measurement_sizes') + ' ' + fetch('food.measurements')
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Retrieves metric mesurements
|
|
44
|
+
def metric_measurement
|
|
45
|
+
fetch('food.metric_measurements')
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Faker
|
|
4
|
+
class FunnyName < Base
|
|
5
|
+
flexible :funny_name
|
|
6
|
+
|
|
7
|
+
class << self
|
|
8
|
+
def name
|
|
9
|
+
fetch('funny_name.name')
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def two_word_name
|
|
13
|
+
two_word_names = fetch_all('funny_name.name').select do |name|
|
|
14
|
+
name.count(' ') == 1
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
sample(two_word_names)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def three_word_name
|
|
21
|
+
three_word_names = fetch_all('funny_name.name').select do |name|
|
|
22
|
+
name.count(' ') == 2
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
sample(three_word_names)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def four_word_name
|
|
29
|
+
four_word_names = fetch_all('funny_name.name').select do |name|
|
|
30
|
+
name.count(' ') == 3
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
sample(four_word_names)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def name_with_initial
|
|
37
|
+
names_with_initials = fetch_all('funny_name.name').select do |name|
|
|
38
|
+
name.count('.').positive?
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
sample(names_with_initials)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Faker
|
|
4
|
+
class Gender < Base
|
|
5
|
+
class << self
|
|
6
|
+
##
|
|
7
|
+
# Produces the name of a gender identity.
|
|
8
|
+
#
|
|
9
|
+
# @return [String]
|
|
10
|
+
#
|
|
11
|
+
# @example
|
|
12
|
+
# Faker::Gender.type #=> "Non-binary"
|
|
13
|
+
#
|
|
14
|
+
# @faker.version 1.9.0
|
|
15
|
+
def type
|
|
16
|
+
fetch('gender.types')
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
##
|
|
20
|
+
# Produces either 'Male' or 'Female'.
|
|
21
|
+
#
|
|
22
|
+
# @return [String]
|
|
23
|
+
#
|
|
24
|
+
# @example
|
|
25
|
+
# Faker::Gender.binary_type #=> "Female"
|
|
26
|
+
#
|
|
27
|
+
# @faker.version 1.9.0
|
|
28
|
+
def binary_type
|
|
29
|
+
fetch('gender.binary_types')
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Faker
|
|
4
|
+
class GreekPhilosophers < Base
|
|
5
|
+
class << self
|
|
6
|
+
##
|
|
7
|
+
# Produces the name of a Greek philosopher.
|
|
8
|
+
#
|
|
9
|
+
# @return [String]
|
|
10
|
+
#
|
|
11
|
+
# @example
|
|
12
|
+
# Faker::GreekPhilosophers.name #=> "Socrates"
|
|
13
|
+
#
|
|
14
|
+
# @faker.version 1.9.0
|
|
15
|
+
def name
|
|
16
|
+
fetch('greek_philosophers.names')
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
##
|
|
20
|
+
# Produces a quote from a Greek philosopher.
|
|
21
|
+
#
|
|
22
|
+
# @return [String]
|
|
23
|
+
#
|
|
24
|
+
# @example
|
|
25
|
+
# Faker::GreekPhilosophers.quote #=> "Only the educated are free."
|
|
26
|
+
#
|
|
27
|
+
# @faker.version 1.9.0
|
|
28
|
+
def quote
|
|
29
|
+
fetch('greek_philosophers.quotes')
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Faker
|
|
4
|
+
# Port of http://shinytoylabs.com/jargon/
|
|
5
|
+
# Are you having trouble writing tech-savvy dialogue for your latest screenplay?
|
|
6
|
+
# Worry not! Hollywood-grade technical talk is ready to fill out any form where you need to look smart.
|
|
7
|
+
class Hacker < Base
|
|
8
|
+
flexible :hacker
|
|
9
|
+
|
|
10
|
+
class << self
|
|
11
|
+
##
|
|
12
|
+
# Produces something smart.
|
|
13
|
+
#
|
|
14
|
+
# @return [String]
|
|
15
|
+
#
|
|
16
|
+
# @example
|
|
17
|
+
# Faker::Hacker.say_something_smart
|
|
18
|
+
# #=> "Try to compress the SQL interface, maybe it will program the back-end hard drive!"
|
|
19
|
+
#
|
|
20
|
+
# @faker.version 1.4.0
|
|
21
|
+
def say_something_smart
|
|
22
|
+
sample(phrases)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
##
|
|
26
|
+
# Short technical abbreviations.
|
|
27
|
+
#
|
|
28
|
+
# @return [String]
|
|
29
|
+
#
|
|
30
|
+
# @example
|
|
31
|
+
# Faker::Hacker.abbreviation #=> "RAM"
|
|
32
|
+
#
|
|
33
|
+
# @faker.version 1.4.0
|
|
34
|
+
def abbreviation
|
|
35
|
+
fetch('hacker.abbreviation')
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
##
|
|
39
|
+
# Hacker-centric adjectives.
|
|
40
|
+
#
|
|
41
|
+
# @return [String]
|
|
42
|
+
#
|
|
43
|
+
# @example
|
|
44
|
+
# Faker::Hacker.adjective #=> "open-source"
|
|
45
|
+
#
|
|
46
|
+
# @faker.version 1.4.0
|
|
47
|
+
def adjective
|
|
48
|
+
fetch('hacker.adjective')
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
##
|
|
52
|
+
# Only the best hacker-related nouns.
|
|
53
|
+
#
|
|
54
|
+
# @return [String]
|
|
55
|
+
#
|
|
56
|
+
# @example
|
|
57
|
+
# Faker::Hacker.noun #=> "bandwidth"
|
|
58
|
+
#
|
|
59
|
+
# @faker.version 1.4.0
|
|
60
|
+
def noun
|
|
61
|
+
fetch('hacker.noun')
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
##
|
|
65
|
+
# Actions that hackers take.
|
|
66
|
+
#
|
|
67
|
+
# @return [String]
|
|
68
|
+
#
|
|
69
|
+
# @example
|
|
70
|
+
# Faker::Hacker.verb #=> "bypass"
|
|
71
|
+
#
|
|
72
|
+
# @faker.version 1.4.0
|
|
73
|
+
def verb
|
|
74
|
+
fetch('hacker.verb')
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
##
|
|
78
|
+
# Produces a verb that ends with '-ing'.
|
|
79
|
+
#
|
|
80
|
+
# @return [String]
|
|
81
|
+
#
|
|
82
|
+
# @example
|
|
83
|
+
# Faker::Hacker.ingverb #=> "synthesizing"
|
|
84
|
+
#
|
|
85
|
+
# @faker.version 1.4.0
|
|
86
|
+
def ingverb
|
|
87
|
+
fetch('hacker.ingverb')
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# @private
|
|
91
|
+
def phrases
|
|
92
|
+
["If we #{verb} the #{noun}, we can get to the #{abbreviation} #{noun} through the #{adjective} #{abbreviation} #{noun}!",
|
|
93
|
+
"We need to #{verb} the #{adjective} #{abbreviation} #{noun}!",
|
|
94
|
+
"Try to #{verb} the #{abbreviation} #{noun}, maybe it will #{verb} the #{adjective} #{noun}!",
|
|
95
|
+
"You can't #{verb} the #{noun} without #{ingverb} the #{adjective} #{abbreviation} #{noun}!",
|
|
96
|
+
"Use the #{adjective} #{abbreviation} #{noun}, then you can #{verb} the #{adjective} #{noun}!",
|
|
97
|
+
"The #{abbreviation} #{noun} is down, #{verb} the #{adjective} #{noun} so we can #{verb} the #{abbreviation} #{noun}!",
|
|
98
|
+
"#{ingverb} the #{noun} won't do anything, we need to #{verb} the #{adjective} #{abbreviation} #{noun}!".capitalize,
|
|
99
|
+
"I'll #{verb} the #{adjective} #{abbreviation} #{noun}, that should #{noun} the #{abbreviation} #{noun}!"]
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Faker
|
|
4
|
+
class Hipster < Base
|
|
5
|
+
class << self
|
|
6
|
+
def word
|
|
7
|
+
random_word = sample(translate('faker.hipster.words'))
|
|
8
|
+
random_word =~ /\s/ ? word : random_word
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# rubocop:disable Metrics/ParameterLists
|
|
12
|
+
def words(legacy_number = NOT_GIVEN, legacy_supplemental = NOT_GIVEN, legacy_spaces_allowed = NOT_GIVEN, number: 3, supplemental: false, spaces_allowed: false)
|
|
13
|
+
# rubocop:enable Metrics/ParameterLists
|
|
14
|
+
warn_for_deprecated_arguments do |keywords|
|
|
15
|
+
keywords << :number if legacy_number != NOT_GIVEN
|
|
16
|
+
keywords << :supplemental if legacy_supplemental != NOT_GIVEN
|
|
17
|
+
keywords << :spaces_allowed if legacy_spaces_allowed != NOT_GIVEN
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
resolved_num = resolve(number)
|
|
21
|
+
word_list = (
|
|
22
|
+
translate('faker.hipster.words') +
|
|
23
|
+
(supplemental ? translate('faker.lorem.words') : [])
|
|
24
|
+
)
|
|
25
|
+
word_list *= ((resolved_num / word_list.length) + 1)
|
|
26
|
+
|
|
27
|
+
return shuffle(word_list)[0, resolved_num] if spaces_allowed
|
|
28
|
+
|
|
29
|
+
words = shuffle(word_list)[0, resolved_num]
|
|
30
|
+
words.each_with_index { |w, i| words[i] = word if w =~ /\s/ }
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# rubocop:disable Metrics/ParameterLists
|
|
34
|
+
def sentence(legacy_word_count = NOT_GIVEN, legacy_supplemental = NOT_GIVEN, legacy_random_words_to_add = NOT_GIVEN, word_count: 4, supplemental: false, random_words_to_add: 6)
|
|
35
|
+
# rubocop:enable Metrics/ParameterLists
|
|
36
|
+
warn_for_deprecated_arguments do |keywords|
|
|
37
|
+
keywords << :word_count if legacy_word_count != NOT_GIVEN
|
|
38
|
+
keywords << :supplemental if legacy_supplemental != NOT_GIVEN
|
|
39
|
+
keywords << :random_words_to_add if legacy_random_words_to_add != NOT_GIVEN
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
words(number: word_count + rand(random_words_to_add.to_i).to_i, supplemental: supplemental, spaces_allowed: true).join(' ').capitalize + '.'
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def sentences(legacy_number = NOT_GIVEN, legacy_supplemental = NOT_GIVEN, number: 3, supplemental: false)
|
|
46
|
+
warn_for_deprecated_arguments do |keywords|
|
|
47
|
+
keywords << :number if legacy_number != NOT_GIVEN
|
|
48
|
+
keywords << :supplemental if legacy_supplemental != NOT_GIVEN
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
[].tap do |sentences|
|
|
52
|
+
1.upto(resolve(number)) do
|
|
53
|
+
sentences << sentence(word_count: 3, supplemental: supplemental)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# rubocop:disable Metrics/ParameterLists
|
|
59
|
+
def paragraph(legacy_sentence_count = NOT_GIVEN, legacy_supplemental = NOT_GIVEN, legacy_random_sentences_to_add = NOT_GIVEN, sentence_count: 3, supplemental: false, random_sentences_to_add: 3)
|
|
60
|
+
# rubocop:enable Metrics/ParameterLists
|
|
61
|
+
warn_for_deprecated_arguments do |keywords|
|
|
62
|
+
keywords << :sentence_count if legacy_sentence_count != NOT_GIVEN
|
|
63
|
+
keywords << :supplemental if legacy_supplemental != NOT_GIVEN
|
|
64
|
+
keywords << :random_sentences_to_add if legacy_random_sentences_to_add != NOT_GIVEN
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
sentences(number: resolve(sentence_count) + rand(random_sentences_to_add.to_i).to_i, supplemental: supplemental).join(' ')
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def paragraphs(legacy_number = NOT_GIVEN, legacy_supplemental = NOT_GIVEN, number: 3, supplemental: false)
|
|
71
|
+
warn_for_deprecated_arguments do |keywords|
|
|
72
|
+
keywords << :number if legacy_number != NOT_GIVEN
|
|
73
|
+
keywords << :supplemental if legacy_supplemental != NOT_GIVEN
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
[].tap do |paragraphs|
|
|
77
|
+
1.upto(resolve(number)) do
|
|
78
|
+
paragraphs << paragraph(sentence_count: 3, supplemental: supplemental)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def paragraph_by_chars(legacy_characters = NOT_GIVEN, legacy_supplemental = NOT_GIVEN, characters: 256, supplemental: false)
|
|
84
|
+
warn_for_deprecated_arguments do |keywords|
|
|
85
|
+
keywords << :characters if legacy_characters != NOT_GIVEN
|
|
86
|
+
keywords << :supplemental if legacy_supplemental != NOT_GIVEN
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
paragraph = paragraph(sentence_count: 3, supplemental: supplemental)
|
|
90
|
+
|
|
91
|
+
paragraph += ' ' + paragraph(sentence_count: 3, supplemental: supplemental) while paragraph.length < characters
|
|
92
|
+
|
|
93
|
+
paragraph[0...characters - 1] + '.'
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Faker
|
|
4
|
+
class House < Base
|
|
5
|
+
class << self
|
|
6
|
+
##
|
|
7
|
+
# Produces the name of a piece of furniture.
|
|
8
|
+
#
|
|
9
|
+
# @return [String]
|
|
10
|
+
#
|
|
11
|
+
# @example
|
|
12
|
+
# Faker::House.furniture #=> "chair"
|
|
13
|
+
#
|
|
14
|
+
# @faker.version 1.9.2
|
|
15
|
+
def furniture
|
|
16
|
+
fetch('house.furniture')
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
##
|
|
20
|
+
# Produces the name of a room in a house.
|
|
21
|
+
#
|
|
22
|
+
# @return [String]
|
|
23
|
+
#
|
|
24
|
+
# @example
|
|
25
|
+
# Faker::House.room #=> "kitchen"
|
|
26
|
+
#
|
|
27
|
+
# @faker.version 1.9.2
|
|
28
|
+
def room
|
|
29
|
+
fetch('house.rooms')
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Faker
|
|
4
|
+
class IDNumber < Base
|
|
5
|
+
CHECKS = 'TRWAGMYFPDXBNJZSQVHLCKE'
|
|
6
|
+
INVALID_SSN = [
|
|
7
|
+
/0{3}-\d{2}-\d{4}/,
|
|
8
|
+
/\d{3}-0{2}-\d{4}/,
|
|
9
|
+
/\d{3}-\d{2}-0{4}/,
|
|
10
|
+
/666-\d{2}-\d{4}/,
|
|
11
|
+
/9\d{2}-\d{2}-\d{4}/
|
|
12
|
+
].freeze
|
|
13
|
+
ZA_RACE_DIGIT = '8'
|
|
14
|
+
ZA_CITIZENSHIP_DIGITS = %w[0 1].freeze
|
|
15
|
+
BRAZILIAN_ID_FORMAT = /(\d{1,2})(\d{3})(\d{3})([\dX])/.freeze
|
|
16
|
+
BRAZILIAN_ID_FROM = 10_000_000
|
|
17
|
+
BRAZILIAN_ID_TO = 99_999_999
|
|
18
|
+
|
|
19
|
+
CHILEAN_MODULO = 11
|
|
20
|
+
|
|
21
|
+
class << self
|
|
22
|
+
def valid
|
|
23
|
+
_translate('valid')
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def invalid
|
|
27
|
+
_translate('invalid')
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def ssn_valid
|
|
31
|
+
ssn = regexify(/[0-8]\d{2}-\d{2}-\d{4}/)
|
|
32
|
+
# We could still have all 0s in one segment or another
|
|
33
|
+
INVALID_SSN.any? { |regex| regex =~ ssn } ? ssn_valid : ssn
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def spanish_citizen_number
|
|
37
|
+
num = Faker::Number.number(digits: 8)
|
|
38
|
+
mod = num.to_i % 23
|
|
39
|
+
check = CHECKS[mod]
|
|
40
|
+
"#{num}-#{check}"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def spanish_foreign_citizen_number
|
|
44
|
+
code = 'XYZ'
|
|
45
|
+
digits = Faker::Number.number(digits: 7)
|
|
46
|
+
prefix = code[rand(code.length)]
|
|
47
|
+
prefix_val = 'XYZ'.index(prefix).to_s
|
|
48
|
+
mod = "#{prefix_val}#{digits}".to_i % 23
|
|
49
|
+
check = CHECKS[mod]
|
|
50
|
+
"#{prefix}-#{digits}-#{check}"
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def valid_south_african_id_number
|
|
54
|
+
id_number = [
|
|
55
|
+
Faker::Date.birthday.strftime('%y%m%d'),
|
|
56
|
+
Faker::Number.number(digits: 4),
|
|
57
|
+
ZA_CITIZENSHIP_DIGITS.sample(random: Faker::Config.random),
|
|
58
|
+
ZA_RACE_DIGIT
|
|
59
|
+
].join
|
|
60
|
+
|
|
61
|
+
[id_number, south_african_id_checksum_digit(id_number)].join
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
alias south_african_id_number valid_south_african_id_number
|
|
65
|
+
|
|
66
|
+
def invalid_south_african_id_number
|
|
67
|
+
invalid_date_of_birth = [
|
|
68
|
+
Faker::Number.number(digits: 2),
|
|
69
|
+
Faker::Number.between(from: 13, to: 99),
|
|
70
|
+
Faker::Number.between(from: 32, to: 99)
|
|
71
|
+
].map(&:to_s).join
|
|
72
|
+
|
|
73
|
+
id_number = [
|
|
74
|
+
invalid_date_of_birth,
|
|
75
|
+
Faker::Number.number(digits: 4),
|
|
76
|
+
ZA_CITIZENSHIP_DIGITS.sample(random: Faker::Config.random),
|
|
77
|
+
ZA_RACE_DIGIT
|
|
78
|
+
].join
|
|
79
|
+
|
|
80
|
+
[id_number, south_african_id_checksum_digit(id_number)].join
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def brazilian_citizen_number(legacy_formatted = NOT_GIVEN, formatted: false)
|
|
84
|
+
warn_for_deprecated_arguments do |keywords|
|
|
85
|
+
keywords << :formatted if legacy_formatted != NOT_GIVEN
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
digits = Faker::Number.leading_zero_number(digits: 9) until digits&.match(/(\d)((?!\1)\d)+/)
|
|
89
|
+
first_digit = brazilian_citizen_number_checksum_digit(digits)
|
|
90
|
+
second_digit = brazilian_citizen_number_checksum_digit(digits + first_digit)
|
|
91
|
+
number = [digits, first_digit, second_digit].join
|
|
92
|
+
formatted ? format('%s.%s.%s-%s', *number.scan(/\d{2,3}/).flatten) : number
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
alias brazilian_cpf brazilian_citizen_number
|
|
96
|
+
|
|
97
|
+
def brazilian_id(legacy_formatted = NOT_GIVEN, formatted: false)
|
|
98
|
+
warn_for_deprecated_arguments do |keywords|
|
|
99
|
+
keywords << :formatted if legacy_formatted != NOT_GIVEN
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
digits = Faker::Number.between(to: BRAZILIAN_ID_FROM, from: BRAZILIAN_ID_TO).to_s
|
|
103
|
+
check_digit = brazilian_id_checksum_digit(digits)
|
|
104
|
+
number = [digits, check_digit].join
|
|
105
|
+
formatted ? format('%s.%s.%s-%s', *number.scan(BRAZILIAN_ID_FORMAT).flatten) : number
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
alias brazilian_rg brazilian_id
|
|
109
|
+
|
|
110
|
+
def chilean_id
|
|
111
|
+
digits = Faker::Number.number(digits: 8)
|
|
112
|
+
verification_code = chilean_verification_code(digits)
|
|
113
|
+
|
|
114
|
+
digits.to_s + '-' + verification_code.to_s
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
private
|
|
118
|
+
|
|
119
|
+
def chilean_verification_code(digits)
|
|
120
|
+
# First digit is multiplied by 3, second by 2, and so on
|
|
121
|
+
multiplication_rule = [3, 2, 7, 6, 5, 4, 3, 2]
|
|
122
|
+
digits_splitted = digits.to_s.chars.map(&:to_i)
|
|
123
|
+
|
|
124
|
+
sum = digits_splitted.map.with_index { |digit, index| digit * multiplication_rule[index] }.reduce(:+)
|
|
125
|
+
|
|
126
|
+
modulo = sum.modulo(CHILEAN_MODULO)
|
|
127
|
+
difference = CHILEAN_MODULO - modulo
|
|
128
|
+
|
|
129
|
+
case difference
|
|
130
|
+
when 0..9
|
|
131
|
+
difference
|
|
132
|
+
when 10
|
|
133
|
+
'K'
|
|
134
|
+
when 11
|
|
135
|
+
0
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def south_african_id_checksum_digit(id_number)
|
|
140
|
+
value_parts = id_number.chars
|
|
141
|
+
even_digits = value_parts
|
|
142
|
+
.select
|
|
143
|
+
.with_index { |_, i| (i + 1).even? }
|
|
144
|
+
odd_digits_without_last_character = value_parts[0...-1]
|
|
145
|
+
.select
|
|
146
|
+
.with_index { |_, i| (i + 1).odd? }
|
|
147
|
+
|
|
148
|
+
sum_of_odd_digits = odd_digits_without_last_character.map(&:to_i).reduce(:+)
|
|
149
|
+
even_digits_times_two = (even_digits.join('').to_i * 2).to_s
|
|
150
|
+
sum_of_even_digits = even_digits_times_two.chars.map(&:to_i).reduce(:+)
|
|
151
|
+
|
|
152
|
+
total_sum = sum_of_odd_digits + sum_of_even_digits
|
|
153
|
+
|
|
154
|
+
((10 - (total_sum % 10)) % 10).to_s
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def brazilian_citizen_number_checksum_digit(digits)
|
|
158
|
+
checksum = brazilian_document_checksum(digits)
|
|
159
|
+
brazilian_document_digit(checksum)
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def brazilian_id_checksum_digit(digits)
|
|
163
|
+
checksum = brazilian_document_checksum(digits)
|
|
164
|
+
brazilian_document_digit(checksum, id: true)
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def brazilian_document_checksum(digits)
|
|
168
|
+
digits.chars.each_with_index.inject(0) do |acc, (digit, i)|
|
|
169
|
+
acc + digit.to_i * (digits.size + 1 - i)
|
|
170
|
+
end * 10
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def brazilian_document_digit(checksum, id = false)
|
|
174
|
+
remainder = checksum % 11
|
|
175
|
+
id ? brazilian_id_digit(remainder) : brazilian_citizen_number_digit(remainder)
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def brazilian_citizen_number_digit(remainder)
|
|
179
|
+
remainder == 10 ? '0' : remainder.to_s
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
def brazilian_id_digit(remainder)
|
|
183
|
+
subtraction = 11 - remainder.to_i
|
|
184
|
+
digits = { 10 => 'X', 11 => '0' }
|
|
185
|
+
digits.include?(subtraction) ? digits[subtraction] : subtraction.to_s
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def _translate(key)
|
|
189
|
+
parse("id_number.#{key}")
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
end
|