[Groonga-commit] groonga/groonga-command at f9698ce [fix-travis-ci-error] Support load header

Back to archive index

Kouhei Sutou null+****@clear*****
Wed Jan 13 17:18:38 JST 2016


Kouhei Sutou	2012-11-27 23:12:26 +0900 (Tue, 27 Nov 2012)

  New Revision: f9698ce2998c404e81262da2516edc767cad3bf4
  https://github.com/groonga/groonga-command/commit/f9698ce2998c404e81262da2516edc767cad3bf4

  Message:
    Support load header

  Modified files:
    lib/groonga/command/parser.rb
    test/test-parser.rb

  Modified: lib/groonga/command/parser.rb (+26 -2)
===================================================================
--- lib/groonga/command/parser.rb    2012-11-27 23:05:55 +0900 (d72b2b7)
+++ lib/groonga/command/parser.rb    2012-11-27 23:12:26 +0900 (f74cd5a)
@@ -88,6 +88,9 @@ module Groonga
           parser.on_load_start do |command|
             yield(:on_load_start, command)
           end
+          parser.on_load_header do |command, header|
+            yield(:on_load_header, command, header)
+          end
           parser.on_load_value do |command, value|
             yield(:on_load_value, command, value)
           end
@@ -174,6 +177,16 @@ module Groonga
         end
       end
 
+      # @overload on_load_header(command)
+      # @overload on_load_header {|command| }
+      def on_load_header(*arguments, &block)
+        if block_given?
+          @on_load_header_hook = block
+        else
+          @on_load_header_hook.call(*arguments) if @on_load_header_hook
+        end
+      end
+
       # @overload on_load_value(command)
       # @overload on_load_value {|command| }
       def on_load_value(*arguments, &block)
@@ -266,8 +279,14 @@ module Groonga
             @command.original_source << spaces << start_json
             @buffer = rest
             @json_parser = Yajl::Parser.new
-            @json_parser.on_parse_complete = lambda do |value|
-              on_load_value(@command, value)
+            @json_first_completed = true
+            @json_parser.on_parse_complete = lambda do |object|
+              if object.is_a?(Array) and @json_first_completed
+                on_load_header(@command, object)
+              else
+                on_load_value(@command, object)
+              end
+              @json_first_completed = false
               @load_value_completed = true
             end
             @in_load_values = true
@@ -317,6 +336,10 @@ module Groonga
           on_load_start(@command)
           if @command[:values]
             values = Yajl::Parser.parse(@command[:values])
+            if values.first.is_a?(Array)
+              header = values.shift
+              on_load_header(@command, header)
+            end
             values.each do |value|
               on_load_value(@command, value)
             end
@@ -388,6 +411,7 @@ module Groonga
       def initialize_hooks
         @on_command_hook = nil
         @on_load_start_hook = nil
+        @on_load_header_hook = nil
         @on_load_value_hook = nil
         @on_load_complete_hook = nil
       end

  Modified: test/test-parser.rb (+19 -3)
===================================================================
--- test/test-parser.rb    2012-11-27 23:05:55 +0900 (3b75eb5)
+++ test/test-parser.rb    2012-11-27 23:12:26 +0900 (53f32f1)
@@ -116,6 +116,9 @@ class ParserTest < Test::Unit::TestCase
           @parser.on_load_start do |command|
             @events << [:load_start, command.original_source.dup]
           end
+          @parser.on_load_header do |command, header|
+            @events << [:load_header, command.original_source.dup, header]
+          end
           @parser.on_load_value do |command, value|
             @events << [:load_value, command.original_source.dup, value]
           end
@@ -124,7 +127,7 @@ class ParserTest < Test::Unit::TestCase
           end
         end
 
-        def test_inline
+        def test_inline_bracket
           command_line = "load --values '[{\"_key\": 1}]' --table IDs"
           @parser << command_line
           assert_equal([], @events)
@@ -137,6 +140,20 @@ class ParserTest < Test::Unit::TestCase
                        @events)
         end
 
+        def test_inline_brace
+          command_line = "load --values '[[\"_key\"], [1]]' --table IDs"
+          @parser << command_line
+          assert_equal([], @events)
+          @parser << "\n"
+          assert_equal([
+                         [:load_start, command_line],
+                         [:load_header, command_line, ["_key"]],
+                         [:load_value, command_line, [1]],
+                         [:load_complete, command_line],
+                       ],
+                       @events)
+        end
+
         def test_bracket
           @parser << <<-EOC
 load --table Users
@@ -149,8 +166,7 @@ EOC
           expected_events << [:load_start, <<-EOC.chomp]
 load --table Users
 EOC
-          # FIXME: It should be stored into command[:columns].
-          expected_events << [:load_value, <<-EOC.chomp, ["_key", "name"]]
+          expected_events << [:load_header, <<-EOC.chomp, ["_key", "name"]]
 load --table Users
 [
 ["_key", "name"]
-------------- next part --------------
HTML����������������������������...
Download 



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