logaling-command 0.1.2 → 0.1.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.
- data/CHANGES +18 -0
- data/README.md +5 -5
- data/bin/loga +1 -2
- data/lib/logaling/command/application.rb +383 -0
- data/lib/logaling/command/version.rb +22 -0
- data/lib/logaling/command.rb +2 -357
- data/lib/logaling/config.rb +86 -0
- data/lib/logaling/external_glossaries/freebsd_jpman.rb +38 -0
- data/lib/logaling/external_glossaries/mozilla_japan.rb +48 -0
- data/lib/logaling/glossary.rb +27 -17
- data/lib/logaling/glossary_db.rb +102 -53
- data/lib/logaling/repository.rb +8 -4
- data/logaling-command.gemspec +3 -3
- data/spec/logaling/command_spec.rb +78 -91
- data/spec/logaling/glossary_spec.rb +13 -11
- data/spec/logaling/repository_spec.rb +67 -42
- data/spec/spec_helper.rb +13 -3
- metadata +24 -19
@@ -17,31 +17,33 @@
|
|
17
17
|
|
18
18
|
require File.join(File.dirname(__FILE__), "..", "spec_helper")
|
19
19
|
|
20
|
-
describe Logaling::Command do
|
21
|
-
let(:
|
22
|
-
let(:
|
23
|
-
let(:
|
24
|
-
let(:
|
25
|
-
let(:
|
20
|
+
describe Logaling::Command::Application do
|
21
|
+
let(:logaling_home) { @logaling_home }
|
22
|
+
let(:logaling_config) { File.join(File.dirname(__FILE__), "..", "tmp", ".logaling") }
|
23
|
+
let(:base_options) { {"glossary"=>"spec", "source-language"=>"en", "target-language"=>"ja", "logaling-config" => logaling_config} }
|
24
|
+
let(:command) { Logaling::Command::Application.new([], base_options) }
|
25
|
+
let(:glossary) { Logaling::Glossary.new('spec', 'en', 'ja', logaling_home) }
|
26
|
+
let(:glossary_path) { glossary.source_path }
|
27
|
+
let(:target_project_path) { File.join(logaling_home, "projects", "spec") }
|
28
|
+
let(:repository) { Logaling::Repository.new(logaling_home) }
|
26
29
|
|
27
30
|
before do
|
28
|
-
FileUtils.remove_entry_secure(
|
29
|
-
FileUtils.remove_entry_secure(File.join(LOGALING_HOME, 'projects', 'spec'), true)
|
31
|
+
FileUtils.remove_entry_secure(File.join(logaling_home, 'projects', 'spec'), true)
|
30
32
|
end
|
31
33
|
|
32
34
|
describe '#new' do
|
33
35
|
before do
|
34
|
-
@
|
36
|
+
@n_projects = Dir[File.join(logaling_home, "projects", "*")].size
|
35
37
|
end
|
36
38
|
|
37
39
|
context 'when .logaling already exists' do
|
38
40
|
before do
|
39
|
-
|
41
|
+
command.new('spec', 'en', 'ja')
|
40
42
|
@stdout = capture(:stdout) { command.new('spec', 'en', 'ja') }
|
41
43
|
end
|
42
44
|
|
43
45
|
it 'print message \"<.logaling path> already exists.\"' do
|
44
|
-
@stdout.should
|
46
|
+
@stdout.should include "#{logaling_config} already exists.\n"
|
45
47
|
end
|
46
48
|
end
|
47
49
|
|
@@ -52,12 +54,12 @@ describe Logaling::Command do
|
|
52
54
|
end
|
53
55
|
|
54
56
|
it 'should create .logaling' do
|
55
|
-
File.
|
57
|
+
File.should be_exist(logaling_config)
|
56
58
|
end
|
57
59
|
|
58
60
|
it 'should register .logaling as project' do
|
59
|
-
File.
|
60
|
-
Dir[File.join(
|
61
|
+
File.should be_exist(target_project_path)
|
62
|
+
Dir[File.join(logaling_home, "projects", "*")].size.should == @n_projects + 1
|
61
63
|
end
|
62
64
|
end
|
63
65
|
|
@@ -68,12 +70,12 @@ describe Logaling::Command do
|
|
68
70
|
end
|
69
71
|
|
70
72
|
it 'should create .logaling' do
|
71
|
-
File.
|
73
|
+
File.should be_exist(logaling_config)
|
72
74
|
end
|
73
75
|
|
74
76
|
it 'should not register .logaling as project' do
|
75
|
-
File.
|
76
|
-
Dir[File.join(
|
77
|
+
File.should_not be_exist(target_project_path)
|
78
|
+
Dir[File.join(logaling_home, "projects", "*")].size.should == @n_projects
|
77
79
|
end
|
78
80
|
end
|
79
81
|
end
|
@@ -82,17 +84,17 @@ describe Logaling::Command do
|
|
82
84
|
describe '#register' do
|
83
85
|
before do
|
84
86
|
sleep(1)
|
85
|
-
@
|
87
|
+
@n_projects = Dir[File.join(logaling_home, "projects", "*")].size
|
86
88
|
end
|
87
89
|
|
88
90
|
context "when can not find .logaling" do
|
89
91
|
before(:all) do
|
90
|
-
FileUtils.remove_entry_secure(
|
92
|
+
FileUtils.remove_entry_secure(logaling_config, true)
|
91
93
|
@stdout = capture(:stdout) {command.register}
|
92
94
|
end
|
93
95
|
|
94
96
|
it 'register nothing' do
|
95
|
-
Dir[File.join(
|
97
|
+
Dir[File.join(logaling_home, "projects", "*")].size.should == @n_projects
|
96
98
|
end
|
97
99
|
|
98
100
|
it "print message \"Try 'loga new' first.\"" do
|
@@ -107,29 +109,25 @@ describe Logaling::Command do
|
|
107
109
|
end
|
108
110
|
|
109
111
|
it 'register .logaling as project' do
|
110
|
-
File.
|
111
|
-
Dir[File.join(
|
112
|
-
end
|
113
|
-
|
114
|
-
after do
|
115
|
-
FileUtils.remove_entry_secure(Logaling::Command::LOGALING_CONFIG, true)
|
112
|
+
File.should be_exist(target_project_path)
|
113
|
+
Dir[File.join(logaling_home, "projects", "*")].size.should == @n_projects + 1
|
116
114
|
end
|
117
115
|
end
|
118
116
|
end
|
119
117
|
|
120
118
|
describe '#unregister' do
|
121
119
|
before do
|
122
|
-
@
|
120
|
+
@n_projects = Dir[File.join(logaling_home, "projects", "*")].size
|
123
121
|
end
|
124
122
|
|
125
123
|
context "when can not find .logaling" do
|
126
124
|
before do
|
127
|
-
FileUtils.remove_entry_secure(
|
125
|
+
#FileUtils.remove_entry_secure(logaling_config, true)
|
128
126
|
end
|
129
127
|
|
130
128
|
context "and call without option" do
|
131
129
|
before do
|
132
|
-
|
130
|
+
base_options["glossary"] = nil
|
133
131
|
@stdout = capture(:stdout) {command.unregister}
|
134
132
|
end
|
135
133
|
|
@@ -144,7 +142,7 @@ describe Logaling::Command do
|
|
144
142
|
@stdout = capture(:stdout) {command.unregister}
|
145
143
|
end
|
146
144
|
it 'should unregister symlink' do
|
147
|
-
Dir[File.join(
|
145
|
+
Dir[File.join(logaling_home, "projects", "*")].size.should == @n_projects
|
148
146
|
end
|
149
147
|
end
|
150
148
|
end
|
@@ -158,8 +156,8 @@ describe Logaling::Command do
|
|
158
156
|
end
|
159
157
|
|
160
158
|
it 'unregister .logaling' do
|
161
|
-
File.
|
162
|
-
Dir[File.join(
|
159
|
+
File.should_not be_exist(target_project_path)
|
160
|
+
Dir[File.join(logaling_home, "projects", "*")].size.should == @n_projects
|
163
161
|
end
|
164
162
|
end
|
165
163
|
|
@@ -178,8 +176,8 @@ describe Logaling::Command do
|
|
178
176
|
end
|
179
177
|
|
180
178
|
describe '#config' do
|
181
|
-
let(:project_config) { File.join(
|
182
|
-
let(:global_config) { File.join(
|
179
|
+
let(:project_config) { File.join(logaling_config, 'config') }
|
180
|
+
let(:global_config) { File.join(logaling_home, 'config') }
|
183
181
|
|
184
182
|
subject { File.read(project_config) }
|
185
183
|
|
@@ -214,7 +212,7 @@ describe Logaling::Command do
|
|
214
212
|
|
215
213
|
subject { File.read(global_config) }
|
216
214
|
|
217
|
-
it 'should create
|
215
|
+
it 'should create {logaling_home}/config and write target-language' do
|
218
216
|
should include "--target-language ja"
|
219
217
|
end
|
220
218
|
|
@@ -225,12 +223,9 @@ describe Logaling::Command do
|
|
225
223
|
end
|
226
224
|
|
227
225
|
describe '#add' do
|
228
|
-
before do
|
229
|
-
command.new('spec', 'en', 'ja')
|
230
|
-
end
|
231
|
-
|
232
226
|
context 'with arguments have only bilingual pair' do
|
233
227
|
before do
|
228
|
+
command.new('spec', 'en', 'ja')
|
234
229
|
command.add("spec", "テスト")
|
235
230
|
end
|
236
231
|
|
@@ -247,6 +242,7 @@ describe Logaling::Command do
|
|
247
242
|
|
248
243
|
context 'with arguments have bilingual pair and note' do
|
249
244
|
before do
|
245
|
+
command.new('spec', 'en', 'ja')
|
250
246
|
command.add("spec", "テスト", "備考")
|
251
247
|
end
|
252
248
|
|
@@ -262,28 +258,25 @@ describe Logaling::Command do
|
|
262
258
|
end
|
263
259
|
|
264
260
|
context 'project config does not have TARGET-LANGUAGE' do
|
265
|
-
let(:
|
266
|
-
let(:
|
261
|
+
let(:global_config) { File.join(logaling_home, 'config') }
|
262
|
+
let(:base_options) { {"glossary"=>"spec", "source-language"=>"en", "output" => "terminal", "logaling-config" => logaling_config} }
|
267
263
|
before do
|
268
|
-
|
269
|
-
command2.new('spec2', 'en')
|
264
|
+
# create global config file
|
270
265
|
FileUtils.touch(global_config)
|
271
|
-
File.open(global_config, "w")
|
272
|
-
|
273
|
-
end
|
266
|
+
File.open(global_config, "w"){|f| f.puts "--target-language fr"}
|
267
|
+
command.new('spec', 'en')
|
274
268
|
end
|
275
269
|
|
276
270
|
context 'but global config have it' do
|
277
271
|
before do
|
278
|
-
|
279
|
-
|
272
|
+
command.add('test-logaling', '設定ファイルのテスト')
|
273
|
+
command.options = base_options.merge("no-pager" => true)
|
274
|
+
@stdout = capture(:stdout) {command.lookup("test-logaling")}
|
280
275
|
end
|
281
276
|
|
282
277
|
it "should use global config's TARGET-LANGUAGE" do
|
283
|
-
@stdout.should include "
|
284
|
-
@stdout.should include "test"
|
278
|
+
@stdout.should include "test-logaling"
|
285
279
|
@stdout.should include "設定ファイルのテスト"
|
286
|
-
@stdout.should include "(spec2)"
|
287
280
|
end
|
288
281
|
end
|
289
282
|
|
@@ -295,7 +288,6 @@ describe Logaling::Command do
|
|
295
288
|
|
296
289
|
describe "#update" do
|
297
290
|
before do
|
298
|
-
FileUtils.remove_entry_secure(File.join(LOGALING_HOME, "db", "index_at"), true)
|
299
291
|
command.new('spec', 'en', 'ja')
|
300
292
|
command.add("spec", "テスト", "備考")
|
301
293
|
end
|
@@ -335,6 +327,7 @@ describe Logaling::Command do
|
|
335
327
|
|
336
328
|
describe '#lookup' do
|
337
329
|
before do
|
330
|
+
command.options = base_options.merge("output" => "terminal", "no-pager" => true)
|
338
331
|
command.new('spec', 'en', 'ja')
|
339
332
|
command.add("spec", "スペック", "備考")
|
340
333
|
end
|
@@ -355,33 +348,34 @@ describe Logaling::Command do
|
|
355
348
|
describe "#delete" do
|
356
349
|
before do
|
357
350
|
command.new('spec', 'en', 'ja')
|
358
|
-
command.add('spec', '
|
359
|
-
command.add('user', 'ユーザ', '備考')
|
351
|
+
command.add('spec', 'スペックろがりん', '備考')
|
360
352
|
command.add('test', 'てすと1', '備考')
|
361
353
|
command.add('test', 'てすと2', '備考')
|
362
354
|
end
|
363
355
|
|
364
356
|
context 'with arguments exist term' do
|
365
357
|
before do
|
366
|
-
command.delete('spec', '
|
358
|
+
command.delete('spec', 'スペックろがりん')
|
359
|
+
command.options = base_options.merge("no-pager" => true)
|
367
360
|
@stdout = capture(:stdout) {command.lookup("spec")}
|
368
361
|
end
|
369
362
|
|
370
363
|
it 'should delete the term' do
|
371
|
-
@stdout.should_not include "
|
364
|
+
@stdout.should_not include "スペックろがりん"
|
372
365
|
end
|
373
366
|
end
|
374
367
|
|
375
368
|
context 'without target_term' do
|
376
369
|
context 'only 1 bilingual pair exist' do
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
370
|
+
before do
|
371
|
+
command.delete('spec')
|
372
|
+
command.options = base_options.merge("no-pager" => true)
|
373
|
+
@stdout = capture(:stdout) {command.lookup("spec")}
|
374
|
+
end
|
381
375
|
|
382
|
-
|
383
|
-
|
384
|
-
|
376
|
+
it 'should delete the term' do
|
377
|
+
@stdout.should_not include "スペックろがりん"
|
378
|
+
end
|
385
379
|
end
|
386
380
|
|
387
381
|
context 'some bilingual pair exist' do
|
@@ -391,25 +385,28 @@ describe Logaling::Command do
|
|
391
385
|
end
|
392
386
|
|
393
387
|
it "should print usage" do
|
394
|
-
@stdout.should
|
395
|
-
|
396
|
-
|
388
|
+
@stdout.should include "There are duplicate terms in glossary."
|
389
|
+
@stdout.should include "loga delete [SOURCE_TERM] --force"
|
390
|
+
@stdout.should include "loga delete [SOURCE_TERM] [TARGET_TERM]"
|
397
391
|
end
|
398
392
|
end
|
399
393
|
|
400
394
|
context "and called with '--force=true'" do
|
401
395
|
before do
|
396
|
+
FileUtils.remove_entry_secure(logaling_config, true)
|
397
|
+
FileUtils.remove_entry_secure(File.join(logaling_home, 'projects', 'spec'), true)
|
402
398
|
command.options = base_options.merge("force" => true)
|
403
399
|
command.new('spec', 'en', 'ja')
|
404
400
|
command.add('term', '用語1', '備考')
|
405
401
|
command.add('term', '用語2', '備考')
|
406
402
|
command.delete("term")
|
403
|
+
command.options = base_options.merge("no-pager" => true)
|
407
404
|
@stdout = capture(:stdout) {command.lookup("term")}
|
408
405
|
end
|
409
406
|
|
410
407
|
it 'should delete bilingual pairs' do
|
411
|
-
@stdout.should_not include "
|
412
|
-
@stdout.should_not include "
|
408
|
+
@stdout.should_not include "用語1"
|
409
|
+
@stdout.should_not include "用語2"
|
413
410
|
end
|
414
411
|
end
|
415
412
|
end
|
@@ -420,37 +417,22 @@ describe Logaling::Command do
|
|
420
417
|
let(:csv_path) { File.join(File.dirname(glossary_path), "spec.ja.en.csv") }
|
421
418
|
before do
|
422
419
|
command.new('spec', 'en', 'ja')
|
423
|
-
command.add("spec", "スペック", "備考")
|
424
420
|
command.add("spec-test", "スペックてすと", "備考")
|
425
|
-
command.add("spec-test-test", "スペックてすとてすと", "備考")
|
426
421
|
|
427
422
|
FileUtils.mkdir_p(File.dirname(glossary_path))
|
428
423
|
FileUtils.touch(csv_path)
|
429
|
-
File.open(csv_path, "w"){|f| f.puts "test_logaling
|
424
|
+
File.open(csv_path, "w"){|f| f.puts "test_logaling,テストろがりん"}
|
430
425
|
end
|
431
426
|
|
432
427
|
context 'when .logaling exists' do
|
433
428
|
before do
|
429
|
+
command.options = base_options.merge("no-pager" => true)
|
434
430
|
@stdout = capture(:stdout) {command.show}
|
435
431
|
end
|
436
432
|
|
437
433
|
it 'should show translation list' do
|
438
|
-
@stdout.should include "
|
439
|
-
@stdout.
|
440
|
-
@stdout.should include "spec-test-test"
|
441
|
-
@stdout.should_not include "test_logaling"
|
442
|
-
end
|
443
|
-
end
|
444
|
-
|
445
|
-
context 'with arguments glossary' do
|
446
|
-
before do
|
447
|
-
command.options = base_options.merge("glossary" => "spec", "source-language" => "ja", "target-language" => "en")
|
448
|
-
@stdout = capture(:stdout) {command.show}
|
449
|
-
end
|
450
|
-
|
451
|
-
it 'should show translation list' do
|
452
|
-
@stdout.should include "test_logaling"
|
453
|
-
@stdout.should_not include "spec-test-test"
|
434
|
+
@stdout.should include "スペックてすと"
|
435
|
+
@stdout.should_not include "テストろがりん"
|
454
436
|
end
|
455
437
|
end
|
456
438
|
|
@@ -460,9 +442,14 @@ describe Logaling::Command do
|
|
460
442
|
end
|
461
443
|
|
462
444
|
describe '#list' do
|
445
|
+
before do
|
446
|
+
command.new('spec', 'en', 'ja')
|
447
|
+
command.add('spec logaling', 'すぺっくろがりん')
|
448
|
+
end
|
449
|
+
|
463
450
|
context 'when some glossaries are registered' do
|
464
451
|
before do
|
465
|
-
command.
|
452
|
+
command.options = base_options.merge("no-pager" => true)
|
466
453
|
@stdout = capture(:stdout) {command.list}
|
467
454
|
end
|
468
455
|
|
@@ -473,8 +460,8 @@ describe Logaling::Command do
|
|
473
460
|
|
474
461
|
context 'when a glossary is unregistered' do
|
475
462
|
before do
|
476
|
-
command.new('spec', 'en', 'ja')
|
477
463
|
repository.unregister('spec')
|
464
|
+
command.options = base_options.merge("no-pager" => true)
|
478
465
|
@stdout = capture(:stdout) {command.list}
|
479
466
|
end
|
480
467
|
|
@@ -485,7 +472,7 @@ describe Logaling::Command do
|
|
485
472
|
end
|
486
473
|
|
487
474
|
after do
|
488
|
-
FileUtils.remove_entry_secure(
|
489
|
-
FileUtils.remove_entry_secure(File.join(
|
475
|
+
FileUtils.remove_entry_secure(logaling_config, true)
|
476
|
+
FileUtils.remove_entry_secure(File.join(logaling_home, 'projects', 'spec'), true)
|
490
477
|
end
|
491
478
|
end
|
@@ -21,12 +21,13 @@ require "fileutils"
|
|
21
21
|
module Logaling
|
22
22
|
describe Glossary do
|
23
23
|
let(:project) { "spec" }
|
24
|
-
let(:
|
25
|
-
let(:
|
26
|
-
let(:
|
24
|
+
let(:logaling_home) { @logaling_home }
|
25
|
+
let(:glossary) { Glossary.new(project, 'en', 'ja', logaling_home) }
|
26
|
+
let(:glossary_path) { glossary.source_path }
|
27
|
+
let(:repository) { Logaling::Repository.new(logaling_home) }
|
27
28
|
|
28
29
|
before do
|
29
|
-
FileUtils.remove_entry_secure(File.join(
|
30
|
+
FileUtils.remove_entry_secure(File.join(logaling_home, 'projects', 'spec'), true)
|
30
31
|
FileUtils.mkdir_p(File.dirname(glossary_path))
|
31
32
|
end
|
32
33
|
|
@@ -100,7 +101,7 @@ module Logaling
|
|
100
101
|
glossary.add("delete_logaling", "てすと2", "備考")
|
101
102
|
glossary.delete("delete_logaling", "てすと1")
|
102
103
|
repository.index
|
103
|
-
@result = repository.lookup("delete_logaling",
|
104
|
+
@result = repository.lookup("delete_logaling", glossary)
|
104
105
|
end
|
105
106
|
|
106
107
|
it 'should delete the bilingual pair' do
|
@@ -137,7 +138,7 @@ module Logaling
|
|
137
138
|
glossary.add("user_logaling", "ユーザ", "備考")
|
138
139
|
glossary.delete_all("user_logaling")
|
139
140
|
repository.index
|
140
|
-
@result = repository.lookup("user_logaling",
|
141
|
+
@result = repository.lookup("user_logaling", glossary)
|
141
142
|
end
|
142
143
|
|
143
144
|
it 'should delete the term' do
|
@@ -152,8 +153,7 @@ module Logaling
|
|
152
153
|
glossary.add("delete_logaling", "てすと1", "備考")
|
153
154
|
glossary.add("delete_logaling", "てすと2", "備考")
|
154
155
|
glossary.delete_all("delete_logaling", true)
|
155
|
-
|
156
|
-
@result = repository.lookup("delete_logaling", "en", "ja", project)
|
156
|
+
@result = Logaling::Glossary.load_glossary_yml(glossary_path)
|
157
157
|
end
|
158
158
|
|
159
159
|
it {
|
@@ -161,15 +161,17 @@ module Logaling
|
|
161
161
|
}
|
162
162
|
|
163
163
|
it "should delete terms when force option is true" do
|
164
|
-
@result.any?{|term| term
|
165
|
-
@result.any?{|term| term
|
164
|
+
@result.any?{|term| term == {"source_term"=>"delete_logaling", "target_term"=>"てすと1", "note"=>"備考"}}.should be_false
|
165
|
+
@result.any?{|term| term == {"source_term"=>"delete_logaling", "target_term"=>"てすと2", "note"=>"備考"}}.should be_false
|
166
|
+
@result.any?{|term| term == {"source_term"=>"user_logaling", "target_term"=>"ユーザ1", "note"=>"備考"}}.should be_true
|
167
|
+
@result.any?{|term| term == {"source_term"=>"user_logaling", "target_term"=>"ユーザ2", "note"=>"備考"}}.should be_true
|
166
168
|
end
|
167
169
|
end
|
168
170
|
end
|
169
171
|
end
|
170
172
|
|
171
173
|
after do
|
172
|
-
FileUtils.remove_entry_secure(File.join(
|
174
|
+
FileUtils.remove_entry_secure(File.join(logaling_home, 'projects', 'spec'), true)
|
173
175
|
end
|
174
176
|
end
|
175
177
|
end
|