Skip to content

Commit 8f9f6a7

Browse files
committed
[API] Added a Elasticsearch::API.settings[:skip_parameter_validation] setting support into __validate_and_extract_params
Example: Elasticsearch::API.settings[:skip_parameter_validation] = true __validate_and_extract_params( { :foo => 'q', :bam => 'm' }, [:foo, :bar] ) # => { :foo => "q", :bam => "m" }
1 parent 7cba10a commit 8f9f6a7

File tree

2 files changed

+44
-6
lines changed

2 files changed

+44
-6
lines changed

elasticsearch-api/lib/elasticsearch/api/utils.rb

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -110,24 +110,44 @@ def __bulkify(payload)
110110
# @raise [ArgumentError] If the arguments Hash contains invalid keys
111111
#
112112
# @example Extract parameters
113-
# __validate_and_extract_params { :foo => 'qux' }, [:foo, :bar]
113+
# __validate_and_extract_params( { :foo => 'qux' }, [:foo, :bar] )
114114
# # => { :foo => 'qux' }
115115
#
116116
# @example Raise an exception for invalid parameters
117-
# __validate_and_extract_params { :foo => 'qux', :bam => 'mux' }, [:foo, :bar]
117+
# __validate_and_extract_params( { :foo => 'qux', :bam => 'mux' }, [:foo, :bar] )
118118
# # ArgumentError: "URL parameter 'bam' is not supported"
119119
#
120+
# @example Skip validating parameters
121+
# __validate_and_extract_params( { :foo => 'q', :bam => 'm' }, [:foo, :bar], { skip_parameter_validation: true } )
122+
# # => { :foo => "q", :bam => "m" }
123+
#
124+
# @example Skip validating parameters when the module setting is set
125+
# Elasticsearch::API.settings[:skip_parameter_validation] = true
126+
# __validate_and_extract_params( { :foo => 'q', :bam => 'm' }, [:foo, :bar] )
127+
# # => { :foo => "q", :bam => "m" }
128+
#
120129
# @api private
121130
#
122-
def __validate_and_extract_params(arguments, valid_params=[])
131+
def __validate_and_extract_params(arguments, params=[], options={})
132+
if options[:skip_parameter_validation] || Elasticsearch::API.settings[:skip_parameter_validation]
133+
arguments
134+
else
135+
__validate_params(arguments, params)
136+
__extract_params(arguments, params)
137+
end
138+
end
139+
140+
def __validate_params(arguments, valid_params=[])
123141
arguments.each do |k,v|
124142
raise ArgumentError, "URL parameter '#{k}' is not supported" \
125143
unless COMMON_PARAMS.include?(k) || COMMON_QUERY_PARAMS.include?(k) || valid_params.include?(k)
126144
end
145+
end
127146

128-
params = arguments.select { |k,v| COMMON_QUERY_PARAMS.include?(k) || valid_params.include?(k) }
129-
params = Hash[params] unless params.is_a?(Hash) # Normalize Ruby 1.8 and Ruby 1.9 Hash#select behaviour
130-
params
147+
def __extract_params(arguments, params=[])
148+
result = arguments.select { |k,v| COMMON_QUERY_PARAMS.include?(k) || params.include?(k) }
149+
result = Hash[result] unless result.is_a?(Hash) # Normalize Ruby 1.8 and Ruby 1.9 Hash#select behaviour
150+
result
131151
end
132152

133153
# Extracts the valid parts of the URL from the arguments

elasticsearch-api/test/unit/utils_test.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,9 @@ class UtilsTest < ::Test::Unit::TestCase
141141
end
142142

143143
context "__validate_and_extract_params" do
144+
teardown do
145+
Elasticsearch::API.settings.clear
146+
end
144147

145148
should "extract valid params from a Hash" do
146149
assert_equal( {:foo => 'qux'},
@@ -164,6 +167,21 @@ class UtilsTest < ::Test::Unit::TestCase
164167
__validate_and_extract_params( { :format => 'yaml' } ) )
165168
end
166169

170+
should "not validate parameters when the option is set" do
171+
assert_nothing_raised do
172+
result = __validate_and_extract_params( { :foo => 'q', :bam => 'm' }, [:foo, :bar], { skip_parameter_validation: true } )
173+
assert_equal( { :foo => 'q', :bam => 'm' }, result )
174+
end
175+
end
176+
177+
should "not validate parameters when the module setting is set" do
178+
assert_nothing_raised do
179+
Elasticsearch::API.settings[:skip_parameter_validation] = true
180+
result = __validate_and_extract_params( { :foo => 'q', :bam => 'm' }, [:foo, :bar] )
181+
assert_equal( { :foo => 'q', :bam => 'm' }, result )
182+
end
183+
end
184+
167185
end
168186

169187
context "__extract_parts" do

0 commit comments

Comments
 (0)