transync 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,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8c6fb462e97a836b1fd3aab65f2cc82fef40a3b9
4
+ data.tar.gz: 3a7dae00ef26bd34d28311599dcf06c5fe5b233e
5
+ SHA512:
6
+ metadata.gz: 1742efaff0fcd8e34d72376cc58049eb59a7348046f30186e2f48dd3151309aa2f428bd62c0779b000fc87f28a194557af1c60659774606fb572a6309dd89b04
7
+ data.tar.gz: 4fb9c221031ac7e94136f798abc317904f1d63293be877aeebc5f78733f8317a5bd2def9d94029bd1d3190ce6cb3f4d7f8c8a04f8bddad7371e0182ce3b4ce37
@@ -0,0 +1,23 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+
19
+
20
+ settings.yml
21
+ log/*.log*
22
+ .idea
23
+ .transync_log
@@ -0,0 +1 @@
1
+ 2.0.0-p195
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in transync.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 zigomir
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,44 @@
1
+ # Install
2
+
3
+ gem install transync
4
+
5
+ You need settings file needs to be named `settings.yml`. For example see `settings.SAMPLE.yml`.
6
+
7
+ ### Example
8
+
9
+ transync x2g path/to/your/xliff/files
10
+ transync g2x path/to/your/xliff/files
11
+
12
+ ### Example for testing within this gem
13
+
14
+ rake install && transync x2g test/fixtures
15
+
16
+ # Assumptions:
17
+
18
+ You have xliff files in one directory, named like: common.en.xliff where common is name of the file and also google doc
19
+ spreadsheet tab. en is language and you have google doc with structure where first row is key, language 1, language 2
20
+
21
+ # Config
22
+
23
+ Google doc
24
+ https://docs.google.com/a/astina.ch/spreadsheet/ccc?key=0ApAHdLDpSUFudHhuWU9vQ0ZPaWNoV3VxU045cXhHLWc#gid=3
25
+ key = 0ApAHdLDpSUFudHhuWU9vQ0ZPaWNoV3VxU045cXhHLWc
26
+
27
+
28
+ GDOC_KEY = 0ApAHdLDpSUFudHhuWU9vQ0ZPaWNoV3VxU045cXhHLWc
29
+
30
+ # Features
31
+
32
+ Updating GDoc from our xliff files. It won't delete any key, it will only add new or change existing ones.
33
+
34
+ # Source
35
+
36
+ Gem docs available at http://gimite.net/doc/google-drive-ruby
37
+
38
+ # Known issues
39
+
40
+ It won't add keys as it should if not all languages are set in settings.yml
41
+
42
+ # TODO
43
+
44
+ - support for yaml files
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,2 @@
1
+ require 'transync'
2
+ Transync.run ARGV[0], ARGV[1]
@@ -0,0 +1,20 @@
1
+ require_relative 'transync/sync/xliff_2_gdoc_main'
2
+ require_relative 'transync/sync/gdoc_2_xliff_main'
3
+
4
+ module Transync
5
+
6
+ def self.run(mode, path)
7
+ FileUtils.mkdir('.transync_log') unless Dir.exist?('.transync_log')
8
+
9
+ if mode == 'x2g'
10
+ x2g = Xliff2GdocMain.new(path)
11
+ x2g.run
12
+ end
13
+
14
+ if mode == 'g2x'
15
+ g2x = Gdoc2XliffMain.new(path)
16
+ g2x.run
17
+ end
18
+ end
19
+
20
+ end
@@ -0,0 +1,5 @@
1
+ # TODO move also to yml file
2
+ module GdocTrans
3
+ WORKSHEET_COLUMNS = { key: 1, en: 2, de: 3 }
4
+ START_ROW = 2
5
+ end
@@ -0,0 +1,30 @@
1
+ require 'google_drive'
2
+ require_relative 'gdoc_trans'
3
+
4
+ class GdocTransReader
5
+ attr_accessor :worksheet
6
+
7
+ def initialize(gdoc_access, tab)
8
+ session = GoogleDrive.login(gdoc_access['email'], gdoc_access['password'])
9
+
10
+ worksheet_tabs = session.spreadsheet_by_key(gdoc_access['key']).worksheets
11
+ # select the right tab from worksheet
12
+ self.worksheet = worksheet_tabs.detect{ |w| w.title == tab }
13
+ abort("#{tab} tab is not defined in GDoc") if self.worksheet.nil?
14
+ end
15
+
16
+ def build_trans_hash(language = 'en')
17
+ trans_hash = { title: worksheet.title, language: language, translations: [] }
18
+
19
+ key_column = GdocTrans::WORKSHEET_COLUMNS[:key]
20
+ language_column = GdocTrans::WORKSHEET_COLUMNS[language.to_sym]
21
+
22
+ (GdocTrans::START_ROW..worksheet.num_rows).to_a.each do |row|
23
+ translation = { key: worksheet[row, key_column], value: worksheet[row, language_column] }
24
+ trans_hash[:translations] << translation
25
+ end
26
+
27
+ trans_hash
28
+ end
29
+
30
+ end
@@ -0,0 +1,28 @@
1
+ require 'google_drive'
2
+ require_relative 'gdoc_trans'
3
+
4
+ class GdocTransWriter
5
+ attr_accessor :worksheet
6
+
7
+ def initialize(worksheet)
8
+ @worksheet = worksheet
9
+ end
10
+
11
+ def write(row, column, data)
12
+ @worksheet[row, GdocTrans::WORKSHEET_COLUMNS[column.to_sym]] = data
13
+ end
14
+
15
+ def shift_up(old_row_num, rows_count)
16
+ # shift up that many times we're missing till the end
17
+ (old_row_num..rows_count).to_a.each do |new_row|
18
+ (1..worksheet.num_cols).to_a.each do |col|
19
+ cell = @worksheet[new_row, col]
20
+ @worksheet[new_row, col] = ''
21
+ @worksheet[new_row + 1, col] = cell
22
+ end
23
+ end
24
+
25
+ @worksheet
26
+ end
27
+
28
+ end
@@ -0,0 +1,42 @@
1
+ require 'yaml'
2
+ require 'logger'
3
+ require_relative '../gdoc_trans/gdoc_trans_reader'
4
+ require_relative '../xliff_trans/xliff_trans_writer'
5
+ require_relative 'gdoc_to_xliff'
6
+ require_relative 'sync_util'
7
+
8
+ class Gdoc2XliffMain
9
+ include SyncUtil
10
+ attr_reader :path, :config
11
+
12
+ def initialize(path)
13
+ @path = path
14
+ @config = YAML.load(File.open('settings.yml'))
15
+ end
16
+
17
+ def run
18
+ logger = Logger.new('.transync_log/gdoc2xliff.log', 'monthly')
19
+
20
+ @config['FILES'].each do |file|
21
+ xliff_translations = check_and_get_xliff_files(@config['LANGUAGES'], path, file)
22
+ gdoc_trans_reader = GdocTransReader.new(@config['GDOC'], file)
23
+
24
+ @config['LANGUAGES'].each do |language|
25
+ options = {
26
+ xliff_translations: xliff_translations,
27
+ gdoc_trans_reader: gdoc_trans_reader,
28
+ language: language,
29
+ logger: logger
30
+ }
31
+
32
+ gdoc_to_xliff = GdocToXliff.new(options)
33
+ dirty, new_xliff_hash = gdoc_to_xliff.sync
34
+
35
+ xliff_trans_writer = XliffTransWriter.new(path, file, new_xliff_hash)
36
+ xliff_trans_writer.save if dirty
37
+ p "#{file} (#{language}) was clean. Already has same keys and values inside Xliff" unless dirty
38
+ end
39
+ end
40
+ end
41
+
42
+ end
@@ -0,0 +1,52 @@
1
+ class GdocToXliff
2
+ attr_accessor :xliff_translations,
3
+ :gdoc_trans_reader,
4
+ :language,
5
+ :logger
6
+
7
+ def initialize(options = {})
8
+ self.xliff_translations = options[:xliff_translations]
9
+ self.gdoc_trans_reader = options[:gdoc_trans_reader]
10
+ self.language = options[:language]
11
+ self.logger = options[:logger]
12
+ end
13
+
14
+ def sync
15
+ dirty = false
16
+ gdoc_tab_language = gdoc_trans_reader.build_trans_hash(language)
17
+ file = gdoc_tab_language[:title]
18
+
19
+ new_xliff_hash = {
20
+ language: language,
21
+ file: file,
22
+ translations: []
23
+ }
24
+
25
+ xliff_for_language = xliff_translations.detect{ |x| x[:language] == language }[:translations]
26
+ gdoc_tab_language[:translations].each do |gdoc_trans|
27
+ x_trans = xliff_for_language.detect{ |x| x[:key] == gdoc_trans[:key] }
28
+
29
+ # whole key is missing
30
+ if x_trans.nil?
31
+ p "Adding Key: #{gdoc_trans[:key]} to #{file}(#{language}) and value '#{gdoc_trans[:value]}'"
32
+ logger.info "Adding Key: #{gdoc_trans[:key]} to #{file}(#{language}) and value '#{gdoc_trans[:value]}'"
33
+
34
+ new_xliff_hash[:translations] << gdoc_trans
35
+ dirty = true
36
+ elsif gdoc_trans[:value] != x_trans[:value]
37
+ p "Changing #{file}(#{language}) #{gdoc_trans[:key]}: '#{x_trans[:value]}' to '#{gdoc_trans[:value]}'"
38
+ logger.info "Changing #{file}(#{language}) #{gdoc_trans[:key]}: '#{x_trans[:value]}' to '#{gdoc_trans[:value]}'"
39
+
40
+ x_trans[:value] = gdoc_trans[:value]
41
+ new_xliff_hash[:translations] << x_trans
42
+ dirty = true
43
+ else
44
+ # nothing new
45
+ new_xliff_hash[:translations] << gdoc_trans
46
+ end
47
+ end
48
+
49
+ return dirty, new_xliff_hash
50
+ end
51
+
52
+ end
@@ -0,0 +1,20 @@
1
+ require_relative '../xliff_trans/xliff_trans_reader'
2
+
3
+ module SyncUtil
4
+
5
+ def check_and_get_xliff_files(languages, path, file)
6
+ xliff_translations = []
7
+
8
+ languages.each do |language|
9
+ xliff_reader = XliffTransReader.new(path, file, language, languages)
10
+ if xliff_reader.valid?
11
+ xliff_translations << xliff_reader.get_translations
12
+ else
13
+ abort('Fix your Xliff translations first!')
14
+ end
15
+ end
16
+
17
+ xliff_translations
18
+ end
19
+
20
+ end
@@ -0,0 +1,45 @@
1
+ require 'yaml'
2
+ require 'logger'
3
+ require_relative '../gdoc_trans/gdoc_trans_reader'
4
+ require_relative '../gdoc_trans/gdoc_trans_writer'
5
+ require_relative 'xliff_to_gdoc'
6
+ require_relative 'sync_util'
7
+
8
+ class Xliff2GdocMain
9
+ include SyncUtil
10
+ attr_reader :path, :config
11
+
12
+ def initialize(path)
13
+ @path = path
14
+ @config = YAML.load(File.open('settings.yml'))
15
+ end
16
+
17
+ def run
18
+ logger = Logger.new('.transync_log/xliff2gdoc.log', 'monthly')
19
+
20
+ @config['FILES'].each do |file|
21
+ xliff_translations = check_and_get_xliff_files(@config['LANGUAGES'], path, file)
22
+
23
+ gdoc_trans_reader = GdocTransReader.new(@config['GDOC'], file)
24
+ gdoc_trans_writer = GdocTransWriter.new(gdoc_trans_reader.worksheet)
25
+
26
+ @config['LANGUAGES'].each do |language|
27
+ options = {
28
+ xliff_translations: xliff_translations,
29
+ gdoc_trans_reader: gdoc_trans_reader,
30
+ gdoc_trans_writer: gdoc_trans_writer,
31
+ language: language,
32
+ languages: @config['LANGUAGES'],
33
+ logger: logger
34
+ }
35
+ xliff_to_gdoc = XliffToGdoc.new(options)
36
+ dirty = xliff_to_gdoc.sync
37
+
38
+ # save it back on google drive
39
+ gdoc_trans_writer.worksheet.save if dirty
40
+ p "#{file} (#{language}) was clean. Already has same keys and values inside GDoc" unless dirty
41
+ end
42
+ end
43
+ end
44
+
45
+ end
@@ -0,0 +1,66 @@
1
+ class XliffToGdoc
2
+ attr_accessor :xliff_translations,
3
+ :gdoc_trans_reader,
4
+ :gdoc_trans_writer,
5
+ :language,
6
+ :languages,
7
+ :logger
8
+
9
+ def initialize(options = {})
10
+ self.xliff_translations = options[:xliff_translations]
11
+ self.gdoc_trans_reader = options[:gdoc_trans_reader]
12
+ self.gdoc_trans_writer = options[:gdoc_trans_writer]
13
+ self.language = options[:language]
14
+ self.languages = options[:languages]
15
+ self.logger = options[:logger]
16
+ end
17
+
18
+ def sync
19
+ gdoc_tab_language = gdoc_trans_reader.build_trans_hash(language)
20
+ dirty = false
21
+ file = gdoc_tab_language[:title]
22
+
23
+ xliff_for_language = xliff_translations.detect{ |x| x[:language] == language }
24
+ xliff_for_language[:translations].each_with_index do |x_trans, index|
25
+
26
+ # for current xliff translation find the same trans key in google doc
27
+ gdoc_trans = gdoc_tab_language[:translations].detect{ |g_trans| g_trans[:key] == x_trans[:key] }
28
+ current_row = index + GdocTrans::START_ROW
29
+
30
+ # whole key is missing
31
+ if gdoc_trans.nil?
32
+ # heavy coupling
33
+ gdoc_trans_reader.worksheet = gdoc_trans_writer.shift_up(current_row, xliff_for_language[:translations].length)
34
+ # recalculate hashes after shift
35
+ gdoc_tab_language = gdoc_trans_reader.build_trans_hash(language)
36
+
37
+ gdoc_trans_writer.write(current_row, 'key', x_trans[:key])
38
+ gdoc_trans_writer.write(current_row, language, x_trans[:value])
39
+
40
+ p "#{current_row}) Adding Key: #{x_trans[:key]} to #{file}(#{language}) and value '#{x_trans[:value]}'"
41
+ logger.info "#{current_row}) Adding Key: #{x_trans[:key]} to #{file}(#{language}) and value '#{x_trans[:value]}'"
42
+
43
+ # Go for all other languages if key was missing
44
+ languages.each do |key_lang|
45
+ next if key_lang == language
46
+
47
+ xliff_lang = xliff_translations.detect{ |xt| xt[:language] == key_lang }
48
+ xliff_lang_value = xliff_lang[:translations].detect{ |xt| xt[:key] == x_trans[:key] }
49
+
50
+ gdoc_trans_writer.write(current_row, key_lang, xliff_lang_value[:value])
51
+ end
52
+
53
+ dirty = true
54
+ elsif gdoc_trans[:value] != x_trans[:value]
55
+ gdoc_trans_writer.write(current_row, language, x_trans[:value])
56
+
57
+ p "#{current_row}) Changing #{file}(#{language}) #{x_trans[:key]}: '#{gdoc_trans[:value]}' to '#{x_trans[:value]}'"
58
+ logger.info "#{current_row}) Changing #{file}(#{language}) #{x_trans[:key]}: '#{gdoc_trans[:value]}' to '#{x_trans[:value]}'"
59
+ dirty = true
60
+ end
61
+ end
62
+
63
+ dirty
64
+ end
65
+
66
+ end
@@ -0,0 +1,3 @@
1
+ module Transync
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,69 @@
1
+ require 'nokogiri'
2
+
3
+ class XliffTransReader
4
+ attr_accessor :dir, :file, :language, :languages
5
+
6
+ def initialize(dir, file, language, languages)
7
+ self.dir = dir
8
+ self.file = file
9
+ self.language = language
10
+ self.languages = languages
11
+ end
12
+
13
+ def get_translations
14
+ data = {
15
+ language: language,
16
+ translations: []
17
+ }
18
+
19
+ open_file do |doc|
20
+ # hacky hack, xliff is dirty as hell
21
+ doc.remove_namespaces!
22
+ doc.xpath('//trans-unit').each do |node|
23
+ data[:translations] << {
24
+ key: node.xpath('source').text,
25
+ value: node.xpath('target').text,
26
+ }
27
+ end
28
+ end
29
+
30
+ data
31
+ end
32
+
33
+ # will go through each and find if any xliff is missing keys for translations
34
+ def valid?
35
+ self.get_translations[:translations].each do |x_trans|
36
+ self.languages.each do |key_lang|
37
+ next if key_lang == language
38
+
39
+ xliff_reader = XliffTransReader.new(self.dir, self.file, key_lang, self.languages)
40
+ xliff_lang = xliff_reader.get_translations[:translations]
41
+ xliff_lang_value = xliff_lang.detect{ |xt| xt[:key] == x_trans[:key] }
42
+ if xliff_lang_value.nil?
43
+ p "#{file}.#{key_lang} is missing translation for key '#{x_trans[:key]}'"
44
+ return false
45
+ end
46
+ end
47
+ end
48
+
49
+ true
50
+ end
51
+
52
+ # Reading from source tags in xliff
53
+ def open_file
54
+ begin
55
+ xml_file = File.open(file_path)
56
+ doc = Nokogiri::XML(xml_file)
57
+ yield doc
58
+ rescue Errno::ENOENT => e
59
+ abort(e.message)
60
+ end
61
+ end
62
+
63
+ private
64
+
65
+ def file_path
66
+ "#{dir}/#{file}.#{language}.xliff"
67
+ end
68
+
69
+ end
@@ -0,0 +1,45 @@
1
+ require 'builder'
2
+
3
+ class XliffTransWriter
4
+ attr_accessor :data,
5
+ :path,
6
+ :file,
7
+ :language
8
+
9
+ def initialize(path, file, data)
10
+ @path = path
11
+ @file = file
12
+ @language = data[:language]
13
+ @data = data
14
+ end
15
+
16
+ def save
17
+ translations = data[:translations]
18
+
19
+ xml = Builder::XmlMarkup.new( :indent => 4 )
20
+ xml.instruct! :xml, :encoding => 'UTF-8'
21
+ xml.xliff :version => '1.2', :xmlns => 'urn:oasis:names:tc:xliff:document:1.2' do |xliff|
22
+ xliff.file :'source-language' => language, :datatype => 'plaintext', :original => 'file.ext' do |file|
23
+ file.body do |body|
24
+
25
+ translations.each do |trans|
26
+ body.tag! 'trans-unit', :id => trans[:key] do |trans_unit|
27
+ trans_unit.source trans[:key]
28
+ trans_unit.target trans[:value]
29
+ end
30
+ end
31
+
32
+ end
33
+ end
34
+ end
35
+
36
+ File.open(file_path, 'w') { |file| file.write(xml.target!) }
37
+ end
38
+
39
+ private
40
+
41
+ def file_path
42
+ "#{path}/#{file}.#{language}.xliff"
43
+ end
44
+
45
+ end
@@ -0,0 +1,21 @@
1
+ # https://docs.google.com/document/d/2fKTnCh1uSzBjXX5ZFBCLPx7JCMlMY8V7nbzSVbVyw56/edit
2
+ # GDOC key from URL is 2fKTnCh1uSzBjXX5ZFBCLPx7JCMlMY8V7nbzSVbVyw56
3
+ GDOC:
4
+ key: "2fKTnCh1uSzBjXX5ZFBCLPx7JCMlMY8V7nbzSVbVyw56"
5
+ email: "user@example.com"
6
+ password: "secret"
7
+
8
+ FILES: # xliff files <=> gdoc tabs
9
+ - "cockpit"
10
+ - "common"
11
+ - "desktop"
12
+ - "error-msg"
13
+ - "FOSUserBundle"
14
+ - "home"
15
+ - "learn"
16
+ - "validators"
17
+ - "test"
18
+
19
+ LANGUAGES:
20
+ - "en"
21
+ - "de"
@@ -0,0 +1,43 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
3
+ <file source-language="en" datatype="plaintext" original="file.ext">
4
+ <body>
5
+ <trans-unit id="title">
6
+ <source>title</source>
7
+ <target>TEST</target>
8
+ </trans-unit>
9
+ <trans-unit id="round">
10
+ <source>round</source>
11
+ <target>Attempt</target>
12
+ </trans-unit>
13
+ <trans-unit id="end_test">
14
+ <source>end_test</source>
15
+ <target>END TEST</target>
16
+ </trans-unit>
17
+ <trans-unit id="statistics.summary">
18
+ <source>statistics.summary</source>
19
+ <target>Summary of this session</target>
20
+ </trans-unit>
21
+ <trans-unit id="statistics.time.spent">
22
+ <source>statistics.time.spent</source>
23
+ <target>Time Spent</target>
24
+ </trans-unit>
25
+ <trans-unit id="statistics.time.left">
26
+ <source>statistics.time.left</source>
27
+ <target>Time Left</target>
28
+ </trans-unit>
29
+ <trans-unit id="time.up">
30
+ <source>time.up</source>
31
+ <target>Your time is up</target>
32
+ </trans-unit>
33
+ <trans-unit id="last_card_title">
34
+ <source>last_card_title</source>
35
+ <target>Click END TEST button to save your results.</target>
36
+ </trans-unit>
37
+ <trans-unit id="repeat">
38
+ <source>repeat</source>
39
+ <target>Repeat</target>
40
+ </trans-unit>
41
+ </body>
42
+ </file>
43
+ </xliff>
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'transync/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'transync'
8
+ spec.version = Transync::VERSION
9
+ spec.authors = ['zigomir']
10
+ spec.email = ['zigomir@gmail.com']
11
+ spec.description = %q{Synchronize XLIFF translations with Google Drive document}
12
+ spec.summary = %q{Synchronize XLIFF translations with Google Drive document}
13
+ spec.homepage = ''
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_runtime_dependency 'google_drive'
22
+ spec.add_runtime_dependency 'builder'
23
+
24
+ spec.add_development_dependency 'bundler', '~> 1.3'
25
+ spec.add_development_dependency 'rake'
26
+ end
metadata ADDED
@@ -0,0 +1,124 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: transync
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - zigomir
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-05-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: google_drive
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: builder
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '1.3'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '1.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: Synchronize XLIFF translations with Google Drive document
70
+ email:
71
+ - zigomir@gmail.com
72
+ executables:
73
+ - transync
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - .gitignore
78
+ - .ruby-version
79
+ - Gemfile
80
+ - LICENSE.txt
81
+ - README.md
82
+ - Rakefile
83
+ - bin/transync
84
+ - lib/transync.rb
85
+ - lib/transync/gdoc_trans/gdoc_trans.rb
86
+ - lib/transync/gdoc_trans/gdoc_trans_reader.rb
87
+ - lib/transync/gdoc_trans/gdoc_trans_writer.rb
88
+ - lib/transync/sync/gdoc_2_xliff_main.rb
89
+ - lib/transync/sync/gdoc_to_xliff.rb
90
+ - lib/transync/sync/sync_util.rb
91
+ - lib/transync/sync/xliff_2_gdoc_main.rb
92
+ - lib/transync/sync/xliff_to_gdoc.rb
93
+ - lib/transync/version.rb
94
+ - lib/transync/xliff_trans/xliff_trans_reader.rb
95
+ - lib/transync/xliff_trans/xliff_trans_writer.rb
96
+ - settings.SAMPLE.yml
97
+ - test/fixtures/test.en.xliff
98
+ - transync.gemspec
99
+ homepage: ''
100
+ licenses:
101
+ - MIT
102
+ metadata: {}
103
+ post_install_message:
104
+ rdoc_options: []
105
+ require_paths:
106
+ - lib
107
+ required_ruby_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ required_rubygems_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - '>='
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ requirements: []
118
+ rubyforge_project:
119
+ rubygems_version: 2.0.2
120
+ signing_key:
121
+ specification_version: 4
122
+ summary: Synchronize XLIFF translations with Google Drive document
123
+ test_files:
124
+ - test/fixtures/test.en.xliff