Class: Deimos::Transcoder

Inherits:
Object
  • Object
show all
Defined in:
lib/deimos/transcoder.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(schema:, namespace:, key_field: nil, use_schema_classes: nil, topic: nil, backend: nil) ⇒ Transcoder

Returns a new instance of Transcoder.

Parameters:

  • schema (String)
  • namespace (String)
  • key_field (Symbol) (defaults to: nil)
  • use_schema_classes (Boolean) (defaults to: nil)
  • backend (Symbol) (defaults to: nil)
  • topic (String) (defaults to: nil)


12
13
14
15
16
17
18
19
# File 'lib/deimos/transcoder.rb', line 12

def initialize(schema:, namespace:, key_field: nil, use_schema_classes: nil, topic: nil, backend: nil)
  @schema = schema
  @namespace = namespace
  self.key_field = key_field
  @use_schema_classes = use_schema_classes
  @backend_type = backend
  @topic = topic
end

Instance Attribute Details

#backendClass < Deimos::SchemaBackends::Base]

Returns Class < Deimos::SchemaBackends::Base].

Returns:



22
23
24
# File 'lib/deimos/transcoder.rb', line 22

def backend
  @backend
end

#backend_typeObject

Returns the value of attribute backend_type.



4
5
6
# File 'lib/deimos/transcoder.rb', line 4

def backend_type
  @backend_type
end

#key_fieldObject

Returns the value of attribute key_field.



4
5
6
# File 'lib/deimos/transcoder.rb', line 4

def key_field
  @key_field
end

Instance Method Details

#call(message) ⇒ Object

Parameters:

  • message (Karafka::Messages::Message)

Returns:

  • (Object)


77
78
79
80
81
82
83
84
85
# File 'lib/deimos/transcoder.rb', line 77

def call(message)
  if self.key_field
    decode_key(message.raw_key)
  elsif message.respond_to?(:raw_payload)
    decode_message(message.raw_payload)
  else
    decode_message(message.raw_key)
  end
end

#decode_key(key) ⇒ Object

Parameters:

  • key (String)

Returns:

  • (Object)


41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/deimos/transcoder.rb', line 41

def decode_key(key)
  return nil if key.nil? || self.key_field.nil?

  decoded_key = self.backend.decode_key(key, self.key_field)
  return decoded_key if self.key_field || !@use_schema_classes

  schema_key = decoded_key.is_a?(Hash) ? decoded_key : { self.key_field => decoded_key }

  Utils::SchemaClass.instance(schema_key,
                              "#{@schema}_key",
                              @namespace)
end

#decode_message(payload) ⇒ Object

Parameters:

  • payload (String)

Returns:

  • (Object)


56
57
58
59
60
61
62
63
64
65
# File 'lib/deimos/transcoder.rb', line 56

def decode_message(payload)
  return nil if payload.nil?

  decoded_payload = self.backend.decode(payload)
  return decoded_payload if !@use_schema_classes || !decoded_payload.is_a?(Hash)

  Utils::SchemaClass.instance(decoded_payload,
                              @schema,
                              @namespace)
end

#decode_message_hash(payload) ⇒ Object

Parameters:

  • payload (String)

Returns:

  • (Object)


89
90
91
# File 'lib/deimos/transcoder.rb', line 89

def decode_message_hash(payload)
  self.key_field ? decode_key(payload) : decode_message(payload)
end

#encode(payload) ⇒ String

Parameters:

  • payload (Object)

Returns:

  • (String)


69
70
71
72
73
# File 'lib/deimos/transcoder.rb', line 69

def encode(payload)
  return nil if payload.nil?

  self.backend.encode(payload)
end

#encode_key(key) ⇒ String

for use in test helpers

Parameters:

  • key (Object)

Returns:

  • (String)


31
32
33
34
35
36
37
# File 'lib/deimos/transcoder.rb', line 31

def encode_key(key)
  if self.key_field
    self.backend.encode_key(self.key_field, key, topic: @topic)
  else
    self.backend.encode(key, topic: @topic)
  end
end