Module: Qs::Payload

Defined in:
lib/qs/payload.rb

Defined Under Namespace

Modules: StringifyParams, Timestamp Classes: InvalidError

Constant Summary collapse

METHOD_NAMES =
Hash.new{ |h, t| raise(InvalidError.new(t)) }.tap do |h|
  h[Job::PAYLOAD_TYPE]   = 'job'
  h[Event::PAYLOAD_TYPE] = 'event'
end.freeze

Class Method Summary collapse

Class Method Details

.deserialize(encoded_payload) ⇒ Object



18
19
20
21
# File 'lib/qs/payload.rb', line 18

def self.deserialize(encoded_payload)
  payload_hash = Qs.decode(encoded_payload)
  self.send(self.type_method_name(payload_hash['type']), payload_hash)
end

.event(payload_hash) ⇒ Object



41
42
43
44
45
46
47
# File 'lib/qs/payload.rb', line 41

def self.event(payload_hash)
  Qs::Event.new(payload_hash['channel'], payload_hash['name'], {
    :params       => payload_hash['params'],
    :publisher    => payload_hash['publisher'],
    :published_at => Timestamp.to_time(payload_hash['published_at'])
  })
end

.event_hash(event) ⇒ Object



49
50
51
52
53
54
55
56
# File 'lib/qs/payload.rb', line 49

def self.event_hash(event)
  self.message_hash(event, {
    'channel'      => event.channel.to_s,
    'name'         => event.name.to_s,
    'publisher'    => event.publisher.to_s,
    'published_at' => Timestamp.new(event.published_at)
  })
end

.job(payload_hash) ⇒ Object



27
28
29
30
31
32
# File 'lib/qs/payload.rb', line 27

def self.job(payload_hash)
  Qs::Job.new(payload_hash['name'], {
    :params     => payload_hash['params'],
    :created_at => Timestamp.to_time(payload_hash['created_at'])
  })
end

.job_hash(job) ⇒ Object



34
35
36
37
38
39
# File 'lib/qs/payload.rb', line 34

def self.job_hash(job)
  self.message_hash(job, {
    'name'       => job.name.to_s,
    'created_at' => Timestamp.new(job.created_at)
  })
end

.message_hash(message, hash) ⇒ Object

private



60
61
62
63
64
65
# File 'lib/qs/payload.rb', line 60

def self.message_hash(message, hash)
  hash.tap do |h|
    h['type']   = message.payload_type.to_s
    h['params'] = StringifyParams.new(message.params)
  end
end

.serialize(message) ⇒ Object



23
24
25
# File 'lib/qs/payload.rb', line 23

def self.serialize(message)
  Qs.encode(self.send("#{self.type_method_name(message.payload_type)}_hash", message))
end

.type_method_name(payload_type) ⇒ Object



14
15
16
# File 'lib/qs/payload.rb', line 14

def self.type_method_name(payload_type)
  METHOD_NAMES[payload_type]
end