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����������������������������...Download