Sha256: 74797c1be352427db415d0c57f976cf468c69efe8765cecd1bc0c477afb6aab6

Contents?: true

Size: 1.93 KB

Versions: 2

Compression:

Stored size: 1.93 KB

Contents

require 'romaji'

class Gimei::Name
  attr_reader :first, :last, :gender

  class << self
    extend Forwardable

    def male
      new(:male)
    end

    def female
      new(:female)
    end

    %i[kanji hiragana katakana romaji first last].each do |method_name|
      define_method(method_name) do |gender = nil|
        new(gender).public_send(method_name)
      end
    end
  end

  def initialize(gender = nil)
    @gender = gender || Gimei::GENDERS.sample(random: Gimei.config.rng)
    @first = First.new @gender
    @last = Last.new
  end

  def kanji
    "#{last.kanji} #{first.kanji}"
  end

  def hiragana
    "#{last.hiragana} #{first.hiragana}"
  end

  def katakana
    "#{last.katakana} #{first.katakana}"
  end

  def romaji
    "#{first.romaji} #{last.romaji}"
  end

  def male?
    @gender == :male
  end

  def female?
    @gender == :female
  end

  alias_method :to_s, :kanji

  class First
    class << self
      def male
        new(:male)
      end

      def female
        new(:female)
      end
    end

    extend Forwardable
    def_delegators :@name, :kanji, :hiragana, :katakana, :to_s, :romaji

    def initialize(gender = nil)
      @gender = gender || Gimei::GENDERS.sample(random: Gimei.config.rng)
      @name = NameWord.new(Gimei.names['first_name'][@gender.to_s].sample(random: Gimei.config.rng))
    end

    def male?
      @gender == :male
    end

    def female?
      @gender == :female
    end
  end

  class Last
    extend Forwardable
    def_delegators :@name, :kanji, :hiragana, :katakana, :to_s, :romaji

    def initialize
      @name = NameWord.new(Gimei.names['last_name'].sample(random: Gimei.config.rng))
    end
  end

  class NameWord
    def initialize(name)
      @name = name
    end

    def kanji
      @name[0]
    end

    def hiragana
      @name[1]
    end

    def katakana
      @name[2]
    end

    def romaji
      Romaji.kana2romaji(hiragana).capitalize
    end

    alias_method :to_s, :kanji
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
gimei-1.0.1 lib/gimei/name.rb
gimei-1.0.0 lib/gimei/name.rb