pig_latin 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -0
- data/Gemfile.lock +85 -0
- data/README.md +28 -0
- data/lib/pig_latin.rb +51 -0
- data/lib/pig_latin/railties.rb +5 -0
- data/lib/pig_latin/tasks/pig_latin.rake +56 -0
- data/pig_latin.gemspec +13 -0
- metadata +9 -2
data/Gemfile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
gem "rails", "~> 3.0"
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
GEM
|
2
|
+
specs:
|
3
|
+
actionmailer (3.2.13)
|
4
|
+
actionpack (= 3.2.13)
|
5
|
+
mail (~> 2.5.3)
|
6
|
+
actionpack (3.2.13)
|
7
|
+
activemodel (= 3.2.13)
|
8
|
+
activesupport (= 3.2.13)
|
9
|
+
builder (~> 3.0.0)
|
10
|
+
erubis (~> 2.7.0)
|
11
|
+
journey (~> 1.0.4)
|
12
|
+
rack (~> 1.4.5)
|
13
|
+
rack-cache (~> 1.2)
|
14
|
+
rack-test (~> 0.6.1)
|
15
|
+
sprockets (~> 2.2.1)
|
16
|
+
activemodel (3.2.13)
|
17
|
+
activesupport (= 3.2.13)
|
18
|
+
builder (~> 3.0.0)
|
19
|
+
activerecord (3.2.13)
|
20
|
+
activemodel (= 3.2.13)
|
21
|
+
activesupport (= 3.2.13)
|
22
|
+
arel (~> 3.0.2)
|
23
|
+
tzinfo (~> 0.3.29)
|
24
|
+
activeresource (3.2.13)
|
25
|
+
activemodel (= 3.2.13)
|
26
|
+
activesupport (= 3.2.13)
|
27
|
+
activesupport (3.2.13)
|
28
|
+
i18n (= 0.6.1)
|
29
|
+
multi_json (~> 1.0)
|
30
|
+
arel (3.0.2)
|
31
|
+
builder (3.0.4)
|
32
|
+
erubis (2.7.0)
|
33
|
+
hike (1.2.2)
|
34
|
+
i18n (0.6.1)
|
35
|
+
journey (1.0.4)
|
36
|
+
json (1.7.7)
|
37
|
+
mail (2.5.3)
|
38
|
+
i18n (>= 0.4.0)
|
39
|
+
mime-types (~> 1.16)
|
40
|
+
treetop (~> 1.4.8)
|
41
|
+
mime-types (1.22)
|
42
|
+
multi_json (1.7.2)
|
43
|
+
polyglot (0.3.3)
|
44
|
+
rack (1.4.5)
|
45
|
+
rack-cache (1.2)
|
46
|
+
rack (>= 0.4)
|
47
|
+
rack-ssl (1.3.3)
|
48
|
+
rack
|
49
|
+
rack-test (0.6.2)
|
50
|
+
rack (>= 1.0)
|
51
|
+
rails (3.2.13)
|
52
|
+
actionmailer (= 3.2.13)
|
53
|
+
actionpack (= 3.2.13)
|
54
|
+
activerecord (= 3.2.13)
|
55
|
+
activeresource (= 3.2.13)
|
56
|
+
activesupport (= 3.2.13)
|
57
|
+
bundler (~> 1.0)
|
58
|
+
railties (= 3.2.13)
|
59
|
+
railties (3.2.13)
|
60
|
+
actionpack (= 3.2.13)
|
61
|
+
activesupport (= 3.2.13)
|
62
|
+
rack-ssl (~> 1.3.2)
|
63
|
+
rake (>= 0.8.7)
|
64
|
+
rdoc (~> 3.4)
|
65
|
+
thor (>= 0.14.6, < 2.0)
|
66
|
+
rake (10.0.4)
|
67
|
+
rdoc (3.12.2)
|
68
|
+
json (~> 1.4)
|
69
|
+
sprockets (2.2.2)
|
70
|
+
hike (~> 1.2)
|
71
|
+
multi_json (~> 1.0)
|
72
|
+
rack (~> 1.0)
|
73
|
+
tilt (~> 1.1, != 1.3.0)
|
74
|
+
thor (0.18.1)
|
75
|
+
tilt (1.3.7)
|
76
|
+
treetop (1.4.12)
|
77
|
+
polyglot
|
78
|
+
polyglot (>= 0.3.1)
|
79
|
+
tzinfo (0.3.37)
|
80
|
+
|
81
|
+
PLATFORMS
|
82
|
+
ruby
|
83
|
+
|
84
|
+
DEPENDENCIES
|
85
|
+
rails (~> 3.0)
|
data/README.md
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
Anslatetray ouryay Ailsray appway intoway igpay atinlay! (Translate your Rails app into pig latin!)
|
2
|
+
=====
|
3
|
+
|
4
|
+
Add a pig latin translation layer to your Rails app!) Includes a rake task to translate all of your i18n locale configurations to pig latin!
|
5
|
+
|
6
|
+
Translate English to Pig Latin on the fly!
|
7
|
+
----
|
8
|
+
|
9
|
+
PigLatin.translate("Always look on the bright side of life!")
|
10
|
+
=> "Alwaysway ooklay onway ethay ightbray idesay ofway ifelay!"
|
11
|
+
|
12
|
+
You could use it in your before save callbacks to shove pig latin in your database!
|
13
|
+
|
14
|
+
Build a Pig Latin locale layer for i18n
|
15
|
+
----
|
16
|
+
Use i18n? The pig_latin rake task can generate a pig latin locale (pgl) based on your English locale files.
|
17
|
+
|
18
|
+
rake pig_latin:translate["config/locales"]
|
19
|
+
|
20
|
+
It'll iterate through all of your en.yml files in that location and build a pig latin version. You can also specify a specific en.yml file to translate just that file!
|
21
|
+
|
22
|
+
Contributions
|
23
|
+
=====
|
24
|
+
Feel free to write specs. Submit a pull request and we'll see what happens!
|
25
|
+
|
26
|
+
Credits
|
27
|
+
=====
|
28
|
+
Copyright (c) 2013, developed and maintained by Steve Hodges, and is released under the open MIT Licence
|
data/lib/pig_latin.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
class PigLatin
|
2
|
+
|
3
|
+
def self.translate(my_string)
|
4
|
+
my_string.is_a?(String) ? translate_string(my_string) : my_string
|
5
|
+
end
|
6
|
+
|
7
|
+
private #####################################################################
|
8
|
+
|
9
|
+
def self.translate_string(my_string)
|
10
|
+
my_string.split(/ /).map do |word|
|
11
|
+
|
12
|
+
capitalized = (word[0] == word[0].upcase)
|
13
|
+
punctuation = word[/\W+\z/]
|
14
|
+
|
15
|
+
punctuation_start = punctuation ? word.length - punctuation.length - 1 : -1
|
16
|
+
word = word[0..punctuation_start]
|
17
|
+
|
18
|
+
word = pig_latinitize(word).downcase
|
19
|
+
word = capitalize_first(word) if capitalized
|
20
|
+
"#{word}#{punctuation}"
|
21
|
+
end.join(" ")
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.pig_latinitize(words)
|
25
|
+
words.split(/-/).map do |word|
|
26
|
+
if word[0].match(/[^aeiou]/i)
|
27
|
+
leading_consonants = word[/\A([^aeiou]+)/i]
|
28
|
+
word[leading_consonants.length..-1] + leading_consonants + "ay"
|
29
|
+
else
|
30
|
+
word + "way"
|
31
|
+
end
|
32
|
+
end.join("-")
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.capitalize_first(string)
|
36
|
+
return string unless string.is_a? String
|
37
|
+
return string.upcase if string.length < 2
|
38
|
+
string.slice(0,1).capitalize + string.slice(1..-1)
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.rails_present?
|
42
|
+
Object.const_defined? :Rails
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
if Object.const_defined? :Rails
|
48
|
+
require "pig_latin/railties"
|
49
|
+
else
|
50
|
+
require "yaml"
|
51
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
namespace "pig_latin" do
|
2
|
+
desc "Use this task to translate config/locales dictionary into pig latin"
|
3
|
+
task :translate, :dir_or_file_to_translate do |t, args|
|
4
|
+
require 'cgi'
|
5
|
+
args.with_defaults(:dir_or_file_to_translate => "config/locales")
|
6
|
+
translate_locale(args[:dir_or_file_to_translate])
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def translate(filename)
|
11
|
+
en_yml = YAML::load_file(filename)
|
12
|
+
target_filename = "pgl" + filename.match(/\/en([a-zA-Z-]*).yml/)[1]
|
13
|
+
dirname = filename.split("/")[0..-2].join("/")
|
14
|
+
translation = {target_filename => parse_element(en_yml).values.first}
|
15
|
+
File.open(dirname + "/#{target_filename}.yml", 'w:utf-8') do |f|
|
16
|
+
YAML::dump translation, f
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def translate_locale(path)
|
21
|
+
path = "#{Rails.root}/#{path}" unless path.include? Rails.root.to_s
|
22
|
+
return translate(path) if File.exists?(path) && path.match("/\/en([a-zA-Z-]*).yml")
|
23
|
+
|
24
|
+
relevent_file_paths(path).each do |file_path|
|
25
|
+
if File.directory? file_path
|
26
|
+
translate(file_path + "/en.yml") if File.exists?(file_path + "/en.yml")
|
27
|
+
translate_locale file_path
|
28
|
+
elsif file_path.match("\/en([a-zA-Z-]*).yml")
|
29
|
+
puts file_path
|
30
|
+
translate file_path
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def parse_element(element)
|
36
|
+
case element
|
37
|
+
when Hash
|
38
|
+
new_hash = {}
|
39
|
+
element.each {|k,v| new_hash[k] = parse_element(v)}
|
40
|
+
new_hash
|
41
|
+
when Array
|
42
|
+
element.map {|el| parse_element(element)}
|
43
|
+
when String
|
44
|
+
PigLatin.translate element
|
45
|
+
else
|
46
|
+
element
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def relevent_file_paths(path)
|
51
|
+
Dir.new(path).entries.reject do |filename|
|
52
|
+
[".", ".."].include? filename
|
53
|
+
end.map do |filename|
|
54
|
+
"#{path}/#{filename}"
|
55
|
+
end
|
56
|
+
end
|
data/pig_latin.gemspec
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
Gem::Specification.new do |s|
|
3
|
+
s.name = 'pig_latin'
|
4
|
+
s.version = '0.0.2'
|
5
|
+
s.authors = ['Steve Hodges']
|
6
|
+
s.email = ['sjhodges@gmail.com']
|
7
|
+
s.homepage = 'https://github.com/stevehodges/pig_latin'
|
8
|
+
s.summary = 'Pig Latin'
|
9
|
+
s.description = 'Anslatetray ouryay Ailsray appway otay Igpay Atinlay!! (Translate your Rails app to Pig Latin!) Includes a rake task to translate all of your i18n locale configurations to pig latin. Or, generate pig latin on the fly!'
|
10
|
+
|
11
|
+
s.files = `git ls-files`.split("\n")
|
12
|
+
s.require_paths = ['lib']
|
13
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pig_latin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -19,7 +19,14 @@ email:
|
|
19
19
|
executables: []
|
20
20
|
extensions: []
|
21
21
|
extra_rdoc_files: []
|
22
|
-
files:
|
22
|
+
files:
|
23
|
+
- Gemfile
|
24
|
+
- Gemfile.lock
|
25
|
+
- README.md
|
26
|
+
- lib/pig_latin.rb
|
27
|
+
- lib/pig_latin/railties.rb
|
28
|
+
- lib/pig_latin/tasks/pig_latin.rake
|
29
|
+
- pig_latin.gemspec
|
23
30
|
homepage: https://github.com/stevehodges/pig_latin
|
24
31
|
licenses: []
|
25
32
|
post_install_message:
|