in opensearch-dsl/lib/opensearch/dsl/search/base_component.rb [168:188]
def to_hash(options={})
case
when @block
@hash = (@args && ! @args.empty?) ? { name => { @args => {} } } : { name => {} }
call
@hash[self.name.to_sym].update @options unless @options.empty?
@hash
when @hash[self.name.to_sym] && ! @args.is_a?(Hash) && @hash[self.name.to_sym][@args]
@hash[self.name.to_sym].update @options unless @options.empty?
@hash
when @hash[self.name.to_sym] && @args.respond_to?(:to_hash) && ! @args.empty?
{ name => @args.to_hash }
else
@hash
end
end