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.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in rails_locale_sorter.gemspec
4
+ gemspec
@@ -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,3 @@
1
+ module RailsLocaleSorter
2
+ VERSION = "0.0.1"
3
+ 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
@@ -0,0 +1,3 @@
1
+ out:
2
+ text:
3
+ both: Both
@@ -0,0 +1,6 @@
1
+ src:
2
+ text:
3
+ source_only: Source Only
4
+ both: Both
5
+ date:
6
+ src_only: Only
@@ -0,0 +1,4 @@
1
+ source:
2
+ text:
3
+ source_only: Source Only
4
+ both: Both
@@ -0,0 +1,3 @@
1
+ target:
2
+ text:
3
+ both: Both
@@ -0,0 +1,7 @@
1
+ ---
2
+ out:
3
+ date:
4
+ src_only: ~
5
+ text:
6
+ both: ~
7
+ source_only: ~
@@ -0,0 +1,7 @@
1
+ ---
2
+ src:
3
+ date:
4
+ src_only: Only
5
+ text:
6
+ both: Both
7
+ source_only: "Source Only"
@@ -0,0 +1,3 @@
1
+ out:
2
+ text:
3
+ both: Both
@@ -0,0 +1,6 @@
1
+ src:
2
+ text:
3
+ source_only: Source Only
4
+ both: Both
5
+ date:
6
+ src_only: Only
@@ -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
@@ -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