logaling-command 0.1.8 → 0.1.9
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 +5 -0
- data/lib/logaling/command/application.rb +9 -10
- data/lib/logaling/command/version.rb +1 -1
- data/lib/logaling/glossary.rb +12 -2
- data/lib/logaling/glossary_sources/glossary_yaml_source.rb +1 -1
- data/lib/logaling/project.rb +24 -6
- data/lib/logaling/repository.rb +14 -3
- data/spec/logaling/command_spec.rb +4 -3
- data/spec/logaling/glossary_spec.rb +11 -0
- data/spec/logaling/repository_spec.rb +32 -0
- metadata +2 -2
data/CHANGES
CHANGED
@@ -55,7 +55,8 @@ module Logaling::Command
|
|
55
55
|
'-L' => :list,
|
56
56
|
'-s' => :show,
|
57
57
|
'-v' => :version,
|
58
|
-
'-c' => :
|
58
|
+
'-c' => :config,
|
59
|
+
'-C' => :copy
|
59
60
|
|
60
61
|
class_option "glossary", type: :string, aliases: "-g"
|
61
62
|
class_option "source-language", type: :string, aliases: "-S"
|
@@ -188,15 +189,14 @@ module Logaling::Command
|
|
188
189
|
check_logaling_home_exists
|
189
190
|
project = @repository.find_project(@config.glossary)
|
190
191
|
raise Logaling::ProjectNotFound unless project
|
191
|
-
raise Logaling::ProjectNotFound if project.
|
192
|
+
raise Logaling::ProjectNotFound if project.imported?
|
192
193
|
glossary = project.glossary(@config.source_language, @config.target_language)
|
193
|
-
if glossary.bilingual_pair_exists?(source_term, target_term)
|
194
|
-
raise Logaling::TermError, "term '#{source_term}: #{target_term}' already exists in '#{@config.glossary}'"
|
195
|
-
end
|
196
194
|
|
197
195
|
glossary.add(source_term, target_term, note)
|
198
|
-
rescue Logaling::CommandFailed
|
196
|
+
rescue Logaling::CommandFailed => e
|
199
197
|
say e.message
|
198
|
+
rescue Logaling::TermError => e
|
199
|
+
say "term '#{source_term}: #{target_term}' already exists in '#{@config.glossary}'"
|
200
200
|
rescue Logaling::GlossaryNotFound => e
|
201
201
|
say "Try 'loga new or register' first."
|
202
202
|
rescue Logaling::ProjectNotFound
|
@@ -244,13 +244,12 @@ module Logaling::Command
|
|
244
244
|
project = @repository.find_project(@config.glossary)
|
245
245
|
raise Logaling::ProjectNotFound unless project
|
246
246
|
glossary = project.glossary(@config.source_language, @config.target_language)
|
247
|
-
if glossary.bilingual_pair_exists?(source_term, new_target_term, note)
|
248
|
-
raise Logaling::TermError, "term '#{source_term}: #{new_target_term}' already exists in '#{@config.glossary}'"
|
249
|
-
end
|
250
247
|
|
251
248
|
glossary.update(source_term, target_term, new_target_term, note)
|
252
|
-
rescue Logaling::CommandFailed
|
249
|
+
rescue Logaling::CommandFailed => e
|
253
250
|
say e.message
|
251
|
+
rescue Logaling::TermError => e
|
252
|
+
say "term '#{source_term}: #{new_target_term}' already exists in '#{@config.glossary}'"
|
254
253
|
rescue Logaling::GlossaryNotFound => e
|
255
254
|
say "Try 'loga new or register' first."
|
256
255
|
rescue Logaling::ProjectNotFound
|
data/lib/logaling/glossary.rb
CHANGED
@@ -39,25 +39,35 @@ module Logaling
|
|
39
39
|
terms
|
40
40
|
end
|
41
41
|
|
42
|
-
def
|
42
|
+
def find_bilingual_pairs(source_term, target_term, note=nil)
|
43
43
|
raise Logaling::GlossaryDBNotFound unless File.exist?(@project.glossary_db_path)
|
44
44
|
index
|
45
45
|
terms = []
|
46
46
|
Logaling::GlossaryDB.open(@project.glossary_db_path, "utf8") do |db|
|
47
47
|
terms = db.get_bilingual_pair(source_term, target_term, @name, note)
|
48
48
|
end
|
49
|
-
|
49
|
+
terms.delete_if {|t| t[:target_language] != @target_language }
|
50
|
+
end
|
51
|
+
|
52
|
+
def bilingual_pair_exists?(source_term, target_term, note=nil)
|
53
|
+
!find_bilingual_pairs(source_term, target_term, note).empty?
|
50
54
|
end
|
51
55
|
|
52
56
|
def add(source_term, target_term, note)
|
57
|
+
raise Logaling::TermError if bilingual_pair_exists?(source_term, target_term)
|
53
58
|
glossary_source.add(source_term, target_term, note)
|
54
59
|
end
|
55
60
|
|
56
61
|
def update(source_term, target_term, new_target_term, note)
|
62
|
+
if (target_term != new_target_term) && bilingual_pair_exists?(source_term, new_target_term)
|
63
|
+
raise Logaling::TermError
|
64
|
+
end
|
65
|
+
|
57
66
|
glossary_source.update(source_term, target_term, new_target_term, note)
|
58
67
|
end
|
59
68
|
|
60
69
|
def delete(source_term, target_term)
|
70
|
+
raise Logaling::TermError unless bilingual_pair_exists?(source_term, target_term)
|
61
71
|
glossary_source.delete(source_term, target_term)
|
62
72
|
end
|
63
73
|
|
data/lib/logaling/project.rb
CHANGED
@@ -76,6 +76,10 @@ module Logaling
|
|
76
76
|
glossaries.any? {|glossary| glossary.to_s == [name, source_language, target_language].join('.') }
|
77
77
|
end
|
78
78
|
|
79
|
+
def imported?
|
80
|
+
false
|
81
|
+
end
|
82
|
+
|
79
83
|
private
|
80
84
|
def all_glossary_source_path
|
81
85
|
Dir.glob(File.join(glossary_source_path, "*"))
|
@@ -95,15 +99,29 @@ module Logaling
|
|
95
99
|
def glossary_source_path
|
96
100
|
File.dirname(@path)
|
97
101
|
end
|
102
|
+
|
103
|
+
def imported?
|
104
|
+
true
|
105
|
+
end
|
98
106
|
end
|
99
107
|
|
100
108
|
class PersonalProject < Project
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
109
|
+
class << self
|
110
|
+
def create(root_path, glossary_name, source_language, target_language, repository=nil)
|
111
|
+
project_name = [glossary_name, source_language, target_language, 'yml'].join('.')
|
112
|
+
project_path = File.join(root_path, project_name)
|
113
|
+
project = PersonalProject.new(project_path, repository)
|
114
|
+
project.initialize_glossary(source_language, target_language)
|
115
|
+
project
|
116
|
+
end
|
117
|
+
|
118
|
+
def remove(root_path, glossary_name, source_language, target_language, repository=nil)
|
119
|
+
project_name = [glossary_name, source_language, target_language, 'yml'].join('.')
|
120
|
+
project_path = File.join(root_path, project_name)
|
121
|
+
project = PersonalProject.new(project_path, repository)
|
122
|
+
FileUtils.rm_rf(project_path, :secure => true)
|
123
|
+
project
|
124
|
+
end
|
107
125
|
end
|
108
126
|
|
109
127
|
def name
|
data/lib/logaling/repository.rb
CHANGED
@@ -48,7 +48,18 @@ module Logaling
|
|
48
48
|
if glossary_exists?(project_name, source_language, target_language)
|
49
49
|
raise Logaling::GlossaryAlreadyRegistered, "The glossary '#{project_name}' already exists."
|
50
50
|
end
|
51
|
-
PersonalProject.create(personal_glossary_root_path, project_name, source_language, target_language)
|
51
|
+
PersonalProject.create(personal_glossary_root_path, project_name, source_language, target_language, self)
|
52
|
+
end
|
53
|
+
|
54
|
+
def remove_personal_project(project_name, source_language, target_language)
|
55
|
+
unless glossary_exists?(project_name, source_language, target_language)
|
56
|
+
raise Logaling::GlossaryNotFound, "The glossary '#{project_name}' not found."
|
57
|
+
end
|
58
|
+
PersonalProject.remove(personal_glossary_root_path, project_name, source_language, target_language, self)
|
59
|
+
rescue Logaling::GlossaryNotFound => e
|
60
|
+
raise e
|
61
|
+
rescue
|
62
|
+
raise Logaling::CommandFailed, "Failed remove the glossary #{project_name}."
|
52
63
|
end
|
53
64
|
|
54
65
|
def import(glossary_source)
|
@@ -99,7 +110,7 @@ module Logaling
|
|
99
110
|
end
|
100
111
|
|
101
112
|
def index
|
102
|
-
all_glossary_sources = projects.map{|project| project.glossary_sources}.flatten
|
113
|
+
all_glossary_sources = projects.map {|project| project.glossary_sources }.flatten
|
103
114
|
|
104
115
|
Logaling::GlossaryDB.open(logaling_db_home, "utf8") do |db|
|
105
116
|
db.recreate_table
|
@@ -128,7 +139,7 @@ module Logaling
|
|
128
139
|
end
|
129
140
|
|
130
141
|
def find_project(project_name)
|
131
|
-
|
142
|
+
projects.detect {|project| project.name == project_name }
|
132
143
|
end
|
133
144
|
|
134
145
|
def find_glossary(project_name, source_language, target_language)
|
@@ -341,11 +341,12 @@ describe Logaling::Command::Application do
|
|
341
341
|
|
342
342
|
context 'with exisiting bilingual pair and note' do
|
343
343
|
before do
|
344
|
-
|
344
|
+
command.update("spec", "テスト", "テスト", "備考")
|
345
|
+
@yaml = YAML::load_file(glossary_source_path).find{|h| h["source_term"] == "spec" }
|
345
346
|
end
|
346
347
|
|
347
|
-
it 'should
|
348
|
-
@
|
348
|
+
it "term's target_term should not be updated" do
|
349
|
+
@yaml.should == {"source_term"=>"spec", "target_term"=>"テスト", "note"=>"備考"}
|
349
350
|
end
|
350
351
|
end
|
351
352
|
|
@@ -89,7 +89,16 @@ module Logaling
|
|
89
89
|
term = yaml.index({"source_term"=>"user", "target_term"=>"ユーザ", "note"=>""})
|
90
90
|
term.should_not be_nil
|
91
91
|
end
|
92
|
+
end
|
93
|
+
|
94
|
+
context 'same [source-term, taget-term] pair can not exist' do
|
95
|
+
before do
|
96
|
+
glossary.add("user", "ゆーざー", "")
|
97
|
+
end
|
92
98
|
|
99
|
+
it {
|
100
|
+
-> { glossary.update("user", "ゆーざー", "ユーザ", "") }.should raise_error(Logaling::TermError)
|
101
|
+
}
|
93
102
|
end
|
94
103
|
end
|
95
104
|
|
@@ -98,6 +107,8 @@ module Logaling
|
|
98
107
|
before do
|
99
108
|
glossary.add("delete_logaling", "てすと1", "備考")
|
100
109
|
glossary.add("delete_logaling", "てすと2", "備考")
|
110
|
+
# in order to index certainly
|
111
|
+
sleep(1)
|
101
112
|
glossary.delete("delete_logaling", "てすと1")
|
102
113
|
repository.index
|
103
114
|
@result = repository.lookup("delete_logaling", glossary)
|
@@ -118,6 +118,8 @@ module Logaling
|
|
118
118
|
File.open(glossary_source_path, 'w') do |f|
|
119
119
|
YAML.dump([], f)
|
120
120
|
end
|
121
|
+
# in order to index certainly
|
122
|
+
sleep(1)
|
121
123
|
glossary.add("spec_logaling", "スペック", "備考")
|
122
124
|
repository.index
|
123
125
|
@terms = repository.lookup("spec_logaling", glossary)
|
@@ -167,6 +169,36 @@ module Logaling
|
|
167
169
|
end
|
168
170
|
end
|
169
171
|
|
172
|
+
describe "#remove_personal_project" do
|
173
|
+
let(:rm_glossary_name) { "rm_personal_project" }
|
174
|
+
let(:rm_source_language) { "en" }
|
175
|
+
let(:rm_target_language) { "ja" }
|
176
|
+
before do
|
177
|
+
FileUtils.rm_rf(File.join(logaling_home, 'personal'), :secure => true)
|
178
|
+
repository.create_personal_project(rm_glossary_name, rm_source_language, rm_target_language)
|
179
|
+
end
|
180
|
+
|
181
|
+
context "when target personal project exists" do
|
182
|
+
before do
|
183
|
+
repository.remove_personal_project(rm_glossary_name, rm_source_language, rm_target_language)
|
184
|
+
@projects = repository.projects
|
185
|
+
end
|
186
|
+
|
187
|
+
it "should remove personal project" do
|
188
|
+
@projects.size.should == 1
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
context "when target personal project not exist" do
|
193
|
+
it "should raise Logaling::GlossaryNotFound" do
|
194
|
+
@name = rm_glossary_name + "foo"
|
195
|
+
lambda{
|
196
|
+
repository.remove_personal_project(@name, rm_source_language, rm_target_language)
|
197
|
+
}.should raise_error(Logaling::GlossaryNotFound)
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
170
202
|
after do
|
171
203
|
FileUtils.rm_rf(File.join(logaling_home, 'projects', 'spec'), :secure => true)
|
172
204
|
end
|
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.1.
|
4
|
+
version: 0.1.9
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date: 2012-
|
16
|
+
date: 2012-09-28 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: thor
|