subclass filters by type and throw a NoMethodError when an invalid filter type is called