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



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/moped/cursor.rb', line 59

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

  @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, @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



87
88
89
# File 'lib/moped/cursor.rb', line 87

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



99
100
101
# File 'lib/moped/cursor.rb', line 99

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



111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/moped/cursor.rb', line 111

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

  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



132
133
134
# File 'lib/moped/cursor.rb', line 132

def more?
  @cursor_id != 0
end