Module: Legion::Extensions::Node::Config

Defined in:
lib/legion/extensions/node/config.rb

Constant Summary collapse

DEFAULT_SETTINGS =
{
  cluster_control: {
    auth:  {
      mode:                   'auto',
      timestamp_skew_seconds: 300,
      nonce_bytes:            16
    },
    queue: {
      durable:        true,
      exclusive:      false,
      auto_delete:    false,
      queue_type:     'classic',
      expires_ms:     604_800_000,
      message_ttl_ms: 86_400_000,
      max_length:     1000
    }
  }
}.freeze

Class Method Summary collapse

Class Method Details

.cluster_controlObject



32
33
34
# File 'lib/legion/extensions/node/config.rb', line 32

def cluster_control
  deep_merge(default_settings[:cluster_control], extension_settings[:cluster_control] || {})
end

.control_authObject



36
37
38
# File 'lib/legion/extensions/node/config.rb', line 36

def control_auth
  cluster_control[:auth] || {}
end

.control_queueObject



40
41
42
# File 'lib/legion/extensions/node/config.rb', line 40

def control_queue
  cluster_control[:queue] || {}
end

.deep_dup(value) ⇒ Object



62
63
64
65
66
67
68
69
70
71
# File 'lib/legion/extensions/node/config.rb', line 62

def deep_dup(value)
  case value
  when Hash
    value.each_with_object({}) { |(key, val), result| result[key] = deep_dup(val) }
  when Array
    value.map { |item| deep_dup(item) }
  else
    value
  end
end

.deep_merge(base, override) ⇒ Object



54
55
56
57
58
59
60
# File 'lib/legion/extensions/node/config.rb', line 54

def deep_merge(base, override)
  base_hash = symbolize_keys(base)
  override_hash = symbolize_keys(override)
  base_hash.merge(override_hash) do |_key, old_value, new_value|
    old_value.is_a?(Hash) && new_value.is_a?(Hash) ? deep_merge(old_value, new_value) : new_value
  end
end

.default_settingsObject



28
29
30
# File 'lib/legion/extensions/node/config.rb', line 28

def default_settings
  deep_dup(DEFAULT_SETTINGS)
end

.extension_settingsObject



44
45
46
47
48
49
50
51
52
# File 'lib/legion/extensions/node/config.rb', line 44

def extension_settings
  return {} unless defined?(Legion::Settings) && Legion::Settings.respond_to?(:dig)

  settings = Legion::Settings.dig(:extensions, :node)
  settings.is_a?(Hash) ? symbolize_keys(settings) : {}
rescue StandardError => e
  log.debug("node settings lookup failed: #{e.message}")
  {}
end

.logObject



84
85
86
# File 'lib/legion/extensions/node/config.rb', line 84

def log
  Legion::Logging.respond_to?(:logger) ? Legion::Logging.logger : Legion::Logging
end

.symbolize_keys(value) ⇒ Object



73
74
75
76
77
78
79
80
81
82
# File 'lib/legion/extensions/node/config.rb', line 73

def symbolize_keys(value)
  case value
  when Hash
    value.each_with_object({}) { |(key, val), result| result[key.to_sym] = symbolize_keys(val) }
  when Array
    value.map { |item| symbolize_keys(item) }
  else
    value
  end
end