module Hutch::Config

Configuration settings, available everywhere

There are defaults, which can be overridden by ENV variables prefixed by HUTCH_, and each of these can be overridden using the {.set} method.

@example Configuring on the command-line

HUTCH_PUBLISHER_CONFIRMS=false hutch

Constants

ALL_KEYS

Set of all setting keys

Public Class Methods

[](attr)
Alias for: get
[]=(attr, value)
Alias for: set
boolean_setting(name, default_value) click to toggle source

Define a Boolean user setting @!visibility private

# File lib/hutch/config.rb, line 41
def self.boolean_setting(name, default_value)
  @boolean_keys << name
  @settings_defaults[name] = default_value
end
check_attr(attr) click to toggle source
# File lib/hutch/config.rb, line 254
def self.check_attr(attr)
  unless user_config.key?(attr)
    raise UnknownAttributeError, "#{attr.inspect} is not a valid config attribute"
  end
end
convert_value(attr, value) click to toggle source
# File lib/hutch/config.rb, line 274
def self.convert_value(attr, value)
  case attr
  when 'tracer'
    Kernel.const_get(value)
  else
    value
  end
end
default_config() click to toggle source

Default settings

@return [Hash]

# File lib/hutch/config.rb, line 175
def self.default_config
  @settings_defaults.merge({
    mq_client_properties: {},
    mq_exchange_options: {},
    mq_tls_cert: nil,
    mq_tls_key: nil,
    mq_tls_ca_certificates: nil,
    uri: nil,
    log_level: Logger::INFO,
    client_logger: nil,
    require_paths: [],
    error_handlers: [Hutch::ErrorHandlers::Logger.new],
    # note that this is not a list, it is a chain of responsibility
    # that will fall back to "nack unconditionally"
    error_acknowledgements: [],
    setup_procs: [],
    consumer_groups: {},
    tracer: Hutch::Tracers::NullTracer,
    namespace: nil,
    pidfile: nil,
    serializer: Hutch::Serializers::JSON
  })
end
define_methods() click to toggle source
# File lib/hutch/config.rb, line 295
def self.define_methods
  @config.keys.each do |key|
    define_singleton_method(key) do
      get(key)
    end

    define_singleton_method("#{key}=") do |val|
      set(key, val)
    end
  end
end
env_based_config() click to toggle source

Override defaults with ENV variables which begin with HUTCH_

@return [Hash]

# File lib/hutch/config.rb, line 202
def self.env_based_config
  env_keys_configured.each_with_object({}) {|attr, result|
    value = ENV[key_for(attr)]

    result[attr] = type_cast(attr, value)
  }
end
env_keys_configured() click to toggle source

@return [Array<Symbol>]

# File lib/hutch/config.rb, line 211
def self.env_keys_configured
  ALL_KEYS.each {|attr| check_attr(attr) }

  ALL_KEYS.select { |attr| ENV.key?(key_for(attr)) }
end
get(attr) click to toggle source
# File lib/hutch/config.rb, line 217
def self.get(attr)
  check_attr(attr.to_sym)
  user_config[attr.to_sym]
end
Also aliased as: []
initialize(params = {}) click to toggle source
# File lib/hutch/config.rb, line 162
def self.initialize(params = {})
  unless @config
    @config = default_config
    define_methods
    @config.merge!(env_based_config)
  end
  @config.merge!(params)
  @config
end
is_bool(attr) click to toggle source
# File lib/hutch/config.rb, line 227
def self.is_bool(attr)
  @boolean_keys.include?(attr)
end
is_num(attr) click to toggle source
# File lib/hutch/config.rb, line 240
def self.is_num(attr)
  @number_keys.include?(attr)
end
key_for(attr) click to toggle source
# File lib/hutch/config.rb, line 222
def self.key_for(attr)
  key = attr.to_s.gsub('.', '__').upcase
  "HUTCH_#{key}"
end
load_from_file(file) click to toggle source
# File lib/hutch/config.rb, line 268
def self.load_from_file(file)
  YAML.load(ERB.new(File.read(file)).result).each do |attr, value|
    Hutch::Config.send("#{attr}=", convert_value(attr, value))
  end
end
number_setting(name, default_value) click to toggle source

Define a Number user setting @!visibility private

# File lib/hutch/config.rb, line 34
def self.number_setting(name, default_value)
  @number_keys << name
  @settings_defaults[name] = default_value
end
set(attr, value) click to toggle source
# File lib/hutch/config.rb, line 244
def self.set(attr, value)
  check_attr(attr.to_sym)
  user_config[attr.to_sym] = type_cast(attr, value)
end
Also aliased as: []=
string_setting(name, default_value) click to toggle source

Define a String user setting @!visibility private

# File lib/hutch/config.rb, line 27
def self.string_setting(name, default_value)
  @string_keys << name
  @settings_defaults[name] = default_value
end
to_bool(value) click to toggle source
# File lib/hutch/config.rb, line 231
def self.to_bool(value)
  case value
  when nil, false, '', /^(false|f|no|n|0)$/i
    false
  else
    true
  end
end
to_hash() click to toggle source
# File lib/hutch/config.rb, line 264
def self.to_hash
  user_config
end
user_config() click to toggle source
# File lib/hutch/config.rb, line 260
def self.user_config
  @config ||= initialize
end

Private Class Methods

type_cast(attr, value) click to toggle source
# File lib/hutch/config.rb, line 283
def self.type_cast(attr, value)
  case
  when is_bool(attr) || value == 'false'
    to_bool(value)
  when is_num(attr)
    value.to_i
  else
    value
  end
end