File: name_mx.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 (101 lines) | stat: -rw-r--r-- 2,869 bytes parent folder | download | duplicates (2)
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
99
100
101
# frozen_string_literal: true

module FFaker
  # guapolo github.com/guapolo
  module NameMX
    include FFaker::Name

    extend ModuleUtils
    extend self

    MALE_PREFIXES = %w[Sr. C.].freeze
    FEMALE_PREFIXES = %w[Sra. Srita. C.].freeze
    PREFIXES = %w[Sr. Sra. Srita. C.].freeze

    # Full name according to gender and prefix, possibly with middle_name
    def full_name(gender = :any, prefix = false)
      if prefix
        full_name_prefix(gender)
      else
        full_name_no_prefix(gender)
      end
    end

    # Full name with prefix according to gender, possibly with middle_name
    def full_name_prefix(gender = :any)
      case gender
      when :any
        case rand(0..8)
        when 0, 3, 6, 8 then "#{female_prefix} #{female_name} #{paternal_last_names}"
        else "#{male_prefix} #{male_name} #{paternal_last_names}"
        end
      when :male then "#{male_prefix} #{male_name} #{paternal_last_names}"
      when :female then "#{female_prefix} #{female_name} #{paternal_last_names}"
      else raise ArgumentError, 'Invalid gender, must be one of :any, :male, :female'
      end
    end

    # Full name with no prefix according to gender, possibly with middle_name
    def full_name_no_prefix(gender = :any)
      case gender
      when :any
        case rand(0..8)
        when 0, 3, 6, 8 then "#{female_name} #{paternal_last_names}"
        else "#{male_name} #{paternal_last_names}"
        end
      when :male then "#{male_name} #{paternal_last_names}"
      when :female then "#{female_name} #{paternal_last_names}"
      else raise ArgumentError, 'Invalid gender, must be one of :any, :male, :female'
      end
    end

    # Male first name and possibly middle name
    def male_name
      case rand(0..8)
      when 0, 5 then "#{first_name(:male)} #{middle_name(:male)}"
      else first_name(:male)
      end
    end

    # Female first name and possibly middle name
    def female_name
      case rand(0..8)
      when 0, 5 then "#{first_name(:female)} #{middle_name(:female)}"
      else first_name(:female)
      end
    end

    # A single name according to gender parameter
    def name(gender = :any)
      case gender
      when :any then rand(0..1).zero? ? name(:male) : name(:female)
      when :male then fetch_sample(MALE_FIRST_NAMES)
      when :female then fetch_sample(FEMALE_FIRST_NAMES)
      else raise ArgumentError, 'Invalid gender, must be one of :any, :male, :female'
      end
    end
    alias middle_name name
    alias first_name name

    # Father's and mother's last name
    def paternal_last_names
      "#{last_name} #{last_name}"
    end

    def last_name
      fetch_sample(LAST_NAMES)
    end

    def prefix
      fetch_sample(PREFIXES)
    end

    def male_prefix
      fetch_sample(MALE_PREFIXES)
    end

    def female_prefix
      fetch_sample(FEMALE_PREFIXES)
    end
  end
end