Module: Ermahgerd

Defined in:
lib/ermahgerd.rb,
lib/ermahgerd/version.rb

Constant Summary collapse

VERSION =
"0.0.1"

Class Method Summary collapse

Class Method Details

.translate(words) ⇒ Object



3
4
5
# File 'lib/ermahgerd.rb', line 3

def self.translate(words)
  words.upcase.gsub(/[A-Z]+/) { |word| translate_word(word) }
end

.translate_word(word) ⇒ Object



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
# File 'lib/ermahgerd.rb', line 7

def self.translate_word(word)
  # Don't translate short words
  return word if word.size == 1

  # Handle specific words
  dictionary = {
    'AWESOME' => 'ERSUM',
    'BANANA' => 'BERNERNER',
    'BAYOU' => 'BERU',
    'FAVORITE' => 'FRAVRIT',
    'FAVOURITE' => 'FRAVRIT',
    'GOOSEBUMPS' => 'GERSBERMS',
    'LONG' => 'LERNG',
    'MY' => 'MAH',
    'THE' => 'DA',
    'THEY' => 'DEY',
    'WE\'RE' => 'WER',
    'YOU' => 'U',
    'YOU\'RE' => 'YER'
  }

  return dictionary[word] if dictionary.key? word
  
  # Before translating, keep a reference of the original word
  original_word = word
  
  # Drop vowel from end of words. Keep it for short words, like "WE"
  word.sub!(/[AEIOU]$/, '') if original_word.size > 2

  # Reduce duplicate letters
  word.gsub!(/[^\w]|(.)(?=\1)/, '')

  # Reduce adjacent vowels to one
  word.gsub!(/[AEIOUY]{2,}/, 'E')      # TODO: Keep Y as first letter

  # DOWN -> DERN
  word.gsub!(/OW/, 'ER')

  # PANCAKES -> PERNKERKS
  word.gsub!(/AKES/, 'ERKS')

  # The mean and potatoes: replace vowels with ER
  word.gsub!(/[AEIOUY]/, 'ER')    # TODO: Keep Y as first letter

  # OH -> ER
  word.gsub!(/ERH/, 'ER')

  #MY -> MAH
  word.gsub!(/MER/, 'MAH')

  #FALLING -> FERLIN
  word.gsub!('ERNG', 'IN')

  #POOPED -> PERPERD -> PERPED
  word.gsub!('ERPERD', 'ERPED')

  #MEME -> MAHM -> MERM
  word.gsub!('MAHM', 'MERM')

  # Keep Y as first character
  # YES -> ERS -> YERS
  word = 'Y' + word if original_word[0] == 'Y'

  # Reduce duplicate letters
  word.gsub!(/[^\w]|(.)(?=\1)/, '')

  # YELLOW -> YERLER -> YERLO
  if original_word.end_with?('LOW') && word.end_with?('LER')
    word.sub!(/LER$/, 'LO')
  end

  return word
end