lib/karafka/admin/configs/config.rb
# frozen_string_literal: true
module Karafka
module Admin
module Configs
# Represents a single config entry that is related to a resource
class Config
attr_reader :name, :value, :synonyms
class << self
# Creates a single config entry from the Rdkafka config result entry
#
# @param rd_kafka_config [Rdkafka::Admin::ConfigBindingResult]
# @return [Config]
def from_rd_kafka(rd_kafka_config)
new(
name: rd_kafka_config.name,
value: rd_kafka_config.value,
read_only: rd_kafka_config.read_only,
default: rd_kafka_config.default,
sensitive: rd_kafka_config.sensitive,
synonym: rd_kafka_config.synonym,
synonyms: rd_kafka_config.synonyms.map do |rd_kafka_synonym|
from_rd_kafka(rd_kafka_synonym)
end
)
end
end
# Creates new config instance either for reading or as part of altering operation
#
# @param name [String] config name
# @param value [String] config value
# @param default [Integer] 1 if default
# @param read_only [Integer] 1 if read only
# @param sensitive [Integer] 1 if sensitive
# @param synonym [Integer] 1 if synonym
# @param synonyms [Array] given config synonyms (if any)
#
# @note For alter operations only `name` and `value` are needed
def initialize(
name:,
value:,
default: -1,
read_only: -1,
sensitive: -1,
synonym: -1,
synonyms: []
)
@name = name
@value = value
@synonyms = []
@default = default
@read_only = read_only
@sensitive = sensitive
@synonym = synonym
@synonyms = synonyms
end
# @return [Boolean] Is the config property is set to its default value on the broker
def default? = @default.positive?
# @return [Boolean] Is the config property is read-only on the broker
def read_only? = @read_only.positive?
# @return [Boolean] if the config property contains sensitive information (such as
# security configuration
def sensitive? = @sensitive.positive?
# @return [Boolean] is this entry is a synonym
def synonym? = @synonym.positive?
# @return [Hash] hash that we can use to operate with rdkafka
def to_native_hash = {
name: name,
value: value
}.freeze
end
end
end
end