class Object
Public Instance Methods
deep_symbolize()
click to toggle source
# File lib/bisu/object_extension.rb, line 2 def deep_symbolize case self when Array self.map { |v| v.deep_symbolize } when Hash self.inject({}) { |memo, (k,v)| memo[k.to_sym] = v.deep_symbolize; memo } else self end end
validate_structure!(structure, error_prefix=[])
click to toggle source
# File lib/bisu/object_extension.rb, line 13 def validate_structure!(structure, error_prefix=[]) return if self == nil && structure[:optional] prepend_error = error_prefix.empty? ? "" : (["self"] + error_prefix + [": "]).join unless self.is_a? structure[:type] raise ArgumentError.new("#{prepend_error}Expected #{structure[:type]}, got #{self.class}") end return unless structure[:elements] case self when Array self.each_with_index do |e, i| e.validate_structure!(structure[:elements], error_prefix + ["[#{i}]"]) end when Hash mandatory_keys = structure[:elements].map { |k,s| k unless s[:optional] }.compact unless (missing = mandatory_keys - self.keys).empty? raise ArgumentError.new("#{prepend_error}Missing keys: #{missing.join(', ')}") end structure[:elements].each do |key, structure| self[key].validate_structure!(structure, error_prefix + ["[:#{key}]"]) end end end