module Dsc module Mash class << self DEFAULT_PROC = lambda do |hash, key| raise UndefinedAttribute, "Attribute #{key} is not defined in the config file (current hash: #{hash.inspect})." end def new(source) Hashie::Mash.new(source).tap do |hash| recursively_freeze(hash) end end private def recursively_freeze(object) case object when Array object.each { |obj| recursively_freeze(obj) } when Hash object.default_proc = DEFAULT_PROC recursively_freeze(object.values) end end end end end