class Konfigyu::Config
Does the meat of the work
Constants
- DEFAULT_EXAMPLE_FILENAME
- DEFAULT_FILENAME
Attributes
config_file[RW]
data[RW]
options[RW]
Public Class Methods
new(config_file = nil, options = {})
click to toggle source
Options Example:
options = {
required_fields: [ 'top_level', 'top_level.second_level_field', 'log', 'log.level', ], required_values: { 'log.level': %w{none fatal error warn info debug}, }
}
# File lib/konfigyu/config.rb, line 24 def initialize(config_file = nil, options = {}) self.config_file = config_file.nil? ? File.expand_path("~/#{DEFAULT_FILENAME}") : File.expand_path(config_file) if !self.config_file || !File.exist?(self.config_file) raise Konfigyu::FileNotFoundException, "Missing configuration file: #{self.config_file}" end self.data = Sycl.load_file(self.config_file) @options = initialize_options(options) validate end
Public Instance Methods
[](key)
click to toggle source
# File lib/konfigyu/config.rb, line 41 def [](key) data.get(key) end
method_missing(method_name, *args, &block)
click to toggle source
Calls superclass method
# File lib/konfigyu/config.rb, line 49 def method_missing(method_name, *args, &block) return super unless data config_chain = method_name.to_s if !config_chain.chomp!('=').nil? data[config_chain] = args.first elsif deep_key_exists?(config_chain) data[config_chain] else super end end
respond_to_missing?(method_name, _include_private = false)
click to toggle source
# File lib/konfigyu/config.rb, line 45 def respond_to_missing?(method_name, _include_private = false) data && !deep_key_exists?(method_name.to_s.chomp('=')).nil? end
validate()
click to toggle source
# File lib/konfigyu/config.rb, line 35 def validate validate_usage validate_required_fields validate_required_values end
Private Instance Methods
deep_key_exists?(config_key)
click to toggle source
# File lib/konfigyu/config.rb, line 113 def deep_key_exists?(config_key) data.get(config_key) rescue NoMethodError false end
default_options()
click to toggle source
# File lib/konfigyu/config.rb, line 94 def default_options { required_fields: [], required_values: {} } end
initialize_options(options = {})
click to toggle source
# File lib/konfigyu/config.rb, line 101 def initialize_options(options = {}) valid_keys = default_options.keys {}.merge(default_options).tap do |sanitized_option| unless options.keys.empty? options.keys.each do |key| sanitized_key = key.downcase.to_sym sanitized_option[sanitized_key] = options[key] if valid_keys.include?(sanitized_key) end end end end
validate_required_fields()
click to toggle source
# File lib/konfigyu/config.rb, line 71 def validate_required_fields errors = [] (@options[:required_fields] || []).each do |required_field| errors.push(required_field) unless deep_key_exists?(required_field) end msg = "Missing required configuration elements: #{errors.join(', ')}" raise Konfigyu::InvalidConfigException, msg if errors.count > 0 end
validate_required_values()
click to toggle source
# File lib/konfigyu/config.rb, line 81 def validate_required_values errors = [] (@options[:required_values] || {}).each_pair do |key, required_value| value = data.get(key.to_s) next if !options[:required_fields].include?(key) && (value.nil? || value.empty?) errors.push(key) unless required_value.include?(value) end msg = "One or more keys missing required value: #{errors.join(', ')}" raise Konfigyu::InvalidConfigException, msg if errors.count > 0 end
validate_usage()
click to toggle source
# File lib/konfigyu/config.rb, line 64 def validate_usage config_usage = "See #{DEFAULT_EXAMPLE_FILENAME} for more information on configuration." msg = "Missing configuration data for #{config_file}." msg += "\n#{config_usage}" if File.exist?(DEFAULT_EXAMPLE_FILENAME) raise Konfigyu::InvalidConfigException, msg unless data end