module VWO::Common::ImpressionUtils

Public Instance Methods

build_event(settings_file, campaign_id, variation_id, user_id, goal_id = nil, revenue = nil) click to toggle source

Trigger the goal by sending it to server

@param :settings_file Settings file object @param :campaign_id Campaign identifier @param :variation_id Variation identifier @param :user_id User identifier @param :goal_id Goal identifier, if building track impression @param[String|Float|Integer|nil) :revenue Number value, in any representation, if building track impression

@return None if campaign ID or variation ID is invalid,

Else Properties(dict)
# File lib/vwo/common/impression_utils.rb, line 31
def build_event(settings_file, campaign_id, variation_id, user_id, goal_id = nil, revenue = nil)
  return unless valid_number?(campaign_id) && valid_string?(user_id)

  is_track_user_api = true
  is_track_user_api = false unless goal_id.nil?
  account_id = settings_file['accountId']

  properties = {
    account_id: account_id,
    experiment_id: campaign_id,
    ap: PLATFORM,
    uId: CGI.escape(user_id.encode('utf-8')),
    combination: variation_id,
    random: get_random_number,
    sId: get_current_unix_timestamp,
    u: generator_for(user_id, account_id)
  }
  # Version and SDK constants
  sdk_version = Gem.loaded_specs['vwo_sdk'] ? Gem.loaded_specs['vwo_sdk'].version : VWO::SDK_VERSION
  properties['sdk'] = 'ruby'
  properties['sdk-v'] = sdk_version

  url = HTTPS_PROTOCOL + ENDPOINTS::BASE_URL
  logger = VWO::CustomLogger.get_instance

  if is_track_user_api
    properties['ed'] = JSON.generate(p: 'server')
    properties['url'] = "#{url}#{ENDPOINTS::TRACK_USER}"
    logger.log(
      LogLevelEnum::DEBUG,
      format(
        LogMessageEnum::DebugMessages::IMPRESSION_FOR_TRACK_USER,
        file: FileNameEnum::ImpressionUtil,
        properties: JSON.generate(properties)
      )
    )
  else
    properties['url'] = url + ENDPOINTS::TRACK_GOAL
    properties['goal_id'] = goal_id
    properties['r'] = revenue if revenue
    logger.log(
      LogLevelEnum::DEBUG,
      format(
        LogMessageEnum::DebugMessages::IMPRESSION_FOR_TRACK_GOAL,
        file: FileNameEnum::ImpressionUtil,
        properties: JSON.generate(properties)
      )
    )
  end
  properties
end