Navigation Menu

Skip to content

Commit

Permalink
Remove needless FilterInValuesParameter
Browse files Browse the repository at this point in the history
in_values("column", ...) is deprecated. Use in_values(:column, ...)
instead.
  • Loading branch information
kou committed Apr 27, 2017
1 parent 4d08ec3 commit 8db9cc9
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 30 deletions.
51 changes: 24 additions & 27 deletions lib/groonga/client/request/select.rb
Expand Up @@ -308,34 +308,52 @@ def between(column_name, min, min_border, max, max_border)
add_parameter(FilterMerger, parameter)
end

# Adds a `in_values` condition then return a new `select`
# Adds a `in_values` condition then returns a new `select`
# request object.
#
# @example Multiple conditions
# request.
# filter.in_values("tags", "tag1", "tag2").
# filter.in_values(:tags, "tag1", "tag2").
# # -> --filter 'in_values(tags, "tag1", "tag2")'
# filter("user", "alice")
# # -> --filter '(in_values(tags, "tag1", "tag2")) && (user == "alice")'
#
# @example Ignore no values case
# request.
# filter.in_values("tags")
# filter.in_values(:tags)
# # -> --filter ''
#
# @see http://groonga.org/docs/reference/functions/in_values.html
# `in_values` function in the Groonga document
#
# @param column_name [String, Symbol] The target column name.
# @param column_name [Symbol] The target column name.
#
# @param values [Object] The column values that cover target
# column values.
#
# @return [Groonga::Client::Request::Select]
# The new request with the given condition.
def in_values(column_name, *values)
parameter = FilterInValuesParameter.new(column_name, *values)
add_parameter(FilterMerger, parameter)
return @request if values.empty?

# TODO: Accept not only column name but also literal as
# the first argument.
if column_name.is_a?(String)
message = "column name (the first argument) "
message << "of #{self.class}\##{__method__} "
message << "should be Symbol: #{column_name.inspect}: "
message << caller(1, 1)[0]
warn(message)
column_name = column_name.to_sym
end
expression_values = {column_name: column_name}
expression = "in_values(%{column_name}"
values.each_with_index do |value, i|
expression << ", %{value#{i}}"
expression_values[:"value#{i}"] = value
end
expression << ")"
@request.filter(expression, expression_values)
end

private
Expand Down Expand Up @@ -623,27 +641,6 @@ def to_parameters
end
end

# @private
class FilterInValuesParameter
include ScriptSyntaxValueEscapable

def initialize(column_name, *values)
@column_name = column_name
@values = values
end

def to_parameters
return {} if @values.empty?

escaped_values = @values.collect do |value|
escape_script_syntax_value(value)
end
{
filter: "in_values(#{@column_name}, #{escaped_values.join(", ")})",
}
end
end

# @private
class OutputColumnsParameter < ValuesParameter
def initialize(prefix, output_columns)
Expand Down
6 changes: 3 additions & 3 deletions test/request/select/test-filter.rb
Expand Up @@ -270,22 +270,22 @@ def in_values(column_name, *values)
:table => "posts",
:filter => "in_values(ages, 2, 29)",
},
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"))
in_values(:tags, "groonga", "have \"double\" quote"))
end

test("no values") do
assert_equal({
:table => "posts",
},
in_values("tags"))
in_values(:tags))
end
end
end
Expand Down

0 comments on commit 8db9cc9

Please sign in to comment.