Class: SMQ::Message

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
lib/smq/message.rb

Constant Summary collapse

MAX_ATTEMPTS =
5

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.build(payload, queue = nil) ⇒ Object



8
9
10
11
12
13
# File 'lib/smq/message.rb', line 8

def self.build(payload, queue = nil)
  msg = self.new
  msg.payload = SMQ.encode(payload)
  msg.queue = queue
  msg
end

Instance Method Details

#ack!Object



59
60
61
62
# File 'lib/smq/message.rb', line 59

def ack!
  complete
  save!
end

#ack_and_delete!Object



64
65
66
67
# File 'lib/smq/message.rb', line 64

def ack_and_delete!
  ack!
  destroy
end

#completeObject



51
52
53
# File 'lib/smq/message.rb', line 51

def complete
  self.completed_at = SMQ.now
end

#completed?Boolean

Returns:

  • (Boolean)


47
48
49
# File 'lib/smq/message.rb', line 47

def completed?
  !self.completed_at.nil?
end

#dataObject



15
16
17
# File 'lib/smq/message.rb', line 15

def data
  SMQ.decode(payload)
end

#data=(object) ⇒ Object



18
19
20
# File 'lib/smq/message.rb', line 18

def data=(object)
  self.payload = SMQ.encode(object)
end

#failObject



54
55
56
57
# File 'lib/smq/message.rb', line 54

def fail
  self.failed_at = SMQ.now
  complete
end

#failed?Boolean

Returns:

  • (Boolean)


44
45
46
# File 'lib/smq/message.rb', line 44

def failed?
  !self.failed_at.nil?
end

#lock!(worker) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
# File 'lib/smq/message.rb', line 29

def lock!(worker)
  rows = self.class.update_all(
    ["updated_at = ?, locked_at = ?, locked_by = ?, attempts = (attempts+1)", SMQ.now, SMQ.now, worker.name],
    ["id = ? AND updated_at = ? AND locked_by IS NULL AND completed_at IS NULL", self.id, self.updated_at]
  )
  if rows == 1
    self.reload
    return self
  end
  nil
end

#locked?Boolean

Returns:

  • (Boolean)


41
42
43
# File 'lib/smq/message.rb', line 41

def locked?
  !self.locked_by.nil?
end

#retry!Object



22
23
24
25
26
27
# File 'lib/smq/message.rb', line 22

def retry!
  self.locked_by = nil
  self.locked_at = nil
  fail if self.attempts >= MAX_ATTEMPTS
  save!
end