logaling-command 0.1.5 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES CHANGED
@@ -1,3 +1,9 @@
1
+ = 0.1.6 / 2012-06-29
2
+
3
+ * Ruby1.9.3-p194 で loga add できなくなっていた不具合を修正しました。
4
+
5
+ * loga lookup での JSON または CSV 形式出力時に用語集名を出力するようにしました。
6
+
1
7
  = 0.1.5 / 2012-05-02
2
8
 
3
9
  * TMX形式の用語集をインポートできるようにしました。
@@ -19,7 +19,9 @@ require 'thor'
19
19
  require 'rainbow'
20
20
  require 'pathname'
21
21
  require "logaling/repository"
22
+ require "logaling/project"
22
23
  require "logaling/glossary"
24
+ require "logaling/glossary_source"
23
25
  require "logaling/config"
24
26
 
25
27
  module Logaling::Command
@@ -33,10 +35,10 @@ module Logaling::Command
33
35
  @repository = Logaling::Repository.new(@logaling_home)
34
36
  @config = Logaling::Config.load(@repository.config_path)
35
37
 
36
- @dotfile_path = options["logaling-config"] ? options["logaling-config"] : find_dotfile
38
+ @dotfile_path = options["logaling-config"] ? options["logaling-config"] : Logaling::Project.find_dotfile
37
39
  @project_config_path = File.join(@dotfile_path, 'config')
38
40
  @config.load(@project_config_path)
39
- rescue Logaling::CommandFailed # can't find .logaling
41
+ rescue Logaling::ProjectNotFound => e
40
42
  @project_config_path = nil
41
43
  ensure
42
44
  @config.merge!(options)
@@ -71,7 +73,7 @@ module Logaling::Command
71
73
  config.save(File.join(logaling_config_path, "config"))
72
74
 
73
75
  unless options["no-register"]
74
- @dotfile_path = options["logaling-config"] ? options["logaling-config"] : find_dotfile
76
+ @dotfile_path = options["logaling-config"] ? options["logaling-config"] : Logaling::Project.find_dotfile
75
77
  @project_config_path = File.join(@dotfile_path, 'config')
76
78
  @config.load(@project_config_path)
77
79
  register_and_index
@@ -88,13 +90,17 @@ module Logaling::Command
88
90
  require "logaling/external_glossary"
89
91
  Logaling::ExternalGlossary.load
90
92
  if options["list"]
91
- Logaling::ExternalGlossary.list.each {|glossary| say "#{glossary.name.bright} : #{glossary.description}" }
93
+ Logaling::ExternalGlossary.list.each {|glossary_source| say "#{glossary_source.name.bright} : #{glossary_source.description}" }
92
94
  else
93
95
  case external_glossary
94
96
  when 'tmx'
95
- glossary_info = initialize_import_parameter(args)
96
- check_import_parameter(glossary_info)
97
- @repository.import_tmx(Logaling::ExternalGlossary.get(external_glossary), glossary_info)
97
+ check_import_parameter(args)
98
+ url = args[1]
99
+ if url && !URI.parse(url).host
100
+ url = File.expand_path(url)
101
+ end
102
+ glossary = Logaling::Glossary.new(args[0], args[2], args[3])
103
+ @repository.import_tmx(Logaling::ExternalGlossary.get(external_glossary), glossary, url)
98
104
  @repository.index
99
105
  else
100
106
  @repository.import(Logaling::ExternalGlossary.get(external_glossary))
@@ -129,12 +135,13 @@ module Logaling::Command
129
135
  raise Logaling::CommandFailed, "Can't use '-g <glossary>' option." if options["glossary"]
130
136
  @config.check_required_option("glossary" => "Do 'loga unregister' at project directory.")
131
137
 
132
- @repository.unregister(@config.glossary)
138
+ project = @repository.find_project(@config.glossary)
139
+ @repository.unregister(project)
133
140
  @repository.index
134
141
  say "#{@config.glossary} is now unregistered."
135
142
  rescue Logaling::CommandFailed => e
136
143
  say e.message
137
- rescue Logaling::GlossaryNotFound => e
144
+ rescue Logaling::ProjectNotFound => e
138
145
  say "#{@config.glossary} is not yet registered."
139
146
  end
140
147
 
@@ -167,9 +174,10 @@ module Logaling::Command
167
174
  }
168
175
  @config.check_required_option(required_options)
169
176
  check_logaling_home_exists
170
- @repository.index
171
-
172
- if @repository.bilingual_pair_exists?(source_term, target_term, @config.glossary)
177
+ project = @repository.find_project(@config.glossary)
178
+ raise Logaling::ProjectNotFound unless project
179
+ glossary = project.find_glossary(@config.source_language, @config.target_language)
180
+ if glossary.bilingual_pair_exists?(source_term, target_term)
173
181
  raise Logaling::TermError, "term '#{source_term}: #{target_term}' already exists in '#{@config.glossary}'"
174
182
  end
175
183
 
@@ -178,6 +186,9 @@ module Logaling::Command
178
186
  say e.message
179
187
  rescue Logaling::GlossaryNotFound => e
180
188
  say "Try 'loga new or register' first."
189
+ rescue Logaling::ProjectNotFound
190
+ say "glossary <#{@config.glossary}> not found."
191
+ say "Try 'loga list' and confirm glossary name."
181
192
  end
182
193
 
183
194
  desc 'delete [SOURCE TERM] [TARGET TERM(optional)] [--force(optional)]', 'Delete term.'
@@ -190,6 +201,9 @@ module Logaling::Command
190
201
  }
191
202
  @config.check_required_option(required_options)
192
203
  check_logaling_home_exists
204
+ project = @repository.find_project(@config.glossary)
205
+ raise Logaling::ProjectNotFound unless project
206
+ glossary = project.find_glossary(@config.source_language, @config.target_language)
193
207
 
194
208
  if target_term
195
209
  glossary.delete(source_term, target_term)
@@ -200,6 +214,9 @@ module Logaling::Command
200
214
  say e.message
201
215
  rescue Logaling::GlossaryNotFound => e
202
216
  say "Try 'loga new or register' first."
217
+ rescue Logaling::ProjectNotFound
218
+ say "glossary <#{@config.glossary}> not found."
219
+ say "Try 'loga list' and confirm glossary name."
203
220
  end
204
221
 
205
222
  desc 'update [SOURCE TERM] [TARGET TERM] [NEW TARGET TERM] [NOTE(optional)]', 'Update term.'
@@ -211,9 +228,10 @@ module Logaling::Command
211
228
  }
212
229
  @config.check_required_option(required_options)
213
230
  check_logaling_home_exists
214
- @repository.index
215
-
216
- if @repository.bilingual_pair_exists_and_has_same_note?(source_term, new_target_term, note, @config.glossary)
231
+ project = @repository.find_project(@config.glossary)
232
+ raise Logaling::ProjectNotFound unless project
233
+ glossary = project.find_glossary(@config.source_language, @config.target_language)
234
+ if glossary.bilingual_pair_exists?(source_term, new_target_term, note)
217
235
  raise Logaling::TermError, "term '#{source_term}: #{new_target_term}' already exists in '#{@config.glossary}'"
218
236
  end
219
237
 
@@ -222,6 +240,9 @@ module Logaling::Command
222
240
  say e.message
223
241
  rescue Logaling::GlossaryNotFound => e
224
242
  say "Try 'loga new or register' first."
243
+ rescue Logaling::ProjectNotFound
244
+ say "glossary <#{@config.glossary}> not found."
245
+ say "Try 'loga list' and confirm glossary name."
225
246
  end
226
247
 
227
248
  desc 'lookup [TERM]', 'Lookup terms.'
@@ -232,27 +253,39 @@ module Logaling::Command
232
253
  def lookup(source_term)
233
254
  check_logaling_home_exists
234
255
  @repository.index
256
+ if @config.glossary
257
+ project = @repository.find_project(@config.glossary)
258
+ raise Logaling::ProjectNotFound unless project
259
+ glossary = project.find_glossary(@config.source_language, @config.target_language)
260
+ else
261
+ glossary = nil
262
+ end
235
263
  terms = @repository.lookup(source_term, glossary, options["dictionary"])
236
264
  unless terms.empty?
237
265
  max_str_size = terms.map{|term| term[:source_term].size}.sort.last
238
266
  run_pager
239
267
  terms.each_with_index do |term, i|
240
- source_string = extract_keyword_and_coloring(term[:snipped_source_term], term[:source_term])
241
- target_string = extract_keyword_and_coloring(term[:snipped_target_term], term[:target_term])
242
- note = term[:note].to_s unless term[:note].empty?
243
- glossary_name = ""
244
- if @repository.glossary_counts > 1
245
- glossary_name = term[:glossary_name]
246
- if term[:glossary_name] == @config.glossary
247
- glossary_name = glossary_name.foreground(:white).background(:green)
248
- end
268
+ case options["output"]
269
+ when "terminal"
270
+ term_renderer = Logaling::Command::Renderers::TermDefaultRenderer.new(term, @repository, @config, options)
271
+ term_renderer.max_str_size = max_str_size
272
+ term_renderer.render($stdout)
273
+ when "csv"
274
+ term_renderer = Logaling::Command::Renderers::TermCsvRenderer.new(term, @repository, @config, options)
275
+ term_renderer.render($stdout)
276
+ when "json"
277
+ term_renderer = Logaling::Command::Renderers::TermJsonRenderer.new(term, @repository, @config, options)
278
+ term_renderer.index = i
279
+ term_renderer.last_index = terms.length
280
+ term_renderer.render($stdout)
249
281
  end
250
- printer(source_string, target_string, note,
251
- glossary_name, max_str_size, i, terms.length)
252
282
  end
253
283
  else
254
284
  "source-term <#{source_term}> not found"
255
285
  end
286
+ rescue Logaling::ProjectNotFound
287
+ say "glossary <#{@config.glossary}> not found."
288
+ say "Try 'loga list' and confirm glossary name."
256
289
  rescue Logaling::CommandFailed, Logaling::TermError => e
257
290
  say e.message
258
291
  end
@@ -272,8 +305,10 @@ module Logaling::Command
272
305
  }
273
306
  @config.check_required_option(required_options)
274
307
  check_logaling_home_exists
275
- @repository.index
276
- terms = @repository.show_glossary(glossary)
308
+ project = @repository.find_project(@config.glossary)
309
+ raise Logaling::ProjectNotFound unless project
310
+ glossary = project.find_glossary(@config.source_language, @config.target_language)
311
+ terms = glossary.terms
277
312
  unless terms.empty?
278
313
  run_pager
279
314
  max_str_size = terms.map{|term| term[:source_term].size}.sort.last
@@ -285,9 +320,11 @@ module Logaling::Command
285
320
  else
286
321
  "glossary <#{@config.glossary}> not found"
287
322
  end
288
-
289
323
  rescue Logaling::CommandFailed, Logaling::GlossaryDBNotFound => e
290
324
  say e.message
325
+ rescue Logaling::ProjectNotFound
326
+ say "glossary <#{@config.glossary}> not found."
327
+ say "Try 'loga list' and confirm glossary name."
291
328
  end
292
329
 
293
330
  desc 'list', 'Show glossary list.'
@@ -295,52 +332,25 @@ module Logaling::Command
295
332
  def list
296
333
  check_logaling_home_exists
297
334
  @repository.index
298
- glossaries = @repository.list
299
- unless glossaries.empty?
335
+ projects = @repository.projects
336
+ unless projects.empty?
300
337
  run_pager
301
- glossaries.each do |glossary|
302
- printf(" %s\n", glossary)
338
+ projects.each do |project|
339
+ printf(" %s\n", project.name)
303
340
  end
304
341
  else
305
342
  "There is no registered glossary."
306
343
  end
307
-
308
344
  rescue Logaling::CommandFailed, Logaling::GlossaryDBNotFound => e
309
345
  say e.message
310
346
  end
311
347
 
312
348
  private
313
- def windows?
314
- RUBY_PLATFORM =~ /win32|mingw32/i
315
- end
316
-
317
- def glossary
318
- @glossary ||= Logaling::Glossary.new(@config.glossary, @config.source_language, @config.target_language, @logaling_home)
319
- end
320
-
321
349
  def error(msg)
322
350
  STDERR.puts(msg)
323
351
  exit 1
324
352
  end
325
353
 
326
- def find_dotfile
327
- dir = Dir.pwd
328
- searched_path = []
329
- loop do
330
- path = File.join(dir, '.logaling')
331
- if File.exist?(path)
332
- return path
333
- else
334
- unless Pathname.new(dir).root?
335
- searched_path << dir
336
- dir = File.dirname(dir)
337
- else
338
- raise(Logaling::CommandFailed, "Can't found .logaling in #{searched_path}")
339
- end
340
- end
341
- end
342
- end
343
-
344
354
  def logaling_config_path
345
355
  if options["logaling-config"]
346
356
  options["logaling-config"]
@@ -349,42 +359,8 @@ module Logaling::Command
349
359
  end
350
360
  end
351
361
 
352
- # http://nex-3.com/posts/73-git-style-automatic-paging-in-ruby
353
362
  def run_pager
354
- return if options["no-pager"]
355
- return if windows?
356
- return unless STDOUT.tty?
357
-
358
- read, write = IO.pipe
359
-
360
- unless Kernel.fork # Child process
361
- STDOUT.reopen(write)
362
- STDERR.reopen(write) if STDERR.tty?
363
- read.close
364
- write.close
365
- return
366
- end
367
-
368
- # Parent process, become pager
369
- STDIN.reopen(read)
370
- read.close
371
- write.close
372
-
373
- ENV['LESS'] = 'FSRX' # Don't page if the input is short enough
374
-
375
- # wait until we have input before we start the pager
376
- Kernel.select [STDIN]
377
- pager = ENV['PAGER'] || 'less'
378
- exec pager rescue exec "/bin/sh", "-c", pager
379
- end
380
-
381
- def extract_keyword_and_coloring(snipped_term, term)
382
- return term if snipped_term.empty? || options["no-color"]
383
- display_string = snipped_term.map do |word|
384
- word.is_a?(Hash) ? word[:keyword].bright : word
385
- end
386
- display_string = display_string.join
387
- display_string
363
+ Pager.run unless options["no-pager"]
388
364
  end
389
365
 
390
366
  def check_logaling_home_exists
@@ -393,52 +369,12 @@ module Logaling::Command
393
369
  end
394
370
  end
395
371
 
396
- def printer(source_string, target_string, note=nil,
397
- glossary_name, max_str_size, i, last)
398
- case options["output"]
399
- when "terminal"
400
- unless note
401
- format = target_string + "\t" + glossary_name
402
- else
403
- format = target_string + "\t# " + note + "\t" + glossary_name
404
- end
405
- printf(" %-#{max_str_size+10}s %s\n", source_string, format)
406
- when "csv"
407
- items = [source_string, target_string, note,
408
- @config.source_language, @config.target_language]
409
- print(CSV.generate {|csv| csv << items})
410
- when "json"
411
- puts("[") if i == 0
412
- puts(",") if i > 0
413
- record = {
414
- :source => source_string, :target => target_string, :note => note,
415
- :source_language => @config.source_language,
416
- :target_language => @config.target_language
417
- }
418
- print JSON.pretty_generate(record)
419
- puts("\n]") if i == last-1
420
- end
421
- end
422
-
423
- def check_import_parameter(glossary_info)
424
- unless glossary_info[:name] && glossary_info[:url]
372
+ def check_import_parameter(args)
373
+ unless args[0] && args[1]
425
374
  raise Logaling::CommandFailed, "Do 'loga import tmx <glossary name> <url or path>'"
426
375
  end
427
376
  end
428
377
 
429
- def initialize_import_parameter(arr)
430
- glossary_info = {}
431
- url = arr[1]
432
- if url && !URI.parse(url).host
433
- url = File::expand_path(url)
434
- end
435
- glossary_info[:name] = arr[0]
436
- glossary_info[:url] = url
437
- glossary_info[:source_language] = arr[2]
438
- glossary_info[:target_language] = arr[3]
439
- glossary_info
440
- end
441
-
442
378
  def register_and_index
443
379
  @repository.register(@dotfile_path, @config.glossary)
444
380
  @repository.index
@@ -0,0 +1,36 @@
1
+ module Logaling::Command
2
+ # http://nex-3.com/posts/73-git-style-automatic-paging-in-ruby
3
+ module Pager
4
+ def self.run
5
+ return if windows?
6
+ return unless STDOUT.tty?
7
+
8
+ read, write = IO.pipe
9
+
10
+ unless Kernel.fork # Child process
11
+ STDOUT.reopen(write)
12
+ STDERR.reopen(write) if STDERR.tty?
13
+ read.close
14
+ write.close
15
+ return
16
+ end
17
+
18
+ # Parent process, become pager
19
+ STDIN.reopen(read)
20
+ read.close
21
+ write.close
22
+
23
+ ENV['LESS'] = 'FSRX' # Don't page if the input is short enough
24
+
25
+ # wait until we have input before we start the pager
26
+ Kernel.select [STDIN]
27
+ pager = ENV['PAGER'] || 'less'
28
+ exec pager rescue exec "/bin/sh", "-c", pager
29
+ end
30
+
31
+ private
32
+ def self.windows?
33
+ RUBY_PLATFORM =~ /win32|mingw32/i
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,134 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2012 Koji SHIMADA <koji.shimada@enishi-tech.com>
4
+ #
5
+ # This program is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU General Public License as published by
7
+ # the Free Software Foundation, either version 3 of the License, or
8
+ # (at your option) any later version.
9
+ #
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU General Public License
16
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+
18
+ module Logaling::Command
19
+ module Renderers
20
+ class TermRenderer
21
+ def initialize(term, repository, config, options)
22
+ @term = term
23
+ @repository = repository
24
+ @config = config
25
+ @options = options
26
+ end
27
+
28
+ def render(output); end
29
+
30
+ def glossary_name
31
+ @term[:glossary_name]
32
+ end
33
+
34
+ def note
35
+ @term[:note].to_s unless @term[:note].empty?
36
+ end
37
+
38
+ def source_term
39
+ extract_keyword_and_coloring(@term[:snipped_source_term], @term[:source_term])
40
+ end
41
+
42
+ def target_term
43
+ extract_keyword_and_coloring(@term[:snipped_target_term], @term[:target_term])
44
+ end
45
+
46
+ private
47
+ def extract_keyword_and_coloring(snipped_term, term)
48
+ return term if @options["no-color"]
49
+ build_term_string_from_snippets(snipped_term)
50
+ end
51
+
52
+ def build_term_string_from_snippets(snippets)
53
+ snippets.map{|snippet| decorate_snippet(snippet) }.join
54
+ end
55
+
56
+ def decorate_snippet(snippet)
57
+ keyword?(snippet) ? snippet[:keyword].bright : snippet
58
+ end
59
+
60
+ def keyword?(snippet)
61
+ snippet.is_a?(Hash)
62
+ end
63
+ end
64
+
65
+ class TermDefaultRenderer < TermRenderer
66
+ attr_accessor :max_str_size
67
+
68
+ def initialize(term, repository, config, options)
69
+ super
70
+ @max_str_size = 0
71
+ end
72
+
73
+ def render(output)
74
+ format = [target_term, note, glossary_name].compact.join("\t")
75
+ output.printf(" %-#{@max_str_size+10}s %s\n", source_term, format)
76
+ end
77
+
78
+ def glossary_name
79
+ if @repository.glossary_counts > 1
80
+ if @term[:glossary_name] == @config.glossary
81
+ @term[:glossary_name].foreground(:white).background(:green)
82
+ else
83
+ @term[:glossary_name]
84
+ end
85
+ else
86
+ ""
87
+ end
88
+ end
89
+
90
+ def note
91
+ note_string = super
92
+ "# #{note_string}" if note_string
93
+ end
94
+ end
95
+
96
+ class TermCsvRenderer < TermRenderer
97
+ def render(output)
98
+ items = [source_term, target_term, note,
99
+ @config.source_language, @config.target_language, glossary_name]
100
+ output.print(CSV.generate {|csv| csv << items})
101
+ end
102
+ end
103
+
104
+ class TermJsonRenderer < TermRenderer
105
+ attr_accessor :index, :last_index
106
+
107
+ def initialize(term, repository, config, options)
108
+ super
109
+ @index = 0
110
+ @last_index = 0
111
+ end
112
+
113
+ def render(output)
114
+ first_line? ? output.puts("[") : output.puts(",")
115
+ record = {
116
+ :source => source_term, :target => target_term, :note => note,
117
+ :source_language => @config.source_language,
118
+ :target_language => @config.target_language,
119
+ :glossary => glossary_name
120
+ }
121
+ output.print JSON.pretty_generate(record)
122
+ output.puts("\n]") if last_line?
123
+ end
124
+
125
+ private
126
+ def first_line?
127
+ @index == 0
128
+ end
129
+ def last_line?
130
+ @index == @last_index-1
131
+ end
132
+ end
133
+ end
134
+ end
@@ -17,6 +17,6 @@
17
17
 
18
18
  module Logaling
19
19
  module Command
20
- VERSION = "0.1.5"
20
+ VERSION = "0.1.6"
21
21
  end
22
22
  end
@@ -17,3 +17,5 @@
17
17
 
18
18
  require "logaling/command/version"
19
19
  require "logaling/command/application"
20
+ require "logaling/command/pager"
21
+ require "logaling/command/renderers"
@@ -23,8 +23,8 @@ module Logaling
23
23
  output_format 'csv'
24
24
 
25
25
  private
26
- def convert_to_csv(csv, glossary_info)
27
- doc = ::Nokogiri::XML(open(glossary_info[:url], "r"))
26
+ def convert_to_csv(csv, glossary, url)
27
+ doc = ::Nokogiri::XML(open(url, "r"))
28
28
  tu_nodes = doc.xpath('//tmx/body/tu')
29
29
  tu_nodes.each do |tu|
30
30
  original = ""
@@ -33,12 +33,12 @@ module Logaling
33
33
  tu.children.each do |tuv|
34
34
  if tuv.name == "tuv"
35
35
  lang = convert_language_code_iso_639(tuv["lang"])
36
- if lang == glossary_info[:source_language]
36
+ if lang == glossary.source_language
37
37
  tuv.children.each do |child|
38
38
  original = child.text.strip if child.name == "seg"
39
39
  notes << child.text.strip if child.name == "note"
40
40
  end
41
- elsif lang == glossary_info[:target_language]
41
+ elsif lang == glossary.target_language
42
42
  tuv.children.each do |child|
43
43
  translation = child.text.strip if child.name == "seg"
44
44
  notes << child.text.strip if child.name == "note"
@@ -68,19 +68,19 @@ class Logaling::ExternalGlossary
68
68
  end
69
69
  end
70
70
 
71
- def import(glossary_info=nil)
72
- if glossary_info && glossary_info[:url]
73
- unless file_exists?(glossary_info[:url])
74
- raise Logaling::GlossaryNotFound, "Failed open url/path <#{glossary_info[:url]}>"
71
+ def import(glossary=nil, url=nil)
72
+ if glossary && url
73
+ unless file_exists?(url)
74
+ raise Logaling::GlossaryNotFound, "Failed open url/path <#{url}>"
75
75
  end
76
76
  end
77
- File.open(import_file_name(glossary_info), "w") do |output|
77
+ File.open(import_file_name(glossary), "w") do |output|
78
78
  output_format = self.class.output_format
79
79
  output_format = output_format.to_s if output_format.is_a?(Symbol)
80
80
  case output_format
81
81
  when "csv"
82
- if glossary_info
83
- convert_to_csv(CSV.new(output), glossary_info)
82
+ if glossary
83
+ convert_to_csv(CSV.new(output), glossary, url)
84
84
  else
85
85
  convert_to_csv(CSV.new(output))
86
86
  end
@@ -91,14 +91,14 @@ class Logaling::ExternalGlossary
91
91
  end
92
92
 
93
93
  private
94
- def import_file_name(glossary_info=nil)
95
- if glossary_info
96
- glossary_info[:name] ||= self.class.name
97
- glossary_info[:source_language] ||= self.class.source_language
98
- glossary_info[:target_language] ||= self.class.target_language
94
+ def import_file_name(glossary=nil)
95
+ if glossary
96
+ glossary.name ||= self.class.name
97
+ glossary.source_language ||= self.class.source_language
98
+ glossary.target_language ||= self.class.target_language
99
99
 
100
- [glossary_info[:name], glossary_info[:source_language],
101
- glossary_info[:target_language], self.class.output_format].join('.')
100
+ [glossary.name, glossary.source_language,
101
+ glossary.target_language, self.class.output_format].join('.')
102
102
  else
103
103
  [self.class.name, self.class.source_language,
104
104
  self.class.target_language, self.class.output_format].join('.')