class Optimizely::EventBuilder

Constants

ACTIVATE_EVENT_KEY
ENDPOINT
POST_HEADERS

Public Instance Methods

create_conversion_event(project_config, event, user_id, attributes, event_tags) click to toggle source
# File lib/optimizely/event_builder.rb, line 137
def create_conversion_event(project_config, event, user_id, attributes, event_tags)
  # Create conversion Event to be sent to the logging endpoint.
  #
  # project_config -           +Object+ Instance of ProjectConfig
  # event -                    +Object+ Event which needs to be recorded.
  # user_id -                  +String+ ID for user.
  # attributes -               +Hash+ representing user attributes and values which need to be recorded.
  # event_tags -               +Hash+ representing metadata associated with the event.
  #
  # Returns +Event+ encapsulating the conversion event.

  event_params = get_common_params(project_config, user_id, attributes)
  conversion_params = get_conversion_params(event, event_tags)
  event_params[:visitors][0][:snapshots] = [conversion_params]

  Event.new(:post, ENDPOINT, event_params, POST_HEADERS)
end
create_impression_event(project_config, experiment, variation_id, user_id, attributes) click to toggle source
# File lib/optimizely/event_builder.rb, line 119
def create_impression_event(project_config, experiment, variation_id, user_id, attributes)
  # Create impression Event to be sent to the logging endpoint.
  #
  # project_config - +Object+ Instance of ProjectConfig
  # experiment -   +Object+ Experiment for which impression needs to be recorded.
  # variation_id - +String+ ID for variation which would be presented to user.
  # user_id -      +String+ ID for user.
  # attributes -   +Hash+ representing user attributes and values which need to be recorded.
  #
  # Returns +Event+ encapsulating the impression event.

  event_params = get_common_params(project_config, user_id, attributes)
  impression_params = get_impression_params(project_config, experiment, variation_id)
  event_params[:visitors][0][:snapshots].push(impression_params)

  Event.new(:post, ENDPOINT, event_params, POST_HEADERS)
end

Private Instance Methods

create_timestamp() click to toggle source
# File lib/optimizely/event_builder.rb, line 216
def create_timestamp
  # Returns +Integer+ Current timestamp

  (Time.now.to_f * 1000).to_i
end
create_uuid() click to toggle source
# File lib/optimizely/event_builder.rb, line 222
def create_uuid
  # Returns +String+ Random UUID

  SecureRandom.uuid
end
get_conversion_params(event, event_tags) click to toggle source
# File lib/optimizely/event_builder.rb, line 186
def get_conversion_params(event, event_tags)
  # Creates object of params specific to conversion events
  #
  # event -                    +Object+ Event which needs to be recorded.
  # event_tags -               +Hash+ Values associated with the event.
  #
  # Returns +Hash+ Conversion event params

  single_snapshot = {}
  event_object = {
    entity_id: event['id'],
    timestamp: create_timestamp,
    uuid: create_uuid,
    key: event['key']
  }

  if event_tags
    revenue_value = Helpers::EventTagUtils.get_revenue_value(event_tags, @logger)
    event_object[:revenue] = revenue_value if revenue_value

    numeric_value = Helpers::EventTagUtils.get_numeric_value(event_tags, @logger)
    event_object[:value] = numeric_value if numeric_value

    event_object[:tags] = event_tags unless event_tags.empty?
  end

  single_snapshot[:events] = [event_object]
  single_snapshot
end
get_impression_params(project_config, experiment, variation_id) click to toggle source
# File lib/optimizely/event_builder.rb, line 157
def get_impression_params(project_config, experiment, variation_id)
  # Creates object of params specific to impression events
  #
  # project_config - +Object+ Instance of ProjectConfig
  # experiment -   +Hash+ experiment for which impression needs to be recorded
  # variation_id - +string+ ID for variation which would be presented to user
  #
  # Returns +Hash+ Impression event params

  experiment_key = experiment['key']
  experiment_id = experiment['id']

  impression_event_params = {
    decisions: [{
      campaign_id: project_config.experiment_key_map[experiment_key]['layerId'],
      experiment_id: experiment_id,
      variation_id: variation_id
    }],
    events: [{
      entity_id: project_config.experiment_key_map[experiment_key]['layerId'],
      timestamp: create_timestamp,
      key: ACTIVATE_EVENT_KEY,
      uuid: create_uuid
    }]
  }

  impression_event_params
end