Class: Arango::Task

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

Overview

Arango Task

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.

Parameters:

  • command (String) (defaults to: nil)

    The javascript code to execute, optional.

  • name (String) (defaults to: nil)

    The task name, optional.

  • offset (Integer) (defaults to: nil)

    The number of seconds initial delay, optional.

  • params (Hash) (defaults to: nil)

    Hash of params to pass to the command, optional.

  • period (Integer) (defaults to: nil)

    Number of seconds between executions, optional.



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

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.

Returns:

  • (String)

    The javascript code as string.



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

def command
  @command
end

#createdObject (readonly)

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



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

def created
  @created
end

#databaseObject (readonly)

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



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

def database
  @database
end

#idString

The Task id.

Returns:

  • (String)


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

def id
  @id
end

#nameString

The Task name.

Returns:

  • (String)

    or nil



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

def name
  @name
end

#offsetInteger

The number of seconds initial delay.

Returns:

  • (Integer)

    or nil



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

def offset
  @offset
end

#paramsObject

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



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

def params
  @params
end

#periodInteger

Number of seconds between executions.

Returns:

  • (Integer)

    or nil



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

def period
  @period
end

#serverObject (readonly)

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



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

def server
  @server
end

#typeObject (readonly)

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



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

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

Parameters:

  • database (Arango::Database) (defaults to: nil)

    A database, optional if server is given.

  • server (Arango::Server) (defaults to: Arango.current_server)

    Server, optional if database is given.

Returns:



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

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.

Parameters:

  • id (String)

    The id of the Task

  • database (Arango::Database) (defaults to: nil)

    A database, optional if server is given.

  • server (Arango::Server) (defaults to: Arango.current_server)

    Server, optional if database is given.

Returns:



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

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

Returns:

  • (Boolean)


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

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.

Parameters:

  • task_hash (Hash)

Returns:

Raises:



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

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.

Parameters:

Returns:



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

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.

Parameters:

  • id (String)

    The id of the Task

  • database (Arango::Database) (defaults to: nil)

    A database, optional if server is given.

  • server (Arango::Server) (defaults to: Arango.current_server)

    Server, optional if database is given.

Returns:



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

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

Parameters:

  • database (Arango::Database) (defaults to: nil)

    A database, optional if server is given.

  • server (Arango::Server) (defaults to: Arango.current_server)

    Server, optional if database is given.

Returns:

  • (Array<String>)


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

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.



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

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.



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

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

#set_id(id) ⇒ Object

set id



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

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

Returns:

  • (Hash)


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

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