Sha256: 0128d707528048a9840f80d9a166d352e1c64bd3d39848250b1dc05a25edce93

Contents?: true

Size: 1.53 KB

Versions: 12

Compression:

Stored size: 1.53 KB

Contents

require 'riak/search'
require 'riak/errors/search_error'

module Riak::Search
  # A schema is a Riak Search 2 concept that describes how to index documents.
  # They're implemented as a standard Solr XML schema.
  class Schema
    # @return [String] the name of the schema
    attr_reader :name

    # Initializes a schema object, that may or may not exist.
    #
    # @param [Riak::Client] client the client connected to the Riak cluster
    #   you wish to operate on
    # @param [String] name the name of the schema
    def initialize(client, name)
      @client = client
      @name = name
    end

    # @return [Boolean] does this schema exist on Riak?
    def exists?
      !!schema_data
    end

    # @return [String] the XML content of this schema
    def content
      schema_data.content
    end

    # @param [String] content the XML content of this schema
    # @raise [Riak::SearchError::SchemaExistsError] if a schema with the given
    #   name already exists
    def create!(content)
      fail Riak::SearchError::SchemaExistsError.new name if exists?

      @client.backend do |b|
        b.create_search_schema name, content
      end

      @schema_data = nil

      true
    end

    private

    def schema_data
      return @schema_data if defined?(@schema_data) && @schema_data

      sd = nil

      begin
        sd = @client.backend do |b|
          b.get_search_schema name
        end
      rescue Riak::ProtobuffsFailedRequest => e
        return nil if e.not_found?
        raise e
      end

      @schema_data = sd
    end
  end
end

Version data entries

12 entries across 12 versions & 2 rubygems

Version Path
riak-client-2.6.0 lib/riak/search/schema.rb
riak-client-2.5.0 lib/riak/search/schema.rb
riak-client-2.4.1 lib/riak/search/schema.rb
riak-client-2.4.0 lib/riak/search/schema.rb
riak-client-2.4.0.pre1 lib/riak/search/schema.rb
riak-client-2.3.2 lib/riak/search/schema.rb
riak-client-2.3.1 lib/riak/search/schema.rb
riak-client-2.3.0 lib/riak/search/schema.rb
riak-client-2.2.2 lib/riak/search/schema.rb
riak-client-2.2.1 lib/riak/search/schema.rb
riak-client-noenc-1.0.0 lib/riak/search/schema.rb
riak-client-2.2.0 lib/riak/search/schema.rb