Module: Arango::EdgeCollection::InstanceMethods
- Defined in:
- lib/arango/edge_collection/instance_methods.rb
Instance Attribute Summary collapse
-
#database ⇒ Object
Returns the value of attribute database.
-
#graph ⇒ Object
readonly
Returns the value of attribute graph.
- #id ⇒ String readonly
-
#is_system ⇒ Boolean
readonly
If true, create a system collection.
-
#name ⇒ String
The name of the collection.
Instance Method Summary collapse
-
#arango_object_id ⇒ String
The collections ArangoDB object_id, not to be confused with the collections ruby object_id.
-
#checksum(with_revisions: false, with_data: false) ⇒ Object
Returns a checksum for the specified collection.
-
#create ⇒ Arango::DocumentCollection
Stores the collection in the database.
-
#delete ⇒ NilClass
Deletes a collection.
-
#has_more? ⇒ Boolean
Check if more results are available for a betched request.
-
#initialize(database: Arango.current_database, graph: nil, name:, id: nil, globally_unique_id: nil, is_system: false, status: nil, type: :edge, properties: {}) ⇒ Arango::DocumentCollection
Instantiate a new collection.
- #journal_size=(n) ⇒ Object
-
#key_options ⇒ Arango::Result
Additional options for key generation.
-
#load_indexes_into_memory ⇒ Arango::DocumentCollection
Load Indexes into Memory Note: For the time being this function is only useful on RocksDB storage engine, as in MMFiles engine all indexes are in memory anyways.
-
#load_into_memory ⇒ Arango::DocumentCollection
Loads a collection into ArangoDBs memory.
- #method_missing(property, *args, &block) ⇒ Object
-
#next_batch ⇒ Object
Request next batch from a batched request.
-
#recalculate_count ⇒ Arango::DocumentCollection
recalculates the document count of a collection Note: This function is only useful on RocksDB storage engine.
-
#reload ⇒ Arango::DocumentCollection
(also: #refresh, #revert)
Reload collection properties and name from the database, reverting any changes.
-
#revision ⇒ String
Retrieve the collections revision id.
-
#rotate_journal ⇒ Arango::DocumentCollection
Rotates the journal of a collection.
-
#save ⇒ Arango::DocumentCollection
(also: #update)
Save changed collection properties and name changed, to the database.
- #server ⇒ Object
-
#shards(details: false) ⇒ Array, Hash
Return the shard ids of a collection Note: This method only works on a cluster coordinator.
-
#size ⇒ Integer
(also: #count, #length)
Counts the documents in a collection.
-
#statistics ⇒ Hash
Fetch the statistics of a collection.
-
#status ⇒ Symbol
The status of the collection as symbol, one of: - :unknown - :new_born - :unloaded - :loaded - :being_unloaded - :deleted - :loading.
-
#truncate ⇒ Arango::DocumentCollection
Truncates a collection.
-
#type ⇒ Symbol
The type of the collection to create.
-
#unload_from_memory ⇒ Arango::DocumentCollection
Unloads a collection into ArangoDBs memory.
- #wait_for_sync=(n) ⇒ Object
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(property, *args, &block) ⇒ Object
34 35 36 37 38 39 40 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 34 def method_missing(property, *args, &block) property_s = property.to_s.underscore property_y = property_s.to_sym return @properties[property_y] = args[0] if property_s.end_with?('=') return @properties[property_y] if @properties.key?(property_y) super(property, *args, &block) end |
Instance Attribute Details
#database ⇒ Object
Returns the value of attribute database.
31 32 33 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 31 def database @database end |
#graph ⇒ Object (readonly)
Returns the value of attribute graph.
32 33 34 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 32 def graph @graph end |
#id ⇒ String (readonly)
43 44 45 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 43 def id @id end |
#is_system ⇒ Boolean (readonly)
If true, create a system collection. In this case collection-name should start with an underscore. End users should normally create non-system collections only. API implementors may be required to create system collections in very special occasions, but normally a regular collection will do. (The default is false) Can only be set by calling the constructor with the is_system param.
50 51 52 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 50 def is_system @is_system end |
#name ⇒ String
The name of the collection.
54 55 56 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 54 def name @name end |
Instance Method Details
#arango_object_id ⇒ String
The collections ArangoDB object_id, not to be confused with the collections ruby object_id.
58 59 60 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 58 def arango_object_id @properties[:object_id] end |
#checksum(with_revisions: false, with_data: false) ⇒ Object
Returns a checksum for the specified collection
204 205 206 207 208 209 210 211 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 204 def checksum (with_revisions: false, with_data: false) args = { name: @name, type: @type } params = { withRevisions: with_revisions, withData: with_data } Arango::Requests::Collection::Checksum.execute(server: server, args: args, params: params).checksum end |
#create ⇒ Arango::DocumentCollection
Stores the collection in the database.
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 119 def create @name_changed = false @journal_size_changed = false @wait_for_sync_changed = false body = { name: @name, type: @type } @properties.each do |k, v| body[k.to_s.camelize(:lower).to_sym] = v unless v.nil? end if body[:keyOptions] body[:keyOptions].delete_if{|_,v| v.nil?} body[:keyOptions].transform_keys! { |key| key.to_s.camelize(:lower).to_sym } end enforce_replication_factor = body.delete(:enforceReplicationFactor) wait_for_sync_replication = body.delete(:waitForSyncReplication) params = nil if enforce_replication_factor || wait_for_sync_replication params = {} params[:enforceReplicationFactor] = enforce_replication_factor unless enforce_replication_factor.nil? params[:waitForSyncReplication] = wait_for_sync_replication unless wait_for_sync_replication.nil? end result = Arango::Requests::Collection::Create.execute(server: server, body: body, params: params) _update_attributes(result) self end |
#delete ⇒ NilClass
Deletes a collection.
152 153 154 155 156 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 152 def delete params = { isSystem: @is_system } args = { name: @name, type: @type } Arango::Requests::Collection::Delete.execute(server: server, args: args, params: params) end |
#has_more? ⇒ Boolean
Check if more results are available for a betched request.
326 327 328 329 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 326 def has_more? return false unless @aql @aql.has_more? end |
#initialize(database: Arango.current_database, graph: nil, name:, id: nil, globally_unique_id: nil, is_system: false, status: nil, type: :edge, properties: {}) ⇒ Arango::DocumentCollection
Instantiate a new collection. For param description see the attributes descriptions. All params except name and database are optional.
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 12 def initialize(database: Arango.current_database, graph: nil, name:, id: nil, globally_unique_id: nil, is_system: false, status: nil, type: :edge, properties: {}) send(:database=, database) if database send(:graph=, graph) if graph @aql = nil @batch_proc = nil @id = id @globally_unique_id = globally_unique_id @is_system = is_system _set_name(name) @name_changed = false @original_name = name _set_status(status) _set_type(type) _set_properties(properties) end |
#journal_size=(n) ⇒ Object
98 99 100 101 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 98 def journal_size=(n) @journal_size_changed = true @properties[:journal_size] = n end |
#key_options ⇒ Arango::Result
Additional options for key generation. If specified, then key_options should be a Hash containing the following attributes:
-
type: specifies the type of the key generator. The currently available generators are traditional, autoincrement, uuid and padded.
-
allow_user_keys: if set to true, then it is allowed to supply own key values in the _key attribute of a document. If set to false, then the key generator will solely be responsible for generating keys and supplying own key values in the _key attribute of documents is considered an error.
-
increment: increment value for autoincrement key generator. Not used for other key generator types.
-
offset: Initial offset value for autoincrement key generator. Not used for other key generator types.
Can only be set by calling the constructor with the key_options param.
71 72 73 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 71 def Arango::Result.new(@properties[:key_options]) end |
#load_indexes_into_memory ⇒ Arango::DocumentCollection
Load Indexes into Memory Note: For the time being this function is only useful on RocksDB storage engine, as in MMFiles engine all indexes are in memory anyways.
234 235 236 237 238 239 240 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 234 def load_indexes_into_memory if @database.server.rocksdb? args = { name: @name, type: @type } Arango::Requests::Collection::LoadIndexesIntoMemory.execute(server: server, args: args) end self end |
#load_into_memory ⇒ Arango::DocumentCollection
Loads a collection into ArangoDBs memory. Returns the collection on success.
215 216 217 218 219 220 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 215 def load_into_memory args = { name: @name, type: @type, count: false } result = Arango::Requests::Collection::Load.execute(server: server, args: args).status _set_status(result) self end |
#next_batch ⇒ Object
Request next batch from a batched request.
309 310 311 312 313 314 315 316 317 318 319 320 321 322 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 309 def next_batch return unless has_more? result = @aql.next final_result = if @batch_proc @batch_proc.call(result) else result end unless @aql.has_more? @aql = nil @batch_proc = nil end final_result end |
#recalculate_count ⇒ Arango::DocumentCollection
recalculates the document count of a collection Note: This function is only useful on RocksDB storage engine.
256 257 258 259 260 261 262 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 256 def recalculate_count if @database.server.rocksdb? args = { name: @name, type: @type } Arango::Requests::Collection::RecalculateCount.execute(server: server, args: args) end self end |
#reload ⇒ Arango::DocumentCollection Also known as: refresh, revert
Reload collection properties and name from the database, reverting any changes.
266 267 268 269 270 271 272 273 274 275 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 266 def reload request_name = @name_changed ? @original_name : @name @name_changed = false @journal_size_changed = false @wait_for_sync_changed = false args = { name: request_name, type: @type } result = Arango::Requests::Collection::Get.execute(server: server, args: args) _update_attributes(result) self end |
#revision ⇒ String
Retrieve the collections revision id
196 197 198 199 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 196 def revision args = { name: @name, type: @type } Arango::Requests::Collection::Revision.execute(server: server, args: args).revision end |
#rotate_journal ⇒ Arango::DocumentCollection
Rotates the journal of a collection. Collection must have a journal. Note: This method is specific for the MMFiles storage engine, and there it is not available in a cluster.
245 246 247 248 249 250 251 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 245 def rotate_journal if @database.server.mmfiles? args = { name: @name, type: @type } Arango::Requests::Collection::RotateJournal.execute(server: server, args: args) end self end |
#save ⇒ Arango::DocumentCollection Also known as: update
Save changed collection properties and name changed, to the database. Note: except for wait_for_sync, journal_size and name, collection properties cannot be changed once a collection is created.
282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 282 def save requests = [] args = { name: @name, type: @type } rename = nil if @name_changed args[:name] = @original_name @name_changed = false body = { name: @name } rename = Arango::Requests::Collection::Rename.execute(server: server, args: args, body: body) @original_name = @name end if @journal_size_changed || @wait_for_sync_changed body = {} body[:journalSize] = @journal_size if @journal_size_changed && @database.server.mmfiles? body[:waitForSync] = @wait_for_sync if @wait_for_sync_changed @journal_size_changed = false @wait_for_sync_changed = false result = Arango::Requests::Collection::SetProperties.execute(server: server, args: args, body: body) @journal_size = result.journal_size if result.key?(:journal_size) @wait_for_sync = result.wait_for_sync if result.key?(:wait_for_sync) end [rename, self] end |
#server ⇒ Object
113 114 115 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 113 def server @database.server end |
#shards(details: false) ⇒ Array, Hash
Return the shard ids of a collection Note: This method only works on a cluster coordinator.
187 188 189 190 191 192 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 187 def shards(details: false) return nil unless @database.server.coordinator? args = { name: @name, type: @type } params = { details: details } result = Arango::Requests::Collection::Shards.execute(server: server, args: args, params: params) end |
#size ⇒ Integer Also known as: count, length
Counts the documents in a collection
168 169 170 171 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 168 def size args = { name: @name, type: @type } Arango::Requests::Collection::Count.execute(server: server, args: args).count end |
#statistics ⇒ Hash
Fetch the statistics of a collection
177 178 179 180 181 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 177 def statistics args = { name: @name, type: @type } result = Arango::Requests::Collection::Statistics.execute(server: server, args: args) Arango::Result.new(result.figures) end |
#status ⇒ Symbol
The status of the collection as symbol, one of:
-
:unknown
-
:new_born
-
:unloaded
-
:loaded
-
:being_unloaded
-
:deleted
-
:loading
84 85 86 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 84 def status STATES[@status] end |
#truncate ⇒ Arango::DocumentCollection
Truncates a collection.
160 161 162 163 164 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 160 def truncate args = { name: @name, type: @type } Arango::Requests::Collection::Truncate.execute(server: server, args: args) self end |
#type ⇒ Symbol
The type of the collection to create. The following values for type are valid:
- document collection, use the :document symbol
- edge collection, use the :edge symbol
The default collection type is :document. Can only be set by calling the constructor with the type param.
94 95 96 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 94 def type TYPES[@type] end |
#unload_from_memory ⇒ Arango::DocumentCollection
Unloads a collection into ArangoDBs memory. Returns the collection on success.
224 225 226 227 228 229 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 224 def unload_from_memory args = { name: @name, type: @type } result = Arango::Requests::Collection::Unload.execute(server: server, args: args).status _set_status(result) self end |
#wait_for_sync=(n) ⇒ Object
103 104 105 106 |
# File 'lib/arango/edge_collection/instance_methods.rb', line 103 def wait_for_sync=(n) @wait_for_sync_changed = true @properties[:wait_for_sync] = n end |