Sha256: 35880aa8a47e741e96509fad53b1edfd5e13708a7a45c3718545d736dbe28dcb
Contents?: true
Size: 1.35 KB
Versions: 4
Compression:
Stored size: 1.35 KB
Contents
# Global registry for storing common configuration. module Adva class Registry < Hash class << self def instance @@instance ||= new end def get(*args) instance.get(*args) end def set(*args) instance.set(*args) end def clear instance.clear end end def initialize super &lambda { |hash, key| hash[key] = Registry.new } end def set(*args) value, last_key = args.pop, args.pop.to_sym target = args.inject(self) { |result, key| result[key.to_sym] } case value when Hash target[last_key].merge!(to_registry(value)) when Array target[last_key] = Array(target[last_key]) unless target[last_key].is_a?(Array) target[last_key] += value else target.merge!(last_key => value) end end def get(*keys) keys.map { |key| key.to_sym }.inject(self) do |result, key| return nil unless result.has_key?(key) result[key] end end protected def merge!(other) other.each { |key, value| self[key] = value } end def to_registry(hash) hash.inject(Registry.new) do |registry, (key, value)| registry[key.to_sym] = value.is_a?(Hash) ? to_registry(value) : value registry end end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
adva-core-0.0.5 | lib/adva/registry.rb |
adva-core-0.0.4 | lib/adva/registry.rb |
adva-core-0.0.2 | lib/adva/registry.rb |
adva-core-0.0.1 | lib/adva/registry.rb |