aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoachim Filip Ignacy Bartosik <jbartosik@gmail.com>2010-07-30 20:55:33 +0200
committerJoachim Filip Ignacy Bartosik <jbartosik@gmail.com>2010-08-02 21:06:06 +0200
commit7c264739bba971feac1c24baa1041a6a9b4877cb (patch)
tree749600f3fd63c2506cd3dc48b2c8fe5d10fe57a3
parentRake prepare task to can prepare MySQL configuration (diff)
downloadrecruiting-webapp-7c264739bba971feac1c24baa1041a6a9b4877cb.tar.gz
recruiting-webapp-7c264739bba971feac1c24baa1041a6a9b4877cb.tar.bz2
recruiting-webapp-7c264739bba971feac1c24baa1041a6a9b4877cb.zip
Check if needed configuration entries are present on startup
-rw-r--r--config/initializers/custom_config.rb67
1 files changed, 66 insertions, 1 deletions
diff --git a/config/initializers/custom_config.rb b/config/initializers/custom_config.rb
index 4f1d968..a20dc7b 100644
--- a/config/initializers/custom_config.rb
+++ b/config/initializers/custom_config.rb
@@ -1 +1,66 @@
-APP_CONFIG = YAML.load_file("#{RAILS_ROOT}/config/config.yml")[RAILS_ENV]
+begin
+ APP_CONFIG = YAML.load_file("#{RAILS_ROOT}/config/config.yml")[RAILS_ENV]
+rescue
+ APP_CONFIG = Hash.new
+end
+
+class ConfigChecker
+ def initialize(config = Hash.new, key_prefix = '')
+ @errors = []
+ self.config = config
+ self.key_prefix = key_prefix
+ end
+
+ def config=(new_conf)
+ @config = new_conf || Hash.new
+ end
+
+ def key_prefix=(new_prefix)
+ @key_prefix = new_prefix || String.new
+ end
+
+ def errors
+ @errors
+ end
+
+ def config_must_have(key, type = Object)
+ @errors.push "Not found required key '#{@key_prefix}#{key}' in configuration." and return unless @config.include?(key)
+ @errors.push "Key '#{@key_prefix}#{key}' found in configuration but has wrong type (expected #{type})." unless @config[key].is_a? type
+ end
+
+ def config_must_have_one_of(keys, type = Object)
+ keys_s = keys.inject(nil) do |res, cur|
+ if res.nil?
+ "'#{@key_prefix}#{cur}'"
+ else
+ "#{res}, '#{@key_prefix}#{cur}'"
+ end
+ end
+
+ found = keys.inject(false) { |res, cur| res |= @config.include?(cur) }
+ correct_type = keys.inject(false) { |res, cur| res |= @config.include?(cur) && @config[cur].is_a?(type) }
+
+ @errors.push "You should provide at least one of those keys: #{keys_s} in configuration." and return unless found
+ @errors.push "All of those keys: #{keys_s} were not present or had wrong (expected #{type})." unless correct_type
+ end
+end
+
+checker = ConfigChecker.new(APP_CONFIG)
+
+checker.config_must_have('developer_data', Hash)
+
+checker.config = APP_CONFIG['developer_data']
+checker.key_prefix = 'developer_data/'
+
+checker.config_must_have('check')
+
+if APP_CONFIG['developer_data'].try['check']
+ checker.config_must_have('min_months_mentor_is_dev')
+ checker.config_must_have_one_of(['uri', 'data'])
+end
+
+unless checker.errors.empty?
+ puts "Error(s) while checking configuration:"
+ checker.errors.each{ |err| puts " * #{err}" }
+ exit
+end