Class: Optimizely::UserProfileTracker

Inherits:
Object
  • Object
show all
Defined in:
lib/optimizely/user_profile_tracker.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(user_id, user_profile_service = nil, logger = nil) ⇒ UserProfileTracker

Returns a new instance of UserProfileTracker.



9
10
11
12
13
14
15
16
17
18
# File 'lib/optimizely/user_profile_tracker.rb', line 9

def initialize(user_id,  = nil, logger = nil)
  @user_id = user_id
  @user_profile_service = 
  @logger = logger || NoOpLogger.new
  @profile_updated = false
  @user_profile = {
    user_id: user_id,
    experiment_bucket_map: {}
  }
end

Instance Attribute Details

#user_profileObject (readonly)

Returns the value of attribute user_profile.



7
8
9
# File 'lib/optimizely/user_profile_tracker.rb', line 7

def 
  @user_profile
end

Instance Method Details

#load_user_profile(reasons = [], error_handler = nil) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/optimizely/user_profile_tracker.rb', line 20

def (reasons = [], error_handler = nil)
  return if reasons.nil?

  begin
    @user_profile = @user_profile_service.lookup(@user_id) if @user_profile_service
    if @user_profile.nil?
      @user_profile = {
        user_id: @user_id,
        experiment_bucket_map: {}
      }
    end
  rescue => e
    message = "Error while looking up user profile for user ID '#{@user_id}': #{e}."
    reasons << message
    @logger.log(Logger::ERROR, message)
    error_handler&.handle_error(e)
  end
end

#save_user_profile(error_handler = nil) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
# File 'lib/optimizely/user_profile_tracker.rb', line 52

def (error_handler = nil)
  return unless @profile_updated && @user_profile_service

  begin
    @user_profile_service.save(@user_profile)
    @logger.log(Logger::INFO, "Saved user profile for user '#{@user_profile[:user_id]}'.")
  rescue => e
    @logger.log(Logger::ERROR, "Failed to save user profile for user '#{@user_profile[:user_id]}': #{e}.")
    error_handler&.handle_error(e)
  end
end

#update_user_profile(experiment_id, variation_id) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/optimizely/user_profile_tracker.rb', line 39

def (experiment_id, variation_id)
  user_id = @user_profile[:user_id]
  begin
    @user_profile[:experiment_bucket_map][experiment_id] = {
      variation_id: variation_id
    }
    @profile_updated = true
    @logger.log(Logger::INFO, "Updated variation ID #{variation_id} of experiment ID #{experiment_id} for user '#{user_id}'.")
  rescue => e
    @logger.log(Logger::ERROR, "Error while updating user profile for user ID '#{user_id}': #{e}.")
  end
end