Sha256: ee899ab501b3c3fa46faa9a056735ddb0228804e6d144b05fb982c1ffce7c195

Contents?: true

Size: 1.25 KB

Versions: 2

Compression:

Stored size: 1.25 KB

Contents

module Genderize
  class Gender

    include I18n

    # Maps the gender abbreviation name to the full name for translation keys
    ABR_KEY_NAME_MAPPING = { "" => "blank", "m" => "masculine", "f" => "feminine", "n" => "non_binary" }


    attr_reader :abbr

    def initialize(abbr)
      unless abbr.blank? or abbr.to_s =~ /\A(f|m|n|female|male|non[ -_]?binary)\Z/i
        raise "Invalid abbreviation: '#{abbr}'"
      end
      @abbr = abbr.blank? ? '' : abbr.to_s.first.downcase
    end

    def name
      @name ||= translation_for("name")
    end

    def subject
      @subject ||= translation_for("subject")
    end

    def object
      @object ||= translation_for("object")
    end

    def possessive
      @possessive ||= translation_for("possessive")
    end

    def casual
      @casual ||= translation_for("casual")
    end

    def capital_abbr
      abbr.capitalize
    end

    def male?
      abbr == 'm'
    end

    def female?
      abbr == 'f'
    end

    def non_binary?
      abbr == 'n'
    end

    def blank?
      abbr == ""
    end

    def to_s
      abbr
    end

    def ==(val)
      abbr.to_s == val.to_s
    end


    private


    def translation_for(key)
      I18n.t("genderize.#{key}.#{ABR_KEY_NAME_MAPPING[abbr]}")
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
genderize-0.1.1 lib/genderize/gender.rb
genderize-0.1.0 lib/genderize/gender.rb