Module: Optimizely::Helpers::EventTagUtils

Defined in:
lib/optimizely/helpers/event_tag_utils.rb

Constant Summary collapse

REVENUE_EVENT_METRIC_NAME =
'revenue'
NUMERIC_EVENT_METRIC_NAME =
'value'

Class Method Summary collapse

Class Method Details

.get_numeric_value(event_tags, logger = nil) ⇒ Object



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/optimizely/helpers/event_tag_utils.rb', line 64

def get_numeric_value(event_tags, logger = nil)
  # Grab the numeric event value from the event tags. "value" is a reserved keyword.
  # The value of 'value' can be a float or a numeric string
  # 
  # event_tags - +Hash+ representing metadata associated with the event.
  # Returns  +Number+ | +nil+ if value can't be retrieved from the event tags.
  logger = SimpleLogger.new if logger.nil?

  if event_tags.nil?
    logger.log(Logger::DEBUG,"Event tags is undefined.")
    return nil
  end

  if !Helpers::Validator.event_tags_valid?(event_tags)
    logger.log(Logger::DEBUG,"Event tags is not a dictionary.")
    return nil
  end

  if !event_tags.has_key?(NUMERIC_EVENT_METRIC_NAME)
    logger.log(Logger::DEBUG,"The numeric metric key is not defined in the event tags.")
    return nil
  end

  if event_tags[NUMERIC_EVENT_METRIC_NAME].nil?
    logger.log(Logger::DEBUG,"The numeric metric key is null.")
    return nil
  end

  raw_value = event_tags[NUMERIC_EVENT_METRIC_NAME]

  if raw_value === true or raw_value === false
    logger.log(Logger::DEBUG,"Provided numeric value is a boolean, which is an invalid format.")
    return nil
  end

  if raw_value.is_a? Array or  raw_value.is_a? Hash or raw_value.to_f.nan? or raw_value.to_f.infinite?
      logger.log(Logger::DEBUG,"Provided numeric value is in an invalid format.")
      return nil
  end

  if !Helpers::Validator.string_numeric?(raw_value)
      logger.log(Logger::DEBUG,"Provided numeric value is not a numeric string.")
      return nil     
  end

  raw_value = raw_value.to_f

  logger.log(Logger::INFO,"The numeric metric value #{raw_value} will be sent to results.")

  raw_value
end

.get_revenue_value(event_tags) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/optimizely/helpers/event_tag_utils.rb', line 31

def get_revenue_value(event_tags)
  # Grab the revenue value from the event tags. "revenue" is a reserved keyword.
  # The revenue value must be an integer.
  # 
  # event_tags - Hash representing metadata associated with the event.
  # Returns revenue value as an integer number
  # Returns nil if revenue can't be retrieved from the event tags.

  if event_tags.nil? or !Helpers::Validator.event_tags_valid?(event_tags)
    return nil
  end

  unless event_tags.has_key?(REVENUE_EVENT_METRIC_NAME)
    return nil
  end

  logger = SimpleLogger.new
  raw_value = event_tags[REVENUE_EVENT_METRIC_NAME]

  unless raw_value.is_a? Numeric
    logger.log(Logger::WARN, "Failed to parse revenue value #{raw_value} from event tags.")
    return nil
  end

  if raw_value.is_a? Float
    logger.log(Logger::WARN, "Failed to parse revenue value #{raw_value} from event tags.")
    return nil
  end

  logger.log(Logger::INFO, "Parsed revenue value #{raw_value} from event tags.")
  raw_value
end

.isStringNumeric(str) ⇒ Object



27
28
29
# File 'lib/optimizely/helpers/event_tag_utils.rb', line 27

def isStringNumeric(str)
  Float(str) != nil rescue false
end