Kouhei Sutou
null+****@clear*****
Wed Mar 23 23:32:33 JST 2016
Kouhei Sutou 2016-03-23 23:32:33 +0900 (Wed, 23 Mar 2016) New Revision: d9e61957897e4f82c54984875b1cfbdd0ed9d664 https://github.com/ranguba/rroonga/commit/d9e61957897e4f82c54984875b1cfbdd0ed9d664 Message: expression-builder: support nested array Modified files: lib/groonga/expression-builder.rb test/test-expression-builder.rb Modified: lib/groonga/expression-builder.rb (+4 -13) =================================================================== --- lib/groonga/expression-builder.rb 2016-03-07 08:49:00 +0900 (c8aac5c) +++ lib/groonga/expression-builder.rb 2016-03-23 23:32:33 +0900 (c4732d1) @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- -# # Copyright (C) 2015 Masafumi Yokoyama <yokoyama �� clear-code.com> # Copyright (C) 2009-2016 Kouhei Sutou <kou �� clear-code.com> # @@ -77,23 +75,16 @@ module Groonga builders << match(@query, default_parse_options) if @query if block_given? custom_builder = yield(self) - if custom_builder.is_a?(::Array) - builders.concat(custom_builder) - else - builders << custom_builder - end + builders << custom_builder + builders.flatten! end if builders.empty? expression.append_object(@table.context["all_records"]) expression.append_operation(Operation::CALL, 0) else - combined_builder = builders.inject(nil) do |previous, builder| - if previous.nil? - builder - else - previous & builder - end + combined_builder = builders.inject do |previous, builder| + previous & builder end combined_builder.build(expression, variable) end Modified: test/test-expression-builder.rb (+13 -0) =================================================================== --- test/test-expression-builder.rb 2016-03-07 08:49:00 +0900 (54a8a50) +++ test/test-expression-builder.rb 2016-03-23 23:32:33 +0900 (7bc961d) @@ -186,6 +186,19 @@ class ExpressionBuilderTest < Test::Unit::TestCase result.collect {|record| record.key.key}) end + def test_and_array_nested + result =****@users***** do |record| + conditions = [] + conditions << [(record.hp > 100)] + conditions << [] + conditions << [[[(record.hp < 200)]]] + conditions << [[]] + conditions + end + assert_equal(["gunyara-kun"], + result.collect {|record| record.key.key}) + end + def test_or result =****@users***** do |record| (record["hp"] == 150) | (record["hp"] > 150) -------------- next part -------------- HTML����������������������������...Download