File: name_pl.rb

package info (click to toggle)
ruby-ffaker 2.23.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,776 kB
  • sloc: ruby: 12,788; makefile: 8; sh: 1
file content (98 lines) | stat: -rw-r--r-- 2,538 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# frozen_string_literal: true

module FFaker
  # Inspirations:
  # https://pl.wiktionary.org/wiki/Indeks:Polski_-_Imiona
  # https://pl.wiktionary.org/wiki/Kategoria:Polskie_nazwiska_m%C4%99skie
  module NamePL
    extend ModuleUtils
    extend self

    GENDERS = %i[random female male].freeze
    MALE_PREFIXES = %w[Pan].freeze
    FEMALE_PREFIXES = %w[Pani].freeze
    ACADEMIC_DEGREE_PREFIXES = ['lic.', 'inż.', 'mgr', 'mgr inż.', 'dr', 'dr hab.', 'prof.'].freeze
    PREFIXES = (MALE_PREFIXES + FEMALE_PREFIXES + ACADEMIC_DEGREE_PREFIXES).freeze

    # Generates a random full name for a given gender (random by default).
    # Acceptable gender values: :random, :female, :male
    def name(gender = :random)
      name_for_gender(:full_name, gender)
    end

    alias full_name name

    def name_with_prefix(gender = :random)
      name_for_gender(:name_with_prefix, gender)
    end

    # Generates a random last name for a given gender (random by default).
    # Acceptable gender values: :random, :female, :male
    def last_name(gender = :random)
      name_for_gender(:last_name, gender)
    end

    # Generates a random first name for a given gender (random by default).
    # Acceptable gender values: :random, :female, :male
    def first_name(gender = :random)
      name_for_gender(:first_name, gender)
    end

    def female_name_with_prefix
      "#{female_prefix} #{female_full_name}"
    end

    def male_name_with_prefix
      "#{male_prefix} #{male_full_name}"
    end

    def female_full_name
      "#{female_first_name} #{female_last_name}"
    end

    def male_full_name
      "#{male_first_name} #{male_last_name}"
    end

    def female_first_name
      fetch_sample(FEMALE_FIRST_NAMES)
    end

    def female_last_name
      fetch_sample(FEMALE_LAST_NAMES)
    end

    def male_first_name
      fetch_sample(MALE_FIRST_NAMES)
    end

    def male_last_name
      fetch_sample(MALE_LAST_NAMES)
    end

    def prefix
      fetch_sample(PREFIXES)
    end

    def female_prefix
      fetch_sample(FEMALE_PREFIXES)
    end

    def male_prefix
      fetch_sample(MALE_PREFIXES)
    end

    def academic_degree_prefix
      fetch_sample(ACADEMIC_DEGREE_PREFIXES)
    end

    private

    def name_for_gender(name_type, gender) # :nodoc:
      raise(ArgumentError, "Gender must be one of: #{GENDERS}") unless GENDERS.include?(gender)
      return send("#{gender}_#{name_type}") unless gender == :random

      fetch_sample([send("female_#{name_type}"), send("male_#{name_type}")])
    end
  end
end