예제 #1
0
        /// <summary>
        /// Track a new event
        /// </summary>
        /// <returns>The response from mixpanel</returns>
        /// <param name="profile">Profile.</param>
        /// <param name="mixpanelEvent">Mixpanel event.</param>
        public Task <MixpanelResponse> Track(Profile profile, IMixpanelEvent mixpanelEvent)
        {
            if (mixpanelEvent == null)
            {
                throw new ArgumentNullException(nameof(mixpanelEvent));
            }

            var eventName  = mixpanelEvent.EventName;
            var properties = MixpanelEventConverter.ToDictionary(mixpanelEvent);

            return(Track(profile, eventName, properties));
        }
예제 #2
0
        public static Dictionary <string, object> ToDictionary(IMixpanelEvent mixpanelEvent)
        {
            const string eventNamePropertyName = nameof(mixpanelEvent.EventName);

            var dictionary = new Dictionary <string, object> ();
            var eventName  = mixpanelEvent.EventName;
            var type       = mixpanelEvent.GetType();
            var fields     = type.GetRuntimeFields().ToArray();
            var properties = type.GetRuntimeProperties().ToArray();

            foreach (var p in properties)
            {
                if (p.Name == eventNamePropertyName)
                {
                    continue;
                }

                var ignoreAttribute = p.GetCustomAttribute <MixpanelIgnoreAttribute> ();
                if (ignoreAttribute != null)
                {
                    continue;
                }

                var propertyName = GetPropertyNameFromAttribute(p) ??
                                   PropertyNameConverter.ToSpacedString(p.Name);

                var propertyValue = p.GetValue(mixpanelEvent);

                dictionary.Add(propertyName, propertyValue);
            }

            foreach (var f in fields)
            {
                var propertyAttribute = f.GetCustomAttribute <MixpanelPropertyAttribute> ();
                if (propertyAttribute == null)
                {
                    continue;
                }

                var fieldName = GetPropertyNameFromAttribute(f) ??
                                PropertyNameConverter.ToSpacedString(f.Name);

                var fieldValue = f.GetValue(mixpanelEvent);

                dictionary.Add(fieldName, fieldValue);
            }

            return(dictionary);
        }
예제 #3
0
 /// <summary>
 /// Track a new event
 /// </summary>
 /// <returns>The response from mixpanel</returns>
 /// <param name="mixpanelEvent">Mixpanel event.</param>
 public Task <MixpanelResponse> Track(IMixpanelEvent mixpanelEvent)
 {
     return(Track(null, mixpanelEvent));
 }