Class: Moped::Cursor Private

Inherits:
Object show all
Defined in:
lib/moped/cursor.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Contains logic for cursor behaviour.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(session, query_operation) ⇒ Cursor

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Initialize the new cursor.

Examples:

Create the new cursor.

Cursor.new(session, message)

Parameters:

  • session (Session)

    The session.

  • query_operation (Message)

    The query message.

Since:

  • 1.0.0



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/moped/cursor.rb', line 76

def initialize(session, query_operation)
  @session = session

  @database    = query_operation.database
  @collection  = query_operation.collection
  @selector    = query_operation.selector

  @cursor_id = 0
  @limit = query_operation.limit
  @limited = @limit > 0
  @batch_size = query_operation.batch_size || @limit

  @options = {
    request_id: query_operation.request_id,
    flags: query_operation.flags,
    limit: query_operation.limit,
    skip: query_operation.skip,
    fields: query_operation.fields,
  }
end

Instance Attribute Details

#get_more_opObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



12
13
14
# File 'lib/moped/cursor.rb', line 12

def get_more_op
  @get_more_op
end

#get_more_op The get more message.(Thegetmoremessage.) ⇒ Object (readonly)



12
# File 'lib/moped/cursor.rb', line 12

attr_reader :get_more_op, :kill_cursor_op, :query_op, :session

#kill_cursor_opObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



12
13
14
# File 'lib/moped/cursor.rb', line 12

def kill_cursor_op
  @kill_cursor_op
end

#kill_cursor_op The kill cursor message.(Thekillcursormessage.) ⇒ Object (readonly)



12
# File 'lib/moped/cursor.rb', line 12

attr_reader :get_more_op, :kill_cursor_op, :query_op, :session

#query_opObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



12
13
14
# File 'lib/moped/cursor.rb', line 12

def query_op
  @query_op
end

#query_op The query message.(Thequerymessage.) ⇒ Object (readonly)



12
# File 'lib/moped/cursor.rb', line 12

attr_reader :get_more_op, :kill_cursor_op, :query_op, :session

#sessionObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



12
13
14
# File 'lib/moped/cursor.rb', line 12

def session
  @session
end

#session The session.(Thesession.) ⇒ Object (readonly)



12
# File 'lib/moped/cursor.rb', line 12

attr_reader :get_more_op, :kill_cursor_op, :query_op, :session

Instance Method Details

#eachEnumerator

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Iterate over the results of the query.

Examples:

Iterate over the results.

cursor.each do |doc|
  #...
end

Returns:

  • (Enumerator)

    The cursor enum.

Since:

  • 1.0.0



24
25
26
27
28
29
30
31
32
# File 'lib/moped/cursor.rb', line 24

def each
  documents = load_docs
  documents.each { |doc| yield doc }
  while more?
    return kill if limited? && @limit <= 0
    documents = get_more
    documents.each { |doc| yield doc }
  end
end

#get_moreArray<Hash>

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Get more documents from the database for the cursor. Executes a get more command.

Examples:

Get more docs.

cursor.get_more

Returns:

  • (Array<Hash>)

    The next batch of documents.

Since:

  • 1.0.0



43
44
45
46
47
48
# File 'lib/moped/cursor.rb', line 43

def get_more
  reply = @node.get_more @database, @collection, @cursor_id, request_limit
  @limit -= reply.count if limited?
  @cursor_id = reply.cursor_id
  reply.documents
end

#killObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Kill the cursor.

Examples:

Kill the cursor.

cursor.kill

Returns:

  • (Object)

    The result of the kill cursors command.

Since:

  • 1.0.0



105
106
107
# File 'lib/moped/cursor.rb', line 105

def kill
  @node.kill_cursors([ @cursor_id ])
end

#limited?true, false

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Does the cursor have a limit provided in the query?

Examples:

Is the cursor limited?

cursor.limited?

Returns:

  • (true, false)

    If a limit has been provided over zero.

Since:

  • 1.0.0



117
118
119
# File 'lib/moped/cursor.rb', line 117

def limited?
  @limited
end

#load_docsArray<Hash>

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Load the documents from the database.

Examples:

Load the documents.

cursor.load_docs

Returns:

Since:

  • 1.0.0



129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# File 'lib/moped/cursor.rb', line 129

def load_docs
  consistency = session.consistency
  @options[:flags] |= [:slave_ok] if consistency == :eventual
  @options[:flags] |= [:no_cursor_timeout] if @options[:no_timeout]

  options = @options.clone
  options[:limit] = request_limit

  reply, @node = session.context.with_node do |node|
    [ node.query(@database, @collection, @selector, options), node ]
  end

  @limit -= reply.count if limited?
  @cursor_id = reply.cursor_id
  reply.documents
end

#more?true, false

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Are there more documents to be returned from the database?

Examples:

Are there more documents?

cursor.more?

Returns:

  • (true, false)

    If there are more documents to load.

Since:

  • 1.0.0



154
155
156
# File 'lib/moped/cursor.rb', line 154

def more?
  @cursor_id != 0
end

#request_limitInteger

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Determine the request limit for the query

Examples:

What is the cursor request_limit

cursor.request_limit

Returns:

Since:

  • 1.0.0



59
60
61
62
63
64
65
# File 'lib/moped/cursor.rb', line 59

def request_limit
  if limited?
    @batch_size < @limit ? @batch_size : @limit
  else
    @batch_size
  end
end