[Groonga-commit] ranguba/groonga-client at b4a5176 [master] Add `in_values` method in select.rb

Back to archive index

HorimotoYasuhiro null+****@clear*****
Thu Apr 13 12:12:21 JST 2017


HorimotoYasuhiro	2017-04-13 12:12:21 +0900 (Thu, 13 Apr 2017)

  New Revision: b4a5176ace7d41774d250e8643e8c756007decb1
  https://github.com/ranguba/groonga-client/commit/b4a5176ace7d41774d250e8643e8c756007decb1

  Merged a7ad19d: Merge pull request #13 from komainu8/feature/add_in_values_method

  Message:
    Add `in_values` method in select.rb

  Modified files:
    lib/groonga/client/request/select.rb
    test/request/test-select.rb

  Modified: lib/groonga/client/request/select.rb (+39 -1)
===================================================================
--- lib/groonga/client/request/select.rb    2017-03-09 14:20:06 +0900 (f90180d)
+++ lib/groonga/client/request/select.rb    2017-04-13 12:12:21 +0900 (322d872)
@@ -78,7 +78,11 @@ module Groonga
         #      external should be escaped.
         #
         #   Adds a `#{expression % values}` condition.
-        def filter(expression_or_column_name, values_or_value=nil)
+        def filter(expression_or_column_name=nil, values_or_value=nil)
+          if expression_or_column_name.nil? and values_or_value.nil?
+            return Filter.new(self)
+          end
+ 
           if expression_or_column_name.is_a?(Symbol)
             parameter = FilterEqualParameter.new(expression_or_column_name,
                                                  values_or_value)
@@ -153,6 +157,22 @@ module Groonga
           parameters.key?(:offset) and parameters.key?(:limit)
         end
 
+        class Filter
+          def initialize(request)
+            @request = request
+          end
+
+          def in_values(column_name, *values)
+            add_parameter(FilterMerger,
+                          FilterInValuesParameters.new(column_name, *values))
+          end
+
+          private
+          def add_parameter(merger, parameter)
+            @request.__send__(:add_parameter, merger, parameter)
+          end
+        end
+
         class LabeledDrilldown
           def initialize(request, label)
             @request = request
@@ -396,6 +416,24 @@ module Groonga
         end
 
         # @private
+        class FilterInValuesParameters
+          include ScriptSyntaxValueEscapable
+          def initialize(column_name, *values)
+	    @column_name = column_name
+	    @values = values
+          end
+
+          def to_parameters
+            escaped_values = []
+            @values.each{|value|
+              escaped_values << escape_script_syntax_value(value)
+            }
+            {
+	      filter: "in_values(#{@column_name}, #{escaped_values.join(", ")})",
+            }
+          end
+        end
+
         class FilterEqualParameter
           include ScriptSyntaxValueEscapable
 

  Modified: test/request/test-select.rb (+22 -0)
===================================================================
--- test/request/test-select.rb    2017-03-09 14:20:06 +0900 (77801f2)
+++ test/request/test-select.rb    2017-04-13 12:12:21 +0900 (a20fd0a)
@@ -384,5 +384,27 @@ class TestRequestSelect < Test::Unit::TestCase
                      paginate(3, per_page: "29"))
       end
     end
+
+    sub_test_case("#in_values") do
+      def in_values(*args)
+        @request.filter.in_values(*args).to_parameters
+      end
+
+      test("numbers") do
+        assert_equal({
+                       :table => "posts",
+                       :filter => "in_values(ages, 2, 29)",
+                   },
+                   in_values("ages", 2, 29))
+      end
+
+      test("strings") do
+        assert_equal({
+                       :table => "posts",
+                       :filter => "in_values(tags, \"groonga\", \"have \\\"double\\\" quote\")",
+                   },
+                   in_values("tags", "groonga", "have \"double\" quote"))
+      end
+    end
   end
 end
-------------- next part --------------
HTML����������������������������...
下载 



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