Class: ArangoIndex

Inherits:
ArangoServer show all
Defined in:
lib/ArangoRB_Index.rb

Overview

INDEXES ===

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from ArangoServer

address, async, async=, batch, cancelAsync, changePropertyWAL, checkPort, cluster, cluster=, clusterRoundtrip, clusterStatistics, collection, collection=, createDumpBatch, database, database=, databaseVersion, databases, default_server, destroyAllAsync, destroyAsync, destroyCluster, destroyDumpBatch, destroyExpiredAsync, echo, endpoints, execute, executeCluster, executeClusterHead, executeClusterPut, fetchAsync, flushWAL, graph, graph=, log, pendingAsync, prolongDumpBatch, propertyWAL, reload, request, restart, retrieveAsync, retrieveDoneAsync, retrievePendingAsync, return_result, return_result_async, role, server, serverId, shutdown, sleep, statistics, tasks, test, time, transactions, updateCluster, user, user=, username, users, verbose, verbose=, version

Constructor Details

#initialize(collection: @@collection, database: @@database, body: {}, id: nil, type: nil, unique: nil, fields:, sparse: nil) ⇒ ArangoIndex

TESTED



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/ArangoRB_Index.rb', line 4

def initialize(collection: @@collection, database: @@database, body: {}, id: nil, type: nil, unique: nil, fields:, sparse: nil) # TESTED
  if collection.is_a?(String)
    @collection = collection
  elsif collection.is_a?(ArangoCollection)
    @collection = collection.collection
  else
    raise "collection should be a String or a ArangoCollection instance, not a #{collection.class}"
  end

  if database.is_a?(String)
    @database = database
  elsif database.is_a?(ArangoDatabase)
    @database = database.database
  else
    raise "database should be a String or a ArangoDatabase instance, not a #{database.class}"
  end

  if body.is_a?(Hash)
    @body = body
  else
    raise "body should be a Hash, not a #{body.class}"
  end

  unless id.nil?
    @key = id.split("/")[1]
    @id = id
  end
  @type = type
  @sparse = sparse
  @unique = unique unless unique.nil?

  if fields.is_a?(String)
    @fields = [fields]
  elsif fields.is_a?(Array)
    @fields = fields
  else
    raise "fields should be a String or an Array, not a #{database.class}"
  end

  @idCache = "IND_#{@id}"
end

Instance Attribute Details

#bodyObject (readonly)

Returns the value of attribute body.



46
47
48
# File 'lib/ArangoRB_Index.rb', line 46

def body
  @body
end

#fieldsObject (readonly)

Returns the value of attribute fields.



46
47
48
# File 'lib/ArangoRB_Index.rb', line 46

def fields
  @fields
end

#idObject (readonly)

Returns the value of attribute id.



46
47
48
# File 'lib/ArangoRB_Index.rb', line 46

def id
  @id
end

#idCacheObject (readonly)

Returns the value of attribute idCache.



46
47
48
# File 'lib/ArangoRB_Index.rb', line 46

def idCache
  @idCache
end

#keyObject (readonly)

Returns the value of attribute key.



46
47
48
# File 'lib/ArangoRB_Index.rb', line 46

def key
  @key
end

#sparseObject (readonly)

Returns the value of attribute sparse.



46
47
48
# File 'lib/ArangoRB_Index.rb', line 46

def sparse
  @sparse
end

#typeObject (readonly)

Returns the value of attribute type.



46
47
48
# File 'lib/ArangoRB_Index.rb', line 46

def type
  @type
end

#uniqueObject (readonly)

Returns the value of attribute unique.



46
47
48
# File 'lib/ArangoRB_Index.rb', line 46

def unique
  @unique
end

Class Method Details

.indexes(database: @@database, collection: @@collection) ⇒ Object

TESTED



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/ArangoRB_Index.rb', line 90

def self.indexes(database: @@database, collection: @@collection) # TESTED
  database = database.database if database.is_a?(ArangoDatabase)
  collection = collection.collection if collection.is_a?(ArangoCollection)
  query = { "collection": collection }
  request = @@request.merge({ :query => query })
  result = get("/_db/#{database}/_api/index", request)
  return result.headers["x-arango-async-id"] if @@async == "store"
  return true if @@async
  result = result.parsed_response
  return result if @@verbose
  return result["errorMessage"] if result["error"]
  result.delete_if{|k,v| k == "error" || k == "code"}
  result["indexes"] = result["indexes"].map{|x| ArangoIndex.new(body: x, id: x["id"], database: database, collection: collection, type: x["type"], unique: x["unique"], fields: x["fields"], sparse: x["sparse"])}
  result
end

Instance Method Details

#collectionObject



70
71
72
# File 'lib/ArangoRB_Index.rb', line 70

def collection
  ArangoCollection.new(collection: @collection, database: @database)
end

#createObject

TESTED



106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/ArangoRB_Index.rb', line 106

def create # TESTED
  body = @body.merge({
    "fields" => @fields,
    "unique" => @unique,
    "type" => @type,
    "id" => @id
  }.delete_if{|k,v| v.nil?})
  query = { "collection": @collection }
  request = @@request.merge({ :body => body.to_json, :query => query })
  result = self.class.post("/_db/#{@database}/_api/index", request)
  return result.headers["x-arango-async-id"] if @@async == "store"
  return true if @@async
  result = result.parsed_response
  return result if @@verbose
  return result["errorMessage"] if result["error"]
  result.delete_if{|k,v| k == "error" || k == "code"}
  @body = result
  @id = result["id"]
  @key = @id.split("/")[1]
  self
end

#databaseObject



66
67
68
# File 'lib/ArangoRB_Index.rb', line 66

def database
  ArangoDatabase.new(database: @database)
end

#destroyObject

TESTED



128
129
130
131
132
133
134
# File 'lib/ArangoRB_Index.rb', line 128

def destroy # TESTED
  result = self.class.delete("/_db/#{@database}/_api/index/#{id}", @@request)
  return result.headers["x-arango-async-id"] if @@async == "store"
  return true if @@async
  result = result.parsed_response
  @@verbose ? result : result["error"] ? result["errorMessage"] : true
end

#retrieveObject

TESTED



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/ArangoRB_Index.rb', line 74

def retrieve # TESTED
  result = self.class.get("/_db/#{@database}/_api/index/#{@id}", @@request)
  return result.headers["x-arango-async-id"] if @@async == "store"
  return true if @@async
  result = result.parsed_response
  return result if @@verbose
  return result["errorMessage"] if result["error"]
  result.delete_if{|k,v| k == "error" || k == "code"}
  @body = result
  @type = result["type"]
  @unique = result["unique"]
  @fields = result["fields"]
  @sparse = result["sparse"]
  self
end

#to_hashObject Also known as: to_h

RETRIEVE ###



50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/ArangoRB_Index.rb', line 50

def to_hash
  {
    "key" => @key,
    "id" => @id,
    "collection" => @collection,
    "database" => @database,
    "body" => @body,
    "type" => @type,
    "sparse" => @sparse,
    "unique" => @unique,
    "fields" => @fields,
    "idCache" => @idCache
  }.delete_if{|k,v| v.nil?}
end