[logaling-commit] logaling/logaling-command [add-export-command] get glossary data from db for export command

Back to archive index

null+****@clear***** null+****@clear*****
Tue May 22 19:08:00 JST 2012


SUZUKI Miho	2012-05-22 19:08:00 +0900 (Tue, 22 May 2012)

  New Revision: 420d29085530ca7255bdd1b95e6c577ae88a4f19

  Log:
    get glossary data from db for export command

  Modified files:
    lib/logaling/glossary_db.rb
    lib/logaling/repository.rb
    spec/logaling/repository_spec.rb

  Modified: lib/logaling/glossary_db.rb (+16 -0)
===================================================================
--- lib/logaling/glossary_db.rb    2012-05-22 11:01:40 +0900 (53a8395)
+++ lib/logaling/glossary_db.rb    2012-05-22 19:08:00 +0900 (58de8d5)
@@ -155,6 +155,22 @@ module Logaling
       records_selected.expression.close if records_selected
     end
 
+    def export(glossary_source)
+      records_selected = Groonga["translations"].select do |record|
+        conditions = [record.glossary == glossary_source.glossary]
+        conditions << (record.source_language =~ glossary_source.source_language) if glossary_source.source_language
+        conditions << (record.target_language =~ glossary_source.target_language) if glossary_source.target_language
+        conditions
+      end
+      records = records_selected.sort([
+        {:key=>"source_term", :order=>'ascending'},
+        {:key=>"target_term", :order=>'ascending'}])
+
+      struct_result(records)
+    ensure
+      records_selected.expression.close if records_selected
+    end
+
     def translation_list(glossary_source)
       records_raw = Groonga["translations"].select do |record|
         [

  Modified: lib/logaling/repository.rb (+10 -0)
===================================================================
--- lib/logaling/repository.rb    2012-05-22 11:01:40 +0900 (ae0de70)
+++ lib/logaling/repository.rb    2012-05-22 19:08:00 +0900 (7568325)
@@ -67,6 +67,16 @@ module Logaling
       raise Logaling::CommandFailed, "Failed import_tmx #{glossary.class.name} to #{cache_path}."
     end
 
+    def export(glossary_source)
+      raise Logaling::GlossaryDBNotFound unless File.exist?(logaling_db_home)
+
+      terms = []
+      Logaling::GlossaryDB.open(logaling_db_home, "utf8") do |db|
+        terms = db.export(glossary_source)
+      end
+      terms
+    end
+
     def lookup(source_term, glossary_source, dictionary=false)
       raise Logaling::GlossaryDBNotFound unless File.exist?(logaling_db_home)
 

  Modified: spec/logaling/repository_spec.rb (+52 -0)
===================================================================
--- spec/logaling/repository_spec.rb    2012-05-22 11:01:40 +0900 (ecd6b25)
+++ spec/logaling/repository_spec.rb    2012-05-22 19:08:00 +0900 (6252114)
@@ -32,6 +32,58 @@ module Logaling
       FileUtils.mkdir_p(File.dirname(glossary_path))
     end
 
+    describe '#export' do
+      before do
+      end
+
+      context 'with one or more term exists in glossary' do
+        before do
+          glossary.add("test-export", "エクスポートテスト用", "テスト用語")
+          File.stub!(:mtime).and_return(Time.now - 1)
+          repository.index
+          @terms = repository.export(glossary)
+        end
+
+        it 'succeed at get export terms' do
+          @terms.size.should == 1
+        end
+      end
+
+      context 'with no term exists in glossary' do
+        before do
+          File.stub!(:mtime).and_return(Time.now - 1)
+          repository.index
+          @terms = repository.export(glossary)
+        end
+
+        it 'returns empty term' do
+          @terms.size.should == 0
+        end
+      end
+
+      context 'when csv file as glosary exists' do
+        let(:csv_path) { File.join(File.dirname(glossary_path), "spec.en.ja.csv") }
+
+        before do
+          FileUtils.mkdir_p(File.dirname(glossary_path))
+          FileUtils.touch(csv_path)
+          File.open(csv_path, "w"){|f| f.puts "test_logaling,テスト"}
+          glossary.add("test-export", "エクスポートテスト用", "テスト用語")
+          File.stub!(:mtime).and_return(Time.now - 1)
+          repository.index
+          @terms = repository.export(glossary)
+        end
+
+        it 'returns merged glossary csv and yaml' do
+          @terms.size.should == 2
+        end
+
+        after do
+          FileUtils.remove_entry_secure(csv_path, true)
+        end
+      end
+    end
+
     describe '#lookup' do
       context 'with arguments show existing bilingual pair' do
         before do




More information about the logaling-commit mailing list
Back to archive index