@@ -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
0 commit comments