rails_locale_sorter 0.0.7 → 0.0.8
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/bin/locale_apply +10 -0
- data/bin/locale_generator +1 -1
- data/bin/locale_patch +11 -0
- data/bin/poop +11 -0
- data/bin/scoop +10 -0
- data/lib/rails_locale_sorter.rb +84 -14
- data/lib/rails_locale_sorter/version.rb +1 -1
- data/spec/resources/locale_tests/en-target.yml +8 -0
- data/spec/resources/locale_tests/en.yml +10 -0
- data/spec/rls-spec.rb +55 -8
- metadata +16 -12
- data/spec/resources/locale_tests/source.yml +0 -4
- data/spec/resources/locale_tests/target.yml +0 -3
data/bin/locale_apply
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'rails_locale_sorter'
|
3
|
+
|
4
|
+
puts "Usage: scoop [source-dir] [out-dir]\n\n\n"
|
5
|
+
|
6
|
+
source_dir = ARGV[0] || "new-locales"
|
7
|
+
out_dir = ARGV[1] || "locales"
|
8
|
+
|
9
|
+
lm = RailsLocaleSorter::LocaleManager.new source_dir, out_dir
|
10
|
+
lm.apply_patches
|
data/bin/locale_generator
CHANGED
data/bin/locale_patch
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'rails_locale_sorter'
|
3
|
+
|
4
|
+
puts "Usage: poop [source-path] [out-path] [default-language]\n\n\n"
|
5
|
+
|
6
|
+
source_dir = ARGV[0] || "locales"
|
7
|
+
out_dir = ARGV[1] || "new-locales"
|
8
|
+
truth_locale = ARGV[2] || "en.yml"
|
9
|
+
|
10
|
+
lm = RailsLocaleSorter::LocaleManager.new source_dir, out_dir
|
11
|
+
lm.create_patches truth_locale
|
data/bin/poop
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'rails_locale_sorter'
|
3
|
+
|
4
|
+
puts "Usage: poop [source-path] [out-path] [default-language]\n\n\n"
|
5
|
+
|
6
|
+
source_dir = ARGV[0] || "locales"
|
7
|
+
out_dir = ARGV[1] || "new-locales"
|
8
|
+
truth_locale = ARGV[2] || "en.yml"
|
9
|
+
|
10
|
+
lm = RailsLocaleSorter::LocaleManager.new source_dir, out_dir
|
11
|
+
lm.create_patches truth_locale
|
data/bin/scoop
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'rails_locale_sorter'
|
3
|
+
|
4
|
+
puts "Usage: scoop [source-dir] [out-dir]\n\n\n"
|
5
|
+
|
6
|
+
source_dir = ARGV[0] || "new-locales"
|
7
|
+
out_dir = ARGV[1] || "locales"
|
8
|
+
|
9
|
+
lm = RailsLocaleSorter::LocaleManager.new source_dir, out_dir
|
10
|
+
lm.apply_patches
|
data/lib/rails_locale_sorter.rb
CHANGED
@@ -30,43 +30,67 @@ module RailsLocaleSorter
|
|
30
30
|
end
|
31
31
|
|
32
32
|
class LocaleManager
|
33
|
-
|
33
|
+
attr_accessor :source, :out
|
34
|
+
|
35
|
+
MERGER = proc do |key, v1, v2|
|
34
36
|
if(Hash === v1 && Hash === v2)
|
35
37
|
v1.merge(v2, &MERGER)
|
36
38
|
else
|
37
|
-
v2
|
39
|
+
v2
|
38
40
|
end
|
39
41
|
end
|
40
42
|
|
41
43
|
def initialize(source_dir, out_dir)
|
42
44
|
@source = source_dir
|
43
45
|
@out = out_dir
|
44
|
-
end
|
45
46
|
|
46
|
-
def parse_to_yaml(truth = "en.yml")
|
47
|
-
# for ya2yaml
|
48
|
-
$KCODE="UTF8"
|
49
47
|
Dir::mkdir(@out) unless File.exists? @out
|
48
|
+
end
|
50
49
|
|
50
|
+
def create_missing_nodes(truth = "en.yml")
|
51
51
|
translations = YAML::load_file("#{@source}/#{truth}")
|
52
52
|
mergee = create_blank_copy(translations)
|
53
53
|
|
54
|
-
|
55
|
-
puts "Processing #{filename}..."
|
56
|
-
me = YAML::load(f)
|
54
|
+
process_each_file do |hash, file, filename|
|
57
55
|
unless filename == truth
|
58
|
-
|
56
|
+
hash = create_missing_keys(hash, mergee)
|
59
57
|
end
|
60
58
|
|
61
|
-
|
62
|
-
File.open("#{@out}/#{filename}", "w+") do |fw|
|
63
|
-
fw.puts me.ya2yaml(:syck_compatible => true)
|
64
|
-
end
|
59
|
+
sort_and_write(filename, hash)
|
65
60
|
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def create_patches(truth = "en.yml")
|
64
|
+
translations = YAML::load_file("#{@source}/#{truth}")
|
66
65
|
|
66
|
+
process_each_file do |hash, file, filename|
|
67
|
+
unless filename == truth
|
68
|
+
hash = list_missing_keys(translations, hash)
|
69
|
+
end
|
70
|
+
|
71
|
+
sort_and_write(filename, hash)
|
72
|
+
end
|
67
73
|
end
|
68
74
|
|
75
|
+
def apply_patches(reverse_dirs = false)
|
76
|
+
swap_dirs if reverse_dirs
|
77
|
+
|
78
|
+
process_each_file do |patch, file, filename|
|
79
|
+
target = YAML::load_file("#{@out}/#{filename}")
|
80
|
+
|
81
|
+
merged = target.merge(patch, &MERGER)
|
82
|
+
|
83
|
+
sort_and_write(filename, merged)
|
84
|
+
end
|
85
|
+
|
86
|
+
swap_dirs if reverse_dirs
|
87
|
+
end
|
69
88
|
private
|
89
|
+
def swap_dirs
|
90
|
+
tmp = @source
|
91
|
+
@source = @out
|
92
|
+
@out = tmp
|
93
|
+
end
|
70
94
|
|
71
95
|
def with_file(filename, &block)
|
72
96
|
leafname = filename.scan(/[a-zA-Z_-]*.yml/).first.to_s
|
@@ -81,6 +105,26 @@ module RailsLocaleSorter
|
|
81
105
|
end
|
82
106
|
end
|
83
107
|
|
108
|
+
def process_each_file(&block)
|
109
|
+
# for ya2yaml
|
110
|
+
$KCODE="UTF8"
|
111
|
+
|
112
|
+
with_each_file do |f, filename|
|
113
|
+
puts "Processing #{filename}..."
|
114
|
+
hash = YAML::load(f)
|
115
|
+
|
116
|
+
block.call(hash, f, filename)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def sort_and_write(filename, hash)
|
121
|
+
hash = OrderFact.convert_and_sort(hash, true)
|
122
|
+
|
123
|
+
File.open("#{@out}/#{filename}", "w+") do |fw|
|
124
|
+
fw.puts hash.ya2yaml(:syck_compatible => true)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
84
128
|
def create_missing_keys(object, all_keys)
|
85
129
|
ak_lang = all_keys.first[0]
|
86
130
|
ob_lang = object.first[0]
|
@@ -90,6 +134,32 @@ module RailsLocaleSorter
|
|
90
134
|
{ob_lang => new_values}
|
91
135
|
end
|
92
136
|
|
137
|
+
def compare_keys(source, target)
|
138
|
+
new_hash = {}
|
139
|
+
|
140
|
+
source.each do |k, v|
|
141
|
+
if Hash === target[k] && Hash === v
|
142
|
+
res = compare_keys(v, target[k])
|
143
|
+
new_hash[k] = res unless res.empty?
|
144
|
+
elsif target[k].nil?
|
145
|
+
new_hash[k] = v
|
146
|
+
else
|
147
|
+
# do nothing
|
148
|
+
# puts "#{k} is deleted"
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
new_hash
|
153
|
+
end
|
154
|
+
|
155
|
+
def list_missing_keys(source, target)
|
156
|
+
source_lang = source.first[0]
|
157
|
+
target_lang = target.first[0]
|
158
|
+
|
159
|
+
new_values = compare_keys(source[source_lang], target[target_lang])
|
160
|
+
{target_lang => new_values}
|
161
|
+
end
|
162
|
+
|
93
163
|
def blank_out_object(object)
|
94
164
|
unless(Hash === object)
|
95
165
|
return;
|
data/spec/rls-spec.rb
CHANGED
@@ -3,6 +3,7 @@ require "spec_helper"
|
|
3
3
|
|
4
4
|
describe RailsLocaleSorter::LocaleManager do
|
5
5
|
FIXTURE_DIR = "resources/locale_fixtures"
|
6
|
+
TEST_DIR = "resources/locale_tests"
|
6
7
|
SRC_DIR = "resources/src"
|
7
8
|
OUT_DIR = "resources/out"
|
8
9
|
|
@@ -17,14 +18,60 @@ describe RailsLocaleSorter::LocaleManager do
|
|
17
18
|
@lm = RailsLocaleSorter::LocaleManager.new SRC_DIR, OUT_DIR
|
18
19
|
end
|
19
20
|
|
20
|
-
|
21
|
-
|
21
|
+
describe "create missing nodes" do
|
22
|
+
it "writes blank keys for new values" do
|
23
|
+
@lm.create_missing_nodes "src.yml"
|
22
24
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
25
|
+
result = File.open("#{OUT_DIR}/out.yml").read
|
26
|
+
result.should include "source_only: ~"
|
27
|
+
result.should include "src_only: ~"
|
28
|
+
result.should include "both: Both"
|
29
|
+
result.should include "exotic: 下一页!След"
|
30
|
+
result.should include "out:"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "create_patches" do
|
35
|
+
it "creates a file of differences only" do
|
36
|
+
@lm.create_patches "src.yml"
|
37
|
+
|
38
|
+
result = File.open("#{OUT_DIR}/out.yml").read
|
39
|
+
result.should include "out:"
|
40
|
+
result.should include "text:"
|
41
|
+
result.should include "source_only: "
|
42
|
+
result.should include "date:"
|
43
|
+
result.should include "src_only: "
|
44
|
+
result.should_not include "both: Both"
|
45
|
+
result.should_not include "exotic: 下一页!След"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "poop and scoop" do
|
50
|
+
before :each do
|
51
|
+
# setup test folders
|
52
|
+
FileUtils.rm_r(SRC_DIR) if File.exists? SRC_DIR
|
53
|
+
FileUtils.cp_r(TEST_DIR, SRC_DIR)
|
54
|
+
FileUtils.rm_r(OUT_DIR) if File.exists? OUT_DIR
|
55
|
+
@lm = RailsLocaleSorter::LocaleManager.new SRC_DIR, OUT_DIR
|
56
|
+
end
|
57
|
+
|
58
|
+
it "goes through the full cycle" do
|
59
|
+
@lm.create_patches "en.yml"
|
60
|
+
|
61
|
+
result = File.open("#{OUT_DIR}/en-target.yml").read
|
62
|
+
result.should include "en:"
|
63
|
+
result.should include "text:"
|
64
|
+
result.should include "invalid: "
|
65
|
+
result.should include "shared:"
|
66
|
+
result.should include "oops:"
|
67
|
+
result.should_not include "fixed:"
|
68
|
+
result.should_not include "provide:"
|
69
|
+
|
70
|
+
@lm.apply_patches true
|
71
|
+
patched = File.open("#{SRC_DIR}/en-target.yml").read
|
72
|
+
source = File.open("#{SRC_DIR}/en.yml").read
|
73
|
+
|
74
|
+
patched.should == source
|
75
|
+
end
|
29
76
|
end
|
30
77
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_locale_sorter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 8
|
10
|
+
version: 0.0.8
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Michael Wheeler
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-
|
18
|
+
date: 2012-03-20 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -69,7 +69,11 @@ description: "Manage Rails Locale YAML: Sort, remove duplicates, and create stub
|
|
69
69
|
email:
|
70
70
|
- michael.wheeler@tapjoy.com
|
71
71
|
executables:
|
72
|
+
- locale_apply
|
72
73
|
- locale_generator
|
74
|
+
- locale_patch
|
75
|
+
- poop
|
76
|
+
- scoop
|
73
77
|
extensions: []
|
74
78
|
|
75
79
|
extra_rdoc_files: []
|
@@ -79,16 +83,18 @@ files:
|
|
79
83
|
- Gemfile
|
80
84
|
- README.md
|
81
85
|
- Rakefile
|
86
|
+
- bin/locale_apply
|
82
87
|
- bin/locale_generator
|
88
|
+
- bin/locale_patch
|
89
|
+
- bin/poop
|
90
|
+
- bin/scoop
|
83
91
|
- lib/rails_locale_sorter.rb
|
84
92
|
- lib/rails_locale_sorter/version.rb
|
85
93
|
- rails_locale_sorter.gemspec
|
86
94
|
- spec/resources/locale_fixtures/out.yml
|
87
95
|
- spec/resources/locale_fixtures/src.yml
|
88
|
-
- spec/resources/locale_tests/
|
89
|
-
- spec/resources/locale_tests/
|
90
|
-
- spec/resources/src/out.yml
|
91
|
-
- spec/resources/src/src.yml
|
96
|
+
- spec/resources/locale_tests/en-target.yml
|
97
|
+
- spec/resources/locale_tests/en.yml
|
92
98
|
- spec/rls-spec.rb
|
93
99
|
- spec/spec_helper.rb
|
94
100
|
has_rdoc: true
|
@@ -128,9 +134,7 @@ summary: "Manage Rails Locale YAML: Sort, remove duplicates, and create stubs fo
|
|
128
134
|
test_files:
|
129
135
|
- spec/resources/locale_fixtures/out.yml
|
130
136
|
- spec/resources/locale_fixtures/src.yml
|
131
|
-
- spec/resources/locale_tests/
|
132
|
-
- spec/resources/locale_tests/
|
133
|
-
- spec/resources/src/out.yml
|
134
|
-
- spec/resources/src/src.yml
|
137
|
+
- spec/resources/locale_tests/en-target.yml
|
138
|
+
- spec/resources/locale_tests/en.yml
|
135
139
|
- spec/rls-spec.rb
|
136
140
|
- spec/spec_helper.rb
|