logaling-command 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/logaling/command.rb +49 -45
- data/lib/logaling/glossary.rb +62 -59
- data/lib/logaling/glossary_db.rb +16 -43
- data/lib/logaling.rb +2 -0
- data/spec/logaling/command_spec.rb +21 -87
- data/spec/logaling/glossary_spec.rb +8 -61
- metadata +10 -12
- data/spec/logaling/glossary_db_spec.rb +0 -75
data/lib/logaling/command.rb
CHANGED
@@ -4,11 +4,10 @@ require 'thor'
|
|
4
4
|
require "logaling/glossary"
|
5
5
|
|
6
6
|
class Logaling::Command < Thor
|
7
|
-
VERSION = "0.0.
|
7
|
+
VERSION = "0.0.5"
|
8
8
|
LOGALING_CONFIG = '.logaling'
|
9
9
|
|
10
|
-
map '-
|
11
|
-
'-a' => :add,
|
10
|
+
map '-a' => :add,
|
12
11
|
'-d' => :delete,
|
13
12
|
'-u' => :update,
|
14
13
|
'-l' => :lookup,
|
@@ -41,80 +40,79 @@ class Logaling::Command < Thor
|
|
41
40
|
desc 'register', 'Register .logaling'
|
42
41
|
def register
|
43
42
|
logaling_path = find_dotfile
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
say "Your project is now registered to #{symlink_path}."
|
52
|
-
else
|
53
|
-
say "#{options["glossary"]} is already registered."
|
54
|
-
end
|
43
|
+
FileUtils.mkdir_p(logaling_projects_path) unless File.exist?(logaling_projects_path)
|
44
|
+
|
45
|
+
config = load_config
|
46
|
+
symlink_path = File.join(logaling_projects_path, config["glossary"])
|
47
|
+
unless File.exists?(symlink_path)
|
48
|
+
FileUtils.ln_s(logaling_path, symlink_path)
|
49
|
+
say "#{config['glossary']} is now registered to logaling."
|
55
50
|
else
|
56
|
-
say "
|
51
|
+
say "#{config['glossary']} is already registered."
|
57
52
|
end
|
53
|
+
rescue Logaling::CommandFailed => e
|
54
|
+
say e.message
|
55
|
+
say "Try 'loga new' first."
|
58
56
|
end
|
59
57
|
|
60
58
|
desc 'unregister', 'Unregister .logaling'
|
61
59
|
def unregister
|
62
60
|
logaling_path = find_dotfile
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
say "Your project is now unregistered."
|
69
|
-
else
|
70
|
-
say ".logaling is not yet registered."
|
71
|
-
end
|
61
|
+
config = load_config
|
62
|
+
symlink_path = File.join(logaling_projects_path, config["glossary"])
|
63
|
+
if File.exists?(symlink_path)
|
64
|
+
FileUtils.remove_entry_secure(symlink_path, true)
|
65
|
+
say "#{config['glossary']} is now unregistered."
|
72
66
|
else
|
73
|
-
say "
|
67
|
+
say "#{config['glossary']} is not yet registered."
|
74
68
|
end
|
75
|
-
end
|
76
|
-
|
77
|
-
desc 'create', 'Create glossary.'
|
78
|
-
def create
|
79
|
-
glossary.create
|
80
69
|
rescue Logaling::CommandFailed => e
|
81
|
-
|
70
|
+
say e.message
|
82
71
|
end
|
83
72
|
|
84
73
|
desc 'add [SOURCE TERM] [TARGET TERM] [NOTE(optional)]', 'Add term to glossary.'
|
85
74
|
def add(source_term, target_term, note='')
|
86
75
|
glossary.add(source_term, target_term, note)
|
87
76
|
rescue Logaling::CommandFailed, Logaling::TermError => e
|
88
|
-
|
77
|
+
say e.message
|
89
78
|
end
|
90
79
|
|
91
80
|
desc 'delete [SOURCE TERM] [TARGET TERM]', 'Delete term.'
|
92
81
|
def delete(source_term, target_term)
|
93
82
|
glossary.delete(source_term, target_term)
|
94
83
|
rescue Logaling::CommandFailed, Logaling::TermError => e
|
95
|
-
|
84
|
+
say e.message
|
85
|
+
rescue Logaling::GlossaryNotFound => e
|
86
|
+
say "Try 'loga new or register' first."
|
96
87
|
end
|
97
88
|
|
98
89
|
desc 'update [SOURCE TERM] [TARGET TERM] [NEW TARGET TERM], [NOTE(optional)]', 'Update term.'
|
99
90
|
def update(source_term, target_term, new_target_term, note='')
|
100
91
|
glossary.update(source_term, target_term, new_target_term, note)
|
101
92
|
rescue Logaling::CommandFailed, Logaling::TermError => e
|
102
|
-
|
93
|
+
say e.message
|
94
|
+
rescue Logaling::GlossaryNotFound => e
|
95
|
+
say "Try 'loga new or register' first."
|
103
96
|
end
|
104
97
|
|
105
98
|
desc 'lookup [TERM]', 'Lookup terms.'
|
106
99
|
def lookup(source_term)
|
107
|
-
index
|
108
|
-
glossary.lookup(source_term)
|
109
|
-
rescue Logaling::CommandFailed, Logaling::TermError => e
|
110
|
-
error(e.message)
|
111
|
-
end
|
112
|
-
|
113
|
-
desc 'index', 'Index glossaries to groonga DB.'
|
114
|
-
def index
|
115
100
|
glossary.index
|
101
|
+
terms = glossary.lookup(source_term)
|
102
|
+
|
103
|
+
puts "\nlookup word : #{source_term}"
|
104
|
+
unless terms.empty?
|
105
|
+
terms.each do |term|
|
106
|
+
puts "\n #{term[:source_term]}\n"
|
107
|
+
puts " #{term[:target_term]}\n"
|
108
|
+
puts " note:#{term[:note]}"
|
109
|
+
puts " glossary:#{term[:name]}"
|
110
|
+
end
|
111
|
+
else
|
112
|
+
"source-term <#{source_term}> not found"
|
113
|
+
end
|
116
114
|
rescue Logaling::CommandFailed, Logaling::TermError => e
|
117
|
-
|
115
|
+
say e.message
|
118
116
|
end
|
119
117
|
|
120
118
|
private
|
@@ -156,13 +154,19 @@ class Logaling::Command < Thor
|
|
156
154
|
|
157
155
|
def find_dotfile
|
158
156
|
dir = Dir.pwd
|
157
|
+
searched_path = []
|
159
158
|
while(dir) do
|
160
159
|
path = File.join(dir, '.logaling')
|
161
160
|
if File.exist?(path)
|
162
161
|
return path
|
163
|
-
|
162
|
+
else
|
163
|
+
if dir != "/"
|
164
|
+
searched_path << dir
|
165
|
+
dir = File.dirname(dir)
|
166
|
+
else
|
167
|
+
raise(Logaling::CommandFailed, "Can't found .logaling in #{searched_path}")
|
168
|
+
end
|
164
169
|
end
|
165
|
-
dir = (dir != "/") ? File.dirname(dir) : nil
|
166
170
|
end
|
167
171
|
end
|
168
172
|
end
|
data/lib/logaling/glossary.rb
CHANGED
@@ -18,98 +18,117 @@ module Logaling
|
|
18
18
|
@target_language = target_language
|
19
19
|
end
|
20
20
|
|
21
|
-
def create
|
22
|
-
check_glossary_unexists
|
23
|
-
|
24
|
-
dirname = File::dirname(@path)
|
25
|
-
FileUtils.mkdir_p(dirname)
|
26
|
-
FileUtils.touch(@path)
|
27
|
-
end
|
28
|
-
|
29
21
|
def add(source_term, target_term, note)
|
30
|
-
|
22
|
+
FileUtils.touch(@path) unless File.exists?(@path)
|
31
23
|
|
32
24
|
if bilingual_pair_exists?(source_term, target_term)
|
33
|
-
raise TermError, "
|
25
|
+
raise TermError, "term '#{source_term}: #{target_term}' already exists in '#{@glossary}'"
|
34
26
|
end
|
35
27
|
|
36
|
-
glossary = load_glossary_yml
|
28
|
+
glossary = load_glossary_yml(@path)
|
37
29
|
glossary << build_term(source_term, target_term, note)
|
38
30
|
|
39
31
|
dump_glossary(glossary)
|
40
32
|
end
|
41
33
|
|
42
34
|
def update(source_term, target_term, new_target_term, note)
|
43
|
-
|
35
|
+
raise GlossaryNotFound unless File.exists?(@path)
|
44
36
|
|
45
37
|
if bilingual_pair_exists?(source_term, new_target_term)
|
46
|
-
raise TermError, "
|
38
|
+
raise TermError, "term '#{source_term}: #{target_term}' already exists in '#{@glossary}'"
|
47
39
|
end
|
48
40
|
|
49
|
-
glossary = load_glossary_yml
|
41
|
+
glossary = load_glossary_yml(@path)
|
50
42
|
target_index = find_term_index(glossary, source_term, target_term)
|
51
43
|
if target_index
|
52
44
|
glossary[target_index] = rebuild_term(glossary[target_index], source_term, new_target_term, note)
|
53
45
|
dump_glossary(glossary)
|
54
46
|
else
|
55
|
-
raise TermError, "
|
47
|
+
raise TermError, "Can't found term '#{source_term}: #{target_term}' in '#{@glossary}'"
|
56
48
|
end
|
57
49
|
end
|
58
50
|
|
59
51
|
def delete(source_term, target_term)
|
60
|
-
|
52
|
+
raise GlossaryNotFound unless File.exists?(@path)
|
61
53
|
|
62
|
-
glossary = load_glossary_yml
|
54
|
+
glossary = load_glossary_yml(@path)
|
63
55
|
target_index = find_term_index(glossary, source_term, target_term)
|
64
56
|
if target_index
|
65
57
|
glossary.delete_at(target_index)
|
66
58
|
dump_glossary(glossary)
|
67
59
|
else
|
68
|
-
raise TermError, "
|
60
|
+
raise TermError, "Can't found term '#{source_term}: #{target_term}' in '#{@glossary}'"
|
69
61
|
end
|
70
62
|
end
|
71
63
|
|
72
64
|
def lookup(source_term)
|
73
|
-
|
65
|
+
raise GlossaryDBNotFound unless File.exists?(logaling_db_home)
|
74
66
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
67
|
+
terms = []
|
68
|
+
Logaling::GlossaryDB.open(logaling_db_home, "utf8") do |db|
|
69
|
+
terms = db.lookup(source_term)
|
70
|
+
terms.reject! do |term|
|
79
71
|
term[:source_language] != @source_language || term[:target_language] != @target_language
|
80
72
|
end
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
other = glossaries.select{|term| term[:name] != @glossary}
|
87
|
-
glossaries = specified.concat(other)
|
88
|
-
|
89
|
-
puts "\nlookup word : #{source_term}"
|
90
|
-
glossaries.each do |term|
|
91
|
-
puts "\n #{term[:source_term]}\n"
|
92
|
-
puts " #{term[:target_term]}\n"
|
93
|
-
puts " note:#{term[:note]}"
|
94
|
-
puts " glossary:#{term[:name]}"
|
73
|
+
unless terms.empty?
|
74
|
+
# order by glossary
|
75
|
+
specified = terms.select{|term| term[:name] == @glossary}
|
76
|
+
other = terms.select{|term| term[:name] != @glossary}
|
77
|
+
terms = specified.concat(other)
|
95
78
|
end
|
96
79
|
end
|
80
|
+
terms
|
97
81
|
end
|
98
82
|
|
99
83
|
def index
|
100
84
|
projects = Dir.glob(File.join(LOGALING_HOME, "projects", "*"))
|
101
|
-
|
102
|
-
|
103
|
-
db.recreate_table
|
85
|
+
|
86
|
+
Logaling::GlossaryDB.open(logaling_db_home, "utf8") do |db|
|
87
|
+
db.recreate_table
|
104
88
|
projects.each do |project|
|
105
|
-
|
89
|
+
get_glossaries(project).each do |glossary, name, source_language, target_language|
|
90
|
+
db.index_glossary(glossary, name, source_language, target_language)
|
91
|
+
end
|
106
92
|
end
|
107
93
|
end
|
108
94
|
end
|
109
95
|
|
110
96
|
private
|
111
|
-
def
|
112
|
-
|
97
|
+
def load_glossary(file)
|
98
|
+
case File.extname(file)
|
99
|
+
when ".csv"
|
100
|
+
load_glossary_csv(file)
|
101
|
+
when ".tsv"
|
102
|
+
load_glossary_tsv(file)
|
103
|
+
when ".yml"
|
104
|
+
load_glossary_yml(file)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def get_glossaries(path)
|
109
|
+
glob_list = %w(yml tsv csv).map{|type| File.join(path, "glossary", "*.#{type}") }
|
110
|
+
Dir.glob(glob_list).map do |file|
|
111
|
+
name, source_language, target_language = File::basename(file, ".*").split(".")
|
112
|
+
[load_glossary(file), name, source_language, target_language]
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def load_glossary_yml(path)
|
117
|
+
YAML::load_file(path) || []
|
118
|
+
end
|
119
|
+
|
120
|
+
def load_glossary_tsv(path)
|
121
|
+
load_glossary_csv(path, "\t")
|
122
|
+
end
|
123
|
+
|
124
|
+
def load_glossary_csv(path, sep=",")
|
125
|
+
glossary = []
|
126
|
+
CSV.open(path, "r", {:col_sep => sep}) do |csv|
|
127
|
+
csv.each do |row|
|
128
|
+
glossary << {"source_term" => row[0], "target_term" => row[1], "note" => ""} if row.size >= 2
|
129
|
+
end
|
130
|
+
end
|
131
|
+
glossary
|
113
132
|
end
|
114
133
|
|
115
134
|
def logaling_db_home
|
@@ -137,22 +156,6 @@ module Logaling
|
|
137
156
|
target_terms(source_term).any?{|data| data['target_term'] == target_term }
|
138
157
|
end
|
139
158
|
|
140
|
-
def check_glossarydir_unexists
|
141
|
-
unless File.exists?(File.dirname(@path))
|
142
|
-
raise CommandFailed, "glossary path #{File.dirname(@path)} not found"
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
def check_glossary_unexists
|
147
|
-
check_glossarydir_unexists
|
148
|
-
raise CommandFailed, "glossary #{@path} already exists" if File.exists?(@path)
|
149
|
-
end
|
150
|
-
|
151
|
-
def check_glossary_exists
|
152
|
-
check_glossarydir_unexists
|
153
|
-
FileUtils.touch(@path) unless File.exists?(@path)
|
154
|
-
end
|
155
|
-
|
156
159
|
def target_terms(source_term, path=@path)
|
157
160
|
target_terms = []
|
158
161
|
glossaly = YAML::load_file(path) || []
|
data/lib/logaling/glossary_db.rb
CHANGED
@@ -8,6 +8,10 @@ require 'csv'
|
|
8
8
|
|
9
9
|
module Logaling
|
10
10
|
class GlossaryDB
|
11
|
+
def self.open(base_path, encoding, &blk)
|
12
|
+
blk ? GlossaryDB.new.open(base_path, encoding, &blk) : GlossaryDB.new.open(base_path, encoding)
|
13
|
+
end
|
14
|
+
|
11
15
|
def initialize
|
12
16
|
@database = nil
|
13
17
|
end
|
@@ -30,11 +34,8 @@ module Logaling
|
|
30
34
|
end
|
31
35
|
end
|
32
36
|
|
33
|
-
def recreate_table
|
34
|
-
|
35
|
-
if File.exist?(path)
|
36
|
-
remove_schema
|
37
|
-
end
|
37
|
+
def recreate_table
|
38
|
+
remove_schema
|
38
39
|
populate_schema
|
39
40
|
end
|
40
41
|
|
@@ -43,38 +44,12 @@ module Logaling
|
|
43
44
|
@database = nil
|
44
45
|
end
|
45
46
|
|
46
|
-
def
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
when ".tsv", ".csv"
|
53
|
-
sep = extname == ".tsv" ? "\t" : ","
|
54
|
-
glossary = []
|
55
|
-
CSV.open(file, "r", {:col_sep => sep}) do |csv|
|
56
|
-
csv.each do |row|
|
57
|
-
glossary << {"source_term" => row[0], "target_term" => row[1], "note" => ""} if row.size >= 2
|
58
|
-
end
|
59
|
-
end
|
60
|
-
glossary
|
61
|
-
when ".yml"
|
62
|
-
YAML::load_file(file)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def load_glossaries(path)
|
67
|
-
file_list = get_file_list(path, ["yml", "tsv", "csv"])
|
68
|
-
file_list.each do |file|
|
69
|
-
name, source_language, target_language = File::basename(file, ".*").split(".")
|
70
|
-
glossary = load_glossary(file)
|
71
|
-
next if !glossary
|
72
|
-
glossary.each do |term|
|
73
|
-
source_term = term['source_term']
|
74
|
-
target_term = term['target_term']
|
75
|
-
note = term['note']
|
76
|
-
add_glossary(name, source_language, target_language, source_term, target_term, note)
|
77
|
-
end
|
47
|
+
def index_glossary(glossary, name, source_language, target_language)
|
48
|
+
glossary.each do |term|
|
49
|
+
source_term = term['source_term']
|
50
|
+
target_term = term['target_term']
|
51
|
+
note = term['note']
|
52
|
+
add_glossary(name, source_language, target_language, source_term, target_term, note)
|
78
53
|
end
|
79
54
|
end
|
80
55
|
|
@@ -141,15 +116,13 @@ module Logaling
|
|
141
116
|
|
142
117
|
def remove_schema
|
143
118
|
Groonga::Schema.define do |schema|
|
144
|
-
schema.remove_table("glossaries")
|
145
|
-
schema.remove_table("terms")
|
119
|
+
schema.remove_table("glossaries") if Groonga["glossaries"]
|
120
|
+
schema.remove_table("terms") if Groonga["terms"]
|
146
121
|
end
|
147
122
|
end
|
148
123
|
|
149
|
-
def
|
150
|
-
|
151
|
-
Dir.glob(glob_list)
|
124
|
+
def closed?
|
125
|
+
@database.nil? or @database.closed?
|
152
126
|
end
|
153
|
-
|
154
127
|
end
|
155
128
|
end
|
data/lib/logaling.rb
CHANGED
@@ -7,10 +7,13 @@ describe Logaling::Command do
|
|
7
7
|
let(:glossary_path) { Logaling::Glossary.build_path('spec', 'en', 'ja') }
|
8
8
|
let(:target_project_path) { File.join(LOGALING_HOME, "projects", "spec") }
|
9
9
|
|
10
|
+
before do
|
11
|
+
FileUtils.remove_entry_secure(Logaling::Command::LOGALING_CONFIG, true)
|
12
|
+
FileUtils.remove_entry_secure(File.join(LOGALING_HOME, 'projects', 'spec'), true)
|
13
|
+
end
|
14
|
+
|
10
15
|
describe '#new' do
|
11
16
|
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
17
|
@project_counts = Dir[File.join(LOGALING_HOME, "projects", "*")].size
|
15
18
|
end
|
16
19
|
|
@@ -61,7 +64,6 @@ describe Logaling::Command do
|
|
61
64
|
|
62
65
|
describe '#register' do
|
63
66
|
before do
|
64
|
-
FileUtils.remove_file(target_project_path) if File.exist?(target_project_path)
|
65
67
|
@project_counts = Dir[File.join(LOGALING_HOME, "projects", "*")].size
|
66
68
|
end
|
67
69
|
|
@@ -76,7 +78,7 @@ describe Logaling::Command do
|
|
76
78
|
end
|
77
79
|
|
78
80
|
it "print message \"Try 'loga new' first.\"" do
|
79
|
-
@stdout.should
|
81
|
+
@stdout.should be_include "Try 'loga new' first.\n"
|
80
82
|
end
|
81
83
|
end
|
82
84
|
|
@@ -108,22 +110,19 @@ describe Logaling::Command do
|
|
108
110
|
@stdout = capture(:stdout) {command.unregister}
|
109
111
|
end
|
110
112
|
|
111
|
-
it '
|
113
|
+
it 'should not register nothing' do
|
112
114
|
Dir[File.join(LOGALING_HOME, "projects", "*")].size.should == @project_counts
|
113
115
|
end
|
114
116
|
|
115
|
-
it "print message \".logaling
|
116
|
-
@stdout.should
|
117
|
+
it "should print message \"Can't found .logaling in [...]\"" do
|
118
|
+
@stdout.should be_include "Can't found .logaling in"
|
117
119
|
end
|
118
120
|
end
|
119
121
|
|
120
122
|
context 'when find .logaling' do
|
121
|
-
before do
|
122
|
-
command.new('spec', 'en', 'ja')
|
123
|
-
end
|
124
|
-
|
125
123
|
context 'and .logaling registered' do
|
126
124
|
before do
|
125
|
+
command.new('spec', 'en', 'ja')
|
127
126
|
command.register
|
128
127
|
command.unregister
|
129
128
|
end
|
@@ -136,42 +135,21 @@ describe Logaling::Command do
|
|
136
135
|
|
137
136
|
context "and .logaling is not registered" do
|
138
137
|
before do
|
138
|
+
command.options = base_options.merge("no-register" => true)
|
139
|
+
command.new('spec', 'en', 'ja')
|
139
140
|
@stdout = capture(:stdout) {command.unregister}
|
140
141
|
end
|
141
142
|
|
142
|
-
it "print message \"
|
143
|
-
@stdout.should == "
|
143
|
+
it "print message \"<glossary name> is not yet registered.\"" do
|
144
|
+
@stdout.should == "spec is not yet registered.\n"
|
144
145
|
end
|
145
146
|
end
|
146
147
|
end
|
147
148
|
end
|
148
149
|
|
149
|
-
describe '#create' do
|
150
|
-
before do
|
151
|
-
FileUtils.remove_entry_secure(File.join(LOGALING_HOME, 'projects', 'spec'), true)
|
152
|
-
end
|
153
|
-
|
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
|
-
|
161
|
-
it "glossary yaml should be newly created" do
|
162
|
-
File.exists?(glossary_path).should be_true
|
163
|
-
end
|
164
|
-
end
|
165
|
-
|
166
|
-
after do
|
167
|
-
FileUtils.remove_entry_secure(Logaling::Command::LOGALING_CONFIG, true)
|
168
|
-
end
|
169
|
-
end
|
170
|
-
|
171
150
|
describe '#add' do
|
172
151
|
before do
|
173
|
-
|
174
|
-
FileUtils.mkdir_p(File.dirname(glossary_path))
|
152
|
+
command.new('spec', 'en', 'ja')
|
175
153
|
end
|
176
154
|
|
177
155
|
context 'with arguments have only bilingual pair' do
|
@@ -209,8 +187,7 @@ describe Logaling::Command do
|
|
209
187
|
|
210
188
|
describe "#update" do
|
211
189
|
before do
|
212
|
-
|
213
|
-
FileUtils.mkdir_p(File.dirname(glossary_path))
|
190
|
+
command.new('spec', 'en', 'ja')
|
214
191
|
command.add("spec", "テスト", "備考")
|
215
192
|
end
|
216
193
|
|
@@ -243,68 +220,25 @@ describe Logaling::Command do
|
|
243
220
|
end
|
244
221
|
end
|
245
222
|
|
246
|
-
describe '#index' do
|
247
|
-
before do
|
248
|
-
FileUtils.remove_entry_secure(File.join(LOGALING_HOME, 'projects', 'spec'), true)
|
249
|
-
FileUtils.mkdir_p(File.dirname(glossary_path))
|
250
|
-
command.add("spec", "スペック", "備考")
|
251
|
-
command.index
|
252
|
-
end
|
253
|
-
|
254
|
-
context 'glossary files exist in some project' do
|
255
|
-
db_home = File.join(LOGALING_HOME, "db")
|
256
|
-
db = Logaling::GlossaryDB.new
|
257
|
-
|
258
|
-
subject { db.open(db_home, "utf8"){|db| records = db.lookup("spec")} }
|
259
|
-
|
260
|
-
it 'glossaries should be indexed' do
|
261
|
-
subject.should == [{:name=>"spec", :source_language=>"en", :target_language=>"ja", :source_term=>"spec", :target_term=>"スペック", :note=>"備考"}]
|
262
|
-
end
|
263
|
-
end
|
264
|
-
end
|
265
|
-
|
266
223
|
describe '#lookup' do
|
267
|
-
let(:base_options2) { {"glossary"=>"spec2", "source-language"=>"en", "target-language"=>"ja"} }
|
268
|
-
let(:command2) { Logaling::Command.new([], base_options2) }
|
269
|
-
let(:glossary_path2) { Logaling::Glossary.build_path('spec2', 'en', 'ja') }
|
270
|
-
|
271
224
|
before do
|
272
|
-
|
273
|
-
|
225
|
+
command.new('spec', 'en', 'ja')
|
226
|
+
command.add("spec", "スペック", "備考")
|
274
227
|
end
|
275
228
|
|
276
229
|
context 'with arguments exist term' do
|
277
230
|
before do
|
278
|
-
command.
|
279
|
-
FileUtils.mkdir_p(File.dirname(glossary_path2))
|
280
|
-
command2.add("spec", "スペック")
|
231
|
+
@stdout = capture(:stdout) {command.lookup("spec")}
|
281
232
|
end
|
282
233
|
|
283
234
|
it 'succeed at find by term without command.index' do
|
284
|
-
stdout
|
285
|
-
stdout.should == <<-EOM
|
286
|
-
|
287
|
-
lookup word : spec
|
288
|
-
|
289
|
-
spec
|
290
|
-
スペック
|
291
|
-
note:備考
|
292
|
-
glossary:spec
|
293
|
-
|
294
|
-
spec
|
295
|
-
スペック
|
296
|
-
note:
|
297
|
-
glossary:spec2
|
298
|
-
EOM
|
299
|
-
end
|
300
|
-
|
301
|
-
after do
|
302
|
-
FileUtils.remove_entry_secure(File.join(LOGALING_HOME, 'projects', 'spec2'), true)
|
235
|
+
@stdout.should be_include "glossary:spec"
|
303
236
|
end
|
304
237
|
end
|
305
238
|
end
|
306
239
|
|
307
240
|
after do
|
241
|
+
FileUtils.remove_entry_secure(Logaling::Command::LOGALING_CONFIG, true)
|
308
242
|
FileUtils.remove_entry_secure(File.join(LOGALING_HOME, 'projects', 'spec'), true)
|
309
243
|
end
|
310
244
|
end
|
@@ -13,29 +13,6 @@ module Logaling
|
|
13
13
|
FileUtils.mkdir_p(File.dirname(glossary_path))
|
14
14
|
end
|
15
15
|
|
16
|
-
describe '#create' do
|
17
|
-
context 'when glossary already exists' do
|
18
|
-
before do
|
19
|
-
FileUtils.touch(glossary_path)
|
20
|
-
end
|
21
|
-
|
22
|
-
it {
|
23
|
-
-> { glossary.create }.should raise_error(Logaling::CommandFailed)
|
24
|
-
}
|
25
|
-
end
|
26
|
-
|
27
|
-
context 'newly create' do
|
28
|
-
before do
|
29
|
-
glossary.create
|
30
|
-
end
|
31
|
-
|
32
|
-
# <glossary name>.source-language.target_language.yml というファイル名で用語集が作成されること
|
33
|
-
it 'specified glossary should has created' do
|
34
|
-
File.exists?(glossary_path).should be_true
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
16
|
describe '#add' do
|
40
17
|
context 'with arguments show new bilingual pair' do
|
41
18
|
before do
|
@@ -70,16 +47,6 @@ module Logaling
|
|
70
47
|
term.should_not be_nil
|
71
48
|
end
|
72
49
|
end
|
73
|
-
|
74
|
-
context "when the glossary dir not found" do
|
75
|
-
before do
|
76
|
-
FileUtils.remove_entry_secure(File.join(LOGALING_HOME, 'projects', 'spec'), true)
|
77
|
-
end
|
78
|
-
|
79
|
-
it {
|
80
|
-
-> { glossary.add("test", "テスト", "テスト") }.should raise_error(Logaling::CommandFailed)
|
81
|
-
}
|
82
|
-
end
|
83
50
|
end
|
84
51
|
|
85
52
|
describe '#update' do
|
@@ -121,21 +88,14 @@ module Logaling
|
|
121
88
|
describe '#lookup' do
|
122
89
|
before do
|
123
90
|
glossary.add("user", "ユーザ", "ユーザーではない")
|
91
|
+
glossary.index
|
124
92
|
end
|
125
93
|
|
126
94
|
context 'with arguments show existing bilingual pair' do
|
127
|
-
|
128
|
-
glossary.index
|
129
|
-
stdout = capture(:stdout) {glossary.lookup("user")}
|
130
|
-
stdout.should == <<-EOM
|
95
|
+
subject {glossary.lookup("user")}
|
131
96
|
|
132
|
-
|
133
|
-
|
134
|
-
user
|
135
|
-
ユーザ
|
136
|
-
note:ユーザーではない
|
137
|
-
glossary:spec
|
138
|
-
EOM
|
97
|
+
it 'succeed at find by term' do
|
98
|
+
should be_include({:name=>"spec", :source_language=>"en", :target_language=>"ja", :source_term=>"user", :target_term=>"ユーザ", :note=>"ユーザーではない"})
|
139
99
|
end
|
140
100
|
end
|
141
101
|
|
@@ -149,23 +109,10 @@ lookup word : user
|
|
149
109
|
glossary.index
|
150
110
|
end
|
151
111
|
|
152
|
-
|
153
|
-
glossary.index
|
154
|
-
stdout = capture(:stdout) {glossary.lookup("user")}
|
155
|
-
stdout.should == <<-EOM
|
112
|
+
subject {glossary.lookup("user")}
|
156
113
|
|
157
|
-
|
158
|
-
|
159
|
-
user
|
160
|
-
ユーザ
|
161
|
-
note:ユーザーではない
|
162
|
-
glossary:spec
|
163
|
-
|
164
|
-
user
|
165
|
-
ユーザー
|
166
|
-
note:
|
167
|
-
glossary:spec
|
168
|
-
EOM
|
114
|
+
it 'succeed at find by term' do
|
115
|
+
should be_include({:name=>"spec", :source_language=>"en", :target_language=>"ja", :source_term=>"user", :target_term=>"ユーザー", :note=>nil})
|
169
116
|
end
|
170
117
|
|
171
118
|
after do
|
@@ -191,7 +138,7 @@ lookup word : user
|
|
191
138
|
subject { logaling_db.open(db_home, "utf8"){|db| logaling_db.lookup("spec")} }
|
192
139
|
|
193
140
|
it 'glossaries should be indexed' do
|
194
|
-
should
|
141
|
+
should be_include({:name=>"spec", :source_language=>"en", :target_language=>"ja", :source_term=>"spec", :target_term=>"スペック", :note=>"備考"})
|
195
142
|
end
|
196
143
|
|
197
144
|
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.5
|
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-30 00:00:00.000000000Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: thor
|
20
|
-
requirement: &
|
20
|
+
requirement: &2153858740 !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: *2153858740
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: bundler
|
31
|
-
requirement: &
|
31
|
+
requirement: &2153857740 !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: *2153857740
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: rake
|
42
|
-
requirement: &
|
42
|
+
requirement: &2153837940 !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: *2153837940
|
51
51
|
- !ruby/object:Gem::Dependency
|
52
52
|
name: rspec
|
53
|
-
requirement: &
|
53
|
+
requirement: &2153837240 !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: *2153837240
|
62
62
|
description: A command line interface for logaling.
|
63
63
|
email:
|
64
64
|
- koji.shimada@enishi-tech.com
|
@@ -82,7 +82,6 @@ files:
|
|
82
82
|
- lib/logaling/glossary_db.rb
|
83
83
|
- logaling-command.gemspec
|
84
84
|
- spec/logaling/command_spec.rb
|
85
|
-
- spec/logaling/glossary_db_spec.rb
|
86
85
|
- spec/logaling/glossary_spec.rb
|
87
86
|
- spec/spec_helper.rb
|
88
87
|
homepage: http://logaling.github.com/
|
@@ -111,6 +110,5 @@ specification_version: 3
|
|
111
110
|
summary: A command line interface for logaling.
|
112
111
|
test_files:
|
113
112
|
- spec/logaling/command_spec.rb
|
114
|
-
- spec/logaling/glossary_db_spec.rb
|
115
113
|
- spec/logaling/glossary_spec.rb
|
116
114
|
- spec/spec_helper.rb
|
@@ -1,75 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
require File.join(File.dirname(__FILE__), "..", "spec_helper")
|
3
|
-
|
4
|
-
describe Logaling::GlossaryDB do
|
5
|
-
let(:glossary_path) { Logaling::Glossary.build_path('spec', 'en', 'ja') }
|
6
|
-
let(:tsv_path) { File.join(File.dirname(glossary_path), 'spec.en.ja.tsv') }
|
7
|
-
let(:csv_path) { File.join(File.dirname(glossary_path), 'spec.en.ja.csv') }
|
8
|
-
let(:glossary_db) { Logaling::GlossaryDB.new }
|
9
|
-
|
10
|
-
before do
|
11
|
-
FileUtils.remove_entry_secure(File.join(LOGALING_HOME, 'projects', 'spec'), true)
|
12
|
-
FileUtils.mkdir_p(File.dirname(glossary_path))
|
13
|
-
end
|
14
|
-
|
15
|
-
describe '#load_glossary' do
|
16
|
-
context 'with argument yml' do
|
17
|
-
before do
|
18
|
-
FileUtils.touch(glossary_path)
|
19
|
-
term = [{'source_term' => 'spec', 'target_term' => 'スペック', 'note' => 'スペック'}]
|
20
|
-
File.open(glossary_path, "w"){|f| f.puts(term.to_yaml)}
|
21
|
-
end
|
22
|
-
|
23
|
-
subject { glossary_db.load_glossary(glossary_path) }
|
24
|
-
|
25
|
-
it 'should return formatted glossary' do
|
26
|
-
should == [{'source_term' => 'spec', 'target_term' => 'スペック', 'note' => 'スペック'}]
|
27
|
-
end
|
28
|
-
|
29
|
-
after do
|
30
|
-
FileUtils.remove_entry_secure(glossary_path, true)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
context 'with argument tsv' do
|
35
|
-
before do
|
36
|
-
FileUtils.touch(tsv_path)
|
37
|
-
term = "spec\tスペック"
|
38
|
-
File.open(tsv_path, "w"){|f| f.puts(term)}
|
39
|
-
end
|
40
|
-
|
41
|
-
subject { glossary_db.load_glossary(tsv_path) }
|
42
|
-
|
43
|
-
it 'should return formatted glossary' do
|
44
|
-
should == [{'source_term' => 'spec', 'target_term' => 'スペック', 'note' => ''}]
|
45
|
-
end
|
46
|
-
|
47
|
-
after do
|
48
|
-
FileUtils.remove_entry_secure(tsv_path, true)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
context 'with argument csv' do
|
53
|
-
before do
|
54
|
-
FileUtils.touch(csv_path)
|
55
|
-
term = "spec,スペック,備考\ntest\n"
|
56
|
-
File.open(csv_path, "w"){|f| f.puts(term)}
|
57
|
-
end
|
58
|
-
|
59
|
-
subject { glossary_db.load_glossary(csv_path) }
|
60
|
-
|
61
|
-
it 'should return formatted glossary' do
|
62
|
-
should == [{'source_term' => 'spec', 'target_term' => 'スペック', 'note' => ''}]
|
63
|
-
end
|
64
|
-
|
65
|
-
after do
|
66
|
-
FileUtils.remove_entry_secure(csv_path, true)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
after do
|
72
|
-
FileUtils.remove_entry_secure(File.join(LOGALING_HOME, 'projects', 'spec'), true)
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|