logaling-command 0.0.3 → 0.0.4
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/lib/logaling/command.rb +31 -8
- data/lib/logaling/glossary.rb +3 -4
- data/lib/logaling/glossary_db.rb +6 -8
- data/spec/logaling/command_spec.rb +165 -8
- data/spec/logaling/glossary_db_spec.rb +0 -28
- data/spec/logaling/glossary_spec.rb +3 -3
- metadata +10 -10
data/lib/logaling/command.rb
CHANGED
@@ -4,7 +4,7 @@ require 'thor'
|
|
4
4
|
require "logaling/glossary"
|
5
5
|
|
6
6
|
class Logaling::Command < Thor
|
7
|
-
VERSION = "0.0.
|
7
|
+
VERSION = "0.0.4"
|
8
8
|
LOGALING_CONFIG = '.logaling'
|
9
9
|
|
10
10
|
map '-c' => :create,
|
@@ -13,7 +13,8 @@ class Logaling::Command < Thor
|
|
13
13
|
'-u' => :update,
|
14
14
|
'-l' => :lookup,
|
15
15
|
'-n' => :new,
|
16
|
-
'-
|
16
|
+
'-r' => :register,
|
17
|
+
'-U' => :unregister
|
17
18
|
|
18
19
|
class_option "glossary", type: :string, aliases: "-g"
|
19
20
|
class_option "source-language", type: :string, aliases: "-S"
|
@@ -21,6 +22,7 @@ class Logaling::Command < Thor
|
|
21
22
|
class_option "logaling-home", type: :string, required: false, aliases: "-h"
|
22
23
|
|
23
24
|
desc 'new [PROJECT NAME] [SOURCE LANGUAGE] [TARGET LANGUAGE(optional)]', 'Create .logaling'
|
25
|
+
method_option "no-register", type: :boolean, default: false
|
24
26
|
def new(project_name, source_language, target_language=nil)
|
25
27
|
unless File.exist?(LOGALING_CONFIG)
|
26
28
|
FileUtils.mkdir_p(File.join(LOGALING_CONFIG, "glossary"))
|
@@ -29,32 +31,49 @@ class Logaling::Command < Thor
|
|
29
31
|
config.puts "--source-language #{source_language}"
|
30
32
|
config.puts "--target-language #{target_language}" if target_language
|
31
33
|
end
|
34
|
+
register unless options["no-register"]
|
32
35
|
say "Successfully created #{LOGALING_CONFIG}"
|
33
36
|
else
|
34
|
-
say "#{LOGALING_CONFIG}
|
37
|
+
say "#{LOGALING_CONFIG} already exists."
|
35
38
|
end
|
36
39
|
end
|
37
40
|
|
38
|
-
desc '
|
39
|
-
def
|
41
|
+
desc 'register', 'Register .logaling'
|
42
|
+
def register
|
40
43
|
logaling_path = find_dotfile
|
41
44
|
if logaling_path
|
42
|
-
logaling_projects_path = File.join(LOGALING_HOME, "projects")
|
43
45
|
FileUtils.mkdir_p(logaling_projects_path) unless File.exist?(logaling_projects_path)
|
44
46
|
|
45
47
|
config = load_config
|
46
48
|
symlink_path = File.join(logaling_projects_path, config["glossary"])
|
47
49
|
unless File.exists?(symlink_path)
|
48
50
|
FileUtils.ln_s(logaling_path, symlink_path)
|
49
|
-
say "Your project is now
|
51
|
+
say "Your project is now registered to #{symlink_path}."
|
50
52
|
else
|
51
|
-
say "#{options["glossary"]} is already
|
53
|
+
say "#{options["glossary"]} is already registered."
|
52
54
|
end
|
53
55
|
else
|
54
56
|
say "Try 'loga new' first."
|
55
57
|
end
|
56
58
|
end
|
57
59
|
|
60
|
+
desc 'unregister', 'Unregister .logaling'
|
61
|
+
def unregister
|
62
|
+
logaling_path = find_dotfile
|
63
|
+
if logaling_path
|
64
|
+
config = load_config
|
65
|
+
symlink_path = File.join(logaling_projects_path, config["glossary"])
|
66
|
+
if File.exists?(symlink_path)
|
67
|
+
FileUtils.remove_entry_secure(symlink_path, true)
|
68
|
+
say "Your project is now unregistered."
|
69
|
+
else
|
70
|
+
say ".logaling is not yet registered."
|
71
|
+
end
|
72
|
+
else
|
73
|
+
say ".logaling can't be found."
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
58
77
|
desc 'create', 'Create glossary.'
|
59
78
|
def create
|
60
79
|
glossary.create
|
@@ -114,6 +133,10 @@ class Logaling::Command < Thor
|
|
114
133
|
Logaling::Glossary.new(glossary, source_language, target_language)
|
115
134
|
end
|
116
135
|
|
136
|
+
def logaling_projects_path
|
137
|
+
File.join(LOGALING_HOME, "projects")
|
138
|
+
end
|
139
|
+
|
117
140
|
def error(msg)
|
118
141
|
STDERR.puts(msg)
|
119
142
|
exit 1
|
data/lib/logaling/glossary.rb
CHANGED
@@ -73,7 +73,7 @@ module Logaling
|
|
73
73
|
check_glossary_exists
|
74
74
|
|
75
75
|
glossarydb = Logaling::GlossaryDB.new
|
76
|
-
glossarydb.open(
|
76
|
+
glossarydb.open(logaling_db_home, "utf8") do |db|
|
77
77
|
glossaries = db.lookup(source_term)
|
78
78
|
glossaries.reject! do |term|
|
79
79
|
term[:source_language] != @source_language || term[:target_language] != @target_language
|
@@ -98,10 +98,9 @@ module Logaling
|
|
98
98
|
|
99
99
|
def index
|
100
100
|
projects = Dir.glob(File.join(LOGALING_HOME, "projects", "*"))
|
101
|
-
db_home = File.join(LOGALING_HOME, "db")
|
102
101
|
glossarydb = Logaling::GlossaryDB.new
|
103
|
-
glossarydb.open(
|
104
|
-
db.recreate_table(
|
102
|
+
glossarydb.open(logaling_db_home, "utf8") do |db|
|
103
|
+
db.recreate_table(logaling_db_home)
|
105
104
|
projects.each do |project|
|
106
105
|
db.load_glossaries(File.join(project, "glossary"))
|
107
106
|
end
|
data/lib/logaling/glossary_db.rb
CHANGED
@@ -47,14 +47,6 @@ module Logaling
|
|
47
47
|
@database.nil? or @database.closed?
|
48
48
|
end
|
49
49
|
|
50
|
-
def get_file_list(path, types)
|
51
|
-
glob_list = []
|
52
|
-
types.each do |type|
|
53
|
-
glob_list << File.join(path, "*.#{type}")
|
54
|
-
end
|
55
|
-
Dir.glob(glob_list)
|
56
|
-
end
|
57
|
-
|
58
50
|
def load_glossary(file)
|
59
51
|
case extname = File.extname(file)
|
60
52
|
when ".tsv", ".csv"
|
@@ -153,5 +145,11 @@ module Logaling
|
|
153
145
|
schema.remove_table("terms")
|
154
146
|
end
|
155
147
|
end
|
148
|
+
|
149
|
+
def get_file_list(path, types)
|
150
|
+
glob_list = types.map{|type| File.join(path, "*.#{type}") }
|
151
|
+
Dir.glob(glob_list)
|
152
|
+
end
|
153
|
+
|
156
154
|
end
|
157
155
|
end
|
@@ -4,27 +4,176 @@ require File.join(File.dirname(__FILE__), "..", "spec_helper")
|
|
4
4
|
describe Logaling::Command do
|
5
5
|
let(:base_options) { {"glossary"=>"spec", "source-language"=>"en", "target-language"=>"ja"} }
|
6
6
|
let(:command) { Logaling::Command.new([], base_options) }
|
7
|
-
let(:
|
8
|
-
let(:
|
7
|
+
let(:glossary_path) { Logaling::Glossary.build_path('spec', 'en', 'ja') }
|
8
|
+
let(:target_project_path) { File.join(LOGALING_HOME, "projects", "spec") }
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
describe '#new' do
|
11
|
+
before do
|
12
|
+
FileUtils.remove_entry_secure(Logaling::Command::LOGALING_CONFIG, true)
|
13
|
+
FileUtils.remove_file(target_project_path) if File.exist?(target_project_path)
|
14
|
+
@project_counts = Dir[File.join(LOGALING_HOME, "projects", "*")].size
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'when .logaling already exists' do
|
18
|
+
before do
|
19
|
+
FileUtils.mkdir_p(Logaling::Command::LOGALING_CONFIG)
|
20
|
+
@stdout = capture(:stdout) { command.new('spec', 'en', 'ja') }
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'print message \"<.logaling path> already exists.\"' do
|
24
|
+
@stdout.should == "#{Logaling::Command::LOGALING_CONFIG} already exists.\n"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'when .logaling does not exist' do
|
29
|
+
context 'and called with no special option' do
|
30
|
+
before do
|
31
|
+
command.new('spec', 'en', 'ja')
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'should create .logaling' do
|
35
|
+
File.exist?(Logaling::Command::LOGALING_CONFIG).should be_true
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should register .logaling as project' do
|
39
|
+
File.exist?(target_project_path).should be_true
|
40
|
+
Dir[File.join(LOGALING_HOME, "projects", "*")].size.should == @project_counts + 1
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context "and called with '--no-register=true'" do
|
45
|
+
before do
|
46
|
+
command.options = base_options.merge("no-register" => true)
|
47
|
+
command.new('spec', 'en', 'ja')
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'should create .logaling' do
|
51
|
+
File.exist?(Logaling::Command::LOGALING_CONFIG).should be_true
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'should not register .logaling as project' do
|
55
|
+
File.exist?(target_project_path).should be_false
|
56
|
+
Dir[File.join(LOGALING_HOME, "projects", "*")].size.should == @project_counts
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe '#register' do
|
63
|
+
before do
|
64
|
+
FileUtils.remove_file(target_project_path) if File.exist?(target_project_path)
|
65
|
+
@project_counts = Dir[File.join(LOGALING_HOME, "projects", "*")].size
|
66
|
+
end
|
67
|
+
|
68
|
+
context "when can not find .logaling" do
|
69
|
+
before(:all) do
|
70
|
+
FileUtils.remove_entry_secure(Logaling::Command::LOGALING_CONFIG, true)
|
71
|
+
@stdout = capture(:stdout) {command.register}
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'register nothing' do
|
75
|
+
Dir[File.join(LOGALING_HOME, "projects", "*")].size.should == @project_counts
|
76
|
+
end
|
77
|
+
|
78
|
+
it "print message \"Try 'loga new' first.\"" do
|
79
|
+
@stdout.should == "Try 'loga new' first.\n"
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
context 'when find .logaling' do
|
84
|
+
before do
|
85
|
+
command.new('spec', 'en', 'ja')
|
86
|
+
command.register
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'register .logaling as project' do
|
90
|
+
File.exist?(target_project_path).should be_true
|
91
|
+
Dir[File.join(LOGALING_HOME, "projects", "*")].size.should == @project_counts + 1
|
92
|
+
end
|
93
|
+
|
94
|
+
after do
|
95
|
+
FileUtils.remove_entry_secure(Logaling::Command::LOGALING_CONFIG, true)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe '#unregister' do
|
101
|
+
before do
|
102
|
+
@project_counts = Dir[File.join(LOGALING_HOME, "projects", "*")].size
|
103
|
+
end
|
104
|
+
|
105
|
+
context "when can not find .logaling" do
|
106
|
+
before(:all) do
|
107
|
+
FileUtils.remove_entry_secure(Logaling::Command::LOGALING_CONFIG, true)
|
108
|
+
@stdout = capture(:stdout) {command.unregister}
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'unregister nothing' do
|
112
|
+
Dir[File.join(LOGALING_HOME, "projects", "*")].size.should == @project_counts
|
113
|
+
end
|
114
|
+
|
115
|
+
it "print message \".logaling can't be found.\"" do
|
116
|
+
@stdout.should == ".logaling can't be found.\n"
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
context 'when find .logaling' do
|
121
|
+
before do
|
122
|
+
command.new('spec', 'en', 'ja')
|
123
|
+
end
|
124
|
+
|
125
|
+
context 'and .logaling registered' do
|
126
|
+
before do
|
127
|
+
command.register
|
128
|
+
command.unregister
|
129
|
+
end
|
130
|
+
|
131
|
+
it 'unregister .logaling' do
|
132
|
+
File.exist?(target_project_path).should be_false
|
133
|
+
Dir[File.join(LOGALING_HOME, "projects", "*")].size.should == @project_counts
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
context "and .logaling is not registered" do
|
138
|
+
before do
|
139
|
+
@stdout = capture(:stdout) {command.unregister}
|
140
|
+
end
|
141
|
+
|
142
|
+
it "print message \".logaling is not yet registered.\"" do
|
143
|
+
@stdout.should == ".logaling is not yet registered.\n"
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
13
147
|
end
|
14
148
|
|
15
149
|
describe '#create' do
|
16
150
|
before do
|
17
|
-
FileUtils.
|
151
|
+
FileUtils.remove_entry_secure(File.join(LOGALING_HOME, 'projects', 'spec'), true)
|
18
152
|
end
|
19
153
|
|
20
154
|
context 'with arguments show non-existent glossary' do
|
155
|
+
before do
|
156
|
+
command.new('spec', 'en', 'ja')
|
157
|
+
command.register
|
158
|
+
command.create
|
159
|
+
end
|
160
|
+
|
21
161
|
it "glossary yaml should be newly created" do
|
22
162
|
File.exists?(glossary_path).should be_true
|
23
163
|
end
|
24
164
|
end
|
165
|
+
|
166
|
+
after do
|
167
|
+
FileUtils.remove_entry_secure(Logaling::Command::LOGALING_CONFIG, true)
|
168
|
+
end
|
25
169
|
end
|
26
170
|
|
27
171
|
describe '#add' do
|
172
|
+
before do
|
173
|
+
FileUtils.remove_entry_secure(File.join(LOGALING_HOME, 'projects', 'spec'), true)
|
174
|
+
FileUtils.mkdir_p(File.dirname(glossary_path))
|
175
|
+
end
|
176
|
+
|
28
177
|
context 'with arguments have only bilingual pair' do
|
29
178
|
before do
|
30
179
|
command.add("spec", "テスト")
|
@@ -60,6 +209,8 @@ describe Logaling::Command do
|
|
60
209
|
|
61
210
|
describe "#update" do
|
62
211
|
before do
|
212
|
+
FileUtils.remove_entry_secure(File.join(LOGALING_HOME, 'projects', 'spec'), true)
|
213
|
+
FileUtils.mkdir_p(File.dirname(glossary_path))
|
63
214
|
command.add("spec", "テスト", "備考")
|
64
215
|
end
|
65
216
|
|
@@ -94,6 +245,8 @@ describe Logaling::Command do
|
|
94
245
|
|
95
246
|
describe '#index' do
|
96
247
|
before do
|
248
|
+
FileUtils.remove_entry_secure(File.join(LOGALING_HOME, 'projects', 'spec'), true)
|
249
|
+
FileUtils.mkdir_p(File.dirname(glossary_path))
|
97
250
|
command.add("spec", "スペック", "備考")
|
98
251
|
command.index
|
99
252
|
end
|
@@ -113,8 +266,12 @@ describe Logaling::Command do
|
|
113
266
|
describe '#lookup' do
|
114
267
|
let(:base_options2) { {"glossary"=>"spec2", "source-language"=>"en", "target-language"=>"ja"} }
|
115
268
|
let(:command2) { Logaling::Command.new([], base_options2) }
|
116
|
-
let(:
|
117
|
-
|
269
|
+
let(:glossary_path2) { Logaling::Glossary.build_path('spec2', 'en', 'ja') }
|
270
|
+
|
271
|
+
before do
|
272
|
+
FileUtils.remove_entry_secure(File.join(LOGALING_HOME, 'projects', 'spec'), true)
|
273
|
+
FileUtils.mkdir_p(File.dirname(glossary_path))
|
274
|
+
end
|
118
275
|
|
119
276
|
context 'with arguments exist term' do
|
120
277
|
before do
|
@@ -12,34 +12,6 @@ describe Logaling::GlossaryDB do
|
|
12
12
|
FileUtils.mkdir_p(File.dirname(glossary_path))
|
13
13
|
end
|
14
14
|
|
15
|
-
describe '#get_file_list' do
|
16
|
-
context 'when specified file not exist' do
|
17
|
-
subject { glossary_db.get_file_list(File.dirname(glossary_path), ['yml', 'csv', 'tsv']) }
|
18
|
-
it 'should return empty array' do
|
19
|
-
should == []
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
context 'when specified file exists' do
|
24
|
-
before do
|
25
|
-
FileUtils.touch(glossary_path)
|
26
|
-
FileUtils.touch(tsv_path)
|
27
|
-
FileUtils.touch(csv_path)
|
28
|
-
end
|
29
|
-
|
30
|
-
subject { glossary_db.get_file_list(File.dirname(glossary_path), ['yml', 'csv', 'tsv']) }
|
31
|
-
it 'should return file list' do
|
32
|
-
should == [glossary_path, csv_path, tsv_path]
|
33
|
-
end
|
34
|
-
|
35
|
-
after do
|
36
|
-
FileUtils.remove_entry_secure(glossary_path, true)
|
37
|
-
FileUtils.remove_entry_secure(tsv_path, true)
|
38
|
-
FileUtils.remove_entry_secure(csv_path, true)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
15
|
describe '#load_glossary' do
|
44
16
|
context 'with argument yml' do
|
45
17
|
before do
|
@@ -191,7 +191,7 @@ lookup word : user
|
|
191
191
|
subject { logaling_db.open(db_home, "utf8"){|db| logaling_db.lookup("spec")} }
|
192
192
|
|
193
193
|
it 'glossaries should be indexed' do
|
194
|
-
|
194
|
+
should == [{:name=>"spec", :source_language=>"en", :target_language=>"ja", :source_term=>"spec", :target_term=>"スペック", :note=>"備考"}]
|
195
195
|
end
|
196
196
|
|
197
197
|
after do
|
@@ -210,7 +210,7 @@ lookup word : user
|
|
210
210
|
subject { logaling_db.open(db_home, "utf8"){|db| logaling_db.lookup("user")} }
|
211
211
|
|
212
212
|
it 'glossaries should be indexed' do
|
213
|
-
|
213
|
+
should == [{:name=>"spec", :source_language=>"en", :target_language=>"ja", :source_term=>"user", :target_term=>"ユーザ", :note=>nil}]
|
214
214
|
end
|
215
215
|
|
216
216
|
after do
|
@@ -229,7 +229,7 @@ lookup word : user
|
|
229
229
|
subject { logaling_db.open(db_home, "utf8"){|db| logaling_db.lookup("test")} }
|
230
230
|
|
231
231
|
it 'glossaries should be indexed' do
|
232
|
-
|
232
|
+
should == [{:name=>"spec", :source_language=>"en", :target_language=>"ja", :source_term=>"test", :target_term=>"テスト", :note=>nil}]
|
233
233
|
end
|
234
234
|
|
235
235
|
after do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logaling-command
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,11 +13,11 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date: 2011-11-
|
16
|
+
date: 2011-11-28 00:00:00.000000000Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: thor
|
20
|
-
requirement: &
|
20
|
+
requirement: &2152368760 !ruby/object:Gem::Requirement
|
21
21
|
none: false
|
22
22
|
requirements:
|
23
23
|
- - ! '>='
|
@@ -25,10 +25,10 @@ dependencies:
|
|
25
25
|
version: 0.14.6
|
26
26
|
type: :runtime
|
27
27
|
prerelease: false
|
28
|
-
version_requirements: *
|
28
|
+
version_requirements: *2152368760
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: bundler
|
31
|
-
requirement: &
|
31
|
+
requirement: &2152368000 !ruby/object:Gem::Requirement
|
32
32
|
none: false
|
33
33
|
requirements:
|
34
34
|
- - ! '>='
|
@@ -36,10 +36,10 @@ dependencies:
|
|
36
36
|
version: '1.0'
|
37
37
|
type: :runtime
|
38
38
|
prerelease: false
|
39
|
-
version_requirements: *
|
39
|
+
version_requirements: *2152368000
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: rake
|
42
|
-
requirement: &
|
42
|
+
requirement: &2152367420 !ruby/object:Gem::Requirement
|
43
43
|
none: false
|
44
44
|
requirements:
|
45
45
|
- - ! '>='
|
@@ -47,10 +47,10 @@ dependencies:
|
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
|
-
version_requirements: *
|
50
|
+
version_requirements: *2152367420
|
51
51
|
- !ruby/object:Gem::Dependency
|
52
52
|
name: rspec
|
53
|
-
requirement: &
|
53
|
+
requirement: &2152366640 !ruby/object:Gem::Requirement
|
54
54
|
none: false
|
55
55
|
requirements:
|
56
56
|
- - ! '>='
|
@@ -58,7 +58,7 @@ dependencies:
|
|
58
58
|
version: '0'
|
59
59
|
type: :development
|
60
60
|
prerelease: false
|
61
|
-
version_requirements: *
|
61
|
+
version_requirements: *2152366640
|
62
62
|
description: A command line interface for logaling.
|
63
63
|
email:
|
64
64
|
- koji.shimada@enishi-tech.com
|