bruno 0.0.2 → 0.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.
- checksums.yaml +5 -5
- data/bin/bruno +1 -4
- data/lib/bruno/android_file.rb +30 -0
- data/lib/bruno/converter.rb +7 -0
- data/lib/bruno/i18n_file.rb +25 -0
- data/lib/bruno/ios_file.rb +34 -0
- data/lib/bruno/version.rb +1 -1
- data/lib/bruno.rb +4 -4
- metadata +10 -7
- data/lib/bruno/strings_file.rb +0 -92
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 94569696331e1bbe5c72e3eae5754ed38a5c85fce3c6a1146728fd11cff97d11
|
4
|
+
data.tar.gz: '081f36a280059288d2eaebeb0bb251f96fd209c49cb6fe7c1932984c4c612fac'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 440cf0fb11cf40d24c754bb374e997eee9998ba7de9f522d54da30b7a75b5cdf6b1caaf217825c9a4ea885918a51ea96fa02244c615a985e7d366ab17b06cb1a
|
7
|
+
data.tar.gz: fbf6b4ea99516e01f11996e0e15eb53b8c3aecbd29ed71f80e4cd031ca8bd33f8fb8c97e16d5be940453fb0559e877d130038882940cc2de276e8a31dba12696
|
data/bin/bruno
CHANGED
@@ -22,11 +22,8 @@ command :convert do |c|
|
|
22
22
|
raise 'You must provide an input file' if options[:in].nil?
|
23
23
|
raise 'You must provide an output file' if options[:out].nil?
|
24
24
|
|
25
|
-
|
26
|
-
#raise "that command made no sense"
|
25
|
+
Bruno::Converter.convert(options[:in], options[:out])
|
27
26
|
|
28
|
-
strings_file = Bruno::StringsFile.new(options[:in])
|
29
|
-
strings_file.transform(options[:out])
|
30
27
|
puts "convert command ran"
|
31
28
|
end
|
32
29
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
|
3
|
+
class Bruno::AndroidFile < Bruno::I18nFile
|
4
|
+
def self.is_android?(content)
|
5
|
+
!(content =~ /<string name=".*">.*<\/string>/).nil?
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.read(content)
|
9
|
+
strings = []
|
10
|
+
xml = Nokogiri::XML(content)
|
11
|
+
xml.root.xpath('string').each do |string|
|
12
|
+
strings << {:key => string.attribute('name').value, :value => string.content}
|
13
|
+
end
|
14
|
+
|
15
|
+
strings
|
16
|
+
end
|
17
|
+
|
18
|
+
def write(path)
|
19
|
+
file = File.new(path, 'w+')
|
20
|
+
builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
|
21
|
+
xml.resources {
|
22
|
+
@strings.each do |string|
|
23
|
+
xml.string({:name => string[:key]}) { xml.text string[:value] }
|
24
|
+
end
|
25
|
+
}
|
26
|
+
end
|
27
|
+
file.write(builder.to_xml)
|
28
|
+
file.close
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Bruno
|
2
|
+
class I18nFile
|
3
|
+
attr_writer :strings
|
4
|
+
|
5
|
+
def initialize(strings)
|
6
|
+
@strings = strings
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.read(path)
|
10
|
+
if File.readable?(path)
|
11
|
+
content = File.read(path)
|
12
|
+
|
13
|
+
if IOSFile.is_ios?(content)
|
14
|
+
return AndroidFile.new(IOSFile.read(content))
|
15
|
+
elsif AndroidFile.is_android?(content)
|
16
|
+
return IOSFile.new(AndroidFile.read(content))
|
17
|
+
else
|
18
|
+
raise 'Format of the file is not correct'
|
19
|
+
end
|
20
|
+
else
|
21
|
+
raise 'File is not readable'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class Bruno::IOSFile < Bruno::I18nFile
|
2
|
+
def self.is_ios?(content)
|
3
|
+
!(content =~ /".*" = ".*";/).nil?
|
4
|
+
end
|
5
|
+
|
6
|
+
def self.read(content)
|
7
|
+
strings = []
|
8
|
+
content.each_line do |line|
|
9
|
+
match_key = line.match(/\"([^\"]+)\"/)
|
10
|
+
match_value = line.match(/= \"([^\"]+)\";/) #"
|
11
|
+
strings << {:key => match_key[1], :value => match_value[1]}
|
12
|
+
end
|
13
|
+
strings
|
14
|
+
end
|
15
|
+
|
16
|
+
def write(path)
|
17
|
+
file = File.new(path,'w+')
|
18
|
+
|
19
|
+
@strings.each_with_index do |string, index|
|
20
|
+
file.write(compose_line(string[:key], string[:value]))
|
21
|
+
|
22
|
+
if index != @strings.length - 1
|
23
|
+
file.write("\n")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
file.close
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
private
|
31
|
+
def compose_line(key, value)
|
32
|
+
'"' + key + '" = "' + value + '";'
|
33
|
+
end
|
34
|
+
end
|
data/lib/bruno/version.rb
CHANGED
data/lib/bruno.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'bruno/version'
|
2
|
-
require 'bruno/
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
require 'bruno/i18n_file'
|
3
|
+
require 'bruno/android_file'
|
4
|
+
require 'bruno/ios_file'
|
5
|
+
require 'bruno/converter'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bruno
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- José M. Gilgado
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-09-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -70,14 +70,14 @@ dependencies:
|
|
70
70
|
requirements:
|
71
71
|
- - '='
|
72
72
|
- !ruby/object:Gem::Version
|
73
|
-
version: 1.
|
73
|
+
version: 1.8.4
|
74
74
|
type: :runtime
|
75
75
|
prerelease: false
|
76
76
|
version_requirements: !ruby/object:Gem::Requirement
|
77
77
|
requirements:
|
78
78
|
- - '='
|
79
79
|
- !ruby/object:Gem::Version
|
80
|
-
version: 1.
|
80
|
+
version: 1.8.4
|
81
81
|
description: Bruno is a small tool to convert your Localizable.strings (iOS) files
|
82
82
|
into strings.xml (Android) and viceversa.
|
83
83
|
email: jm.gilgado@gmail.com
|
@@ -88,9 +88,12 @@ extra_rdoc_files: []
|
|
88
88
|
files:
|
89
89
|
- bin/bruno
|
90
90
|
- lib/bruno.rb
|
91
|
-
- lib/bruno/
|
91
|
+
- lib/bruno/android_file.rb
|
92
|
+
- lib/bruno/converter.rb
|
93
|
+
- lib/bruno/i18n_file.rb
|
94
|
+
- lib/bruno/ios_file.rb
|
92
95
|
- lib/bruno/version.rb
|
93
|
-
homepage:
|
96
|
+
homepage: https://github.com/josem/bruno
|
94
97
|
licenses:
|
95
98
|
- MIT
|
96
99
|
metadata: {}
|
@@ -111,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
111
114
|
version: '0'
|
112
115
|
requirements: []
|
113
116
|
rubyforge_project:
|
114
|
-
rubygems_version: 2.
|
117
|
+
rubygems_version: 2.7.7
|
115
118
|
signing_key:
|
116
119
|
specification_version: 4
|
117
120
|
summary: Convert your i18n files between Android and iOS
|
data/lib/bruno/strings_file.rb
DELETED
@@ -1,92 +0,0 @@
|
|
1
|
-
require 'nokogiri'
|
2
|
-
|
3
|
-
module Bruno
|
4
|
-
class StringsFile
|
5
|
-
def initialize(file_path)
|
6
|
-
if File.readable?(file_path)
|
7
|
-
@content = File.read(file_path)
|
8
|
-
else
|
9
|
-
raise 'File is not readable'
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
def transform(path)
|
14
|
-
if is_ios?
|
15
|
-
to_android(path)
|
16
|
-
elsif is_android?
|
17
|
-
to_ios(path)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def is_ios?
|
22
|
-
!(@content =~ /".*" = ".*";/).nil?
|
23
|
-
end
|
24
|
-
|
25
|
-
def is_android?
|
26
|
-
!(@content =~ /<string name=".*">.*<\/string>/).nil?
|
27
|
-
end
|
28
|
-
|
29
|
-
def to_ios(ios_file_path)
|
30
|
-
return if @content == ''
|
31
|
-
strings = get_strings_from_android
|
32
|
-
write_ios_file(ios_file_path, strings)
|
33
|
-
end
|
34
|
-
|
35
|
-
def to_android(android_file_path)
|
36
|
-
return if @content == ''
|
37
|
-
strings = get_strings_from_ios
|
38
|
-
write_android_file(android_file_path, strings)
|
39
|
-
end
|
40
|
-
|
41
|
-
private
|
42
|
-
def get_strings_from_android
|
43
|
-
strings = []
|
44
|
-
xml = Nokogiri::XML(@content)
|
45
|
-
xml.root.xpath('string').each do |string|
|
46
|
-
strings << {:key => string.attribute('name').value, :value => string.content}
|
47
|
-
end
|
48
|
-
|
49
|
-
strings
|
50
|
-
end
|
51
|
-
|
52
|
-
def get_strings_from_ios
|
53
|
-
strings = []
|
54
|
-
@content.each_line do |line|
|
55
|
-
match_key = line.match(/\"([^\"]+)\"/)
|
56
|
-
match_value = line.match(/= \"([^\"]+)\";/)
|
57
|
-
strings << {:key => match_key[1], :value => match_value[1]}
|
58
|
-
end
|
59
|
-
strings
|
60
|
-
end
|
61
|
-
|
62
|
-
def compose_ios_line(key, value)
|
63
|
-
'"' + key + '" = "' + value + '";'
|
64
|
-
end
|
65
|
-
|
66
|
-
def write_ios_file(path, strings)
|
67
|
-
ios_file = File.new(path,'w+')
|
68
|
-
|
69
|
-
strings.each_with_index do |string, index|
|
70
|
-
ios_file.write(compose_ios_line(string[:key], string[:value]))
|
71
|
-
|
72
|
-
if index != strings.length - 1
|
73
|
-
ios_file.write("\n")
|
74
|
-
end
|
75
|
-
end
|
76
|
-
ios_file.close
|
77
|
-
end
|
78
|
-
|
79
|
-
def write_android_file(path, strings)
|
80
|
-
android_file = File.new(path, 'w+')
|
81
|
-
builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
|
82
|
-
xml.resources {
|
83
|
-
strings.each do |string|
|
84
|
-
xml.string({:name => string[:key]}) { xml.text string[:value] }
|
85
|
-
end
|
86
|
-
}
|
87
|
-
end
|
88
|
-
android_file.write(builder.to_xml)
|
89
|
-
android_file.close
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|