aigu 1.0.3 → 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 +4 -4
- data/README.md +18 -16
- data/lib/aigu.rb +2 -0
- data/lib/aigu/cli.rb +3 -1
- data/lib/aigu/ember_engine_exporter.rb +76 -0
- data/lib/aigu/ember_engine_importer.rb +58 -0
- data/lib/aigu/version.rb +1 -1
- data/spec/aigu/ember_engine_exporter_spec.rb +19 -0
- data/spec/aigu/ember_engine_importer_spec.rb +36 -0
- data/spec/fixtures/ember_engine_files/app/locales/en/translations.js +5 -0
- data/spec/fixtures/ember_engine_files/app/locales/fr/translations.js +5 -0
- data/spec/fixtures/ember_engine_files/lib/engine-a/addon/locales/en/translations.js +7 -0
- data/spec/fixtures/ember_engine_files/lib/engine-a/addon/locales/fr/translations.js +7 -0
- data/spec/fixtures/ember_engine_files/lib/engine-b/addon/locales/en/translations.js +7 -0
- data/spec/fixtures/ember_engine_files/lib/engine-b/addon/locales/fr/translations.js +7 -0
- metadata +20 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 65716065f73197d5e63e316e39fd0ef3e0b50a58
|
4
|
+
data.tar.gz: 4af655d2c2f9cded6aeab7a340344acbc7cc29b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 949b6e813c31babe552a050238e179f18b4ae93358edc4f6abdb711daa95691eaa489bdf2476bd83fec366e02d5c10eb609ae79476745d8c2cef3983286cbc53
|
7
|
+
data.tar.gz: 72bbd501d493e26378b08443eeb9e8ac5044642cb925909ec9bc92555629b3e61533d2de7a62d22af6728d5d39862a9720a0ea7632aaa6470a4e09e221a0b3cb
|
data/README.md
CHANGED
@@ -28,14 +28,15 @@ $ aigu <export-command> --locale=fr --input-directory=config/locales --output-fi
|
|
28
28
|
```
|
29
29
|
#### Commands
|
30
30
|
|
31
|
-
| Command
|
32
|
-
|
33
|
-
| `rails-export`
|
34
|
-
| `android-export`
|
35
|
-
| `core-export`
|
36
|
-
| `ios-export`
|
37
|
-
| `ember-export`
|
38
|
-
| `ember-pod-export` | Ember.js pods JSON
|
31
|
+
| Command | File format |
|
32
|
+
|-----------------------|----------------------------|
|
33
|
+
| `rails-export` | Rails YAML |
|
34
|
+
| `android-export` | Android XML |
|
35
|
+
| `core-export` | Java Enum Core |
|
36
|
+
| `ios-export` | iOS strings & stringsdict |
|
37
|
+
| `ember-export` | Ember.js JavaScript |
|
38
|
+
| `ember-pod-export ` | Ember.js pods JSON |
|
39
|
+
| `ember-engine-export` | Ember.js Engine JavaScript |
|
39
40
|
|
40
41
|
#### Options
|
41
42
|
|
@@ -57,14 +58,15 @@ $ aigu <import-command> --locale=fr --input-file=file-from-accent.json --output-
|
|
57
58
|
|
58
59
|
#### Commands
|
59
60
|
|
60
|
-
| Command
|
61
|
-
|
62
|
-
| `rails-import`
|
63
|
-
| `android-import`
|
64
|
-
| `core-import`
|
65
|
-
| `ios-import`
|
66
|
-
| `ember-import`
|
67
|
-
| `ember-pod-import`
|
61
|
+
| Command | File format |
|
62
|
+
|-----------------------|----------------------------|
|
63
|
+
| `rails-import` | Rails YAML |
|
64
|
+
| `android-import` | Android XML |
|
65
|
+
| `core-import` | Java Enum Core |
|
66
|
+
| `ios-import` | iOS strings & stringsdict |
|
67
|
+
| `ember-import` | Ember.js JavaScript |
|
68
|
+
| `ember-pod-import` | Ember.js pods JSON |
|
69
|
+
| `ember-engine-import` | Ember.js Engine JavaScript |
|
68
70
|
|
69
71
|
#### Options
|
70
72
|
|
data/lib/aigu.rb
CHANGED
data/lib/aigu/cli.rb
CHANGED
@@ -12,7 +12,9 @@ module Aigu
|
|
12
12
|
'ember-import' => 'EmberImporter',
|
13
13
|
'ember-export' => 'EmberExporter',
|
14
14
|
'ember-pod-import' => 'EmberPodImporter',
|
15
|
-
'ember-pod-export' => 'EmberPodExporter'
|
15
|
+
'ember-pod-export' => 'EmberPodExporter',
|
16
|
+
'ember-engine-import' => 'EmberEngineImporter',
|
17
|
+
'ember-engine-export' => 'EmberEngineExporter'
|
16
18
|
}.freeze
|
17
19
|
|
18
20
|
def initialize(env, argv)
|
@@ -0,0 +1,76 @@
|
|
1
|
+
module Aigu
|
2
|
+
class EmberEngineExporter < Exporter
|
3
|
+
protected
|
4
|
+
|
5
|
+
def build_output
|
6
|
+
@output = build_output_from_global_translations(@input_directory, @locale)
|
7
|
+
@output.merge! build_output_from_engines(@input_directory, @locale)
|
8
|
+
@output
|
9
|
+
end
|
10
|
+
|
11
|
+
def build_output_from_global_translations(input_directory, locale)
|
12
|
+
global_directory = File.join(input_directory, 'app')
|
13
|
+
pattern = File.join(global_directory, 'locales', locale, 'translations.js')
|
14
|
+
parse_file(pattern, input_directory)
|
15
|
+
end
|
16
|
+
|
17
|
+
def build_output_from_engines(input_directory, locale)
|
18
|
+
engines_directory = File.join(input_directory, 'lib')
|
19
|
+
pattern = File.join(engines_directory, '**', 'locales', locale, 'translations.js')
|
20
|
+
parse_file(pattern, input_directory)
|
21
|
+
end
|
22
|
+
|
23
|
+
def parse_file(pattern, directory)
|
24
|
+
Dir[pattern].reduce({}) do |memo, file|
|
25
|
+
content = read_or_ignore(file, directory)
|
26
|
+
|
27
|
+
return nil unless content
|
28
|
+
|
29
|
+
base_key = file.gsub(/^#{directory}/, '').gsub(/^\//, '').gsub(/[a-z]+\/translations\.js$/, '__LOCALE__/translations.js|')
|
30
|
+
content = flattenize_hash(content, base_key)
|
31
|
+
memo.merge! content
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def write_json_file
|
36
|
+
file_path = @output_file
|
37
|
+
puts "Generating #{file_path}"
|
38
|
+
FileUtils.mkdir_p(File.dirname(file_path))
|
39
|
+
|
40
|
+
File.open(file_path, 'w+') do |file|
|
41
|
+
file << @output.to_json
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def read_or_ignore(file, directory)
|
46
|
+
filepath = file.gsub(/\A#{directory}\//, '')
|
47
|
+
|
48
|
+
if ignored_filepath?(filepath)
|
49
|
+
puts "Ignoring #{filepath}"
|
50
|
+
false
|
51
|
+
else
|
52
|
+
puts "Processing #{filepath}"
|
53
|
+
content = File.read(file).gsub(/^export default (.*);$/m, '\1')
|
54
|
+
JSON.parse(content)
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def flattenize_hash(hash, base_key = '')
|
60
|
+
if hash.is_a?(Hash)
|
61
|
+
hash.reduce({}) do |memo, (key, value)|
|
62
|
+
new_base_key = [base_key, key].join('.').gsub(/\|\.+/, '|')
|
63
|
+
memo.merge! flattenize_hash(value, new_base_key)
|
64
|
+
end
|
65
|
+
else
|
66
|
+
{ base_key.gsub(/^\./, '') => hash }
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def ignored_filepath?(filepath)
|
71
|
+
@ignore && @ignore.any? do |pattern|
|
72
|
+
File.fnmatch(pattern, filepath, File::FNM_PATHNAME | File::FNM_DOTMATCH)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Aigu
|
2
|
+
class EmberEngineImporter < Importer
|
3
|
+
def process!
|
4
|
+
puts "Generating JSON files in `#{@output_directory}` based on Accent-generated `#{@input_file}` file"
|
5
|
+
puts '---'
|
6
|
+
|
7
|
+
object = sorted_object_from_json(@input_file)
|
8
|
+
blob = build_blob(object)
|
9
|
+
write_json_files(blob, @output_directory)
|
10
|
+
|
11
|
+
puts '---'
|
12
|
+
puts 'Done'
|
13
|
+
end
|
14
|
+
|
15
|
+
protected
|
16
|
+
|
17
|
+
def sorted_object_from_json(input_file)
|
18
|
+
json = File.read(input_file)
|
19
|
+
JSON.parse(json).sort_with_keys
|
20
|
+
end
|
21
|
+
|
22
|
+
def write_json_files(blob, output_directory)
|
23
|
+
blob.each_pair do |file_name, translations|
|
24
|
+
file_path = File.join(output_directory, file_name.gsub('__LOCALE__', @locale))
|
25
|
+
puts "Generating #{file_path}"
|
26
|
+
FileUtils.mkdir_p(File.dirname(file_path))
|
27
|
+
|
28
|
+
javascript_object = JSON.pretty_generate(translations)
|
29
|
+
content = "export default #{javascript_object};\n"
|
30
|
+
|
31
|
+
File.open(file_path, 'w+') do |file|
|
32
|
+
file << content
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def build_blob(object)
|
38
|
+
blob = Hash.recursive
|
39
|
+
|
40
|
+
object.each_pair do |key, value|
|
41
|
+
filename, flat_key = key.split('|')
|
42
|
+
|
43
|
+
parts = flat_key.split('.')
|
44
|
+
hash = blob[filename]
|
45
|
+
|
46
|
+
parts.each_with_index do |part, index|
|
47
|
+
if index + 1 < parts.length
|
48
|
+
hash = hash[part]
|
49
|
+
else
|
50
|
+
hash[part] = value
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
blob
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/lib/aigu/version.rb
CHANGED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Aigu::EmberEngineExporter do
|
4
|
+
describe :build_output do
|
5
|
+
let(:input_directory) { File.join(File.dirname(__FILE__), '..', 'fixtures', 'ember_engine_files') }
|
6
|
+
let(:exporter) { Aigu::EmberEngineExporter.new(:'input-directory' => input_directory, locale: 'en') }
|
7
|
+
let(:output) { exporter.send(:build_output) }
|
8
|
+
|
9
|
+
let(:expected_output) do
|
10
|
+
{
|
11
|
+
'app/locales/__LOCALE__/translations.js|hello' => 'Hello from global.hello',
|
12
|
+
'lib/engine-a/addon/locales/__LOCALE__/translations.js|hello.world' => 'Hello world from nested engine-a',
|
13
|
+
'lib/engine-b/addon/locales/__LOCALE__/translations.js|hello.world' => 'Hello world from nested engine-b'
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
it { expect(output).to eql expected_output }
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Aigu::EmberEngineImporter do
|
4
|
+
describe :build_blob do
|
5
|
+
let(:importer) { Aigu::EmberEngineImporter.new }
|
6
|
+
let(:blob) { importer.send(:build_blob, content) }
|
7
|
+
|
8
|
+
let(:content) do
|
9
|
+
{
|
10
|
+
'app/locales/__LOCALE__/translations.js|hello' => 'Hello from global.hello',
|
11
|
+
'lib/engine-a/addon/locales/__LOCALE__/translations.js|hello.world' => 'Hello world from nested engine-a',
|
12
|
+
'lib/engine-b/addon/locales/__LOCALE__/translations.js|hello.world' => 'Hello world from nested engine-b'
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
let(:expected_blob) do
|
17
|
+
{
|
18
|
+
'app/locales/__LOCALE__/translations.js' => {
|
19
|
+
'hello' => 'Hello from global.hello'
|
20
|
+
},
|
21
|
+
'lib/engine-a/addon/locales/__LOCALE__/translations.js' => {
|
22
|
+
'hello' => {
|
23
|
+
'world' => 'Hello world from nested engine-a'
|
24
|
+
}
|
25
|
+
},
|
26
|
+
'lib/engine-b/addon/locales/__LOCALE__/translations.js' => {
|
27
|
+
'hello' => {
|
28
|
+
'world' => 'Hello world from nested engine-b'
|
29
|
+
}
|
30
|
+
}
|
31
|
+
}
|
32
|
+
end
|
33
|
+
|
34
|
+
it { expect(blob).to eql expected_blob }
|
35
|
+
end
|
36
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aigu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: '1.1'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rémi Prévost
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-10-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -123,6 +123,8 @@ files:
|
|
123
123
|
- lib/aigu/cli.rb
|
124
124
|
- lib/aigu/core_exporter.rb
|
125
125
|
- lib/aigu/core_importer.rb
|
126
|
+
- lib/aigu/ember_engine_exporter.rb
|
127
|
+
- lib/aigu/ember_engine_importer.rb
|
126
128
|
- lib/aigu/ember_exporter.rb
|
127
129
|
- lib/aigu/ember_importer.rb
|
128
130
|
- lib/aigu/ember_pod_exporter.rb
|
@@ -139,6 +141,8 @@ files:
|
|
139
141
|
- spec/aigu/android_importer_spec.rb
|
140
142
|
- spec/aigu/core_exporter_spec.rb
|
141
143
|
- spec/aigu/core_importer_spec.rb
|
144
|
+
- spec/aigu/ember_engine_exporter_spec.rb
|
145
|
+
- spec/aigu/ember_engine_importer_spec.rb
|
142
146
|
- spec/aigu/ember_exporter_spec.rb
|
143
147
|
- spec/aigu/ember_importer_spec.rb
|
144
148
|
- spec/aigu/ember_pod_exporter_spec.rb
|
@@ -147,6 +151,12 @@ files:
|
|
147
151
|
- spec/aigu/ios_importer_spec.rb
|
148
152
|
- spec/aigu/rails_exporter_spec.rb
|
149
153
|
- spec/aigu/rails_importer_spec.rb
|
154
|
+
- spec/fixtures/ember_engine_files/app/locales/en/translations.js
|
155
|
+
- spec/fixtures/ember_engine_files/app/locales/fr/translations.js
|
156
|
+
- spec/fixtures/ember_engine_files/lib/engine-a/addon/locales/en/translations.js
|
157
|
+
- spec/fixtures/ember_engine_files/lib/engine-a/addon/locales/fr/translations.js
|
158
|
+
- spec/fixtures/ember_engine_files/lib/engine-b/addon/locales/en/translations.js
|
159
|
+
- spec/fixtures/ember_engine_files/lib/engine-b/addon/locales/fr/translations.js
|
150
160
|
- spec/fixtures/ember_pod_files/app/locales/en/translations.general.json
|
151
161
|
- spec/fixtures/ember_pod_files/app/locales/fr/translations.general.json
|
152
162
|
- spec/fixtures/ember_pod_files/app/pods/component-a/nested-component-a/translations.en.json
|
@@ -187,6 +197,8 @@ test_files:
|
|
187
197
|
- spec/aigu/android_importer_spec.rb
|
188
198
|
- spec/aigu/core_exporter_spec.rb
|
189
199
|
- spec/aigu/core_importer_spec.rb
|
200
|
+
- spec/aigu/ember_engine_exporter_spec.rb
|
201
|
+
- spec/aigu/ember_engine_importer_spec.rb
|
190
202
|
- spec/aigu/ember_exporter_spec.rb
|
191
203
|
- spec/aigu/ember_importer_spec.rb
|
192
204
|
- spec/aigu/ember_pod_exporter_spec.rb
|
@@ -195,6 +207,12 @@ test_files:
|
|
195
207
|
- spec/aigu/ios_importer_spec.rb
|
196
208
|
- spec/aigu/rails_exporter_spec.rb
|
197
209
|
- spec/aigu/rails_importer_spec.rb
|
210
|
+
- spec/fixtures/ember_engine_files/app/locales/en/translations.js
|
211
|
+
- spec/fixtures/ember_engine_files/app/locales/fr/translations.js
|
212
|
+
- spec/fixtures/ember_engine_files/lib/engine-a/addon/locales/en/translations.js
|
213
|
+
- spec/fixtures/ember_engine_files/lib/engine-a/addon/locales/fr/translations.js
|
214
|
+
- spec/fixtures/ember_engine_files/lib/engine-b/addon/locales/en/translations.js
|
215
|
+
- spec/fixtures/ember_engine_files/lib/engine-b/addon/locales/fr/translations.js
|
198
216
|
- spec/fixtures/ember_pod_files/app/locales/en/translations.general.json
|
199
217
|
- spec/fixtures/ember_pod_files/app/locales/fr/translations.general.json
|
200
218
|
- spec/fixtures/ember_pod_files/app/pods/component-a/nested-component-a/translations.en.json
|