babelyoda 2.0.2 → 2.0.3

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/babelyoda.gemspec CHANGED
@@ -25,4 +25,5 @@ Gem::Specification.new do |s|
25
25
  s.add_runtime_dependency "builder", '~> 3.0', '>= 3.0.0'
26
26
  s.add_runtime_dependency "nokogiri", '~> 1.5', '>= 1.5.0'
27
27
  s.add_runtime_dependency "term-ansicolor", '~> 1.0', '>= 1.0.7'
28
+ s.add_runtime_dependency "log4r-color", '~> 1.2'
28
29
  end
data/lib/babelyoda.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  BABELYODA_PATH = File.expand_path(File.join(File.dirname(__FILE__), '..'))
2
2
 
3
3
  require 'awesome_print'
4
+ require 'fileutils'
4
5
 
5
6
  require_relative 'babelyoda/genstrings'
6
7
  require_relative 'babelyoda/git'
@@ -8,6 +9,7 @@ require_relative 'babelyoda/ibtool'
8
9
  require_relative 'babelyoda/keyset'
9
10
  require_relative 'babelyoda/localization_key'
10
11
  require_relative 'babelyoda/localization_value'
12
+ require_relative 'babelyoda/logger'
11
13
  require_relative 'babelyoda/rake'
12
14
  require_relative 'babelyoda/specification'
13
15
  require_relative 'babelyoda/tanker'
@@ -31,30 +33,31 @@ namespace :babelyoda do
31
33
 
32
34
  desc "Extract strings from sources"
33
35
  task :extract_strings do
34
- puts "Extracting strings from sources..."
35
- dev_lang = spec.development_language
36
-
37
36
  spec.scm.transaction("[Babelyoda] Extract strings from sources") do
37
+ $logger.info "Extracting strings from sources..."
38
+ dev_lang = spec.development_language
38
39
  Babelyoda::Genstrings.run(spec.source_files, dev_lang) do |keyset|
39
40
  old_strings_filename = strings_filename(keyset.name, dev_lang)
40
41
  old_strings = Babelyoda::Strings.new(old_strings_filename, dev_lang).read
41
42
  old_strings.merge!(keyset)
42
43
  old_strings.save!
43
- puts " #{old_strings_filename}: #{old_strings.keys.size} keys"
44
+ $logger.debug "#{old_strings_filename}: #{old_strings.keys.size} keys"
44
45
  end
45
46
  end
46
47
  end
47
48
 
48
49
  desc "Extract strings from XIBs"
49
50
  task :extract_xib_strings do
50
- puts "Extracting .strings from XIBs..."
51
51
  spec.scm.transaction("[Babelyoda] Extract strings from XIBs") do
52
+ $logger.info "Extracting .strings from XIBs..."
52
53
  spec.xib_files.each do |xib_filename|
53
54
  xib = Babelyoda::Xib.new(xib_filename, spec.development_language)
54
55
  next unless xib.extractable?(spec.development_language)
55
56
  keyset = xib.strings
56
- puts " #{xib_filename} => #{xib.strings_filename}"
57
- Babelyoda::Strings.save_keyset(keyset, xib.strings_filename, spec.development_language)
57
+ unless keyset.empty?
58
+ $logger.debug "#{xib_filename} => #{xib.strings_filename}"
59
+ Babelyoda::Strings.save_keyset(keyset, xib.strings_filename, spec.development_language)
60
+ end
58
61
  end
59
62
  end
60
63
  end
@@ -63,62 +66,93 @@ namespace :babelyoda do
63
66
  task :extract => [:extract_strings, :extract_xib_strings] do
64
67
  end
65
68
 
69
+ desc "Drops empty local keysets"
70
+ task :drop_empty_strings do
71
+ spec.scm.transaction("[Babelyoda] Drop empty .strings files") do
72
+ $logger.info "Dropping empty .strings files..."
73
+ files_to_drop = []
74
+ spec.strings_files.each do |filename|
75
+ strings = Babelyoda::Strings.new(filename, spec.development_language).read!
76
+ if strings.empty?
77
+ files_to_drop << filename
78
+ spec.localization_languages.each do |language|
79
+ localized_filename = File.localized(filename, language)
80
+ files_to_drop << localized_filename if File.exist?(localized_filename)
81
+ end
82
+ end
83
+ end
84
+ files_to_drop.each do |filename|
85
+ $logger.info "REMOVED empty file: #{filename}"
86
+ FileUtils.rm filename
87
+ end
88
+ end
89
+ end
90
+
66
91
  desc "Create remote keysets for local keysets"
67
- task :create_keysets => :extract do
68
- # Create remote keysets for each local keyset if they don't exist.
69
- puts "Creating remote keysets for local keysets..."
92
+ task :create_keysets => [:extract, :drop_empty_strings] do
93
+ $logger.info "Creating remote keysets for local keysets..."
70
94
  remote_keyset_names = spec.engine.list
71
95
  spec.strings_files.each do |filename|
72
96
  keyset_name = Babelyoda::Keyset.keyset_name(filename)
73
97
  if remote_keyset_names.include?(keyset_name)
74
- puts " Tanker: An existing keyset found: #{keyset_name}"
98
+ $logger.debug "Tanker: An existing keyset found: #{keyset_name}"
75
99
  next
76
100
  end
77
- spec.engine.create(keyset_name)
78
- puts " Tanker: Created NEW keyset: #{keyset_name}"
101
+ strings = Babelyoda::Strings.new(filename, spec.development_language).read!
102
+ unless strings.empty?
103
+ spec.engine.create(keyset_name)
104
+ $logger.debug "Tanker: Created NEW keyset: #{keyset_name}"
105
+ end
79
106
  end
80
107
  end
81
108
 
82
109
  desc "Drops remote keys not found in local keysets"
83
110
  task :drop_orphan_keys => :create_keysets do
84
- puts "Dropping orphan keys..."
111
+ $logger.info "Dropping orphan keys..."
85
112
  spec.strings_files.each do |filename|
86
113
  strings = Babelyoda::Strings.new(filename, spec.development_language).read!
87
- puts " Processing keyset: #{strings.name}"
114
+ $logger.debug "Processing keyset: #{strings.name}"
88
115
  remote_keyset = spec.engine.load_keyset(strings.name)
89
- keys_to_drop = []
90
- remote_keyset.keys.each_value do |key|
91
- unless strings.keys.has_key?(key.id)
92
- keys_to_drop << key.id
93
- puts " Found orphan key: #{key.id}"
116
+ original_keys_size = remote_keyset.keys.size
117
+ remote_keyset.keys.delete_if do |key, value|
118
+ unless strings.keys.has_key?(key)
119
+ $logger.debug "Found orphan key: #{key}"
120
+ true
121
+ else
122
+ false
94
123
  end
95
124
  end
96
- keys_to_drop.each do |key|
97
- remote_keyset.keys.delete(key)
125
+ next if original_keys_size == remote_keyset.keys.size
126
+ unless remote_keyset.empty?
127
+ $logger.debug "Keys removed: #{original_keys_size - remote_keyset.keys.size}, keyset REPLACED."
128
+ spec.engine.replace(remote_keyset)
129
+ else
130
+ $logger.debug "All keys removed: keyset DELETED."
131
+ spec.engine.drop_keyset!(remote_keyset.name)
98
132
  end
99
- spec.engine.replace(remote_keyset)
100
- puts " Dropped keys: #{keys_to_drop.size}"
101
133
  end
102
134
  end
103
135
 
104
136
  desc "Pushes resources to the translators"
105
137
  task :push => :drop_orphan_keys do
106
- puts "Pushing local keys to the remote..."
138
+ $logger.info "Pushing local keys to the remote..."
107
139
  spec.strings_files.each do |filename|
108
140
  strings = Babelyoda::Strings.new(filename, spec.development_language).read!
109
- puts " Processing keyset: #{strings.name}"
141
+ $logger.debug "Processing keyset: #{strings.name}"
110
142
  remote_keyset = spec.engine.load_keyset(strings.name, nil, :unapproved)
111
143
  result = remote_keyset.merge!(strings, preserve: true)
112
144
  remote_keyset.ensure_languages!(spec.all_languages)
113
- spec.engine.replace(remote_keyset)
114
- puts " New keys: #{result[:new]} Updated keys: #{result[:updated]}"
145
+ if result[:new] > 0 || result[:updated] > 0
146
+ spec.engine.replace(remote_keyset)
147
+ $logger.debug "New keys: #{result[:new]} Updated keys: #{result[:updated]}"
148
+ end
115
149
  end
116
150
  end
117
151
 
118
152
  desc "Fetches remote strings and merges them down into local .string files"
119
153
  task :fetch_strings do
120
- puts "Fetching remote translations..."
121
154
  spec.scm.transaction("[Babelyoda] Merge in remote translations") do
155
+ $logger.info "Fetching remote translations..."
122
156
  spec.strings_files.each do |filename|
123
157
  keyset_name = Babelyoda::Keyset.keyset_name(filename)
124
158
  remote_keyset = spec.engine.load_keyset(keyset_name, nil, :unapproved)
@@ -126,7 +160,7 @@ namespace :babelyoda do
126
160
  spec.all_languages.each do |language|
127
161
  keyset_filename = strings_filename(keyset_name, language)
128
162
  Babelyoda::Strings.save_keyset(remote_keyset, keyset_filename, language)
129
- puts " #{keyset_filename}"
163
+ $logger.debug "#{keyset_filename}"
130
164
  end
131
165
  end
132
166
  end
@@ -134,15 +168,17 @@ namespace :babelyoda do
134
168
 
135
169
  desc "Incrementally localizes XIB files"
136
170
  task :localize_xibs do
137
- puts "Translating XIB files..."
138
-
139
171
  spec.scm.transaction("[Babelyoda] Localize XIB files") do
172
+ $logger.info "Translating XIB files..."
140
173
  spec.xib_files.each do |filename|
141
174
  xib = Babelyoda::Xib.new(filename, spec.development_language)
142
-
143
- xib.import_strings(spec.scm)
144
- spec.localization_languages.each do |language|
145
- xib.localize_incremental(language, spec.scm)
175
+ if xib.localizable?
176
+ xib.import_strings(spec.scm)
177
+ spec.localization_languages.each do |language|
178
+ xib.localize_incremental(language, spec.scm)
179
+ end
180
+ else
181
+ $logger.warn "#{filename} has no localizable resources. No localization needed."
146
182
  end
147
183
  end
148
184
  end
@@ -169,7 +205,7 @@ namespace :babelyoda do
169
205
  combined_keyset.merge!(lang_strings)
170
206
  end
171
207
  end
172
- $logger.success("#{spec.development_language}: #{combined_keyset.keys.size} keys", false)
208
+ $logger.info("#{spec.development_language}: #{combined_keyset.keys.size} keys", false)
173
209
  missing = {}
174
210
  spec.localization_languages.each do |language|
175
211
  missing[language] = Babelyoda::Keyset.new("babelyoda.verify.#{language}")
@@ -202,22 +238,17 @@ namespace :babelyoda do
202
238
  keysets = ENV['KEYSETS'].split(',')
203
239
  if keysets.include?('*')
204
240
  keysets = spec.engine.list
205
- puts "Dropping ALL keysets: #{keysets}"
241
+ $logger.info "Dropping ALL keysets: #{keysets}"
206
242
  else
207
- puts "Dropping keysets: #{keysets}"
243
+ $logger.info "Dropping keysets: #{keysets}"
208
244
  end
209
245
  keysets.each do |keyset_name|
210
- puts " Dropping: #{keyset_name}"
211
- keyset = Babelyoda::Keyset.new(keyset_name)
212
- key = Babelyoda::LocalizationKey.new("Dummy", "Dummy")
213
- value = Babelyoda::LocalizationValue.new(:en, "Dummy")
214
- key << value
215
- keyset.merge_key!(key)
216
- spec.engine.replace(keyset)
246
+ $logger.debug "Dropping: #{keyset_name}"
247
+ spec.engine.drop_keyset!(keyset_name)
217
248
  end
218
- puts "All done!"
219
249
  else
220
- puts "Please provide keyset names to drop in the KEYSET environment variable. Separate by commas. Use * for ALL."
250
+ $logger.error "Please provide keyset names to drop in the KEYSET environment variable. " +
251
+ "Separate by commas. Use * for ALL."
221
252
  end
222
253
  end
223
254
 
@@ -1,6 +1,7 @@
1
1
  require 'fileutils'
2
2
  require 'tmpdir'
3
3
 
4
+ require_relative 'logger'
4
5
  require_relative 'keyset'
5
6
  require_relative 'strings'
6
7
 
@@ -10,7 +11,12 @@ module Babelyoda
10
11
  keysets = {}
11
12
  files.each do |fn|
12
13
  Dir.mktmpdir do |dir|
13
- raise "ERROR: genstrings failed." unless Kernel.system("genstrings -littleEndian -o '#{dir}' '#{fn}'")
14
+ ncmd = "genstrings -littleEndian -o '#{dir}' '#{fn}' 2>&1"
15
+ output = `#{ncmd}`
16
+ raise "genstrings failed: #{ncmd}#{output.empty? ? "" : " #{output}"}" unless $?
17
+ unless output.empty?
18
+ $logger.warn output.gsub!(/[\n\r]/, ' ')
19
+ end
14
20
  Dir.glob(File.join(dir, '*.strings')).each do |strings_file|
15
21
  strings = Babelyoda::Strings.new(strings_file, language).read!
16
22
  strings.name = File.join('Resources', File.basename(strings.name))
data/lib/babelyoda/git.rb CHANGED
@@ -47,7 +47,10 @@ module Babelyoda
47
47
  end
48
48
 
49
49
  def check_requirements!
50
- $logger.error "GIT: The working copy is not clean. Please commit your work before running Babelyoda tasks." unless clean?
50
+ unless clean?
51
+ $logger.error "The working copy is not clean. Please commit your work before running Babelyoda tasks."
52
+ exit 1
53
+ end
51
54
  end
52
55
 
53
56
  def git_modified?(filename)
@@ -56,7 +59,7 @@ module Babelyoda
56
59
 
57
60
  def git_status
58
61
  result = {}
59
- `git status --porcelain`.scan(/^(\sM|\?\?)\s+(.*)$/).each do |m|
62
+ `git status --porcelain`.scan(/^(\sM|\sD|\?\?)\s+(.*)$/).each do |m|
60
63
  result[m[1]] = m[0]
61
64
  end
62
65
  result
@@ -65,13 +68,16 @@ module Babelyoda
65
68
  def git_add!(filename)
66
69
  ncmd = ['git', 'add', filename]
67
70
  rc = Kernel.system(*ncmd)
68
- $logger.error "GIT ERROR: #{ncmd}" unless rc
71
+ $logger.error "#{ncmd}" unless rc
69
72
  end
70
73
 
71
74
  def git_commit!(msg)
72
- ncmd = ['git', 'commit', '-m', msg]
73
- rc = Kernel.system(*ncmd)
74
- $logger.error "GIT ERROR: #{ncmd}" unless rc
75
+ ncmd = "git commit -m \"#{msg}\" 2>&1"
76
+ output = `#{ncmd}`
77
+ $logger.error ncmd unless $?
78
+ unless output.empty?
79
+ $logger.info output.gsub!(/[\n\r]/, ' ')
80
+ end
75
81
  end
76
82
 
77
83
  def git_show(sha1, filename = nil)
@@ -83,12 +89,12 @@ module Babelyoda
83
89
  end
84
90
  blob
85
91
  }
86
- $logger.error "GIT ERROR: #{ncmd}" unless $? == 0
92
+ $logger.error "#{ncmd}" unless $? == 0
87
93
  end
88
94
 
89
95
  def git_ls_sha1(filename)
90
96
  matches = `git ls-files -s '#{filename}'`.match(/^\d{6}\s+([^\s]+)\s+.*$/)
91
- $logger.error "GIT ERROR: Couldn't get SHA1 for: #{filename}" unless matches
97
+ $logger.error "Couldn't get SHA1 for: #{filename}" unless matches
92
98
  matches[1]
93
99
  end
94
100
 
@@ -8,7 +8,7 @@ module Babelyoda
8
8
  basename = File.basename(xib_filename, '.xib')
9
9
  strings_filename = File.join(dir, "#{basename}.strings")
10
10
  cmd = "ibtool --generate-strings-file '#{strings_filename}' '#{xib_filename}'"
11
- $logger.error "IBTOOL ERROR: #{cmd}" unless Kernel.system(cmd)
11
+ $logger.error "#{cmd}" unless Kernel.system(cmd)
12
12
  return Babelyoda::Strings.new(strings_filename, language).read!
13
13
  end
14
14
  end
@@ -21,7 +21,7 @@ module Babelyoda
21
21
 
22
22
  ncmd = ['ibtool', '--strings-file', strings_fn, '--write', target_xib_fn, source_xib_fn]
23
23
  rc = Kernel.system(*ncmd)
24
- $logger.error "IBTOOL ERROR: #{ncmd}" unless rc
24
+ $logger.error "#{ncmd}" unless rc
25
25
  end
26
26
 
27
27
  def self.localize_incrementally(source_xib_fn, target_xib_fn, strings_fn, old_source_xib_fn)
@@ -36,13 +36,13 @@ module Babelyoda
36
36
  ncmd = ['ibtool', '--previous-file', old_source_xib_fn, '--incremental-file', target_xib_fn,
37
37
  '--strings-file', strings_fn, '--localize-incremental', '--write', target_xib_fn, source_xib_fn]
38
38
  rc = Kernel.system(*ncmd)
39
- $logger.error "IBTOOL ERROR: #{ncmd}" unless rc
39
+ $logger.error "#{ncmd}" unless rc
40
40
  end
41
41
 
42
42
  def self.import_strings(filename, strings_filename)
43
43
  ncmd = ['ibtool', '--import-strings-file', strings_filename, '--write', filename, filename]
44
44
  rc = Kernel.system(*ncmd)
45
- $logger.error "IBTOOL ERROR: #{ncmd}" unless rc
45
+ $logger.error "#{ncmd}" unless rc
46
46
  end
47
47
 
48
48
  private
@@ -1,16 +1,19 @@
1
- require 'term/ansicolor'
1
+ require 'log4r-color'
2
2
 
3
- module Babelyoda
4
- class Logger
5
- include Term::ANSIColor
6
-
7
- def exe(cmd) ; putcmd cmd ; system cmd ; end
8
- def putcmd(cmd) ; print magenta, "CMD: #{cmd}", reset, "\n" ; end
9
- def status(msg) ; print blue, "--- #{msg} ---", reset, "\n" ; end
10
- def success(msg, heading = true) ; print green, bold, (heading ? 'SUCCESS: ' : ''), msg, reset, "\n" ; end
11
- def error(msg, heading = true, do_exit = true) ; print red, bold, (heading ? 'ERROR: ' : ''), msg, reset, "\n" ; exit 1 if do_exit; end
12
- def escape_cmd_args(args) ; args.collect{ |arg| "'#{arg}'"}.join(' ') ; end
13
- end
14
- end
3
+ unless $logger
4
+ Log4r::Logger.root.level = ENV['DEBUG'] ? Log4r::DEBUG : (ENV['VERBOSE'] ? Log4r::INFO : Log4r::WARN)
5
+
6
+ Log4r::ColorOutputter.new 'color', {
7
+ :colors => {
8
+ :debug => :black,
9
+ :info => :blue,
10
+ :warn => :yellow,
11
+ :error => :red,
12
+ :fatal => {:color => :red, :background => :white}
13
+ },
14
+ :formatter => Log4r::PatternFormatter.new(:pattern => "%l %m")
15
+ }
15
16
 
16
- $logger ||= Babelyoda::Logger.new
17
+ $logger = Log4r::Logger.new('babelyoda')
18
+ $logger.add('color')
19
+ end
@@ -21,9 +21,8 @@ module Babelyoda
21
21
  end
22
22
 
23
23
  def read
24
- localized_filename = File.localized(@filename, @language)
25
- if File.exist?(localized_filename)
26
- File.open(localized_filename, read_mode) do |f|
24
+ if File.exist?(@filename)
25
+ File.open(@filename, read_mode) do |f|
27
26
  lexer = StringsLexer.new
28
27
  parser = StringsParser.new(lexer, @language)
29
28
  parser.parse(f.read) do |localization_key|
@@ -3,7 +3,8 @@ require 'net/http'
3
3
  require 'nokogiri'
4
4
  require 'stringio'
5
5
 
6
- require 'babelyoda/specification_loader'
6
+ require_relative 'logger'
7
+ require_relative 'specification_loader'
7
8
 
8
9
  module Babelyoda
9
10
  class Keyset
@@ -104,6 +105,10 @@ module Babelyoda
104
105
  Babelyoda::Keyset.new(keyset_name)
105
106
  end
106
107
 
108
+ def drop_keyset!(keyset_name)
109
+ delete("/admin/project/#{project_id}/keyset/", { :keyset => keyset_name })
110
+ end
111
+
107
112
  private
108
113
 
109
114
  MULTIPART_BOUNDARY = '114YANDEXTANKERCLIENTBNDR';
@@ -151,8 +156,8 @@ module Babelyoda
151
156
  req.content_type = multipart_content_type
152
157
  req.body = multipart_data(payload)
153
158
 
154
- # puts "POST URI: #{uri}"
155
- # puts "POST BODY: #{req.body}"
159
+ $logger.debug "POST URI: #{uri}"
160
+ $logger.debug "POST BODY: #{req.body}"
156
161
 
157
162
  res = Net::HTTP.start(uri.host, uri.port) do |http|
158
163
  http.request(req)
@@ -174,7 +179,29 @@ module Babelyoda
174
179
  req = Net::HTTP::Get.new(uri.request_uri)
175
180
  req['AUTHORIZATION'] = token
176
181
 
177
- # puts "GET URI: #{uri}"
182
+ $logger.debug "GET URI: #{uri}"
183
+
184
+ res = Net::HTTP.start(uri.host, uri.port) do |http|
185
+ http.request(req)
186
+ end
187
+
188
+ case res
189
+ when Net::HTTPSuccess, Net::HTTPRedirection
190
+ Nokogiri::XML.parse(res.body)
191
+ else
192
+ doc = Nokogiri::XML.parse(res.body)
193
+ error = doc.css('result error')[0].content
194
+ raise Error.new(error)
195
+ end
196
+ end
197
+
198
+ def delete(method_name, payload = nil)
199
+ uri = URI(method(method_name))
200
+ uri.query = URI.encode_www_form(payload) if payload
201
+ req = Net::HTTP::Delete.new(uri.request_uri)
202
+ req['AUTHORIZATION'] = token
203
+
204
+ $logger.debug "DELETE URI: #{uri}"
178
205
 
179
206
  res = Net::HTTP.start(uri.host, uri.port) do |http|
180
207
  http.request(req)
@@ -1,3 +1,3 @@
1
1
  module Babelyoda
2
- VERSION = "2.0.2"
2
+ VERSION = "2.0.3"
3
3
  end
data/lib/babelyoda/xib.rb CHANGED
@@ -49,7 +49,7 @@ module Babelyoda
49
49
  end
50
50
 
51
51
  def localize(language, scm)
52
- puts "Localizing #{filename} => #{File.localized(filename, language)}..."
52
+ $logger.debug "Localizing #{filename} => #{File.localized(filename, language)}..."
53
53
  assert_localization_target(language)
54
54
  strings_fn = strings_filename(language)
55
55
  $logger.error "No strings file found: #{strings_fn}" unless File.exist?(strings_fn)
@@ -61,7 +61,7 @@ module Babelyoda
61
61
  unless localizable_incrementally?(scm, language)
62
62
  localize(language, scm)
63
63
  else
64
- puts "Incrementally localizing #{filename} => #{File.localized(filename, language)}..."
64
+ $logger.debug "Incrementally localizing #{filename} => #{File.localized(filename, language)}..."
65
65
  strings_fn = strings_filename(language)
66
66
  $logger.error "No strings file found: #{strings_fn}" unless File.exist?(strings_fn)
67
67
 
@@ -76,10 +76,14 @@ module Babelyoda
76
76
  end
77
77
 
78
78
  def import_strings(scm)
79
- puts "Importing #{strings_filename} => #{filename}"
79
+ $logger.debug "Importing #{strings_filename} => #{filename}"
80
80
  Babelyoda::Ibtool.import_strings(filename, strings_filename)
81
81
  end
82
82
 
83
+ def localizable?
84
+ File.exist?(strings_filename)
85
+ end
86
+
83
87
  private
84
88
 
85
89
  def localizable_incrementally?(scm, language)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: babelyoda
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 2.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-19 00:00:00.000000000Z
12
+ date: 2012-01-20 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70131405357940 !ruby/object:Gem::Requirement
16
+ requirement: &70285764429160 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -24,10 +24,10 @@ dependencies:
24
24
  version: 2.8.0
25
25
  type: :development
26
26
  prerelease: false
27
- version_requirements: *70131405357940
27
+ version_requirements: *70285764429160
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: awesome_print
30
- requirement: &70131405354760 !ruby/object:Gem::Requirement
30
+ requirement: &70285764427000 !ruby/object:Gem::Requirement
31
31
  none: false
32
32
  requirements:
33
33
  - - ~>
@@ -38,10 +38,10 @@ dependencies:
38
38
  version: 1.0.2
39
39
  type: :runtime
40
40
  prerelease: false
41
- version_requirements: *70131405354760
41
+ version_requirements: *70285764427000
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: rake
44
- requirement: &70131405344240 !ruby/object:Gem::Requirement
44
+ requirement: &70285764425280 !ruby/object:Gem::Requirement
45
45
  none: false
46
46
  requirements:
47
47
  - - ~>
@@ -52,10 +52,10 @@ dependencies:
52
52
  version: 0.9.2.2
53
53
  type: :runtime
54
54
  prerelease: false
55
- version_requirements: *70131405344240
55
+ version_requirements: *70285764425280
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: active_support
58
- requirement: &70131405341480 !ruby/object:Gem::Requirement
58
+ requirement: &70285764423640 !ruby/object:Gem::Requirement
59
59
  none: false
60
60
  requirements:
61
61
  - - ~>
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: 3.0.0
67
67
  type: :runtime
68
68
  prerelease: false
69
- version_requirements: *70131405341480
69
+ version_requirements: *70285764423640
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: rchardet19
72
- requirement: &70131405339840 !ruby/object:Gem::Requirement
72
+ requirement: &70285764422500 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ~>
@@ -80,10 +80,10 @@ dependencies:
80
80
  version: 1.3.5
81
81
  type: :runtime
82
82
  prerelease: false
83
- version_requirements: *70131405339840
83
+ version_requirements: *70285764422500
84
84
  - !ruby/object:Gem::Dependency
85
85
  name: builder
86
- requirement: &70131405328400 !ruby/object:Gem::Requirement
86
+ requirement: &70285764421240 !ruby/object:Gem::Requirement
87
87
  none: false
88
88
  requirements:
89
89
  - - ~>
@@ -94,10 +94,10 @@ dependencies:
94
94
  version: 3.0.0
95
95
  type: :runtime
96
96
  prerelease: false
97
- version_requirements: *70131405328400
97
+ version_requirements: *70285764421240
98
98
  - !ruby/object:Gem::Dependency
99
99
  name: nokogiri
100
- requirement: &70131405327320 !ruby/object:Gem::Requirement
100
+ requirement: &70285764420020 !ruby/object:Gem::Requirement
101
101
  none: false
102
102
  requirements:
103
103
  - - ~>
@@ -108,10 +108,10 @@ dependencies:
108
108
  version: 1.5.0
109
109
  type: :runtime
110
110
  prerelease: false
111
- version_requirements: *70131405327320
111
+ version_requirements: *70285764420020
112
112
  - !ruby/object:Gem::Dependency
113
113
  name: term-ansicolor
114
- requirement: &70131405326220 !ruby/object:Gem::Requirement
114
+ requirement: &70285764418840 !ruby/object:Gem::Requirement
115
115
  none: false
116
116
  requirements:
117
117
  - - ~>
@@ -122,7 +122,18 @@ dependencies:
122
122
  version: 1.0.7
123
123
  type: :runtime
124
124
  prerelease: false
125
- version_requirements: *70131405326220
125
+ version_requirements: *70285764418840
126
+ - !ruby/object:Gem::Dependency
127
+ name: log4r-color
128
+ requirement: &70285764417700 !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ~>
132
+ - !ruby/object:Gem::Version
133
+ version: '1.2'
134
+ type: :runtime
135
+ prerelease: false
136
+ version_requirements: *70285764417700
126
137
  description: A simple utility to push/pull l10n resources of an Xcode project to/from
127
138
  the translators
128
139
  email:
@@ -170,18 +181,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
170
181
  - - ! '>='
171
182
  - !ruby/object:Gem::Version
172
183
  version: '0'
173
- segments:
174
- - 0
175
- hash: -1710872162034708641
176
184
  required_rubygems_version: !ruby/object:Gem::Requirement
177
185
  none: false
178
186
  requirements:
179
187
  - - ! '>='
180
188
  - !ruby/object:Gem::Version
181
189
  version: '0'
182
- segments:
183
- - 0
184
- hash: -1710872162034708641
185
190
  requirements: []
186
191
  rubyforge_project: babelyoda
187
192
  rubygems_version: 1.8.10