def filter_applies?(key, value, metadata=self)
return metadata.filter_applies_to_any_value?(key, value) if Array === metadata[key] && !(Proc === value)
return metadata.line_number_filter_applies?(value) if key == :line_numbers
return metadata.location_filter_applies?(value) if key == :locations
return metadata.filters_apply?(key, value) if Hash === value
case value
when Regexp
metadata[key] =~ value
when Proc
if value.arity == 2
value.call(metadata[key], metadata) rescue false
else
value.call(metadata[key]) rescue false
end
else
metadata[key].to_s == value.to_s
end
end