ermahgerd 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +98 -0
- data/Rakefile +4 -0
- data/ermahgerd.gemspec +27 -0
- data/lib/ermahgerd.rb +81 -0
- data/lib/ermahgerd/version.rb +3 -0
- data/test/test_ermahgerd.rb +18 -0
- metadata +50 -0
data/README.md
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
= ERMAHGERD, RUBY GERMS, MAH FRAVRIT!
|
2
|
+
|
3
|
+
It had to be done.
|
4
|
+
|
5
|
+
Ermahgerd is a ruby gem to translate your text from English into
|
6
|
+
Ermahgerd-lish, based heavily (so far exclusively) on the "ERMAHGERD
|
7
|
+
TRANSLATOR":http://ermahgerd.jmillerdesign.com by J Miller Design.
|
8
|
+
|
9
|
+
= Installation
|
10
|
+
|
11
|
+
gem install ermahgerd
|
12
|
+
|
13
|
+
= Usage
|
14
|
+
|
15
|
+
```ruby
|
16
|
+
require 'ermahgerd'
|
17
|
+
Ermahgerd.translate("Goosebumps") #=> "Gerseberms"
|
18
|
+
```
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
var translate = function(word) {
|
23
|
+
// Don't translate short words
|
24
|
+
if (word.length == 1) {
|
25
|
+
return word;
|
26
|
+
}
|
27
|
+
|
28
|
+
// Handle specific words
|
29
|
+
switch (word) {
|
30
|
+
case 'AWESOME': return 'ERSUM';
|
31
|
+
case 'BANANA': return 'BERNERNER';
|
32
|
+
case 'BAYOU': return 'BERU';
|
33
|
+
case 'FAVORITE':
|
34
|
+
case 'FAVOURITE': return 'FRAVRIT';
|
35
|
+
case 'GOOSEBUMPS': return 'GERSBERMS';
|
36
|
+
case 'LONG': return 'LERNG';
|
37
|
+
case 'MY': return 'MAH';
|
38
|
+
case 'THE': return 'DA';
|
39
|
+
case 'THEY': return 'DEY';
|
40
|
+
case 'WE\'RE': return 'WER';
|
41
|
+
case 'YOU': return 'U';
|
42
|
+
case 'YOU\'RE': return 'YER';
|
43
|
+
}
|
44
|
+
|
45
|
+
// Before translating, keep a reference of the original word
|
46
|
+
var originalWord = word;
|
47
|
+
|
48
|
+
// Drop vowel from end of words
|
49
|
+
if (originalWord.length > 2) { // Keep it for short words, like "WE"
|
50
|
+
word = word.replace(/[AEIOU]$/, '');
|
51
|
+
}
|
52
|
+
|
53
|
+
// Reduce duplicate letters
|
54
|
+
word = word.replace(/[^\w\s]|(.)(?=\1)/gi, '');
|
55
|
+
|
56
|
+
// Reduce adjacent vowels to one
|
57
|
+
word = word.replace(/[AEIOUY]{2,}/g, 'E'); // TODO: Keep Y as first letter
|
58
|
+
|
59
|
+
// DOWN -> DERN
|
60
|
+
word = word.replace(/OW/g, 'ER');
|
61
|
+
|
62
|
+
// PANCAKES -> PERNKERKS
|
63
|
+
word = word.replace(/AKES/g, 'ERKS');
|
64
|
+
|
65
|
+
// The mean and potatoes: replace vowels with ER
|
66
|
+
word = word.replace(/[AEIOUY]/g, 'ER'); // TODO: Keep Y as first letter
|
67
|
+
|
68
|
+
// OH -> ER
|
69
|
+
word = word.replace(/ERH/g, 'ER');
|
70
|
+
|
71
|
+
// MY -> MAH
|
72
|
+
word = word.replace(/MER/g, 'MAH');
|
73
|
+
|
74
|
+
// FALLING -> FERLIN
|
75
|
+
word = word.replace('ERNG', 'IN');
|
76
|
+
|
77
|
+
// POOPED -> PERPERD -> PERPED
|
78
|
+
word = word.replace('ERPERD', 'ERPED');
|
79
|
+
|
80
|
+
// MEME -> MAHM -> MERM
|
81
|
+
word = word.replace('MAHM', 'MERM');
|
82
|
+
|
83
|
+
// Keep Y as first character
|
84
|
+
// YES -> ERS -> YERS
|
85
|
+
if (originalWord.charAt(0) == 'Y') {
|
86
|
+
word = 'Y' + word;
|
87
|
+
}
|
88
|
+
|
89
|
+
// Reduce duplicate letters
|
90
|
+
word = word.replace(/[^\w\s]|(.)(?=\1)/gi, '');
|
91
|
+
|
92
|
+
// YELLOW -> YERLER -> YERLO
|
93
|
+
if ((originalWord.substr(-3) == 'LOW') && (word.substr(-3) == 'LER')) {
|
94
|
+
word = word.substr(0, word.length - 3) + 'LO';
|
95
|
+
}
|
96
|
+
|
97
|
+
return word;
|
98
|
+
};
|
data/Rakefile
ADDED
data/ermahgerd.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
load "lib/ermahgerd/version.rb"
|
2
|
+
|
3
|
+
spec = Gem::Specification.new do |s|
|
4
|
+
s.name = 'ermahgerd'
|
5
|
+
s.version = Ermahgerd::VERSION
|
6
|
+
|
7
|
+
s.summary = %{
|
8
|
+
Translate English into Ermahgerd-lish. ERMAHGERD, I LERV RERBER!
|
9
|
+
}.strip
|
10
|
+
|
11
|
+
s.description = %{
|
12
|
+
A Ruby ERMAHGERD translator, based on http://ermahgerd.jmillerdesign.com/.
|
13
|
+
}.strip
|
14
|
+
|
15
|
+
s.files = Dir['lib/**/*.rb'] + Dir['test/**/*.rb'] + %w[
|
16
|
+
README.md
|
17
|
+
Rakefile
|
18
|
+
ermahgerd.gemspec
|
19
|
+
]
|
20
|
+
|
21
|
+
s.require_path = 'lib'
|
22
|
+
s.required_ruby_version = ">= 1.9.2"
|
23
|
+
|
24
|
+
s.author = "Dan Bernier"
|
25
|
+
s.email = "danbernier@gmail.com"
|
26
|
+
s.homepage = "https://github.com/danbernier/ermahgerd"
|
27
|
+
end
|
data/lib/ermahgerd.rb
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
module Ermahgerd
|
2
|
+
|
3
|
+
def self.translate(words)
|
4
|
+
words.upcase.gsub(/[A-Z]+/) { |word| translate_word(word) }
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.translate_word(word)
|
8
|
+
# Don't translate short words
|
9
|
+
return word if word.size == 1
|
10
|
+
|
11
|
+
# Handle specific words
|
12
|
+
dictionary = {
|
13
|
+
'AWESOME' => 'ERSUM',
|
14
|
+
'BANANA' => 'BERNERNER',
|
15
|
+
'BAYOU' => 'BERU',
|
16
|
+
'FAVORITE' => 'FRAVRIT',
|
17
|
+
'FAVOURITE' => 'FRAVRIT',
|
18
|
+
'GOOSEBUMPS' => 'GERSBERMS',
|
19
|
+
'LONG' => 'LERNG',
|
20
|
+
'MY' => 'MAH',
|
21
|
+
'THE' => 'DA',
|
22
|
+
'THEY' => 'DEY',
|
23
|
+
'WE\'RE' => 'WER',
|
24
|
+
'YOU' => 'U',
|
25
|
+
'YOU\'RE' => 'YER'
|
26
|
+
}
|
27
|
+
|
28
|
+
return dictionary[word] if dictionary.key? word
|
29
|
+
|
30
|
+
# Before translating, keep a reference of the original word
|
31
|
+
original_word = word
|
32
|
+
|
33
|
+
# Drop vowel from end of words. Keep it for short words, like "WE"
|
34
|
+
word.sub!(/[AEIOU]$/, '') if original_word.size > 2
|
35
|
+
|
36
|
+
# Reduce duplicate letters
|
37
|
+
word.gsub!(/[^\w]|(.)(?=\1)/, '')
|
38
|
+
|
39
|
+
# Reduce adjacent vowels to one
|
40
|
+
word.gsub!(/[AEIOUY]{2,}/, 'E') # TODO: Keep Y as first letter
|
41
|
+
|
42
|
+
# DOWN -> DERN
|
43
|
+
word.gsub!(/OW/, 'ER')
|
44
|
+
|
45
|
+
# PANCAKES -> PERNKERKS
|
46
|
+
word.gsub!(/AKES/, 'ERKS')
|
47
|
+
|
48
|
+
# The mean and potatoes: replace vowels with ER
|
49
|
+
word.gsub!(/[AEIOUY]/, 'ER') # TODO: Keep Y as first letter
|
50
|
+
|
51
|
+
# OH -> ER
|
52
|
+
word.gsub!(/ERH/, 'ER')
|
53
|
+
|
54
|
+
#MY -> MAH
|
55
|
+
word.gsub!(/MER/, 'MAH')
|
56
|
+
|
57
|
+
#FALLING -> FERLIN
|
58
|
+
word.gsub!('ERNG', 'IN')
|
59
|
+
|
60
|
+
#POOPED -> PERPERD -> PERPED
|
61
|
+
word.gsub!('ERPERD', 'ERPED')
|
62
|
+
|
63
|
+
#MEME -> MAHM -> MERM
|
64
|
+
word.gsub!('MAHM', 'MERM')
|
65
|
+
|
66
|
+
# Keep Y as first character
|
67
|
+
# YES -> ERS -> YERS
|
68
|
+
word = 'Y' + word if original_word[0] == 'Y'
|
69
|
+
|
70
|
+
# Reduce duplicate letters
|
71
|
+
word.gsub!(/[^\w]|(.)(?=\1)/, '')
|
72
|
+
|
73
|
+
# YELLOW -> YERLER -> YERLO
|
74
|
+
if original_word.end_with?('LOW') && word.end_with?('LER')
|
75
|
+
word.sub!(/LER$/, 'LO')
|
76
|
+
end
|
77
|
+
|
78
|
+
return word
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'ermahgerd'
|
3
|
+
|
4
|
+
describe Ermahgerd do
|
5
|
+
|
6
|
+
def trans(src)
|
7
|
+
Ermahgerd.translate(src)
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'can translate some basic phrases' do
|
11
|
+
trans('Goosebumps, my favorite books!').must_equal 'GERSBERMS, MAH FRAVRIT BERKS!'
|
12
|
+
trans('I love chocolate').must_equal 'I LERV CHERCERLERT'
|
13
|
+
trans('I love pancakes!').must_equal 'I LERV PERNCERKS!'
|
14
|
+
trans('bananas are awesome.').must_equal 'BERNERNERS ER ERSUM.'
|
15
|
+
trans('Mashed potatoes, my favorite!').must_equal 'MAHSHERD PERTERTERS, MAH FRAVRIT!'
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
metadata
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ermahgerd
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Dan Bernier
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-07-29 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: A Ruby ERMAHGERD translator, based on http://ermahgerd.jmillerdesign.com/.
|
15
|
+
email: danbernier@gmail.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- lib/ermahgerd/version.rb
|
21
|
+
- lib/ermahgerd.rb
|
22
|
+
- test/test_ermahgerd.rb
|
23
|
+
- README.md
|
24
|
+
- Rakefile
|
25
|
+
- ermahgerd.gemspec
|
26
|
+
homepage: https://github.com/danbernier/ermahgerd
|
27
|
+
licenses: []
|
28
|
+
post_install_message:
|
29
|
+
rdoc_options: []
|
30
|
+
require_paths:
|
31
|
+
- lib
|
32
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 1.9.2
|
38
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
requirements: []
|
45
|
+
rubyforge_project:
|
46
|
+
rubygems_version: 1.8.10
|
47
|
+
signing_key:
|
48
|
+
specification_version: 3
|
49
|
+
summary: Translate English into Ermahgerd-lish. ERMAHGERD, I LERV RERBER!
|
50
|
+
test_files: []
|