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
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