Class: Arango::Task

Inherits:
Object
  • Object
show all
Includes:
Helper::DatabaseAssignment, Helper::Satisfaction, Helper::ServerAssignment
Defined in:
lib/arango/task.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Helper::Satisfaction

#satisfy_category?, #satisfy_class?, #satisfy_class_or_string?, #satisfy_module?, #satisfy_module_or_nil?, #satisfy_module_or_string?, #warning_deprecated

Constructor Details

#initialize(id: nil, command: nil, name: nil, offset: nil, params: nil, period: nil, database: nil, server: Arango.current_server) ⇒ Arango::Task

Instantiate a new task.



159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
# File 'lib/arango/task.rb', line 159

def initialize(id: nil, command: nil, name: nil, offset: nil, params: nil, period: nil, database: nil, server: Arango.current_server)
  @args = Hash.new
  if database
    assign_database(database)
    @requester = @database
    @args[:db] = @database.name
  elsif server
    assign_server(server)
    @requester = @server
  end
  set_id id
  @command = command
  @name = name
  @offset = offset
  @params = params
  @period = period
end

Instance Attribute Details

#commandString Also known as: javascript_command

Access the javascript code of the task.



111
112
113
# File 'lib/arango/task.rb', line 111

def command
  @command
end

#createdObject (readonly)

Time this task has been created at, timestamp. return [BigDecimal]



137
138
139
# File 'lib/arango/task.rb', line 137

def created
  @created
end

#databaseObject (readonly)

Database the task belongs to return [Arango::Database] or nil



141
142
143
# File 'lib/arango/task.rb', line 141

def database
  @database
end

#idString

The Task id.



117
118
119
# File 'lib/arango/task.rb', line 117

def id
  @id
end

#nameString

The Task name.



121
122
123
# File 'lib/arango/task.rb', line 121

def name
  @name
end

#offsetInteger

The number of seconds initial delay.



125
126
127
# File 'lib/arango/task.rb', line 125

def offset
  @offset
end

#paramsObject

Hash of params to pass to the command # @return [Hash] or nil



129
130
131
# File 'lib/arango/task.rb', line 129

def params
  @params
end

#periodInteger

Number of seconds between executions.



133
134
135
# File 'lib/arango/task.rb', line 133

def period
  @period
end

#serverObject (readonly)

Server the Task belongs to. return [Arango::Server]



145
146
147
# File 'lib/arango/task.rb', line 145

def server
  @server
end

#typeObject (readonly)

Task type. return [Symbol] Either :periodic or :timed.



149
150
151
# File 'lib/arango/task.rb', line 149

def type
  @type
end

Class Method Details

.all(database: nil, server: Arango.current_server) ⇒ Array<Arango::Task>

Get all tasks from a server or from a database



77
78
79
80
81
82
83
84
85
86
# File 'lib/arango/task.rb', line 77

def all(database: nil, server: Arango.current_server)
  args = Hash.new
  if database
    args[:db] = database.name
    server = database.server
  end
  result = Arango::Requests::Task::All.execute(server: server, args: args)

  result.map { |task| Arango::Task.from_h(task, server: server) }
end

.delete(id:, database: nil, server: Arango.current_server) ⇒ Arango::Task

Delete a task from the server or from a database.



45
46
47
48
49
50
51
52
53
54
# File 'lib/arango/task.rb', line 45

def delete(id:, database: nil, server: Arango.current_server)
  args = {id: id}
  if database
    args[:db] = database.name
    Arango::Requests::Task::Delete.execute(server: database.server, args: args)
  elsif server
    Arango::Requests::Task::Delete.execute(server: server, args: args)
  end
  self
end

.exists?(id:, database: nil, server: Arango.current_server) ⇒ Boolean



103
104
105
106
# File 'lib/arango/task.rb', line 103

def exists?(id:, database: nil, server: Arango.current_server)
  result = list(database: database, server: server)
  result.include?(id)
end

.from_h(task_hash, server: nil) ⇒ Arango::Task

Takes a hash and instantiates a Arango::Task object from it.

Raises:



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/arango/task.rb', line 14

def from_h(task_hash, server: nil)
  raise Arango::Error.new(err: :no_task_id) unless task_hash.key?(:id)
  task_hash = task_hash.transform_keys { |k| k.to_s.underscore.to_sym }
  task_hash.merge!(server: server) if server
  if task_hash[:database].class == String
    task_hash[:database] = Arango::Database.new(name: task_hash[:database], server: server)
  end
  created = task_hash.delete(:created)
  offset = task_hash.delete(:offset)
  type = task_hash.delete(:type)
  task = Arango::Task.new(**task_hash)
  task.instance_variable_set(:@created, created)
  task.instance_variable_set(:@offset, offset)
  task.instance_variable_set(:@type, type)
  task
end

.from_result(arango_result, server: nil) ⇒ Arango::Task

Takes a Arango::Result and instantiates a Arango::Task object from it.



35
36
37
# File 'lib/arango/task.rb', line 35

def from_result(arango_result, server: nil)
  from_h(arango_result.to_h, server: server)
end

.get(id:, database: nil, server: Arango.current_server) ⇒ Arango::Task

Gets a task from the server or from a database.



62
63
64
65
66
67
68
69
70
# File 'lib/arango/task.rb', line 62

def get(id:, database: nil, server: Arango.current_server)
  args = { id: id }
  if database
    args[:db] = database.name
    server = database.server
  end
  result = Arango::Requests::Task::Get.execute(server: server, args: args)
  Arango::Task.from_result(result, server: server)
end

.list(database: nil, server: Arango.current_server) ⇒ Array<String>

List all tasks ids from a server or from a database



93
94
95
96
97
98
99
100
101
# File 'lib/arango/task.rb', line 93

def list(database: nil, server: Arango.current_server)
  args = Hash.new
  if database
    args[:db] = database.name
    server = database.server
  end
  result = Arango::Requests::Task::All.execute(server: server, args: args)
  result.map { |task| task[:id] }
end

Instance Method Details

#createObject

Create the task in the database. return [Arango::Task] Returns the task.



205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
# File 'lib/arango/task.rb', line 205

def create
  body = {
    name: @name,
    command: @command,
    period: @period,
    offset: @offset,
    params: @params
  }
  if @id
    result = Arango::Requests::Task::CreateWithId.execute(server: @requester, args: @args, body: body)
  else
    result = Arango::Requests::Task::Create.execute(server: @requester, args: @args, body: body)
    set_id result.id
  end
  @type = result.type.to_sym
  @created = result.created
  @name = result.name
  self
end

#deleteObject

Delete the task from the database. return nil.



227
228
229
230
# File 'lib/arango/task.rb', line 227

def delete
  Arango::Requests::Task::Delete.execute(server: @requester, args: @args)
  nil
end

#set_id(id) ⇒ Object

set id



178
179
180
181
182
183
184
185
# File 'lib/arango/task.rb', line 178

def set_id id
  @id = id
  if @id
    @args[:id] = @id
  else
    @args.delete :id
  end
end

#to_hHash

Convert the Task to a Hash



189
190
191
192
193
194
195
196
197
198
199
200
201
# File 'lib/arango/task.rb', line 189

def to_h
  {
    id: @id,
    name: @name,
    type: @type,
    period: @period,
    command: @command,
    params: @params,
    created: @created,
    cache_name: @cache_name,
    database: @database ? @database.name : nil
  }.delete_if{|_,v| v.nil?}
end