lib/big_brother/configuration.rb in big_brother-0.6.8 vs lib/big_brother/configuration.rb in big_brother-0.8.7
- old
+ new
@@ -2,15 +2,19 @@
class Configuration
GLOBAL_CONFIG_KEY = '_big_brother'
def self.from_file(config_file)
config = YAML.load_file(config_file)
+ return {} unless _valid?(config)
+
+ configured_clusters = config.fetch("clusters")
defaults = config.delete(GLOBAL_CONFIG_KEY)
- config.inject({}) do |clusters, (cluster_name, cluster_values)|
- cluster_details = _apply_defaults(defaults, cluster_values)
- clusters.merge(cluster_name => Cluster.new(cluster_name, _deeply_symbolize_keys(cluster_details)))
+ configured_clusters.inject({}) do |clusters, cluster|
+ cluster_details = _apply_defaults(defaults, cluster)
+ cluster_name = cluster.fetch("cluster_name")
+ clusters.merge(cluster_name => BigBrother::ClusterFactory.create_cluster(cluster_name, _deeply_symbolize_keys(cluster_details)))
end
end
def self._deeply_symbolize_keys(value)
if value.is_a?(Hash)
@@ -28,8 +32,22 @@
def self._apply_defaults(defaults_hash, settings_hash)
return settings_hash unless defaults_hash
defaults_hash.merge(settings_hash) do |key, oldval, newval|
oldval.is_a?(Hash) && newval.is_a?(Hash) ? _apply_defaults(oldval, newval) : newval
end
+ end
+
+ def self._valid?(config)
+ schema_path = File.join(File.dirname(__FILE__), "../resources", "config_schema.yml")
+ schema = YAML.load_file(schema_path)
+ validator = Kwalify::Validator.new(schema)
+ errors = validator.validate(config)
+ valid = !(errors && !errors.empty?)
+
+ unless valid
+ errors.each { |err| BigBrother.logger.info("- [#{err.path}] #{err.message}") }
+ end
+
+ valid
end
end
end