terrestrial-cli 0.1.0 → 0.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e281351eb1f04aa6331e79dcb3c229569c7886be
4
- data.tar.gz: 782805e8aafda3c9fbc1af5120b59b969b7f800c
3
+ metadata.gz: eff2d2337528b5b9713b26919a393b2b145f6d2c
4
+ data.tar.gz: 1c12b3c56e54a0e81832ca9807ecb1ff8ba35a0a
5
5
  SHA512:
6
- metadata.gz: 791442b2416b61b88c2ee69daee39a8c25600e5b74f3ff2a1a74cc86a5f25326452a8c175224ec80365ee02219d15892f26cf5b74c614c6c942701f5ef742419
7
- data.tar.gz: eec81b09adaa373bcef0ce1ee419721a0fe40091d61c9b8270443fd7f2a7b7e297e611d794474f9491b7bb6b0062491511167696ffead0c8b6a80a3695cfb919
6
+ metadata.gz: c05e9799ac90e76144055d2ad37efeffbb7416e4edfe6647fa07470a41dd0912f3b89ebdb19dfc20d3f0b1c22cce35026becaecc11570bfb2e8684a331964d2a
7
+ data.tar.gz: b759606eef9ea8b17bb48e993331bf9053057ba65d0e96f8da0fe34d89e40cef6c98416aa5b5a77cae15db27e1cda0fade66d020bd9173a367faa267ad455f24
@@ -81,7 +81,6 @@ module Terrestrial
81
81
 
82
82
  class Bootstrapper
83
83
  class Entry
84
- MAX_IDENTIFIER_LENGTH = 10 # words
85
84
 
86
85
  def initialize(string, occurences = [])
87
86
  @string = string
@@ -104,12 +103,7 @@ module Terrestrial
104
103
  end
105
104
 
106
105
  def identifier
107
- formatted_string
108
- .gsub(/%\d\$@/, '')
109
- .gsub(/[^0-9a-z ]/i, '')
110
- .split(" ")[0..(MAX_IDENTIFIER_LENGTH - 1)]
111
- .join("_")
112
- .upcase
106
+ @identifier ||= IdGenerator.generate(formatted_string)
113
107
  end
114
108
 
115
109
  def string
@@ -179,6 +173,56 @@ module Terrestrial
179
173
  end
180
174
  end
181
175
  end
176
+
177
+ class IdGenerator
178
+ MAX_IDENTIFIER_LENGTH = 10 # words
179
+
180
+ class << self
181
+ def generate(string)
182
+ id = do_generate_id(string)
183
+
184
+ attempt = 1
185
+ while id_already_exists?(id)
186
+ id = increment_id(id, attempt)
187
+ attempt += 1
188
+ end
189
+ id_history << id
190
+ id
191
+ end
192
+
193
+ def reset!
194
+ @history = []
195
+ end
196
+
197
+ private
198
+
199
+ def increment_id(id, attempt)
200
+ if id[-1] == (attempt).to_s
201
+ id[-1] = (attempt + 1).to_s
202
+ id
203
+ else
204
+ id << "_#{attempt + 1}"
205
+ end
206
+ end
207
+
208
+ def do_generate_id(string)
209
+ string
210
+ .gsub(/%\d\$@/, '')
211
+ .gsub(/[^0-9a-z ]/i, '')
212
+ .split(" ")[0..(MAX_IDENTIFIER_LENGTH - 1)]
213
+ .join("_")
214
+ .upcase
215
+ end
216
+
217
+ def id_already_exists?(id)
218
+ id_history.any? {|previous| previous == id }
219
+ end
220
+
221
+ def id_history
222
+ @history ||= []
223
+ end
224
+ end
225
+ end
182
226
  end
183
227
  end
184
228
  end
@@ -57,19 +57,17 @@ module Terrestrial
57
57
  puts "------------------------------------"
58
58
  puts "-- Done!"
59
59
  puts "- Created Base.lproj in #{lproj_folder}."
60
+ puts "- All strings in source substituted with IDs."
60
61
  puts "- Remember to include the new localization files in your project!"
61
62
  end
62
63
 
63
64
  def print_instructions
64
- puts "- Terrestrial will add #{results.length} strings to your base Localizable.strings."
65
- puts ""
66
65
  puts "------------------------------------"
67
66
  puts "-- Source Code"
68
- puts "- Would you like Terrestrial to also modify the selected strings in your"
69
- puts "- source code to call .translated?"
67
+ puts "- Next Terrestrial will modify your source code to reference all the selected strings via IDs."
70
68
  puts "- e.g. \"This is my string\" => \"This is my string\".translated"
71
69
  puts ""
72
- puts "y/n?"
70
+ puts "Continue? y/n?"
73
71
  end
74
72
 
75
73
  def results
@@ -12,8 +12,6 @@ module Terrestrial
12
12
  end
13
13
 
14
14
  def run
15
- print_instructions
16
-
17
15
  exclusions = []
18
16
  i = 0
19
17
 
@@ -56,8 +54,9 @@ module Terrestrial
56
54
  puts "-- Instructions --"
57
55
  puts "- To exclude any strings from translation, type the index of each string."
58
56
  puts "- e.g. 1,2,4"
57
+ puts "- Press return to continue, or 'q' to quit at any time."
59
58
  puts "------------------"
60
- puts "Any Exclusions? (press return to continue or 'q' to quit at any time)"
59
+ puts "Any Exclusions?"
61
60
  end
62
61
 
63
62
  def file_name_with_line_number(string)
@@ -31,28 +31,21 @@ module Terrestrial
31
31
  end
32
32
 
33
33
  puts "------------------------------------"
34
- puts "- Found #{strings.count} strings"
34
+ puts "- Found #{strings.all_occurences.count} strings"
35
35
  puts ""
36
36
  exclusions = TableWorkflow.new(strings).run
37
+ strings.exclude_occurences(exclusions)
38
+
37
39
  puts "------------------------------------"
38
40
  puts "- Done!"
41
+ puts "- Terrestrial will add #{strings.all_occurences.count} strings to your base Localizable.strings."
42
+ puts ""
39
43
 
40
- strings.exclude_occurences(exclusions)
41
-
42
- if Config[:platform] == "ios"
43
- IosWorkflow.new(strings).run
44
- elsif Config[:platform] == 'android'
45
- android_workflow
46
- end
44
+ IosWorkflow.new(strings).run
47
45
  end
48
46
 
49
47
  private
50
48
 
51
- def android_workflow
52
- puts "- Terrestrial will annotate the selected strings in your strings.xml file:"
53
- puts "- e.g. <string name='my_name'>My string!</string> => <string terrestrial='true' name='my_name'>My string</string>"
54
- end
55
-
56
49
  def find_new_strings
57
50
  @strings = Bootstrapper.find_new_strings(Config[:directory])
58
51
  end
@@ -84,8 +77,6 @@ module Terrestrial
84
77
  puts ""
85
78
  puts "For more information, visit http://docs.terrestrial.io/, or jump on our Slack via https://terrestrial-slack.herokuapp.com/"
86
79
  abort
87
- else
88
- # TODO
89
80
  end
90
81
  end
91
82
  end
@@ -57,16 +57,16 @@ module Terrestrial
57
57
  private
58
58
 
59
59
  def select_translation_files
60
- @tranlation_files = []
60
+ @translation_files = []
61
61
 
62
62
  files = find_platform_translation_files
63
63
  if files.any?
64
- @tranlation_files = FilePicker.run(files, @platform)
64
+ @translation_files = FilePicker.run(files, @platform)
65
65
 
66
- if @tranlation_files.count == 1
67
- puts "Tracking #{@tranlation_files.count} file!"
66
+ if @translation_files.count == 1
67
+ puts "Tracking #{@translation_files.count} file!"
68
68
  else
69
- puts "Tracking #{@tranlation_files.count} files!"
69
+ puts "Tracking #{@translation_files.count} files!"
70
70
  end
71
71
  end
72
72
  end
@@ -87,7 +87,7 @@ module Terrestrial
87
87
  project_id: @project_id,
88
88
  platform: @platform,
89
89
  api_key: @api_key,
90
- translation_files: @tranlation_files
90
+ translation_files: @translation_files
91
91
  })
92
92
 
93
93
  Terrestrial::Config.update_global_config
@@ -102,6 +102,8 @@ module Terrestrial
102
102
  without_strings.include?("DLog") ||
103
103
  without_strings.include?("NSLog") ||
104
104
  without_strings.include?("NSAssert") ||
105
+ without_strings.downcase.include?(".translated") ||
106
+ without_strings.downcase.include?("nslocalizedstring") ||
105
107
  without_strings.downcase.include?("uistoryboard") ||
106
108
  without_strings.downcase.include?("instantiateviewcontrollerwithidentifier") ||
107
109
  without_strings.downcase.include?("uiimage") ||
@@ -79,9 +79,12 @@ module Terrestrial
79
79
  def self.looks_suspicious(line)
80
80
  without_strings = line.gsub(STRING_REGEX, "")
81
81
  without_strings.include?("_LOG") ||
82
+ without_strings.include?("_LOG") ||
82
83
  without_strings.include?("DLog") ||
83
84
  without_strings.include?("NSLog") ||
84
85
  without_strings.include?("NSAssert") ||
86
+ without_strings.downcase.include?(".translated") ||
87
+ without_strings.downcase.include?("nslocalizedstring") ||
85
88
  without_strings.downcase.include?("uistoryboard") ||
86
89
  without_strings.downcase.include?("instantiateviewcontrollerwithidentifier") ||
87
90
  without_strings.downcase.include?("uiimage") ||
@@ -7,9 +7,15 @@ module Terrestrial
7
7
  MixpanelClient.track("cli-push-command")
8
8
  load_string_registry
9
9
 
10
- web_client.push(Config[:project_id], Config[:app_id], format_entries)
11
-
12
- puts "Success!"
10
+ response = web_client.push(Config[:project_id], Config[:app_id], format_entries)
11
+
12
+ if response.success?
13
+ puts "Strings uploaded!"
14
+ else
15
+ puts "There was an error uploading your translations:"
16
+ puts response.inspect
17
+ puts "If the problem persists, contact us at team@terrestrial.io, or on Slack at https://terrestrial-slack.herokuapp.com/"
18
+ end
13
19
  end
14
20
 
15
21
  private
@@ -34,14 +34,14 @@ module Terrestrial
34
34
  def print_diff
35
35
  puts "--- Diff"
36
36
  puts "- New Strings"
37
- print_table(new_strings)
37
+ puts create_table(new_strings)
38
38
  puts ""
39
39
  puts "- Removed Strings"
40
- print_table(removed_strings)
40
+ puts create_table(removed_strings)
41
41
  end
42
42
 
43
- def print_table(strings)
44
- puts Terminal::Table.new(headings: ['Identifier', 'String', 'Comment']) do |t|
43
+ def create_table(strings)
44
+ Terminal::Table.new(headings: ['Identifier', 'String', 'Comment']) do |t|
45
45
  size = strings.count
46
46
  strings.each_with_index do |string, i|
47
47
  t.add_row([string["identifier"], string["string"], string["context"]])
@@ -60,8 +60,8 @@ module Terrestrial
60
60
 
61
61
  def fetch_current_strings_from_web
62
62
  web_client
63
- .get_app_strings(Config[:project_id], Config[:app_id])
64
- .body["data"]["strings"]
63
+ .get_app_strings(Config[:project_id], Config[:app_id])
64
+ .body["data"]["strings"]
65
65
  end
66
66
 
67
67
  def web_client
@@ -1,5 +1,5 @@
1
1
  module Terrestrial
2
2
  module Cli
3
- VERSION = "0.1.0"
3
+ VERSION = "0.1.1"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: terrestrial-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Niklas Begley
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-07 00:00:00.000000000 Z
11
+ date: 2016-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: terminal-table