Renamed conditions module to matchers
Refactored decorator functions into classes to reduce duplication using inheritence