rails_locale_sorter 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/.gitignore +4 -0
- data/Gemfile +4 -0
- data/Rakefile +1 -0
- data/bin/locale_generator +11 -0
- data/lib/rails_locale_sorter.rb +108 -0
- data/lib/rails_locale_sorter/version.rb +3 -0
- data/rails_locale_sorter.gemspec +26 -0
- data/spec/resources/locale_fixtures/out.yml +3 -0
- data/spec/resources/locale_fixtures/src.yml +6 -0
- data/spec/resources/locale_tests/source.yml +4 -0
- data/spec/resources/locale_tests/target.yml +3 -0
- data/spec/resources/out/__out.yml +7 -0
- data/spec/resources/out/__src.yml +7 -0
- data/spec/resources/src/out.yml +3 -0
- data/spec/resources/src/src.yml +6 -0
- data/spec/rls-spec.rb +27 -0
- data/spec/spec_helper.rb +1 -0
- metadata +139 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,11 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'rails_locale_sorter'
|
3
|
+
|
4
|
+
puts "Usage: RailsLocaleSorter [source-path] [out-path] [default-language]"
|
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.parse_to_yaml
|
@@ -0,0 +1,108 @@
|
|
1
|
+
require "rails_locale_sorter/version"
|
2
|
+
require 'rubygems'
|
3
|
+
require 'active_support'
|
4
|
+
require 'ya2yaml'
|
5
|
+
|
6
|
+
module RailsLocaleSorter
|
7
|
+
class OrderFact
|
8
|
+
def self.returning(value)
|
9
|
+
yield(value)
|
10
|
+
value
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.convert_and_sort(object, deep = false)
|
14
|
+
# from http://seb.box.re/2010/1/15/deep-hash-ordering-with-ruby-1-8/
|
15
|
+
if object.is_a?(Hash)
|
16
|
+
# Hash is ordered in Ruby 1.9!
|
17
|
+
res = self.returning(RUBY_VERSION >= '1.9' ? Hash.new : ActiveSupport::OrderedHash.new) do |map|
|
18
|
+
object.each {|k, v| map[k] = deep ? convert_and_sort(v, deep) : v }
|
19
|
+
end
|
20
|
+
return res.class[res.sort {|a, b| a[0].to_s <=> b[0].to_s } ]
|
21
|
+
elsif deep && object.is_a?(Array)
|
22
|
+
array = Array.new
|
23
|
+
object.each_with_index {|v, i| array[i] = convert_and_sort(v, deep) }
|
24
|
+
return array
|
25
|
+
else
|
26
|
+
return object
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class LocaleManager
|
32
|
+
MERGER = proc do |key, v1, v2|
|
33
|
+
if(Hash === v1 && Hash === v2)
|
34
|
+
v1.merge(v2, &MERGER)
|
35
|
+
else
|
36
|
+
v2
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def initialize(source_dir, out_dir)
|
41
|
+
@source = source_dir
|
42
|
+
@out = out_dir
|
43
|
+
end
|
44
|
+
|
45
|
+
def parse_to_yaml(truth = "en.yml")
|
46
|
+
# for ya2yaml
|
47
|
+
$KCODE="UTF8"
|
48
|
+
Dir::mkdir(@out) unless File.exists? @out
|
49
|
+
|
50
|
+
translations = YAML::load_file("#{@source}/#{truth}")
|
51
|
+
mergee = create_blank_copy(translations)
|
52
|
+
|
53
|
+
with_each_file do |f, filename|
|
54
|
+
me = YAML::load(f)
|
55
|
+
unless filename == truth
|
56
|
+
me = create_missing_keys(me, mergee)
|
57
|
+
end
|
58
|
+
|
59
|
+
me = OrderFact.convert_and_sort(me, true)
|
60
|
+
File.open("#{@out}/__#{filename}", "w+") do |fw|
|
61
|
+
fw.puts me.ya2yaml(:syck_compatible => true)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
def with_file(filename, &block)
|
70
|
+
leafname = filename.scan(/([a-zA-Z_-]*.yml)/).first.to_s
|
71
|
+
File.open("#{filename}", "r+") do |f|
|
72
|
+
block.call(f, leafname) unless block.nil?
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def with_each_file(&block)
|
77
|
+
Dir[@source+"/*.yml"].each do |filename|
|
78
|
+
with_file(filename, &block)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def create_missing_keys(object, all_keys)
|
83
|
+
ak_lang = all_keys.first[0]
|
84
|
+
ob_lang = object.first[0]
|
85
|
+
|
86
|
+
new_values = object[ob_lang].merge(all_keys[ak_lang], &MERGER)
|
87
|
+
|
88
|
+
return {ob_lang => new_values}
|
89
|
+
end
|
90
|
+
|
91
|
+
def blank_out_object(object)
|
92
|
+
unless(Hash === object)
|
93
|
+
return;
|
94
|
+
end
|
95
|
+
|
96
|
+
object.each do |k, v|
|
97
|
+
Hash === v ? object[k]=blank_out_object(v) : object[k]=nil
|
98
|
+
end
|
99
|
+
|
100
|
+
object
|
101
|
+
end
|
102
|
+
|
103
|
+
def create_blank_copy(object)
|
104
|
+
obj = object.clone
|
105
|
+
blank_out_object(obj)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "rails_locale_sorter/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "rails_locale_sorter"
|
7
|
+
s.version = RailsLocaleSorter::VERSION
|
8
|
+
s.authors = ["Michael Wheeler"]
|
9
|
+
s.email = ["michael.wheeler@tapjoy.com"]
|
10
|
+
s.homepage = "http://github.com/matchboxmike"
|
11
|
+
s.summary = %q{Manage Rails Locale YAML: Sort, remove duplicates, and create stubs for other languages.}
|
12
|
+
s.description = %q{Manage Rails Locale YAML: Sort, remove duplicates, and create stubs for other languages.}
|
13
|
+
|
14
|
+
s.rubyforge_project = "rails_locale_sorter"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
# specify any dependencies here; for example:
|
22
|
+
# s.add_development_dependency "rspec"
|
23
|
+
s.add_dependency "rubygems-update", ">= 1.3.7"
|
24
|
+
s.add_dependency "activesupport", ">= 2.3.14"
|
25
|
+
s.add_dependency "ya2yaml", ">= 0.30"
|
26
|
+
end
|
data/spec/rls-spec.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe RailsLocaleSorter::LocaleManager do
|
4
|
+
FIXTURE_DIR = "resources/locale_fixtures"
|
5
|
+
SRC_DIR = "resources/src"
|
6
|
+
OUT_DIR = "resources/out"
|
7
|
+
|
8
|
+
before do
|
9
|
+
# setup test folders
|
10
|
+
FileUtils.rm_r(SRC_DIR) if File.exists? SRC_DIR
|
11
|
+
FileUtils.cp_r(FIXTURE_DIR, SRC_DIR)
|
12
|
+
FileUtils.rm_r(OUT_DIR) if File.exists? OUT_DIR
|
13
|
+
end
|
14
|
+
|
15
|
+
before :each do
|
16
|
+
@lm = RailsLocaleSorter::LocaleManager.new SRC_DIR, OUT_DIR
|
17
|
+
end
|
18
|
+
|
19
|
+
it "writes blank keys for new values" do
|
20
|
+
@lm.parse_to_yaml "src.yml"
|
21
|
+
|
22
|
+
result = File.open("#{OUT_DIR}/__out.yml").read
|
23
|
+
result.should include "source_only: ~"
|
24
|
+
result.should include "src_only: ~"
|
25
|
+
result.should include "out:"
|
26
|
+
end
|
27
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "rails_locale_sorter"
|
metadata
ADDED
@@ -0,0 +1,139 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rails_locale_sorter
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Michael Wheeler
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2012-01-31 00:00:00 -08:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: rubygems-update
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 21
|
30
|
+
segments:
|
31
|
+
- 1
|
32
|
+
- 3
|
33
|
+
- 7
|
34
|
+
version: 1.3.7
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: activesupport
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: 31
|
46
|
+
segments:
|
47
|
+
- 2
|
48
|
+
- 3
|
49
|
+
- 14
|
50
|
+
version: 2.3.14
|
51
|
+
type: :runtime
|
52
|
+
version_requirements: *id002
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: ya2yaml
|
55
|
+
prerelease: false
|
56
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
hash: 55
|
62
|
+
segments:
|
63
|
+
- 0
|
64
|
+
- 30
|
65
|
+
version: "0.30"
|
66
|
+
type: :runtime
|
67
|
+
version_requirements: *id003
|
68
|
+
description: "Manage Rails Locale YAML: Sort, remove duplicates, and create stubs for other languages."
|
69
|
+
email:
|
70
|
+
- michael.wheeler@tapjoy.com
|
71
|
+
executables:
|
72
|
+
- locale_generator
|
73
|
+
extensions: []
|
74
|
+
|
75
|
+
extra_rdoc_files: []
|
76
|
+
|
77
|
+
files:
|
78
|
+
- .gitignore
|
79
|
+
- Gemfile
|
80
|
+
- Rakefile
|
81
|
+
- bin/locale_generator
|
82
|
+
- lib/rails_locale_sorter.rb
|
83
|
+
- lib/rails_locale_sorter/version.rb
|
84
|
+
- rails_locale_sorter.gemspec
|
85
|
+
- spec/resources/locale_fixtures/out.yml
|
86
|
+
- spec/resources/locale_fixtures/src.yml
|
87
|
+
- spec/resources/locale_tests/source.yml
|
88
|
+
- spec/resources/locale_tests/target.yml
|
89
|
+
- spec/resources/out/__out.yml
|
90
|
+
- spec/resources/out/__src.yml
|
91
|
+
- spec/resources/src/out.yml
|
92
|
+
- spec/resources/src/src.yml
|
93
|
+
- spec/rls-spec.rb
|
94
|
+
- spec/spec_helper.rb
|
95
|
+
has_rdoc: true
|
96
|
+
homepage: http://github.com/matchboxmike
|
97
|
+
licenses: []
|
98
|
+
|
99
|
+
post_install_message:
|
100
|
+
rdoc_options: []
|
101
|
+
|
102
|
+
require_paths:
|
103
|
+
- lib
|
104
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
hash: 3
|
110
|
+
segments:
|
111
|
+
- 0
|
112
|
+
version: "0"
|
113
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
115
|
+
requirements:
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
hash: 3
|
119
|
+
segments:
|
120
|
+
- 0
|
121
|
+
version: "0"
|
122
|
+
requirements: []
|
123
|
+
|
124
|
+
rubyforge_project: rails_locale_sorter
|
125
|
+
rubygems_version: 1.3.7
|
126
|
+
signing_key:
|
127
|
+
specification_version: 3
|
128
|
+
summary: "Manage Rails Locale YAML: Sort, remove duplicates, and create stubs for other languages."
|
129
|
+
test_files:
|
130
|
+
- spec/resources/locale_fixtures/out.yml
|
131
|
+
- spec/resources/locale_fixtures/src.yml
|
132
|
+
- spec/resources/locale_tests/source.yml
|
133
|
+
- spec/resources/locale_tests/target.yml
|
134
|
+
- spec/resources/out/__out.yml
|
135
|
+
- spec/resources/out/__src.yml
|
136
|
+
- spec/resources/src/out.yml
|
137
|
+
- spec/resources/src/src.yml
|
138
|
+
- spec/rls-spec.rb
|
139
|
+
- spec/spec_helper.rb
|