Not to nit, but could we moved PATTERNS to a frozen array of strings instead of symbols? These symbols are only used as strings and this way we can avoid `.to_sym` on the passed (potentially user controlled) options. `to_sym` could lead to a DoS: http://www.ruby-doc.org/core-2.1.0/doc/security_rdoc.html#label-Symbols.