Class: BigBrother::Configuration
- Inherits:
-
Object
- Object
- BigBrother::Configuration
- Defined in:
- lib/big_brother/configuration.rb
Constant Summary collapse
- GLOBAL_CONFIG_KEY =
'_big_brother'
Class Method Summary collapse
- ._apply_defaults(defaults_hash, settings_hash) ⇒ Object
- ._deeply_symbolize_keys(value) ⇒ Object
- ._valid?(config) ⇒ Boolean
- .from_file(config_file) ⇒ Object
Class Method Details
._apply_defaults(defaults_hash, settings_hash) ⇒ Object
32 33 34 35 36 37 |
# File 'lib/big_brother/configuration.rb', line 32 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 |
._deeply_symbolize_keys(value) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/big_brother/configuration.rb', line 19 def self._deeply_symbolize_keys(value) if value.is_a?(Hash) value.inject({}) do |symbolized_hash, (hash_key, hash_value)| symbolized_hash[hash_key.to_sym] = _deeply_symbolize_keys(hash_value) symbolized_hash end elsif value.is_a?(Array) value.map { |item| _deeply_symbolize_keys(item) } else value end end |
._valid?(config) ⇒ Boolean
39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/big_brother/configuration.rb', line 39 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.}") } end valid end |
.from_file(config_file) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 |
# File 'lib/big_brother/configuration.rb', line 5 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) 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 |