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)


16
17
18
19
20
21
22
23
# File 'lib/deimos/transcoder.rb', line 16

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:



26
27
28
29
30
# File 'lib/deimos/transcoder.rb', line 26

def backend
  @backend ||= Deimos.schema_backend(schema: @schema,
                                     namespace: @namespace,
                                     backend: @backend_type)
end

#backend_typeObject

Returns the value of attribute backend_type.



6
7
8
# File 'lib/deimos/transcoder.rb', line 6

def backend_type
  @backend_type
end

#key_fieldObject

Returns the value of attribute key_field.



6
7
8
# File 'lib/deimos/transcoder.rb', line 6

def key_field
  @key_field
end

Instance Method Details

#call(message) ⇒ Object

Parameters:

  • message (Karafka::Messages::Message)

Returns:

  • (Object)


81
82
83
84
85
86
87
88
89
# File 'lib/deimos/transcoder.rb', line 81

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)


45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/deimos/transcoder.rb', line 45

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)


60
61
62
63
64
65
66
67
68
69
# File 'lib/deimos/transcoder.rb', line 60

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)


93
94
95
# File 'lib/deimos/transcoder.rb', line 93

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

#encode(payload) ⇒ String

Parameters:

  • payload (Object)

Returns:

  • (String)


73
74
75
76
77
# File 'lib/deimos/transcoder.rb', line 73

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)


35
36
37
38
39
40
41
# File 'lib/deimos/transcoder.rb', line 35

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