babelish 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: be34046268e439e572bf6a6a2396d5a7f4eb4144
4
- data.tar.gz: b303dbab56fbc3a9fb05cdf8ee8b96ad492f7a48
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ Nzk3MzY5NzE0NzhmMDBiZmFlMmQ2OTJhMzdiZjE4YjFjMDU2YzUwZA==
5
+ data.tar.gz: !binary |-
6
+ MGUxMTM3OGI3OTU4M2I3M2FjYWEwNTRmMDljZjJkZTUxZDQxZDBkNQ==
5
7
  SHA512:
6
- metadata.gz: 05b8e867c1393e9c71b44000fcac86879313b863b698d349596920fabc17f2b231044c6a482f4f15ecc4476f1956c26aed7b7c20f9c1600e1850bc76d3fd4cbf
7
- data.tar.gz: 534309b822c8587a37ab88aaea78e739db384c15aa39408a0b0393ed58e17f06489815ef18608c9980e8e4c56b9cd546ca2cb364924c45fff2cc6521a383c583
8
+ metadata.gz: !binary |-
9
+ NzljNjRjMDk4MmEyOGI0MmZjYmUzMGVlYTEwZTBjMzZkZjJjNGU3NWU3NDI1
10
+ MjFjNmRhOGRlNmE0NGU5NTU2NjdlOTM0MDZhZDgwNTIyYjE1MzkwODNkMWUx
11
+ NGQ2Y2Q5ODhjZGM5ZDkyNjYwMWExOTY0OGU5Y2UxOTQ5NDBiYjI=
12
+ data.tar.gz: !binary |-
13
+ NjRiMDk1NDI1Y2M3OTc0OTUzNjA2ODAzNDllZjQ5MGQ2YzQxZTdlZDViNDIx
14
+ ZWNiODdlMTY2MzUzNjQ5NjY3ZjBiNmY3MjViZjUwMWE2ZGEzNGI3Y2IyMDI1
15
+ MGFhMzhkYzBkNmQxNmU0NzY5OTdmN2YxOTY3NzVkM2RkMGY3ZGM=
data/.babelish.sample CHANGED
@@ -13,19 +13,20 @@ filenames: ["test/data/test_en.strings", "test/data/test_fr.strings"]
13
13
  # CSV2Base
14
14
 
15
15
  ## required
16
- filename: test/data/test_data.csv # CSV file (CSV_FILENAME) to convert from or name of file in Google Drive
17
- langs: # Languages to convert. i.e. English:en
16
+ filename: test/data/test_data.csv # CSV file (CSV_FILENAME) to convert from or name of file in Google Drive
17
+ langs: # Languages to convert. i.e. English:en
18
18
  English: "en"
19
19
 
20
20
  ## optional
21
21
  # fetch: true # set to true to get file(filename) from google drive
22
- # excluded-states: ["Images", "Xib"] # Exclude rows with given state
23
- # state-column: 3 # Position of column for state if any
24
- # keys-column: 0 # Position of column for keys
25
- # default-lang: "English" # Default language to use for empty values if any
26
- # output-dir: "resources/" # Path of output files
27
- # output-file: "myOnlyFile.strings" # --IGNORED-- Path of a single output file. Overrides 'output_dir'
28
- # output-basenames:
29
- # - Localizable
30
- # - info
31
- # ignore_lang_path: true # does not care about lang component path. i.e: en.lproj/
22
+ # excluded_states: ["Images", "Xib"] # Exclude rows with given state
23
+ # state_column: 3 # Position of column for state if any
24
+ # keys_column: 0 # Position of column for keys
25
+ # default_lang: "English" # Header name of column containing fallback value if value is empty
26
+ # output_dir: "resources/" # Path of output files
27
+ # output_basenames: # Basename of output files
28
+ # - Localizable
29
+ # - info
30
+ # ignore_lang_path: true # does not care about lang component path. i.e: en.lproj/
31
+ # sheet: 0 # Index of worksheet to download. First index is 0.
32
+ # macros_filename: Babelish.h # File to output the defines of localized strings
data/.gitignore CHANGED
@@ -9,6 +9,7 @@
9
9
 
10
10
  # Config file
11
11
  .babelish
12
+ .babelish.token
12
13
 
13
14
  # SimpleCov
14
15
  coverage
@@ -27,4 +28,5 @@ Gemfile.lock
27
28
  *.sublime-project
28
29
 
29
30
  doc
30
- .yardoc
31
+ .yardoc
32
+
data/.travis.yml CHANGED
@@ -9,5 +9,5 @@ deploy:
9
9
  secure: Xjq+v+jEU6wK4BtyfnV1elegNcxK6Ah/O99Sn9c2IlkCmJ1wxLBouqzEiSorSJ4IOMa5H2y3gwo5GXOr6Y7d8huyGrPuBeCSGqAmH77wNCIv7G+jnLiYb1sRZbtKcPW2QaN6JF81qDIelwyspMfo6/ug1qN1x323UaxZl7f7nUE=
10
10
  gem: babelish
11
11
  on:
12
- tags: true
13
12
  repo: netbe/Babelish
13
+ all_branches: true
data/babelish.gemspec CHANGED
@@ -6,7 +6,7 @@ require 'babelish/version'
6
6
  Gem::Specification.new do |s|
7
7
  s.name = 'babelish'
8
8
  s.version = Babelish::VERSION
9
- s.date = '2014-05-07'
9
+ s.date = '2014-09-24'
10
10
  s.summary = "CSV converter for localization files"
11
11
  s.description = "This set of commands converts a CSV file to the following formats:
12
12
  - .strings (iOS)
@@ -15,12 +15,12 @@ Gem::Specification.new do |s|
15
15
  - .php"
16
16
  s.authors = ["François Benaiteau", "Markus Paeschke"]
17
17
  s.email = ['francois.benaiteau@gmail.com', 'markus.paeschke@gmail.com']
18
- s.homepage = 'https://github.com/netbe/CSV-to-iOS-Localizable.strings-converter'
18
+ s.homepage = 'http://netbe.github.io/Babelish/'
19
19
  s.license = 'MIT'
20
20
 
21
21
  s.add_dependency "thor"
22
22
 
23
- s.add_dependency "google_drive"
23
+ s.add_dependency "google_drive", "~> 0.3.10"
24
24
  # google_drive dependency to ask for mail and password
25
25
  s.add_dependency "highline"
26
26
 
@@ -23,8 +23,12 @@ class Commandline < Thor
23
23
  method_option :default_lang, :type => :string, :aliases => "-l", :desc => "Default language to use for empty values if any"
24
24
  method_option :output_dir, :type => :string, :aliases => "-d", :desc => "Path of output files"
25
25
  method_option :output_basenames, :type => :array, :aliases => "-o", :desc => "Basename of output files"
26
- method_option :ignore_lang_path, :type => :boolean, :aliases => "-I", :default => false, :desc => "Ignore the path component of langs"
26
+ method_option :ignore_lang_path, :type => :boolean, :aliases => "-I", :lazy_default => false, :desc => "Ignore the path component of langs"
27
27
  method_option :fetch, :type => :boolean, :desc => "Download file from Google Drive"
28
+ method_option :sheet, :type => :numeric, :desc => "Index of worksheet to download. First index is 0"
29
+ if klass[:name] == "CSV2Strings"
30
+ method_option :macros_filename, :type => :boolean, :aliases => "-m", :lazy_default => false, :desc => "Filename containing defines of localized keys"
31
+ end
28
32
  define_method("#{klass[:name].downcase}") do
29
33
  csv2base(klass[:name])
30
34
  end
@@ -93,7 +97,7 @@ class Commandline < Thor
93
97
  files = [file_path].compact
94
98
  else
95
99
  files = gd.download filename.to_s
96
- file_path = files.join("\n")
100
+ file_path = files.join("\n") unless files.empty?
97
101
  end
98
102
 
99
103
  if file_path
@@ -108,7 +112,7 @@ class Commandline < Thor
108
112
  args = options.dup
109
113
  if options[:fetch]
110
114
  say "Fetching csv file #{options[:filename]} from Google Drive"
111
- files = download(options[:filename])
115
+ files = download(options[:filename], nil, options[:sheet])
112
116
  abort if files.empty? # no file downloaded
113
117
  args.delete(:fetch)
114
118
  else
@@ -117,6 +121,7 @@ class Commandline < Thor
117
121
  args.delete(:langs)
118
122
  args.delete(:filename)
119
123
 
124
+ xcode_macros = Babelish::XcodeMacros.new if options[:macros_filename]
120
125
  files.each_with_index do |filename, index|
121
126
  if options[:output_basenames]
122
127
  args[:output_basename] = options[:output_basenames][index]
@@ -126,6 +131,11 @@ class Commandline < Thor
126
131
  args = Thor::CoreExt::HashWithIndifferentAccess.new(args)
127
132
  converter = class_object.new(filename, options[:langs], args)
128
133
  say converter.convert
134
+ xcode_macros.process(converter.table, converter.keys) if options[:macros_filename]
135
+ end
136
+ if options[:macros_filename]
137
+ say "generating macros"
138
+ xcode_macros.write_content(options[:macros_filename])
129
139
  end
130
140
  end
131
141
 
@@ -43,6 +43,18 @@ module Babelish
43
43
  return File.new(file_path, "w")
44
44
  end
45
45
 
46
+ def keys
47
+ @languages.each do |lang|
48
+ next unless lang
49
+ return lang.content.keys unless lang.content.keys.empty?
50
+ end
51
+ return []
52
+ end
53
+
54
+ def table
55
+ output_basename
56
+ end
57
+
46
58
  def language_filepaths(language)
47
59
  #implement in subclass
48
60
  []
@@ -54,7 +66,7 @@ module Babelish
54
66
  end
55
67
 
56
68
  def default_filepath
57
- Pathname.new(@output_dir) + "#{@output_basename}.#{extension}"
69
+ Pathname.new(@output_dir) + "#{output_basename}.#{extension}"
58
70
  end
59
71
 
60
72
  def process_value(row_value, default_value)
@@ -94,10 +106,11 @@ module Babelish
94
106
 
95
107
  #header
96
108
  if rowIndex == 0
109
+ # defaultCol can be the keyValue
110
+ defaultCol = i if self.default_lang == row[i]
97
111
  # ignore all headers not listed in langs to create files
98
112
  (excludedCols << i and next) unless @langs.has_key?(row[i])
99
113
 
100
- defaultCol = i if self.default_lang == row[i]
101
114
  language = Language.new(row[i])
102
115
  if @langs[row[i]].is_a?(Array)
103
116
  @langs[row[i]].each do |id|
@@ -110,7 +123,8 @@ module Babelish
110
123
  elsif !@state_column || (row[@state_column].nil? || row[@state_column] == '' || !@excluded_states.include?(row[@state_column]))
111
124
  # TODO: add option to strip the constant or referenced language
112
125
  key = row[@keys_column].strip
113
- value = self.process_value(row[i], row[defaultCol])
126
+ default_value = self.default_lang ? row[defaultCol] : nil
127
+ value = self.process_value(row[i], default_value)
114
128
 
115
129
  @languages[i].add_content_pair(key, value)
116
130
  end
@@ -1,16 +1,15 @@
1
1
  module Babelish
2
2
  class CSV2Strings < Csv2Base
3
+ attr_accessor :languages
3
4
 
4
5
  def language_filepaths(language)
5
6
  require 'pathname'
6
7
  filepaths = []
7
- filename = @output_basename || 'Localizable'
8
-
9
8
  if language.regions.empty?
10
- filepaths << Pathname.new(@output_dir) + "#{language.code}.lproj/#{filename}.strings"
9
+ filepaths << Pathname.new(@output_dir) + "#{language.code}.lproj/#{output_basename}.#{extension}"
11
10
  else
12
11
  language.regions.each do |region|
13
- filepaths << Pathname.new(@output_dir) + "#{language.code}-#{region}.lproj/#{filename}.strings"
12
+ filepaths << Pathname.new(@output_dir) + "#{language.code}-#{region}.lproj/#{output_basename}.#{extension}"
14
13
  end
15
14
  end
16
15
  filepaths
@@ -23,5 +22,9 @@ module Babelish
23
22
  def extension
24
23
  "strings"
25
24
  end
25
+
26
+ def output_basename
27
+ @output_basename || 'Localizable'
28
+ end
26
29
  end
27
30
  end
@@ -40,8 +40,8 @@ module Babelish
40
40
  end
41
41
 
42
42
  def authenticate
43
- # will try to get token from ~/.ruby_google_drive.token
44
- @session = GoogleDrive.saved_session
43
+ # will try to get token and store in file below
44
+ @session = GoogleDrive.saved_session ".babelish.token"
45
45
  end
46
46
 
47
47
  def file_with_name(name)
@@ -10,7 +10,7 @@ module Babelish
10
10
 
11
11
  def parse_dotstrings_line(line)
12
12
  line.strip!
13
- if line[0] != ?# && line[0] != ?=
13
+ if line[0] != ?# && line[0] != ?= && line[0] != ?/
14
14
  m = line.match(/^[^\"]*\"(.+)\"[^=]+=[^\"]*\"(.*)\";/)
15
15
  return {m[1] => m[2]} unless m.nil?
16
16
  end
@@ -1,3 +1,3 @@
1
1
  module Babelish
2
- VERSION = '0.3.1'
2
+ VERSION = "0.3.2"
3
3
  end
@@ -0,0 +1,46 @@
1
+ module Babelish
2
+ class XcodeMacros
3
+ attr_accessor :content, :table, :keys
4
+ def initialize(table = "Localizable", keys = {})
5
+ @content = ""
6
+ @table = table
7
+ @keys = keys
8
+ end
9
+
10
+ def self.write_macros(file_path, table, keys)
11
+ instance = XcodeMacros.new
12
+ instance.process(table, keys)
13
+ instance.write_content(file_path)
14
+ end
15
+
16
+ def process(table, keys)
17
+ keys.each do |key|
18
+ macro_name = "LS_#{key.upcase}"
19
+ macro_name += "_#{table.upcase}" if table != "Localizable"
20
+ macro_name.gsub!(' ', '')
21
+ macro_name.gsub!('.', '_')
22
+ macro_name.gsub!('-', '_')
23
+ @content << String.new(<<-EOS)
24
+ #define #{macro_name} NSLocalizedStringFromTable(@"#{key}",@"#{table}",@"")
25
+ EOS
26
+ end
27
+ @content
28
+ end
29
+
30
+ def write_content(file_path)
31
+ header = String.new(<<-EOS)
32
+ //
33
+ // file_path
34
+ //
35
+ // This file was generated by Babelish
36
+ //
37
+ // https://github.com/netbe/babelish
38
+ //
39
+ EOS
40
+ header.gsub! "file_path", File.basename(file_path)
41
+ file = File.new(file_path, "w")
42
+ file.write header + @content
43
+ file.close
44
+ end
45
+ end
46
+ end
data/lib/babelish.rb CHANGED
@@ -25,3 +25,6 @@ require "babelish/json2csv"
25
25
  # General
26
26
  require "babelish/language"
27
27
  require "babelish/google_doc"
28
+
29
+ # iOS specific
30
+ require "babelish/xcode_macros"
@@ -11,7 +11,7 @@ class TestCSV2StringsCommand < Test::Unit::TestCase
11
11
  assert File.exist?("./en.lproj/Localizable.strings")
12
12
  assert File.exist?("./fr.lproj/Localizable.strings")
13
13
 
14
- #clean up
14
+ # clean up
15
15
  system("rm -rf ./en.lproj/")
16
16
  system("rm -rf ./fr.lproj/")
17
17
  end
@@ -28,7 +28,7 @@ class TestCSV2StringsCommand < Test::Unit::TestCase
28
28
  assert File.exist?("./mynewlocation/en.lproj/Localizable.strings"), "can't find output file for English in mynewlocation folder"
29
29
  assert File.exist?("./mynewlocation/fr.lproj/Localizable.strings"), "can't find output file for French in mynewlocation folder"
30
30
 
31
- #clean up
31
+ # clean up
32
32
  system("rm -rf ./mynewlocation")
33
33
  end
34
34
 
@@ -43,7 +43,7 @@ class TestCSV2StringsCommand < Test::Unit::TestCase
43
43
  Commandline.new([], options).csv2strings
44
44
  end
45
45
 
46
- #clean up
46
+ # clean up
47
47
  system("rm -rf ./en.lproj/")
48
48
  system("rm -rf ./fr.lproj/")
49
49
  end
@@ -55,7 +55,7 @@ class TestCSV2StringsCommand < Test::Unit::TestCase
55
55
  Commandline.new.csv2strings
56
56
  end
57
57
 
58
- #clean up
58
+ # clean up
59
59
  system("rm -rf ./en.lproj/")
60
60
  system("rm -rf ./fr.lproj/")
61
61
  end
@@ -76,7 +76,7 @@ class TestCSV2StringsCommand < Test::Unit::TestCase
76
76
  assert File.exist?("./en.lproj/sheet2.strings"), "can't find output file for sheet2 English"
77
77
  assert File.exist?("./fr.lproj/sheet2.strings"), "can't find output file for sheet2 French"
78
78
 
79
- #clean up
79
+ # clean up
80
80
  system("rm -rf ./en.lproj/")
81
81
  system("rm -rf ./fr.lproj/")
82
82
  end
@@ -85,7 +85,7 @@ class TestCSV2StringsCommand < Test::Unit::TestCase
85
85
  omit if ENV['TRAVIS']
86
86
  options = {
87
87
  :filename => "my_strings",
88
- :langs => {"English" => "en", "French" => "fr"},
88
+ :langs => {"English" => "en"},
89
89
  :fetch => true,
90
90
  :ignore_lang_path => true,
91
91
  :output_basenames => %w(sheet1 sheet2),
@@ -94,13 +94,42 @@ class TestCSV2StringsCommand < Test::Unit::TestCase
94
94
  Commandline.new([], options).csv2strings
95
95
  # testing
96
96
  assert File.exist?("./sheet1.strings"), "can't find output file for sheet1 English with_ignore_lang_path_option"
97
- assert File.exist?("./sheet1.strings"), "can't find output file for sheet1 French with_ignore_lang_path_option"
98
97
  assert File.exist?("./sheet2.strings"), "can't find output file for sheet2 English with_ignore_lang_path_option"
99
- assert File.exist?("./sheet2.strings"), "can't find output file for sheet2 French with_ignore_lang_path_option"
100
98
 
101
- #clean up
102
- system("rm -rf ./en.lproj/")
103
- system("rm -rf ./fr.lproj/")
99
+ # clean up
100
+ system("rm -f sheet1.strings")
101
+ system("rm -f sheet2.strings")
102
+ end
103
+
104
+ def test_csv2strings_with_ignore_lang_path_option_local
105
+ options = {
106
+ :filename => "test/data/test_data.csv",
107
+ :langs => {"English" => "en"},
108
+ :ignore_lang_path => true,
109
+ }
110
+
111
+ Commandline.new([], options).csv2strings
112
+ # testing
113
+ assert File.exist?("./Localizable.strings"), "can't find output file for English with_ignore_lang_path_option"
114
+
115
+ # clean up
116
+ system("rm -f ./Localizable.strings")
117
+ end
118
+
119
+ def test_csv2string_with_macros_filename
120
+ options = {
121
+ :filename => "test/data/test_data.csv",
122
+ :macros_filename => "Babelish.h",
123
+ :langs => { "English" => "en" }
124
+ }
125
+
126
+ Commandline.new([], options).csv2strings
127
+ # testing
128
+ assert File.exist?("./Babelish.h"), "can't find macros file"
129
+
130
+ # clean up
131
+ system("rm -f ./Localizable.strings")
132
+ system("rm -f ./Babelish.h")
104
133
  end
105
134
 
106
135
  def teardown
@@ -6,6 +6,7 @@ class TestCSV2Strings < Test::Unit::TestCase
6
6
  converter = Babelish::CSV2Strings.new(csv_file, 'English' => [:en])
7
7
  converter.convert
8
8
  assert File.exists?("en.lproj/Localizable.strings"), "the ouptut file does not exist"
9
+ system("rm -rf en.lproj/")
9
10
  end
10
11
 
11
12
  def test_converting_csv_to_dotstrings_one_output_option
@@ -17,5 +18,71 @@ class TestCSV2Strings < Test::Unit::TestCase
17
18
  :ignore_lang_path => true)
18
19
  converter.convert
19
20
  assert File.exists?(single_file), "the ouptut file does not exist"
21
+ system("rm -f #{single_file}")
20
22
  end
23
+
24
+ def test_converting_csv_to_dotstrings_default_lang
25
+ expected_output = String.new(<<-EOS)
26
+ "GREETINGS" = "Buenos dias";
27
+ "ANOTHER_STRING" = "testEN";
28
+ EOS
29
+ csv_file = "test/data/test_data_multiple_langs.csv"
30
+ spanish_file = "es.lproj/Localizable.strings"
31
+ converter = Babelish::CSV2Strings.new(csv_file,
32
+ {'English' => [:en], "French" => "fr", "German" => "de", "Spanish" => "es"},
33
+ :default_lang => "English")
34
+ converter.convert
35
+ assert File.exists?(spanish_file), "the ouptut file does not exist"
36
+ result = File.read(spanish_file)
37
+ assert_equal expected_output, result
38
+ system("rm -rf *.lproj")
39
+ end
40
+
41
+ def test_converting_csv_to_dotstrings_with_no_default_lang_is_empty
42
+ expected_output = String.new(<<-EOS)
43
+ "GREETINGS" = "Buenos dias";
44
+ "ANOTHER_STRING" = "";
45
+ EOS
46
+ csv_file = "test/data/test_data_multiple_langs.csv"
47
+ spanish_file = "es.lproj/Localizable.strings"
48
+ converter = Babelish::CSV2Strings.new(csv_file,
49
+ {'English' => [:en], "French" => "fr", "German" => "de", "Spanish" => "es"})
50
+ converter.convert
51
+ assert File.exists?(spanish_file), "the ouptut file does not exist"
52
+ result = File.read(spanish_file)
53
+ assert_equal expected_output, result
54
+ system("rm -rf *.lproj")
55
+ end
56
+
57
+ def test_converting_csv_to_dotstrings_default_lang_to_key
58
+ expected_output = String.new(<<-EOS)
59
+ "GREETINGS" = "Buenos dias";
60
+ "ANOTHER_STRING" = "ANOTHER_STRING";
61
+ EOS
62
+ csv_file = "test/data/test_data_multiple_langs.csv"
63
+ spanish_file = "es.lproj/Localizable.strings"
64
+ converter = Babelish::CSV2Strings.new(csv_file,
65
+ {'English' => [:en], "French" => "fr", "German" => "de", "Spanish" => "es"},
66
+ :default_lang => "variables")
67
+ converter.convert
68
+ assert File.exists?(spanish_file), "the ouptut file does not exist"
69
+ result = File.read(spanish_file)
70
+ assert_equal expected_output, result
71
+ system("rm -rf *.lproj")
72
+ end
73
+
74
+ def test_converting_csv_to_dotstrings_keys
75
+ expected_output = String.new(<<-EOS)
76
+ "GREETINGS" = "Buenos dias";
77
+ "ANOTHER_STRING" = "ANOTHER_STRING";
78
+ EOS
79
+ csv_file = "test/data/test_data_multiple_langs.csv"
80
+ converter = Babelish::CSV2Strings.new(csv_file,
81
+ {'English' => [:en], "French" => "fr", "German" => "de", "Spanish" => "es"},
82
+ :default_lang => "variables")
83
+ converter.convert
84
+ assert !converter.keys.empty?
85
+ system("rm -rf *.lproj")
86
+ end
87
+
21
88
  end
@@ -40,6 +40,15 @@ class TestStrings2CSV < Test::Unit::TestCase
40
40
  assert_nil output, "output should be nil with wrong syntax"
41
41
  end
42
42
 
43
+ def test_parse_dotstrings_line_with_comment
44
+ input = String.new(<<-EOS)
45
+ /* Class = "IBUIButton"; normalTitle = "Wibble"; ObjectID = "xxx-xx-123"; */
46
+ EOS
47
+
48
+ output = Babelish::Strings2CSV.new.parse_dotstrings_line input
49
+ assert_nil output, "output should be nil with comment"
50
+ end
51
+
43
52
  def test_load_strings_with_wrong_file
44
53
  assert_raise(Errno::ENOENT) do
45
54
  output = Babelish::Strings2CSV.new.load_strings "file that does not exist.strings"
@@ -106,9 +115,9 @@ class TestStrings2CSV < Test::Unit::TestCase
106
115
  assert_equal filenames, converter.filenames
107
116
  end
108
117
 
109
- def test_initialize_with_default_values
110
- converter = Babelish::Strings2CSV.new
111
- assert_not_nil converter.csv_filename
112
- end
118
+ def test_initialize_with_default_values
119
+ converter = Babelish::Strings2CSV.new
120
+ assert_not_nil converter.csv_filename
121
+ end
113
122
 
114
123
  end
@@ -0,0 +1,60 @@
1
+ require "test_helper"
2
+ class TestXcodeMacros < Test::Unit::TestCase
3
+ def test_process
4
+ keys = ["login.title", "login.button"]
5
+ table = "Localizable"
6
+ xcode_macros = Babelish::XcodeMacros.new
7
+ content = xcode_macros.process(table, keys)
8
+ expected_output = String.new(<<-EOS)
9
+ #define LS_LOGIN_TITLE NSLocalizedStringFromTable(@"login.title",@"Localizable",@"")
10
+ #define LS_LOGIN_BUTTON NSLocalizedStringFromTable(@"login.button",@"Localizable",@"")
11
+ EOS
12
+ assert_equal expected_output, content
13
+ end
14
+
15
+ def test_write_macros_class_method
16
+ keys = ["login.title", "login.button"]
17
+ table = "Localizable"
18
+ Babelish::XcodeMacros.write_macros("Babelish.h", table, keys)
19
+ expected_output = String.new(<<-EOS)
20
+ //
21
+ // Babelish.h
22
+ //
23
+ // This file was generated by Babelish
24
+ //
25
+ // https://github.com/netbe/babelish
26
+ //
27
+ #define LS_LOGIN_TITLE NSLocalizedStringFromTable(@"login.title",@"Localizable",@"")
28
+ #define LS_LOGIN_BUTTON NSLocalizedStringFromTable(@"login.button",@"Localizable",@"")
29
+ EOS
30
+ assert File.exists?("Babelish.h")
31
+ result = File.read("Babelish.h")
32
+ assert_equal expected_output, result
33
+ #clean up
34
+ system("rm -f ./Babelish.h")
35
+ end
36
+
37
+ def test_write_macros_process
38
+ keys = ["login.title", "login.button"]
39
+ table = "Localizable"
40
+ macros = Babelish::XcodeMacros.new
41
+ macros.process(table, keys)
42
+ macros.write_content("Babelish.h")
43
+ expected_output = String.new(<<-EOS)
44
+ //
45
+ // Babelish.h
46
+ //
47
+ // This file was generated by Babelish
48
+ //
49
+ // https://github.com/netbe/babelish
50
+ //
51
+ #define LS_LOGIN_TITLE NSLocalizedStringFromTable(@"login.title",@"Localizable",@"")
52
+ #define LS_LOGIN_BUTTON NSLocalizedStringFromTable(@"login.button",@"Localizable",@"")
53
+ EOS
54
+ assert File.exists?("Babelish.h")
55
+ result = File.read("Babelish.h")
56
+ assert_equal expected_output, result
57
+ #clean up
58
+ system("rm -f ./Babelish.h")
59
+ end
60
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: babelish
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - François Benaiteau
@@ -9,140 +9,137 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-05-07 00:00:00.000000000 Z
12
+ date: 2014-09-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - '>='
18
+ - - ! '>='
19
19
  - !ruby/object:Gem::Version
20
20
  version: '0'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - '>='
25
+ - - ! '>='
26
26
  - !ruby/object:Gem::Version
27
27
  version: '0'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: google_drive
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - '>='
32
+ - - ~>
33
33
  - !ruby/object:Gem::Version
34
- version: '0'
34
+ version: 0.3.10
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - '>='
39
+ - - ~>
40
40
  - !ruby/object:Gem::Version
41
- version: '0'
41
+ version: 0.3.10
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: highline
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - '>='
46
+ - - ! '>='
47
47
  - !ruby/object:Gem::Version
48
48
  version: '0'
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - '>='
53
+ - - ! '>='
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: xml-simple
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - '>='
60
+ - - ! '>='
61
61
  - !ruby/object:Gem::Version
62
62
  version: '0'
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - '>='
67
+ - - ! '>='
68
68
  - !ruby/object:Gem::Version
69
69
  version: '0'
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: json
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
- - - '>='
74
+ - - ! '>='
75
75
  - !ruby/object:Gem::Version
76
76
  version: '0'
77
77
  type: :runtime
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
- - - '>='
81
+ - - ! '>='
82
82
  - !ruby/object:Gem::Version
83
83
  version: '0'
84
84
  - !ruby/object:Gem::Dependency
85
85
  name: rake
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
- - - '>='
88
+ - - ! '>='
89
89
  - !ruby/object:Gem::Version
90
90
  version: '0'
91
91
  type: :development
92
92
  prerelease: false
93
93
  version_requirements: !ruby/object:Gem::Requirement
94
94
  requirements:
95
- - - '>='
95
+ - - ! '>='
96
96
  - !ruby/object:Gem::Version
97
97
  version: '0'
98
98
  - !ruby/object:Gem::Dependency
99
99
  name: test-unit
100
100
  requirement: !ruby/object:Gem::Requirement
101
101
  requirements:
102
- - - '>='
102
+ - - ! '>='
103
103
  - !ruby/object:Gem::Version
104
104
  version: '0'
105
105
  type: :development
106
106
  prerelease: false
107
107
  version_requirements: !ruby/object:Gem::Requirement
108
108
  requirements:
109
- - - '>='
109
+ - - ! '>='
110
110
  - !ruby/object:Gem::Version
111
111
  version: '0'
112
112
  - !ruby/object:Gem::Dependency
113
113
  name: simplecov
114
114
  requirement: !ruby/object:Gem::Requirement
115
115
  requirements:
116
- - - '>='
116
+ - - ! '>='
117
117
  - !ruby/object:Gem::Version
118
118
  version: '0'
119
119
  type: :development
120
120
  prerelease: false
121
121
  version_requirements: !ruby/object:Gem::Requirement
122
122
  requirements:
123
- - - '>='
123
+ - - ! '>='
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0'
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: yard
128
128
  requirement: !ruby/object:Gem::Requirement
129
129
  requirements:
130
- - - '>='
130
+ - - ! '>='
131
131
  - !ruby/object:Gem::Version
132
132
  version: '0'
133
133
  type: :development
134
134
  prerelease: false
135
135
  version_requirements: !ruby/object:Gem::Requirement
136
136
  requirements:
137
- - - '>='
137
+ - - ! '>='
138
138
  - !ruby/object:Gem::Version
139
139
  version: '0'
140
- description: |-
141
- This set of commands converts a CSV file to the following formats:
142
- - .strings (iOS)
143
- - .xml (Android)
144
- - .json
145
- - .php
140
+ description: ! "This set of commands converts a CSV file to the following formats:\n
141
+ \ - .strings (iOS)\n - .xml (Android)\n -
142
+ .json\n - .php"
146
143
  email:
147
144
  - francois.benaiteau@gmail.com
148
145
  - markus.paeschke@gmail.com
@@ -192,6 +189,7 @@ files:
192
189
  - lib/babelish/php2csv.rb
193
190
  - lib/babelish/strings2csv.rb
194
191
  - lib/babelish/version.rb
192
+ - lib/babelish/xcode_macros.rb
195
193
  - test/babelish/commands/test_command_android2csv.rb
196
194
  - test/babelish/commands/test_command_csv2android.rb
197
195
  - test/babelish/commands/test_command_csv2strings.rb
@@ -208,6 +206,7 @@ files:
208
206
  - test/babelish/test_json2csv.rb
209
207
  - test/babelish/test_php2csv.rb
210
208
  - test/babelish/test_strings2csv.rb
209
+ - test/babelish/test_xcode_macros.rb
211
210
  - test/data/android-en.xml
212
211
  - test/data/android-fr.xml
213
212
  - test/data/android.xml
@@ -224,7 +223,7 @@ files:
224
223
  - test/data/test_with_nil.strings
225
224
  - test/data/xcode_empty.strings
226
225
  - test/test_helper.rb
227
- homepage: https://github.com/netbe/CSV-to-iOS-Localizable.strings-converter
226
+ homepage: http://netbe.github.io/Babelish/
228
227
  licenses:
229
228
  - MIT
230
229
  metadata: {}
@@ -234,51 +233,19 @@ require_paths:
234
233
  - lib
235
234
  required_ruby_version: !ruby/object:Gem::Requirement
236
235
  requirements:
237
- - - '>='
236
+ - - ! '>='
238
237
  - !ruby/object:Gem::Version
239
238
  version: '0'
240
239
  required_rubygems_version: !ruby/object:Gem::Requirement
241
240
  requirements:
242
- - - '>='
241
+ - - ! '>='
243
242
  - !ruby/object:Gem::Version
244
243
  version: '0'
245
244
  requirements: []
246
245
  rubyforge_project:
247
- rubygems_version: 2.2.2
246
+ rubygems_version: 2.4.1
248
247
  signing_key:
249
248
  specification_version: 4
250
249
  summary: CSV converter for localization files
251
- test_files:
252
- - test/babelish/commands/test_command_android2csv.rb
253
- - test/babelish/commands/test_command_csv2android.rb
254
- - test/babelish/commands/test_command_csv2strings.rb
255
- - test/babelish/commands/test_command_strings2csv.rb
256
- - test/babelish/test_android2csv.rb
257
- - test/babelish/test_base2csv.rb
258
- - test/babelish/test_bins.rb
259
- - test/babelish/test_commandline.rb
260
- - test/babelish/test_csv2android.rb
261
- - test/babelish/test_csv2base.rb
262
- - test/babelish/test_csv2json.rb
263
- - test/babelish/test_csv2php.rb
264
- - test/babelish/test_csv2strings.rb
265
- - test/babelish/test_json2csv.rb
266
- - test/babelish/test_php2csv.rb
267
- - test/babelish/test_strings2csv.rb
268
- - test/data/android-en.xml
269
- - test/data/android-fr.xml
270
- - test/data/android.xml
271
- - test/data/genstrings.strings
272
- - test/data/json.json
273
- - test/data/php_lang.php
274
- - test/data/test_data.csv
275
- - test/data/test_data.strings
276
- - test/data/test_data_multiple_langs.csv
277
- - test/data/test_en.strings
278
- - test/data/test_fr.strings
279
- - test/data/test_utf16.strings
280
- - test/data/test_with_nil.csv
281
- - test/data/test_with_nil.strings
282
- - test/data/xcode_empty.strings
283
- - test/test_helper.rb
250
+ test_files: []
284
251
  has_rdoc: