module App::Config
СДЕЛАТЬ: автоперезагрузку при изменении файла.
Public Instance Methods
init( approot: nil, configdir: 'config', filename: 'cfg', env: ( ENV['APP_ENV'] || 'development' ) )
click to toggle source
Создаёт корневой словарь настроек. Автоматически создаёт глобальную переменную Cfg. Автоматически подгружает AMQP и HTTP роуты.
# File lib/app-config.rb, line 19 def init( approot: nil, configdir: 'config', filename: 'cfg', env: ( ENV['APP_ENV'] || 'development' ) ) raise NoMethodError.new('Config already defined.') if defined?( ::Cfg ) root = Pathname( approot || __dir__ ).expand_path.to_s.freeze env = env.to_sym.freeze config = {} # Все настройки приложения + роуты configfile = "#{ root }/#{ configdir }/#{ filename }.#{ env }.yml" amqp_routesfile = "#{ root }/#{ configdir }/amqp.#{ env }.yml" http_routesfile = "#{ root }/#{ configdir }/http.#{ env }.yml" # raise ArgumentError.new("Не найден #{ configfile }!") unless File.exist?( configfile ) # raise ArgumentError.new("Не найден #{ amqp_routesfile }!") unless File.exist?( amqp_routesfile ) # Кто первый встал, того и тапки. Kernel.const_set('Cfg', config) config.merge!( YAML.load_file( configfile ).keys_to_symbols ) rescue nil $0 += "[ #{ config.app.id } ]" if config.app? && config.app.id? config[ :app ] ||= { id: $0 } config.app[ :log ] ||= ENV['APP_LOG'] config.merge!({ root: root, env: env, configdir: "#{ root }/#{ configdir }", amqproutes: File.exist?( amqp_routesfile ) ? YAML.load_file( amqp_routesfile ).keys_to_symbols : {}, httproutes: File.exist?( http_routesfile ) ? YAML.load_file( http_routesfile ).keys_to_symbols : {} }) config[:loglevel] = begin Kernel.const_get("Logger::#{ ( ENV['LOG_LEVEL'] || config.app.loglevel || ( env == :production ? :WARN : :DEBUG ) ).to_s.upcase }") rescue Logger::DEBUG end config end
remove()
click to toggle source
# File lib/app-config.rb, line 57 def remove Kernel.send( :remove_const, 'Cfg' ) if defined?( Cfg ) end