class Karafka::Params::Params

It provides lazy loading not only until the first usage, but also allows us to skip using deserializer until we execute our logic. That way we can operate with heavy-deserialization data without slowing down the whole application.

Attributes

metadata[R]
raw_payload[R]

Public Class Methods

new(raw_payload, metadata) click to toggle source

@param raw_payload [Object] incoming payload before deserialization @param metadata [Karafka::Params::Metadata] message metadata object

# File lib/karafka/params/params.rb, line 18
def initialize(raw_payload, metadata)
  @raw_payload = raw_payload
  @metadata = metadata
  @deserialized = false
  @payload = nil
end

Public Instance Methods

deserialized?() click to toggle source

@return [Boolean] did given params payload were deserialized already

# File lib/karafka/params/params.rb, line 37
def deserialized?
  @deserialized
end
payload() click to toggle source

@return [Object] lazy-deserialized data (deserialized upon first request)

# File lib/karafka/params/params.rb, line 26
def payload
  return @payload if deserialized?

  @payload = deserialize
  # We mark deserialization as successful after deserialization, as in case of an error
  # this won't be falsely set to true
  @deserialized = true
  @payload
end

Private Instance Methods

deserialize() click to toggle source

@return [Object] tries de-serializes data

# File lib/karafka/params/params.rb, line 44
def deserialize
  Karafka.monitor.instrument('params.params.deserialize', caller: self) do
    metadata.deserializer.call(self)
  end
rescue ::StandardError => e
  Karafka.monitor.instrument('params.params.deserialize.error', caller: self, error: e)
  raise e
end