code: func (r *Ruler) compare(f *Rule, actual interface{}) bool {
  	ruleDebug("beginning comparison")
  	expected := f.Value
  	switch f.Comparator {
  	case "eq":
  		return actual == expected
  
  	case "neq":
  		return actual != expected
  
  	case "gt":
  		return r.inequality(gt, actual, expected)
  
  	case "gte":
  		return r.inequality(gte, actual, expected)
  
  	case "lt":
  		return r.inequality(lt, actual, expected)
  
  	case "lte":
  		return r.inequality(lte, actual, expected)
  
  	case "exists":
  		// not sure this makes complete sense
  		return actual != nil
  
  	case "nexists":
  		return actual == nil
  
  	case "regex":
  		fallthrough
  	case "contains":
  		fallthrough
  	case "matches":
  		return r.regexp(actual, expected)
  
  	case "ncontains":
  		return !r.regexp(actual, expected)
  	default:
  		//should probably return an error or something
  		//but this is good for now
  		//if comparator is not implemented, return false
  		ruleDebug("unknown comparator %s", f.Comparator)
  		return false
  	}
  }
docs: // compares real v. actual values