self.bulkify

in lib/elasticsearch-serverless/api/utils.rb [44:74]


      def self.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| JSON.dump(item) }
          payload << '' unless payload.empty?
        
        when payload.all? { |d| d.is_a? String }
          payload << ''
        
        else
          payload = payload.map { |item| JSON.dump(item) }
          payload << ''
        end

        payload = payload.join("\n")
      end