module VWO::Utils::Impression

Public Instance Methods

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

Creates properties for the bulk impression event

@param :settings_file Settings file object @param :campaign_id Campaign identifier @param :variation_id Variation identifier @param :user_id User identifier @param :sdk_key SDK Key @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/utils/impression.rb, line 129
def create_bulk_event_impression(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']
  impression = {
    eT: is_track_user_api ? 1 : 2,
    e: campaign_id,
    c: variation_id,
    u: generator_for(user_id, account_id),
    sId: get_current_unix_timestamp
  }
  logger = VWO::Logger.get_instance
  if is_track_user_api
    logger.log(
      LogLevelEnum::DEBUG,
      format(
        LogMessageEnum::DebugMessages::IMPRESSION_FOR_TRACK_USER,
        file: FileNameEnum::ImpressionUtil,
        properties: JSON.generate(impression)
      )
    )
  else
    impression['g'] = goal_id
    impression['r'] = revenue if revenue
    logger.log(
      LogLevelEnum::DEBUG,
      format(
        LogMessageEnum::DebugMessages::IMPRESSION_FOR_TRACK_GOAL,
        file: FileNameEnum::ImpressionUtil,
        properties: JSON.generate(impression)
      )
    )
  end
  impression
end
create_impression(settings_file, campaign_id, variation_id, user_id, sdk_key, goal_id = nil, revenue = nil, usage_stats = {}) click to toggle source

Creates the impression from the arguments passed

@param :settings_file Settings file object @param :campaign_id Campaign identifier @param :variation_id Variation identifier @param :user_id User identifier @param :sdk_key SDK Key @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/utils/impression.rb, line 44
def create_impression(settings_file, campaign_id, variation_id, user_id, sdk_key, goal_id = nil, revenue = nil, usage_stats = {})
  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']

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

  impression = usage_stats.merge(impression)

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

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

Returns commonly used params for making requests to our servers.

@param :user_id Unique identification of user @param :settings_file Settings file containing campaign data for extracting account_id @return Commonly used params for making call to our servers

# File lib/vwo/utils/impression.rb, line 104
def get_common_properties(user_id, settings_file)
  account_id = settings_file['accountId']
  {
    'random' => get_random_number,
    'sdk' => SDK_NAME,
    'sdk-v' => SDK_VERSION,
    'ap' => PLATFORM,
    'sId' => get_current_unix_timestamp,
    'u' => generator_for(user_id, account_id),
    'account_id' => account_id
  }
end