Sha256: 4f72452a6cc5299a770a3535d208c8211e8a0e4cf171bafbaf185c7acc2e7f3e

Contents?: true

Size: 1.89 KB

Versions: 4

Compression:

Stored size: 1.89 KB

Contents

require 'riak/index_collection'
module Riak
  class SecondaryIndex
    include Util::Translation
    include Client::FeatureDetection

    # Create a Riak Secondary Index operation
    # @param [Bucket] bucket the {Riak::Bucket} we'll query against
    # @param [String] index the index name
    # @param [String,Integer,Range<String,Integer>] query
    #   a single value or range of values to query for
    def initialize(bucket, index, query, options={})
      @bucket = bucket
      @client = @bucket.client
      @index = index
      @query = query
      @options = options

      validate_options
    end

    def get_server_version
      @client.backend{|b| b.send :get_server_version }
    end

    # Get the array of matched keys
    def keys(&block)
      @collection ||=
        @client.backend do |b|
          b.get_index @bucket, @index, @query, @options, &block
        end
    end

    # Get the array of values
    def values
      @values ||= @bucket.get_many(self.keys).values
    end

    # Get a new SecondaryIndex fetch for the next page
    def next_page
      raise t('index.no_next_page') unless keys.continuation

      self.class.new(@bucket, 
                     @index, 
                     @query, 
                     @options.merge(:continuation => keys.continuation))
    end

    # Determine whether a SecondaryIndex fetch has a next page available
    def has_next_page?
      !!keys.continuation
    end

    private
    def validate_options
      raise t('index.pagination_not_available') if paginated? && !index_pagination?
      raise t('index.return_terms_not_available') if @options[:return_terms] && !index_return_terms?
      raise t('index.include_terms_is_wrong') if @options[:include_terms]

      # raise t('index.streaming_not_available') if @options[:stream] && !index_streaming?
    end

    def paginated?
      @options[:continuation] || @options[:max_results]
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
riak-client-2.1.0 lib/riak/secondary_index.rb
riak-client-2.0.0 lib/riak/secondary_index.rb
riak-client-2.0.0.rc2 lib/riak/secondary_index.rb
riak-client-2.0.0.rc1 lib/riak/secondary_index.rb