Class: HeliosTracker::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/helios_tracker/configuration.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfiguration

Returns a new instance of Configuration.



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/helios_tracker/configuration.rb', line 83

def initialize
  @user_class_name = "User"
  @blocked_email_class_name = nil

  @user_fields = {
    email: :email,
    created_at: :created_at,
  }

  @visit_fields = {
    hmid: :hmid,
  }

  @blocked_email_fields = {
    email: :email,
    source: :source,
    created_at: :created_at,
  }

  # Default scopes
  @user_scope = nil
  @visit_scope = nil
  @blocked_email_scope = nil
end

Instance Attribute Details

#blocked_email_class_nameObject

Optional: the class name for blocked emails, e.g. “BlockedEmail”



80
81
82
# File 'lib/helios_tracker/configuration.rb', line 80

def blocked_email_class_name
  @blocked_email_class_name
end

#blocked_email_fieldsObject

Optional blocked email fields — map API field names to model attributes or lambdas. :email and :source are always required and included automatically.

Example:

config.blocked_email_fields = {
  email:      :email,
  source:     :source,
  created_at: :created_at,
}


77
78
79
# File 'lib/helios_tracker/configuration.rb', line 77

def blocked_email_fields
  @blocked_email_fields
end

#blocked_email_scopeObject

Optional: a lambda that receives (query_start, params) and returns an ActiveRecord relation of blocked email records.

Example:

config.blocked_email_scope = ->(query_start, params) {
  BlockedEmail.where("created_at > ?", query_start)
}


33
34
35
# File 'lib/helios_tracker/configuration.rb', line 33

def blocked_email_scope
  @blocked_email_scope
end

#user_class_nameObject

Required: the User class name as a string, e.g. “User”



4
5
6
# File 'lib/helios_tracker/configuration.rb', line 4

def user_class_name
  @user_class_name
end

#user_fieldsObject

Optional user fields — map API field names to model attributes or lambdas. :email is always required and included automatically.

IMPORTANT: All numeric data points (login_count, accounts_owned_count, app_open_days_count, etc.) must return CUMULATIVE LIFETIME TOTALS, not counts within the query_start window. Helios stores the cumulative value and derives points from the delta between successive pulls.

Example:

config.user_fields = {
  email:                      :email,
  created_at:                 :created_at,
  source_ip:                  ->(user) { user.try(:source_ip) },
  first_unconfirmed_visit_id: :first_unconfirmed_visit_id,
  login_attempt_count:        :login_attempt_count,
  login_count:                ->(user) { user. },
  accounts_owned_count:       ->(user) { user.accounts_owned_count },
  free_accounts_count:        ->(user) { user.free_accounts_count },
  unsubscribe_nonce:          :unsubscribe_nonce,
  app_open_days_count:        ->(user) { user.app_opens.count },
}


56
57
58
# File 'lib/helios_tracker/configuration.rb', line 56

def user_fields
  @user_fields
end

#user_scopeObject

Required: a lambda that receives (query_start, params) and returns an ActiveRecord relation of user records to expose via the API.

Example:

config.user_scope = ->(query_start, params) {
  User.where.not(email: "")
      .where("updated_at > ?", query_start)
}


14
15
16
# File 'lib/helios_tracker/configuration.rb', line 14

def user_scope
  @user_scope
end

#visit_fieldsObject

Optional visit fields — map API field names to model attributes or lambdas. :hmid is always required and included automatically.

Example:

config.visit_fields = {
  hmid:                   :hmid,
  visited_download_page:  ->(visit) { visit.visited_download_page? },
}


66
67
68
# File 'lib/helios_tracker/configuration.rb', line 66

def visit_fields
  @visit_fields
end

#visit_scopeObject

Optional: a lambda that receives (query_start, params) and returns an ActiveRecord relation of visit records. Defaults to UTM visits with hmid.

Example:

config.visit_scope = ->(query_start, params) {
  UniversalTrackManager::Visit.where.not(hmid: nil)
      .where("updated_at > ?", query_start)
}


24
25
26
# File 'lib/helios_tracker/configuration.rb', line 24

def visit_scope
  @visit_scope
end

Instance Method Details

#blocked_email_classObject



112
113
114
115
# File 'lib/helios_tracker/configuration.rb', line 112

def blocked_email_class
  return nil unless @blocked_email_class_name
  @blocked_email_class_name.constantize
end

#serialize_record(record, fields) ⇒ Object

Serialize a single record using a fields hash. Fields can be symbols (attribute names) or lambdas.



119
120
121
122
123
124
125
126
127
# File 'lib/helios_tracker/configuration.rb', line 119

def serialize_record(record, fields)
  fields.each_with_object({}) do |(key, mapping), hash|
    hash[key] = if mapping.respond_to?(:call)
                  mapping.call(record)
                else
                  record.public_send(mapping)
                end
  end
end

#user_classObject



108
109
110
# File 'lib/helios_tracker/configuration.rb', line 108

def user_class
  @user_class_name.constantize
end