module Gear::Kuddly
Namespace to hide all of the KDL Configure stuff.
Constants
- WARNINGS
Public Class Methods
get_config(provided_config_file = nil)
click to toggle source
get_config searches for any kdl document inside of the root folder Then parses it, and merges the data based on the current environment.
# File lib/gear/kuddly.rb, line 148 def get_config(provided_config_file = nil) config_file, merged_configs = provided_config_file, {} config_file = get_root_config_file() unless provided_config_file != nil # If the config file is just nil then we probably don't have one. return nil unless config_file != nil # parses then maps the kdl configs = map_kdl(parse_kdl(config_file)) env = ENV['environment'] ||= "development" configs.each do |key, setting| if setting.has_key? :default && env.to_sym merged_configs[key] = setting[:default].merge(setting[env.to_sym]) else merged_configs[key] = setting['default'] end end merged_configs end
get_root_config_file(search_pattern = "config.kdl")
click to toggle source
get kdl config file
# File lib/gear/kuddly.rb, line 172 def get_root_config_file(search_pattern = "config.kdl") Dir.glob(search_pattern).first end
included(mod)
click to toggle source
# File lib/gear/kuddly.rb, line 27 def included(mod) mod.extend(ClassMethods) end
kdl_error_message(kdl_string="",error_message="", error=nil)
click to toggle source
# File lib/gear/kuddly.rb, line 34 def kdl_error_message(kdl_string="",error_message="", error=nil) # parse error message to get line number and column: m = error_message.match( /\((\d)+:(\d)\)/ ) if m == nil warn "kdl_error_message was called on a nil error message?" warn "message: #{error_message}" warn "kdl_string: #{kdl_string}" warn "current dir: #{Dir.pwd}" warn "#{error}" return end line = m[1].to_i lines = kdl_string.split( "\n" ) em = "\n" em << "#{line-4}: #{lines[line-4]}\n" if (line-4) > 0 && (line-4) < lines.count em << "#{line-3}: #{lines[line-3]}\n" if (line-3) > 0 && (line-3) < lines.count em << "#{line-2}: #{lines[line-2]}\n" if (line-2) > 0 && (line-2) < lines.count em << "#{line-1}: #{lines[line-1]}\n" if (line-1) > 0 && (line-1) < lines.count em << "#{line}: #{lines[line]}\n" if (line) em << "#{line+1}: #{lines[line+1]}\n" if (line+1) > 0 && (line+1) < lines.count em << "#{line+2}: #{lines[line+2]}\n" if (line+2) > 0 && (line+2) < lines.count em << "#{line+3}: #{lines[line+3]}\n" if (line+3) > 0 && (line+3) < lines.count em << "#{line+4}: #{lines[line+4]}\n" if (line+4) > 0 && (line+4) < lines.count # em << "\n" WARNINGS << em end
map_kdl(kdl_doc=nil)
click to toggle source
Maps kdl settings. Settings Example: “‘ database {
default adapter="sqlite3" database="#{database}" host="localhost" max_connections=5 timeout=5000
development
test
production adapter="postgres" database="kow"
} “‘
# File lib/gear/kuddly.rb, line 106 def map_kdl(kdl_doc=nil) configs = {} if kdl_doc # We have a kdl document, so that's good. # iterate through each top level node to see what kind of data we have. kdl_doc.nodes.each do |d| config_name = d.name.to_sym configs[config_name] = {} if d.children.length > 0 # we've got kids! # This node will have sub nodes with properties d.children.each do |en| env_name = en.name.to_sym # parse the settings for each environment configs[config_name][env_name] = {} en.properties.each do |key, value| configs[config_name][env_name][key.to_sym] = value.value end end else # we've got raw data, so place it into a default hash spot. vals = [] if d.arguments.length > 1 d.arguments.each { |v| vals << v.value } else vals = d.arguments.first.value end configs[config_name]['default'] = vals end end end configs end
parse_kdl(config_file = nil, silence_warnings = false)
click to toggle source
parses a kdl file into a kdl document Object. returns nil if it’s false. Also assumes that the file is exists. an optional silence_warnings parameter is set to false. This is used for testing.
# File lib/gear/kuddly.rb, line 69 def parse_kdl(config_file = nil, silence_warnings = false) begin kdl_string = File.open(config_file).read rescue => error # Errno::ENOENT puts "" puts "Error trying to read a config file: \"#{error}.\"" puts " Attempted to open: #{config_file}" puts " Current directory: #{Dir.pwd}" puts " files in directory: #{Dir.glob('*')}" puts "" end begin kdl_doc = KDL.parse_document(kdl_string) rescue => error warn "#{error}" # parse error message to get line number and column: message = Kuddly.kdl_error_message(kdl_string, error.message, error) m = error.message.match( /\((\d)+:(\d)\)/ ) line, column = m[1].to_i, m[2].to_i if m.respond_to? '[]' warn("\nError parsing config: #{config_file}, on line: #{line}, at column: #{column}.", message, "#{error.message}", uplevel: 1) unless silence_warnings end kdl_doc end
setup(app, *a, &block)
click to toggle source
required for compliance reasons
# File lib/gear/kuddly.rb, line 32 def setup(app, *a, &block) end