public bool MatchesVisitor(string definition)
        {
            Mandate.ParameterNotNullOrEmpty(definition, "definition");

            ReferralSetting referralSetting;

            try
            {
                referralSetting = JsonConvert.DeserializeObject <ReferralSetting>(definition);
            }
            catch (JsonReaderException)
            {
                throw new ArgumentException(string.Format("Provided definition is not valid JSON: {0}", definition));
            }

            var referrer         = _referrerProvider.GetReferrer();
            var invariantCulture = CultureInfo.InvariantCulture;

            switch (referralSetting.Match)
            {
            case ReferralSettingMatch.MatchesValue:
                return(referrer.Equals(referralSetting.Value, StringComparison.InvariantCultureIgnoreCase));

            case ReferralSettingMatch.DoesNotMatchValue:
                return(!referrer.Equals(referralSetting.Value, StringComparison.InvariantCultureIgnoreCase));

            case ReferralSettingMatch.ContainsValue:
                return(invariantCulture.CompareInfo.IndexOf(referrer, referralSetting.Value,
                                                            CompareOptions.IgnoreCase) >= 0);

            case ReferralSettingMatch.DoesNotContainValue:
                return(invariantCulture.CompareInfo.IndexOf(referrer, referralSetting.Value,
                                                            CompareOptions.IgnoreCase) < 0);

            default:
                return(false);
            }
        }
        public bool MatchesVisitor(string definition)
        {
            if (string.IsNullOrEmpty(definition))
            {
                throw new ArgumentNullException(nameof(definition));
            }

            ReferralSetting referralSetting;

            try
            {
                referralSetting = JsonConvert.DeserializeObject <ReferralSetting>(definition);
            }
            catch (JsonReaderException)
            {
                throw new ArgumentException($"Provided definition is not valid JSON: {definition}");
            }

            var referrer = _referrerProvider.GetReferrer();

            switch (referralSetting.Match)
            {
            case ReferralSettingMatch.MatchesValue:
                return(MatchesValue(referrer, referralSetting.Value));

            case ReferralSettingMatch.DoesNotMatchValue:
                return(!MatchesValue(referrer, referralSetting.Value));

            case ReferralSettingMatch.ContainsValue:
                return(ContainsValue(referrer, referralSetting.Value));

            case ReferralSettingMatch.DoesNotContainValue:
                return(!ContainsValue(referrer, referralSetting.Value));

            default:
                return(false);
            }
        }