class Swarm::Engine::Worker::Command

Attributes

action[R]
hive[R]
metadata[R]

Public Class Methods

from_job(job, hive: Hive.default) click to toggle source
# File lib/swarm/engine/worker/command.rb, line 8
def from_job(job, hive: Hive.default)
  data = job.to_h
  action, metadata = data.values_at(:action, :metadata)
  new(action: action, metadata: metadata, hive: hive)
end
new(hive: Hive.default, action:, metadata:) click to toggle source
# File lib/swarm/engine/worker/command.rb, line 17
def initialize(hive: Hive.default, action:, metadata:)
  @hive = hive
  @action = action
  @metadata = Swarm::Support.symbolize_keys(metadata || {})
end

Public Instance Methods

==(other) click to toggle source
# File lib/swarm/engine/worker/command.rb, line 55
def ==(other)
  other.is_a?(self.class) && other.to_hash == to_hash
end
object() click to toggle source
# File lib/swarm/engine/worker/command.rb, line 36
def object
  @object ||= begin
    return nil unless metadata[:type] && metadata[:id]
    hive.fetch(metadata[:type], metadata[:id])
  end
end
observers() click to toggle source
# File lib/swarm/engine/worker/command.rb, line 30
def observers
  @observers ||= hive.registered_observers.map { |observer_class|
    observer_class.new(self)
  }
end
run!() click to toggle source
# File lib/swarm/engine/worker/command.rb, line 23
def run!
  raise MissingObjectError if object.nil?
  observers.each(&:before_action)
  object.send("_#{action}")
  observers.each(&:after_action)
end
stop?() click to toggle source
# File lib/swarm/engine/worker/command.rb, line 43
def stop?
  action == "stop_worker"
end
to_hash() click to toggle source
# File lib/swarm/engine/worker/command.rb, line 47
def to_hash
  {
    action: action,
    metadata: metadata,
    object: object
  }
end