class RSolr::JSON::Generator

def add data, add_attrs = {}

def add data, add_attrs = {}
  add_attrs ||= {}
  data = RSolr::Array.wrap(data)
  if add_attrs.empty? && data.none? { |doc| doc.is_a?(RSolr::Document) && !doc.attrs.empty? }
    data.map do |doc|
      doc = RSolr::Document.new(doc) if doc.respond_to?(:each_pair)
      yield doc if block_given?
      doc.as_json
    end.to_json
  else
    i = 0
    data.each_with_object({}) do |doc, hash|
      doc = RSolr::Document.new(doc) if doc.respond_to?(:each_pair)
      yield doc if block_given?
      hash["add__UNIQUE_RSOLR_SUFFIX_#{i += 1}"] = add_attrs.merge(doc.attrs).merge(doc: doc.as_json)
    end.to_json.gsub(/__UNIQUE_RSOLR_SUFFIX_\d+/, '')
  end
end

def commit(opts = {})

generates a commit message
def commit(opts = {})
  opts ||= {}
  { commit: opts }.to_json
end

def content_type

def content_type
  CONTENT_TYPE
end

def delete_by_id(ids)

"ids" can be a single value or array of values
generates a delete message
def delete_by_id(ids)
  { delete: ids }.to_json
end

def delete_by_query(queries)

"queries" can be a single value or an array of values
generates a delete message
def delete_by_query(queries)
  { delete: { query: queries } }.to_json
end

def optimize(opts = {})

generates a optimize message
def optimize(opts = {})
  opts ||= {}
  { optimize: opts }.to_json
end

def rollback

generates a rollback message
def rollback
  { rollback: {} }.to_json
end