transync 1.0.1 → 1.0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5e731d0853faec16a75252dfc64f65ae783d6a69
4
- data.tar.gz: c26ef0c56ef0652d1a6a7cc93472965053fdbb83
3
+ metadata.gz: 90302f66b201067dffbb9b3e55eded34a9d2bac1
4
+ data.tar.gz: 7a921bf6c24b68d4b5f94dbf472b9986d5d01c18
5
5
  SHA512:
6
- metadata.gz: 92476f9124ea09d46e7b98574a07df504f73d5aa0bca336b39ebb87249253b38aa9d75791c91f9771996424c70319834b7cf04c47c718afb40271acdfad7b1e3
7
- data.tar.gz: 6c5a099fca0df65ecbbf957ba6918e1d76b7d3936a1ca33403ea56b05432f973aabdb8bc34d12bbfb2d8d66c2828d40cb39ea489de0a6d0786d27a72658ba38b
6
+ metadata.gz: 9b3107c28d578555752291db1afe9023052c9e55e01407f51252b1eca986be2605a17d11e527508948dc31f01bb9394b5540687798407f82ca91e2de77697411
7
+ data.tar.gz: 60f2a4823fc51abd6b8855e16801ecc49ec2ce7529e0795566afa40aec9f2c090124a7b0a125666a9c8f8864ba4424e8bab630bcc0a924c958d51ce2238b57cc
data/README.md CHANGED
@@ -7,6 +7,16 @@ gem install transync
7
7
  You need settings file to be named `transync.yml` and to be in same directory from which we are running `transync` command.
8
8
  For example see `transync.SAMPLE.yml`.
9
9
 
10
+ ## Assumptions
11
+
12
+ You have xliff files in one directory, named like: common.en.xliff where common is name of the file and also google doc
13
+ spreadsheet tab. en is language and you have google doc with structure where first row is key, language 1, language 2
14
+
15
+ ## How does it work?
16
+
17
+ Updating GDoc from our xliff files. It won't delete any key, it will only add new or change existing ones. Same
18
+ for direction from Gdoc to xliff.
19
+
10
20
  ### Process
11
21
 
12
22
  - Create new Google Doc Spreadsheet
@@ -28,27 +38,16 @@ transync x2g
28
38
  transync g2x
29
39
  ```
30
40
 
31
- ### Development on this gem
41
+ ### Gem development
32
42
 
33
43
  ```
34
- rake install && transync test
44
+ rake install && transync x2g|g2x test
45
+ ruby g2x_spec.rb
46
+ ruby x2g_spec.rb
35
47
  ```
36
48
 
37
- # Assumptions:
38
-
39
- You have xliff files in one directory, named like: common.en.xliff where common is name of the file and also google doc
40
- spreadsheet tab. en is language and you have google doc with structure where first row is key, language 1, language 2
41
-
42
- # Features
43
-
44
- Updating GDoc from our xliff files. It won't delete any key, it will only add new or change existing ones.
45
-
46
- # Source
47
-
48
- Gem docs available at http://gimite.net/doc/google-drive-ruby
49
+ When running with test as second argument, changes won't be written to files or spreadsheet.
49
50
 
50
51
  # TODO
51
52
 
52
- - more tests, edge cases
53
- - more OOP
54
53
  - update for more than 2 languages
data/bin/transync CHANGED
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'transync'
4
- Transync.run ARGV[0]
4
+ Transync.run ARGV[0], ARGV[1]
data/lib/hash.rb ADDED
@@ -0,0 +1,12 @@
1
+ # Monkey patch for diff method
2
+
3
+ class Hash
4
+ def diff(other)
5
+ self.keys.inject({}) do |memo, key|
6
+ unless self[key] == other[key]
7
+ memo[key] = [self[key], other[key]]
8
+ end
9
+ memo
10
+ end
11
+ end
12
+ end
data/lib/transync.rb CHANGED
@@ -4,13 +4,13 @@ require_relative 'transync/sync/sync_util'
4
4
 
5
5
  module Transync
6
6
 
7
- def self.run(mode)
7
+ def self.run(mode, test = nil)
8
8
  FileUtils.mkdir('.transync_log') unless Dir.exist?('.transync_log')
9
9
  path = TransyncConfig::CONFIG['XLIFF_FILES_PATH']
10
10
 
11
11
  if mode == 'x2g' or mode == 'g2x'
12
12
  sync = TranslationSync.new(path, mode)
13
- sync.run(mode)
13
+ sync.run(mode, test)
14
14
  end
15
15
 
16
16
  if mode == 'init'
@@ -26,14 +26,35 @@ module SyncUtil
26
26
  SyncUtil.log_and_puts(msg)
27
27
  end
28
28
 
29
- def self.info_diff(file, language, operation, trans_key, trans_value)
30
- msg = "#{file} (#{language}) - #{operation}: '#{trans_key}'"
31
- msg += " to '#{trans_value}'" unless trans_value.nil?
29
+ def self.info_diff(file, language, diff)
30
+ msg = "#{file} (#{language})"
31
+ if diff.empty?
32
+ msg += ' already has same keys and values'
33
+ else
34
+ msg = build_diff_print(diff, msg)
35
+ end
32
36
  SyncUtil.log_and_puts(msg)
33
37
  end
34
38
 
39
+ def self.build_diff_print(diff, msg)
40
+ begin
41
+ # get longest key and value
42
+ max_key_length = diff.keys.max { |a, b| a.length <=> b.length }.length
43
+ max_val_length = diff.values.max { |a, b| a[1].to_s.length <=> b[1].to_s.length }[1].length
44
+ rescue
45
+ max_key_length = 0
46
+ max_val_length = 0
47
+ end
48
+
49
+ diff.keys.each do |key|
50
+ operation = diff[key][1].nil? ? 'Adding' : 'Changing'
51
+ msg += "\n #{operation.ljust(8)} - #{key.ljust(max_key_length)}: '#{diff[key][1].to_s.ljust(max_val_length)}' => '#{diff[key][0]}' "
52
+ end
53
+ msg
54
+ end
55
+
35
56
  def self.log_and_puts(msg)
36
- p msg
57
+ puts msg
37
58
  @logger.info msg
38
59
  end
39
60
 
@@ -1,6 +1,7 @@
1
1
  require_relative '../gdoc_trans/gdoc_trans_reader'
2
2
  require_relative '../gdoc_trans/gdoc_trans_writer'
3
3
  require_relative '../xliff_trans/xliff_trans_writer'
4
+ require_relative '../../hash'
4
5
 
5
6
  class TranslationSync
6
7
 
@@ -11,7 +12,7 @@ class TranslationSync
11
12
  SyncUtil.create_logger(direction)
12
13
  end
13
14
 
14
- def run(direction)
15
+ def run(direction, test)
15
16
  @config['FILES'].each do |file|
16
17
  valid, _ = SyncUtil::check_and_get_xliff_files(@config['LANGUAGES'], @path, file)
17
18
  abort('Fix your Xliff translations first!') unless valid
@@ -20,6 +21,8 @@ class TranslationSync
20
21
  trans_sync = TranslationSync.new(@path, direction, file)
21
22
  trans_hash = trans_sync.sync(language, direction)
22
23
 
24
+ next if test == 'test' # if testing don't write to files or google doc
25
+
23
26
  if direction == 'x2g'
24
27
  gdoc_trans_reader = GdocTransReader.new(file)
25
28
  gdoc_trans_writer = GdocTransWriter.new(gdoc_trans_reader.worksheet)
@@ -40,10 +43,16 @@ class TranslationSync
40
43
  x_trans_hash = xliff_trans_reader.translations(language)
41
44
 
42
45
  # We need to merge on translations hash, not whole hash since it will only merge first level
43
- x2g_merged_translations = g_trans_hash[:translations].merge(x_trans_hash[:translations])
44
- g2x_merged_translations = x_trans_hash[:translations].merge(g_trans_hash[:translations])
46
+ if direction == 'x2g'
47
+ merged_translations = g_trans_hash[:translations].merge(x_trans_hash[:translations])
48
+ diff = x_trans_hash[:translations].diff(g_trans_hash[:translations])
49
+ SyncUtil.info_diff(@file, language, diff)
50
+ else
51
+ merged_translations = x_trans_hash[:translations].merge(g_trans_hash[:translations])
52
+ diff = g_trans_hash[:translations].diff(x_trans_hash[:translations])
53
+ SyncUtil.info_diff(@file, language, diff)
54
+ end
45
55
 
46
- merged_translations = direction == 'x2g' ? x2g_merged_translations : g2x_merged_translations
47
56
  {file: @file, language: language, translations: merged_translations}
48
57
  end
49
58
 
@@ -1,3 +1,3 @@
1
1
  module Transync
2
- VERSION = '1.0.1'
2
+ VERSION = '1.0.2'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: transync
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - zigomir
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-24 00:00:00.000000000 Z
11
+ date: 2013-08-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: google_drive
@@ -81,6 +81,7 @@ files:
81
81
  - README.md
82
82
  - Rakefile
83
83
  - bin/transync
84
+ - lib/hash.rb
84
85
  - lib/transync.rb
85
86
  - lib/transync/gdoc_trans/gdoc_trans_reader.rb
86
87
  - lib/transync/gdoc_trans/gdoc_trans_writer.rb