Kouhei Sutou
null+****@clear*****
Sun Mar 6 12:43:26 JST 2016
Kouhei Sutou 2016-03-06 12:43:26 +0900 (Sun, 06 Mar 2016) New Revision: aad61d3cf0893a91820753c9b2f44f88cf43ba36 https://github.com/ranguba/rroonga/commit/aad61d3cf0893a91820753c9b2f44f88cf43ba36 Message: Support method style function call in "#select" block Example: @shops.select do |record| record.location.geo_in_rectangle("35.7185,139.7912", "35.7065,139.8069") end It's Rubyish API what we're looking for! Modified files: lib/groonga/expression-builder.rb test/test-expression-builder.rb Modified: lib/groonga/expression-builder.rb (+22 -5) =================================================================== --- lib/groonga/expression-builder.rb 2016-03-06 00:12:16 +0900 (b99001f) +++ lib/groonga/expression-builder.rb 2016-03-06 12:43:26 +0900 (18928bf) @@ -282,14 +282,31 @@ module Groonga other end + def callable_object?(object) + return false unless object.respond_to?(:function_procedure?) + + object.function_procedure? + end + def method_missing(name, *args, &block) return super if block - return super unless args.empty? - if VALID_COLUMN_NAME_RE =~ name.to_s - RecordExpressionBuilder.new(@table, @name)["#{@column_name}.#{name}"] - else - super + + if args.empty? and VALID_COLUMN_NAME_RE =~ name.to_s + accessor_name = "#{@column_name}.#{name}" + accessor =****@table*****(accessor_name) + if accessor + return self.class.new(accessor, + :table => @table, + :column_name => accessor_name) + end + end + + object =****@table*****[name] + if callable_object?(object) + return CallExpressionBuilder.new(object, self, *args) end + + super end end Modified: test/test-expression-builder.rb (+10 -1) =================================================================== --- test/test-expression-builder.rb 2016-03-06 00:12:16 +0900 (17f7e00) +++ test/test-expression-builder.rb 2016-03-06 12:43:26 +0900 (b3b135b) @@ -555,7 +555,7 @@ EOC @shops.add("Taiyaki Sharaku", :location => "35.716969,139.794846") end - def test_search + def test_call_style result =****@shops***** do |record| record.call("geo_in_rectangle", record.location, @@ -565,6 +565,15 @@ EOC assert_equal(["Taiyaki Sharaku"], result.collect(&:_key)) end + + def test_method_style + result =****@shops***** do |record| + record.location.geo_in_rectangle("35.7185,139.7912", + "35.7065,139.8069") + end + assert_equal(["Taiyaki Sharaku"], + result.collect(&:_key)) + end end class IntegerTest < self -------------- next part -------------- HTML����������������������������... Descargar