Sha256: 75c517498056bc769235ccb453df8b8ff42bd0b899f4fe201c005db08d6c4126

Contents?: true

Size: 1.54 KB

Versions: 15

Compression:

Stored size: 1.54 KB

Contents

require 'json'

module RSolr::JSON
  class Generator < RSolr::Generator
    CONTENT_TYPE = 'application/json'.freeze

    def content_type
      CONTENT_TYPE
    end

    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

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

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

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

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

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

Version data entries

15 entries across 15 versions & 4 rubygems

Version Path
blacklight-spotlight-3.6.0.beta8 vendor/bundle/ruby/3.2.0/gems/rsolr-2.6.0/lib/rsolr/json.rb
rsolr-2.6.0 lib/rsolr/json.rb
rsolr-2.5.0 lib/rsolr/json.rb
rsolr-2.4.0 lib/rsolr/json.rb
rsolr-2.3.0 lib/rsolr/json.rb
telvue-rsolr-2.2.2 lib/rsolr/json.rb
rsolr-2.2.1 lib/rsolr/json.rb
rsolr-2.2.0 lib/rsolr/json.rb
rsolr-2.1.0 lib/rsolr/json.rb
rsolr-2.0.2 lib/rsolr/json.rb
rsolr-2.0.1 lib/rsolr/json.rb
enju_leaf-1.2.1 vendor/bundle/ruby/2.3/gems/rsolr-2.0.0/lib/rsolr/json.rb
rsolr-2.0.0 lib/rsolr/json.rb
rsolr-2.0.0.rc1 lib/rsolr/json.rb
rsolr-2.0.0.pre2 lib/rsolr/json.rb