class ReeHash::Except
def call(hash, keys = [], **opts)
def call(hash, keys = [], **opts) keys = build_filter_keys(keys) global_except_keys = build_filter_keys(opts[:global_except] || []) recursively_except(hash, keys, global_except_keys) end
def recursively_except(hash, except_keys, global_except_keys)
def recursively_except(hash, except_keys, global_except_keys) result = {} except_keys ||= {} result.default = hash.default result.default_proc = hash.default_proc if hash.default_proc hash.each do |k, v| next if global_except_keys.has_key?(k) next if except_keys.has_key?(k) && except_keys[k].empty? if v.is_a?(Array) result[k] = v.map do |item| if item.is_a?(Hash) recursively_except(item, except_keys[k], global_except_keys) else item end end elsif v.is_a?(Hash) result[k] = recursively_except( v, except_keys[k], global_except_keys ) else result[k] = v end end result end