babel_diff 1.0.3 → 1.1.0
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.
- checksums.yaml +4 -4
- data/babel_diff.gemspec +1 -1
- data/bin/babel_diff +24 -1
- data/bin/babel_import +34 -0
- data/lib/babel_diff.rb +13 -1
- data/lib/babel_diff/hash_flattener.rb +32 -0
- data/lib/babel_diff/import_file_handler.rb +52 -0
- data/lib/babel_diff/version.rb +1 -1
- data/lib/babel_diff/yaml_differ.rb +2 -36
- data/lib/babel_diff/yaml_merger.rb +20 -0
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1f45964490450ee1b8fd1d63721bfe461c49ea69
|
4
|
+
data.tar.gz: 043788f850c467122cd044e7f21c515861197a6e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a0692f831fb000c55c1c57862481ac1856fcfe14b8a96e68aa79a63589a9dfc84c183ce03c0fd4bb77819d4faf075cda267adef73f920c015d81db8dd94f7a81
|
7
|
+
data.tar.gz: 973394a45b36855c46fb240937864dbf17e17176a1ac7989b4c4a2466195a48b78ddfcf18d1aa2540601b349499bb563220011d010005dd898e61845c23f6eac
|
data/babel_diff.gemspec
CHANGED
@@ -13,7 +13,7 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.license = "MIT"
|
14
14
|
|
15
15
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
16
|
-
spec.executables << "babel_diff"
|
16
|
+
spec.executables << "babel_diff" << "babel_import"
|
17
17
|
spec.require_paths = ["lib"]
|
18
18
|
|
19
19
|
spec.add_development_dependency "bundler", "~> 1.8"
|
data/bin/babel_diff
CHANGED
@@ -1,4 +1,27 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require 'babel_diff'
|
3
3
|
|
4
|
-
|
4
|
+
help = <<-HELP
|
5
|
+
usages:
|
6
|
+
|
7
|
+
babel_import <import_dir> <phrase_dir> [defaults to 'config/locales/']
|
8
|
+
|
9
|
+
Imports all phrase files in the <import_dir> and merges them with the phrase files in <phrase_dir>.
|
10
|
+
Existing keys will be overwritten.
|
11
|
+
|
12
|
+
babel_diff <phrase_file_path> [defaults to 'config/locales/phrase.en.yml']
|
13
|
+
|
14
|
+
Produces two files containing all updates and all additions to the given phrase file located at <phrase_file_path> since babel_diff last ran.
|
15
|
+
|
16
|
+
HELP
|
17
|
+
|
18
|
+
case ARGV.first
|
19
|
+
when "--help"
|
20
|
+
puts help
|
21
|
+
exit 0
|
22
|
+
when nil
|
23
|
+
BabelDiff.generate_diffs
|
24
|
+
else
|
25
|
+
BabelDiff.generate_diffs(ARGV[0])
|
26
|
+
end
|
27
|
+
|
data/bin/babel_import
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'babel_diff'
|
3
|
+
|
4
|
+
help = <<-HELP
|
5
|
+
usages:
|
6
|
+
|
7
|
+
babel_import <import_dir> <phrase_dir> [defaults to 'config/locales/']
|
8
|
+
|
9
|
+
Imports all phrase files in the <import_dir> and merges them with the phrase files in <phrase_dir>.
|
10
|
+
Existing keys will be overwritten.
|
11
|
+
|
12
|
+
babel_diff <phrase_file_path> [defaults to 'config/locales/phrase.en.yml']
|
13
|
+
|
14
|
+
Produces two files containing all updates and all additions to the given phrase file located at <phrase_file_path> since babel_diff last ran.
|
15
|
+
|
16
|
+
HELP
|
17
|
+
|
18
|
+
|
19
|
+
case ARGV.first
|
20
|
+
when nil
|
21
|
+
puts help
|
22
|
+
exit 1
|
23
|
+
when "--help"
|
24
|
+
puts help
|
25
|
+
exit 0
|
26
|
+
else
|
27
|
+
if ARGV[1]
|
28
|
+
BabelDiff.import_translations(ARGV[0], ARGV[1])
|
29
|
+
else
|
30
|
+
BabelDiff.import_translations(ARGV[0])
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
|
data/lib/babel_diff.rb
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
require "babel_diff/version"
|
2
2
|
require "babel_diff/file_handler"
|
3
|
+
require "babel_diff/import_file_handler"
|
3
4
|
require "babel_diff/yaml_differ"
|
5
|
+
require "babel_diff/yaml_merger"
|
6
|
+
require "babel_diff/hash_flattener"
|
4
7
|
|
5
8
|
module BabelDiff
|
6
|
-
def self.
|
9
|
+
def self.generate_diffs(current_version_path = "config/locales/phrase.en.yml")
|
7
10
|
handler = FileHandler.new(current_version_path)
|
8
11
|
|
9
12
|
yaml_differ = YamlDiffer.new(handler.current_version, handler.previous_version)
|
@@ -15,4 +18,13 @@ module BabelDiff
|
|
15
18
|
handler.version_files
|
16
19
|
end
|
17
20
|
|
21
|
+
def self.import_translations(import_directory, phrase_directory = "config/locales/")
|
22
|
+
handler = ImportFileHandler.new(import_directory, phrase_directory)
|
23
|
+
handler.phrases.each do |language,files|
|
24
|
+
phrase, import = files
|
25
|
+
yaml_merger = YamlMerger.new(phrase, import)
|
26
|
+
handler.update_phrase(language,yaml_merger.merged_yaml)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
18
30
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module BabelDiff
|
2
|
+
class HashFlattener < Struct.new(:hash)
|
3
|
+
def flat_hash
|
4
|
+
@_flat_hash ||= {}
|
5
|
+
end
|
6
|
+
|
7
|
+
def flatten(current_hash = hash, keys = [])
|
8
|
+
current_hash.each do |key, value|
|
9
|
+
new_keys = keys.dup << key
|
10
|
+
if value.is_a? Hash
|
11
|
+
flatten(value, new_keys)
|
12
|
+
else
|
13
|
+
flat_hash[new_keys.join(".")] = value
|
14
|
+
end
|
15
|
+
end
|
16
|
+
flat_hash
|
17
|
+
end
|
18
|
+
|
19
|
+
def unflatten
|
20
|
+
{}.tap do |unflattened_hash|
|
21
|
+
hash.each do |k,v|
|
22
|
+
keys = k.split(".")
|
23
|
+
current_hash = unflattened_hash
|
24
|
+
|
25
|
+
keys[0...-1].each { |key| current_hash = current_hash[key] ||= {} }
|
26
|
+
|
27
|
+
current_hash[keys.last] = v
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'pry'
|
2
|
+
module BabelDiff
|
3
|
+
class ImportFileHandler < Struct.new(:import_directory, :phrase_directory)
|
4
|
+
|
5
|
+
def phrases
|
6
|
+
phrase_files = Dir.glob(phrase_directory + '/*.yml').map {|f| PhraseFile.new(f) }
|
7
|
+
import_files = Dir.glob(import_directory + '/*/*.yml').map {|f| ImportFile.new(f) }
|
8
|
+
|
9
|
+
matched_files = {}
|
10
|
+
|
11
|
+
phrase_files.each do |phrase|
|
12
|
+
if matched_import = import_files.detect {|i| i.language == phrase.language }
|
13
|
+
matched_files[phrase.language] = [phrase.contents, matched_import.contents]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
matched_files
|
18
|
+
end
|
19
|
+
|
20
|
+
def update_phrase(language, contents)
|
21
|
+
File.open(phrase_directory + "/phrase.#{language}.yml", "w+") do |file|
|
22
|
+
file.write(contents)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class PhraseFile < Struct.new(:path)
|
27
|
+
|
28
|
+
def language
|
29
|
+
path.split("/").last.match(/phrase.(.*).yml/)[1]
|
30
|
+
end
|
31
|
+
|
32
|
+
def contents
|
33
|
+
File.read(path)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
class ImportFile < Struct.new(:path)
|
39
|
+
|
40
|
+
def language
|
41
|
+
path.split("/")[-2]
|
42
|
+
end
|
43
|
+
|
44
|
+
def contents
|
45
|
+
File.read(path)
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
data/lib/babel_diff/version.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'yaml'
|
2
|
-
require 'pry'
|
3
2
|
|
4
3
|
module BabelDiff
|
5
4
|
class YamlDiffer < Struct.new(:current_version, :previous_version)
|
@@ -7,14 +6,14 @@ module BabelDiff
|
|
7
6
|
process_difference unless @processed
|
8
7
|
@processed = true
|
9
8
|
|
10
|
-
|
9
|
+
HashFlattener.new(updates_hash).unflatten.to_yaml
|
11
10
|
end
|
12
11
|
|
13
12
|
def additions
|
14
13
|
process_difference unless @processed
|
15
14
|
@processed = true
|
16
15
|
|
17
|
-
|
16
|
+
HashFlattener.new(additions_hash).unflatten.to_yaml
|
18
17
|
end
|
19
18
|
|
20
19
|
def process_difference
|
@@ -30,22 +29,8 @@ module BabelDiff
|
|
30
29
|
end
|
31
30
|
end
|
32
31
|
|
33
|
-
|
34
32
|
private
|
35
33
|
|
36
|
-
def unflatten(hash)
|
37
|
-
{}.tap do |unflattened_hash|
|
38
|
-
hash.each do |k,v|
|
39
|
-
keys = k.split(".")
|
40
|
-
current_hash = unflattened_hash
|
41
|
-
|
42
|
-
keys[0...-1].each { |key| current_hash = current_hash[key] ||= {} }
|
43
|
-
|
44
|
-
current_hash[keys.last] = v
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
34
|
def updates_hash
|
50
35
|
@updated_hash ||= {}
|
51
36
|
end
|
@@ -63,23 +48,4 @@ module BabelDiff
|
|
63
48
|
end
|
64
49
|
end
|
65
50
|
|
66
|
-
class HashFlattener < Struct.new(:hash)
|
67
|
-
|
68
|
-
def flatten(current_hash = hash, keys = [])
|
69
|
-
current_hash.each do |key, value|
|
70
|
-
new_keys = keys.dup << key
|
71
|
-
if value.is_a? Hash
|
72
|
-
flatten(value, new_keys)
|
73
|
-
else
|
74
|
-
flat_hash[new_keys.join(".")] = value
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
flat_hash
|
79
|
-
end
|
80
|
-
|
81
|
-
def flat_hash
|
82
|
-
@_flat_hash ||= {}
|
83
|
-
end
|
84
|
-
end
|
85
51
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module BabelDiff
|
2
|
+
class YamlMerger < Struct.new(:original_contents, :flattened_contents_to_merge)
|
3
|
+
|
4
|
+
def merged_yaml
|
5
|
+
flat_original = HashFlattener.new(original_hash).flatten
|
6
|
+
|
7
|
+
flat_original.merge!(contents_to_merge)
|
8
|
+
HashFlattener.new(flat_original).unflatten.to_yaml
|
9
|
+
end
|
10
|
+
|
11
|
+
def original_hash
|
12
|
+
YAML.load(original_contents)
|
13
|
+
end
|
14
|
+
|
15
|
+
def contents_to_merge
|
16
|
+
YAML.load(flattened_contents_to_merge)
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: babel_diff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan McGarvey
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-02-
|
12
|
+
date: 2015-02-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -60,6 +60,7 @@ email:
|
|
60
60
|
- devs@gust.com
|
61
61
|
executables:
|
62
62
|
- babel_diff
|
63
|
+
- babel_import
|
63
64
|
extensions: []
|
64
65
|
extra_rdoc_files: []
|
65
66
|
files:
|
@@ -75,12 +76,16 @@ files:
|
|
75
76
|
- Rakefile
|
76
77
|
- babel_diff.gemspec
|
77
78
|
- bin/babel_diff
|
79
|
+
- bin/babel_import
|
78
80
|
- bin/console
|
79
81
|
- bin/setup
|
80
82
|
- lib/babel_diff.rb
|
81
83
|
- lib/babel_diff/file_handler.rb
|
84
|
+
- lib/babel_diff/hash_flattener.rb
|
85
|
+
- lib/babel_diff/import_file_handler.rb
|
82
86
|
- lib/babel_diff/version.rb
|
83
87
|
- lib/babel_diff/yaml_differ.rb
|
88
|
+
- lib/babel_diff/yaml_merger.rb
|
84
89
|
homepage: https://github.com/zephyr-dev/babel_diff
|
85
90
|
licenses:
|
86
91
|
- MIT
|