Class: Deimos::SchemaClass::Record

Inherits:
Base
  • Object
show all
Defined in:
lib/deimos/schema_class/record.rb,
sig/defs.rbs

Overview

Base Class of Record Classes generated from Avro.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#==, #[]=, #as_json, #hash, #initialize, #inspect

Constructor Details

This class inherits a constructor from Deimos::SchemaClass::Base

Instance Attribute Details

#tombstone_keyObject

Returns the value of attribute tombstone_key.

Returns:

  • (Object)


802
803
804
# File 'sig/defs.rbs', line 802

def tombstone_key
  @tombstone_key
end

Class Method Details

.initialize_from_value(value) ⇒ SchemaClass::Record

Parameters:

  • value (Object)

Returns:



76
77
78
79
80
# File 'lib/deimos/schema_class/record.rb', line 76

def self.initialize_from_value(value)
  return nil if value.nil?

  value.is_a?(self) ? value : self.new(**value.symbolize_keys)
end

Instance Method Details

#[](key) ⇒ Object

Element access method as if this Object were a hash

@param key

@return — The value of the attribute if exists, nil otherwise

Parameters:

  • key (String, Symbol)

Returns:

  • (Object)


37
38
39
# File 'lib/deimos/schema_class/record.rb', line 37

def [](key)
  self.try(key.to_sym)
end

#full_schemaString

Returns the full schema name of the inheriting class.

Returns:

  • (String)


60
61
62
# File 'lib/deimos/schema_class/record.rb', line 60

def full_schema
  "#{namespace}.#{schema}"
end

#merge(other_hash) ⇒ SchemaClass::Base

Merge a hash or an identical schema object with this one and return a new object.

@param other_hash

Parameters:

Returns:



26
27
28
29
30
31
32
# File 'lib/deimos/schema_class/record.rb', line 26

def merge(other_hash)
  obj = self.class.new(**self.to_h.symbolize_keys)
  other_hash.to_h.each do |k, v|
    obj.send("#{k}=", v)
  end
  obj
end

#namespaceString

Returns the namespace for the schema of the inheriting class.

Returns:

  • (String)


54
55
56
# File 'lib/deimos/schema_class/record.rb', line 54

def namespace
  raise NotImplementedError
end

#schemaString

Returns the schema name of the inheriting class.

Returns:

  • (String)


48
49
50
# File 'lib/deimos/schema_class/record.rb', line 48

def schema
  raise NotImplementedError
end

#schema_fields::Array[String]

@return — an array of fields names in the schema.

Returns:

  • (::Array[String])


71
72
73
# File 'lib/deimos/schema_class/record.rb', line 71

def schema_fields
  validator.schema_fields.map(&:name)
end

#to_h::Hash[untyped, untyped]

Converts the object attributes to a hash which can be used for Kafka

@return — the payload as a hash.

Returns:

  • (::Hash[untyped, untyped])


15
16
17
18
19
20
21
# File 'lib/deimos/schema_class/record.rb', line 15

def to_h
  if self.tombstone_key
    { payload_key: self.tombstone_key&.as_json }
  else
    self.as_json
  end
end

#validatorDeimos::SchemaBackends::Base

Returns the schema validator from the schema backend



66
67
68
# File 'lib/deimos/schema_class/record.rb', line 66

def validator
  Deimos.schema_backend(schema: schema, namespace: namespace)
end

#with_indifferent_accessSchemaClass::Record

Returns:



42
43
44
# File 'lib/deimos/schema_class/record.rb', line 42

def with_indifferent_access
  self
end