in elasticsearch-api/lib/elasticsearch/api/utils.rb [100:132]
def bulkify(payload)
operations = %w[index create delete update]
case
when payload.any? { |d| d.is_a?(Hash) && d.values.first.is_a?(Hash) && operations.include?(d.keys.first.to_s) && (d.values.first[:data] || d.values.first['data']) }
payload = payload.
inject([]) do |sum, item|
operation, meta = item.to_a.first
meta = meta.clone
data = meta.delete(:data) || meta.delete('data')
sum << { operation => meta }
sum << data if data
sum
end.
map { |item| Elasticsearch::API.serializer.dump(item) }
payload << '' unless payload.empty?
when payload.all? { |d| d.is_a? String }
payload << ''
else
payload = payload.map { |item| Elasticsearch::API.serializer.dump(item) }
payload << ''
end
payload = payload.join("\n")
end