babelyoda 2.0.2 → 2.0.3

Sign up to get free protection for your applications and to get access to all the features.
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