defmodule Faker.Person.Fr do
import Faker, only: [sampler: 2]
@moduledoc """
Functions for name data in French
"""
@doc """
Returns a complete name (may include a suffix/prefix or both)
## Examples
iex> Faker.Person.Fr.name()
"Madame Marcel Duplantier MD"
iex> Faker.Person.Fr.name()
"Quentin Garnier"
iex> Faker.Person.Fr.name()
"Docteur Camille Fontaine"
iex> Faker.Person.Fr.name()
"Serge Bassett V"
"""
@spec name() :: String.t()
def name, do: name(Faker.random_between(0, 9))
defp name(0), do: "#{prefix()} #{first_name()} #{last_name()} #{suffix()}"
defp name(1), do: "#{prefix()} #{first_name()} #{last_name()}"
defp name(2), do: "#{first_name()} #{last_name()} #{suffix()}"
defp name(n) when is_integer(n) do
"#{first_name()} #{last_name()}"
end
@doc """
Returns a random first name
## Examples
iex> Faker.Person.Fr.first_name()
"Damien"
iex> Faker.Person.Fr.first_name()
"Madeleine"
iex> Faker.Person.Fr.first_name()
"Marcel"
iex> Faker.Person.Fr.first_name()
"Fabrice"
"""
@spec first_name() :: String.t()
sampler(:first_name, [
"Adrien",
"Alexandra",
"Alice",
"Aline",
"Amandine",
"Anne",
"Anne-Marie",
"Annick",
"Annie",
"Audrey",
"Aurore",
"Alain",
"Albert",
"Alexandre",
"Alexis",
"Antoine",
"Arnaud",
"Arthur",
"Baptiste",
"Benjamin",
"Bernard",
"Bertrand",
"Bruno",
"Brigitte",
"Bernadette",
"Charles",
"Christian",
"Christophe",
"Camille",
"Carole",
"Caroline",
"Catherine",
"Chantal",
"Christiane",
"Christine",
"Claire",
"Clara",
"Colette",
"Claude",
"Cyril",
"Damien",
"Daniel",
"Danielle",
"Delphine",
"Denise",
"Dominique",
"David",
"Denis",
"Didier",
"Dominique",
"Dylan",
"Emmanuel",
"Enzo",
"Emma",
"Emmanuelle",
"Estelle",
"Fabien",
"Fabrice",
"Florent",
"Floriant",
"Francis",
"Franck",
"Fabienne",
"Fanny",
"Florence",
"Francine",
"Gabriel",
"Georges",
"Gilbert",
"Georgette",
"Germaine",
"Ghislaine",
"Gilles",
"Ginette",
"Guillaume",
"Guy",
"Henri",
"Hugo",
"Henriette",
"Huguette",
"Isabelle",
"Jacques",
"Jean",
"Jacqueline",
"Janine",
"Jeanne",
"Jean-Claude",
"Jeannine",
"Jennifer",
"Jessica",
"Jocelyne",
"Josette",
"Julie",
"Jean-Louis",
"Juliette",
"Justine",
"Jean-Luc",
"Jean-Marc",
"Jean-Marie",
"Jean-Michel",
"Jean-Paul",
"Jean-Pierre",
"Jonathan",
"Joseph",
"Julien",
"Kevin",
"Karine",
"Laurent",
"Lionel",
"Laetitia",
"Laura",
"Laure",
"Laurence",
"Liliane",
"Louise",
"Lucie",
"Lydie",
"Lydia",
"Louis",
"Luc",
"Lucas",
"Lucien",
"Ludovic",
"Marc",
"Marcel",
"Mathieu",
"Maurice",
"Madeleine",
"Magali",
"Manon",
"Maria",
"Marie",
"Marie-Christine",
"Marie-Claude",
"Maxime",
"Marine",
"Michel",
"Mohamed",
"Nicolas",
"Nicole",
"Olivier",
"Odette",
"Odile",
"Pascal",
"Patrice",
"Patrick",
"Pascale",
"Patricia",
"Paulette",
"Pauline",
"Pierrette",
"Paul",
"Philippe",
"Pierre",
"Quentin",
"Raymond",
"Richard",
"Raymonde",
"Robert",
"Roger",
"Roland",
"Romain",
"Samuel",
"Serge",
"Sabine",
"Sabrina",
"Sandra",
"Sandrine",
"Simone",
"Sarah",
"Samara",
"Solange",
"Sonia",
"Sophie",
"Simon",
"Suzanne",
"Sylvain",
"Thierry",
"Thomas",
"Valentin",
"Vanessa",
"Virginie",
"Victor",
"Vincent",
"William",
"Yann",
"Yannick",
"Yvette",
"Yves",
"Yvonne",
"Xavier"
])
@doc """
Returns a random last name
## Examples
iex> Faker.Person.Fr.last_name()
"Bassett"
iex> Faker.Person.Fr.last_name()
"Duplantier"
iex> Faker.Person.Fr.last_name()
"Boivin"
iex> Faker.Person.Fr.last_name()
"Duplantier"
"""
@spec last_name() :: String.t()
sampler(:last_name, [
"Abadie",
"Allemand",
"Auclair",
"Bassett",
"Beaumont",
"Blanchet",
"Boivin",
"Boucher",
"Beaufort",
"Bonnet",
"Chevrolet",
"Corbin",
"Cartier",
"Chastain",
"Couture",
"Dubois",
"Dupont",
"Duplantier",
"Fournier",
"Fontaine",
"Garnier",
"Laurent",
"Lavigne",
"Leroy",
"Lyon",
"LaRue",
"Martin",
"Moulin",
"Moreau",
"Renaud",
"Rousseau",
"Toussaint",
"Vernier"
])
@doc """
Returns a random prefix
## Examples
iex> Faker.Person.Fr.prefix()
"Docteur"
iex> Faker.Person.Fr.prefix()
"Madame"
iex> Faker.Person.Fr.prefix()
"Docteur"
iex> Faker.Person.Fr.prefix()
"Professeur"
"""
@spec prefix() :: String.t()
sampler(:prefix, [
"Docteur",
"Madame",
"Mademoiselle",
"Monsieur",
"Professeur"
])
@doc """
Returns a random suffix
## Examples
iex> Faker.Person.Fr.suffix()
"V"
iex> Faker.Person.Fr.suffix()
"I"
iex> Faker.Person.Fr.suffix()
"PhD"
iex> Faker.Person.Fr.suffix()
"MD"
"""
@spec suffix() :: String.t()
sampler(:suffix, [
"MD",
"I",
"V",
"PhD"
])
end