Sha256: 7449da701977eb812021e188728bbcae7158aa0f4f8116b96b8edba6f81c6e1d

Contents?: true

Size: 1.02 KB

Versions: 1

Compression:

Stored size: 1.02 KB

Contents

# coding: utf-8
require_relative 'string_ext/version'

module StringExt

  ACCENTS = {
    'A' => {
      upcase: 'ÁÀÄÂÃÅĀĂǍ',
      downcase: 'áàäâãåāăǎ'
    },
    'E' => {
      upcase: 'ÉÈËÊĒĔĖĚ',
      downcase: 'éèëêēĕėě'
    },
    'I' => {
      upcase: 'ÍÌÏÎĨĬǏ',
      downcase: 'íìïîĩĭǐ'
    },
    'O' => {
      upcase: 'ÓÒÖÔÕŌŎŐǑ',
      downcase: 'óòöôõōŏőǒ'
    },
    'U' => {
      upcase: 'ÚÙÜÛŨŪŬŮŰǓ',
      downcase: 'úùüûũūŭůűǔ'
    }
  }

  CASES = {
    downcase: 'ñç' + ACCENTS.values.map { |a| a[:downcase] }.join,
    upcase: 'ÑÇ' + ACCENTS.values.map { |a| a[:upcase] }.join
  }

  extend self

  def upcase(string)
    string.tr(CASES[:downcase], CASES[:upcase]).upcase
  end

  def downcase(string)
    string.tr(CASES[:upcase], CASES[:downcase]).downcase
  end

  def unaccented(string)
    ACCENTS.inject(string) do |s, (char, cases)|
      s.tr(cases[:upcase], char).tr(cases[:downcase], char.downcase)
    end
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
string_ext-0.1.0 lib/string_ext.rb