lokale 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 36f4dfe95a8d5ab359a7e8e8533a0870316bbb6b
4
- data.tar.gz: 3d3fa77a8ab9dbef6d5a1b65f2ef06b0e6ba83f8
3
+ metadata.gz: 72e68f6bb7e1876f79575ae055c261147df25727
4
+ data.tar.gz: 6343b1266d7b686224a0d728b4baecd8d4b6c92c
5
5
  SHA512:
6
- metadata.gz: 329c3243dd0410f237bb55a650f102c10d132cf37089f6f177b51894604fd43dc62a8fe5535240f0d3f6aa9962a1ee0069f9b7bd022920e2a1d19b7813097328
7
- data.tar.gz: 95eb3e99e7a0356f8efce8b51f78c37453f41dd6f3f6e786009344293247b83a4909fcc9698789a67d63414bcac80160a97766f84870f332dd4c73beeff54d73
6
+ metadata.gz: dc97049e348d6aedb0a8c54d112f8cbc4c963799c0ecc90227a28daf90dad03d2b9f9ca6652d58e189ad07c862c89e49beec59b5ea364ac84ab55751fc456482
7
+ data.tar.gz: e3a0565425d0e21b9cb2c67148489af5dc4e225afb58f671bbd9391b3fc3a957d753c54434cad8ffe5fd852845dfbcc3f606244f6559bc2aa5181eab2e87c5ef
data/README.md CHANGED
@@ -32,7 +32,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
32
32
 
33
33
  ## Contributing
34
34
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/lokale.
35
+ Bug reports and pull requests are welcome on GitHub at https://github.com/ordinec7/lokale.
36
36
 
37
37
  ## License
38
38
 
data/bin/lokale CHANGED
@@ -1,6 +1,32 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'lokale'
4
+ require 'lokale/find_dir'
5
+ require 'lokale/colorize'
6
+ require 'lokale/options'
7
+
8
+ git_path = find_git_repo
9
+ if git_path.nil?
10
+ puts "Could not find any git repository."
11
+ exit
12
+ end
13
+
14
+ xcode_project = xcode_project_name(git_path)
15
+ if xcode_project.nil?
16
+ puts "Found git repository (#{git_path}) does not contain an Xcode project."
17
+ exit
18
+ end
19
+
20
+
21
+ settings = Settings.get
22
+ settings.actions.each do |s|
23
+ puts s
24
+ puts s.type
25
+ puts s.arg
26
+ puts s.precedence
27
+ end
28
+
29
+ puts "Analyzing Xcode project '#{xcode_project}'".green
4
30
 
5
31
  macros = [
6
32
  Lokale::Macro.new("NSLocalizedString", /NSLocalizedString\("(.+?)",\s*comment:\s*"(.*?)"\)/),
@@ -9,7 +35,6 @@ macros = [
9
35
  #LocalizationMacro.new("ObjC Table String", /NSLocalizedStringFromTableInBundle\((.*?),/)
10
36
  ]
11
37
 
12
- puts Dir.pwd
13
38
  agent = Lokale::Agent.new(Dir.pwd, macros)
14
39
  reporter = Lokale::Reporter.new(agent)
15
40
  reporter.print_summary
@@ -0,0 +1,25 @@
1
+ class String
2
+ def black; "\e[30m#{self}\e[0m" end
3
+ def red; "\e[31m#{self}\e[0m" end
4
+ def green; "\e[32m#{self}\e[0m" end
5
+ def brown; "\e[33m#{self}\e[0m" end
6
+ def blue; "\e[34m#{self}\e[0m" end
7
+ def magenta; "\e[35m#{self}\e[0m" end
8
+ def cyan; "\e[36m#{self}\e[0m" end
9
+ def gray; "\e[37m#{self}\e[0m" end
10
+
11
+ def bg_black; "\e[40m#{self}\e[0m" end
12
+ def bg_red; "\e[41m#{self}\e[0m" end
13
+ def bg_green; "\e[42m#{self}\e[0m" end
14
+ def bg_brown; "\e[43m#{self}\e[0m" end
15
+ def bg_blue; "\e[44m#{self}\e[0m" end
16
+ def bg_magenta; "\e[45m#{self}\e[0m" end
17
+ def bg_cyan; "\e[46m#{self}\e[0m" end
18
+ def bg_gray; "\e[47m#{self}\e[0m" end
19
+
20
+ def bold; "\e[1m#{self}\e[22m" end
21
+ def italic; "\e[3m#{self}\e[23m" end
22
+ def underline; "\e[4m#{self}\e[24m" end
23
+ def blink; "\e[5m#{self}\e[25m" end
24
+ def reverse_color; "\e[7m#{self}\e[27m" end
25
+ end
@@ -0,0 +1,39 @@
1
+ # Script: Find the current git repository
2
+ # Based on https://github.com/mojombo/grit/pull/178 by https://github.com/derricks
3
+
4
+
5
+ # Returns true if the given path represents a root directory (/ or C:/)
6
+ def root_directory?(file_path)
7
+ # Implementation inspired by http://stackoverflow.com/a/4969416:
8
+ # Does file + ".." resolve to the same directory as file_path?
9
+ File.directory?(file_path) &&
10
+ File.expand_path(file_path) == File.expand_path(File.join(file_path, '..'))
11
+ end
12
+
13
+ # Returns the git root directory given a path inside the repo. Returns nil if
14
+ # the path is not in a git repo.
15
+ def find_git_repo(start_path = '.')
16
+ raise NoSuchPathError unless File.exists?(start_path)
17
+
18
+ current_path = File.expand_path(start_path)
19
+
20
+ # for clarity: set to an explicit nil and then just return whatever
21
+ # the current value of this variable is (nil or otherwise)
22
+ return_path = nil
23
+
24
+ until root_directory?(current_path)
25
+ if File.exists?(File.join(current_path, '.git'))
26
+ # done
27
+ return_path = current_path
28
+ break
29
+ else
30
+ # go up a directory and try again
31
+ current_path = File.dirname(current_path)
32
+ end
33
+ end
34
+ return_path
35
+ end
36
+
37
+ def xcode_project_name(path)
38
+ Dir.glob("#{path}/**/**") { |file| return $1 if file =~ /\/(.+?)\.(?:xcodeproj|xcworkspace)$/ }
39
+ end
@@ -0,0 +1,46 @@
1
+
2
+ require "optparse"
3
+
4
+
5
+
6
+ Action = Struct.new("Action", :type, :arg, :precedence)
7
+
8
+ class Settings
9
+ attr_reader :actions
10
+
11
+ def self.get
12
+ actions = []
13
+
14
+ OptionParser.new do |opts|
15
+ opts.banner = "Usage: lokale [-bsh]"
16
+
17
+ opts.on("-b", "--copy-base", "Copies 'en' localization files to 'Base'") do |n|
18
+ actions << Action.new(:copy_base, nil, 10)
19
+ end
20
+
21
+ opts.on("-s", "--summary", "Prints project summary") do |n|
22
+ actions << Action.new(:summary, nil, 100)
23
+ end
24
+
25
+ opts.on("-h", "--help", "Prints this help") do
26
+ puts opts
27
+ exit
28
+ end
29
+ end.parse!
30
+
31
+ if actions.empty?
32
+ actions.sort_by! { |e| e.precedence }
33
+ else
34
+ actions.sort_by! { |e| e.precedence }
35
+ end
36
+
37
+ Settings.new(actions)
38
+ end
39
+
40
+ def initialize(actions)
41
+ @actions = actions
42
+ end
43
+ end
44
+
45
+
46
+
@@ -1,3 +1,3 @@
1
1
  module Lokale
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
data/lib/lokale.rb CHANGED
@@ -1,4 +1,5 @@
1
- # require "lokale/version"
1
+ require "lokale/version"
2
+ require "lokale/colorize"
2
3
  require "set"
3
4
 
4
5
  class String
@@ -22,9 +23,9 @@ class String
22
23
  end
23
24
  end
24
25
 
25
- module Lokale
26
26
 
27
- class LocalizedString
27
+ module Lokale
28
+ class LString
28
29
  attr_accessor :key, :str, :note, :target
29
30
 
30
31
  def initialize(key, str, note, target)
@@ -33,13 +34,13 @@ module Lokale
33
34
 
34
35
  def self.strings_from_file(file_path, lang)
35
36
  regex = /(?:\/* (.+) *\/.*\n)?"(.+)" *= *"(.+)";/
36
- File.read(file_path).scan(regex).map { |m| LocalizedString.new(m[1], m[2], m[0], lang) }
37
+ File.read(file_path).scan(regex).map { |m| LString.new(m[1], m[2], m[0], lang) }
37
38
  end
38
39
  end
39
40
 
40
41
  #
41
42
 
42
- class LocalizationFile
43
+ class LFile
43
44
  attr_reader :path, :lang, :name, :type
44
45
  def initialize(file_path)
45
46
  @path = file_path
@@ -54,7 +55,7 @@ module Lokale
54
55
 
55
56
  def self.try_to_read(file_path)
56
57
  return nil unless file_path.localization_file?
57
- LocalizationFile.new(file_path)
58
+ LFile.new(file_path)
58
59
  end
59
60
 
60
61
  def inspect
@@ -68,7 +69,7 @@ module Lokale
68
69
  def parsed
69
70
  return @parsed unless @parsed.nil?
70
71
  @parsed = case type
71
- when "strings" then LocalizedString.strings_from_file(@path, @lang)
72
+ when "strings" then LString.strings_from_file(@path, @lang)
72
73
  when "stringsdict" then []
73
74
  else nil
74
75
  end
@@ -144,7 +145,7 @@ module Lokale
144
145
 
145
146
  def get_localization_files
146
147
  return @lfiles unless @lfiles.nil?
147
- @lfiles = proj_files.map { |file| LocalizationFile.try_to_read(file) }.compact
148
+ @lfiles = proj_files.map { |file| LFile.try_to_read(file) }.compact
148
149
  end
149
150
 
150
151
  def find_all_localization_calls
@@ -224,9 +225,10 @@ module Lokale
224
225
  end
225
226
 
226
227
  if repeats_repot.empty?
227
- puts "Repeats not found."
228
+ puts "Repeats not found.".green
228
229
  puts
229
230
  else
231
+ puts "Found repeats in strings files.".red
230
232
  puts repeats_repot
231
233
  puts
232
234
  end
@@ -236,29 +238,28 @@ module Lokale
236
238
  diferences_repot = ""
237
239
 
238
240
  @agent.lfiles.group_by { |f| f.full_name }.each do |file_name, files|
239
- base_lang = files.select { |f| f.lang == "Base" }.first.nil? ? "en" : "Base"
241
+ base_lang = files.any? { |f| f.lang == "Base" } ? "Base" : "en"
240
242
  files = files.select { |f| f.lang != base_lang }
241
243
  all_keys = files.map(&:keys).compact.map(&:to_set)
242
244
  next if all_keys.empty?
243
- shared_keys = all_keys.reduce(:&)
244
- all_keys.map! { |ks| ks - shared_keys }
245
+ united_keys = all_keys.reduce(:|)
246
+ all_keys.map! { |ks| united_keys - ks }
245
247
  next if all_keys.map(&:length).reduce(:+).zero?
246
248
 
247
- diferences_repot << "Excess keys in file \"#{file_name}\":\n"
248
- all_keys.zip(files) do |excess_keys, lfile|
249
- next if excess_keys.size.zero?
250
- diferences_repot << "* #{lfile.lang}: #{excess_keys.size} key(s).\n"
251
- excess_keys.each { |k| diferences_repot << "#{k}\n" }
249
+ diferences_repot << "Missing keys in file \"#{file_name}\":\n"
250
+ all_keys.zip(files) do |missing_keys, lfile|
251
+ next if missing_keys.size.zero?
252
+ diferences_repot << "* #{lfile.lang} - #{missing_keys.size} key(s):\n"
253
+ missing_keys.each { |k| diferences_repot << "#{k}\n" }
252
254
  end
253
255
  diferences_repot << "\n"
254
256
  end
255
257
 
256
258
  if diferences_repot.empty?
257
- puts "Localization files are full."
259
+ puts "Localization files are full.".green
258
260
  puts
259
261
  else
260
- puts "Localization files are not full."
261
- puts
262
+ puts "Localization files are not full.".red
262
263
  puts diferences_repot
263
264
  puts
264
265
  end
data/lokale.gemspec CHANGED
@@ -2,6 +2,7 @@
2
2
  lib = File.expand_path("../lib", __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require "lokale/version"
5
+ require "lokale/colorize"
5
6
 
6
7
  Gem::Specification.new do |spec|
7
8
  spec.name = "lokale"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lokale
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
  - Anton Onizhuk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-18 00:00:00.000000000 Z
11
+ date: 2017-10-20 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Write a longer description or delete this line.
14
14
  email:
@@ -27,6 +27,9 @@ files:
27
27
  - bin/lokale
28
28
  - bin/setup
29
29
  - lib/lokale.rb
30
+ - lib/lokale/colorize.rb
31
+ - lib/lokale/find_dir.rb
32
+ - lib/lokale/options.rb
30
33
  - lib/lokale/version.rb
31
34
  - lokale.gemspec
32
35
  homepage: