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, registry_info: 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
24
25
# File 'lib/deimos/transcoder.rb', line 16

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

Instance Attribute Details

#backendClass<Deimos::SchemaBackends::Base>

Returns:



28
29
30
31
32
33
# File 'lib/deimos/transcoder.rb', line 28

def backend
  @backend ||= Deimos.schema_backend(schema: @schema,
                                     namespace: @namespace,
                                     registry_info: @registry_info,
                                     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)


89
90
91
92
93
94
95
96
97
# File 'lib/deimos/transcoder.rb', line 89

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)


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

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)


68
69
70
71
72
73
74
75
76
77
# File 'lib/deimos/transcoder.rb', line 68

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)


101
102
103
# File 'lib/deimos/transcoder.rb', line 101

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

#encode(payload) ⇒ String

Parameters:

  • payload (Object)

Returns:

  • (String)


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

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)


43
44
45
46
47
48
49
# File 'lib/deimos/transcoder.rb', line 43

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, is_key: true)
  end
end

#reset_backendObject

for test helpers



36
37
38
# File 'lib/deimos/transcoder.rb', line 36

def reset_backend
  @backend = nil
end