bulkify

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