Class: Rox::Core::Analytics::Client

Inherits:
Object
  • Object
show all
Includes:
Logging, Utils
Defined in:
lib/rox/core/analytics/client.rb

Constant Summary

Constants included from Utils

Utils::UTC_OFFSET_WITHOUT_COLON, Utils::UTC_OFFSET_WITH_COLON

Instance Method Summary collapse

Methods included from Logging

included, #logger

Methods included from Utils

#date_in_iso8601, #datetime_in_iso8601, #formatted_offset, #isoify_dates, #isoify_dates!, #seconds_to_utc_offset, #stringify_keys, #symbolize_keys, #symbolize_keys!, #time_in_iso8601, #uid

Constructor Details

#initialize(device_properties) ⇒ Client

Returns a new instance of Client.

Parameters:



18
19
20
21
22
23
24
25
26
# File 'lib/rox/core/analytics/client.rb', line 18

def initialize(device_properties)
  @queue = Queue.new
  @max_queue_size = Defaults::Queue::MAX_SIZE
  @worker_mutex = Mutex.new
  @worker = Worker.new(@queue, device_properties)
  @worker_thread = nil

  at_exit { @worker_thread && @worker_thread[:should_exit] = true }
end

Instance Method Details

#alias(attrs) ⇒ Object

Aliases a user from one id to another

Parameters:

  • attrs (Hash)

Options Hash (attrs):

  • :previous_id (String)

    The ID to alias from

  • :anonymous_id (String)

    ID for a user when you don’t know who they are yet. (optional but you must provide either an ‘anonymous_id` or `user_id`)

  • :context (Hash) — default: {}
  • :integrations (Hash)

    What integrations this event goes to (optional)

  • :message_id (String)

    ID that uniquely identifies a message across the API. (optional)

  • :timestamp (Time)

    When the event occurred (optional)

  • :user_id (String)

    The ID for this user in your database (optional but you must provide either an ‘anonymous_id` or `user_id`)

  • :options (Hash)

    Options such as user traits (optional)

See Also:



88
89
90
91
# File 'lib/rox/core/analytics/client.rb', line 88

def alias(attrs)
  symbolize_keys! attrs
  enqueue(FieldParser.parse_for_alias(attrs))
end

#flushObject

Synchronously waits until the worker has flushed the queue.

Use only for scripts which are not long-running, and will specifically exit



32
33
34
35
36
37
# File 'lib/rox/core/analytics/client.rb', line 32

def flush
  while !@queue.empty? || @worker.is_requesting?
    ensure_worker_running
    sleep(0.1)
  end
end

#group(attrs) ⇒ Object

Associates a user identity with a group.

Parameters:

  • attrs (Hash)

Options Hash (attrs):

  • :group_id (String)

    The ID of the group

  • :traits (Hash)

    User traits (optional)

  • :anonymous_id (String)

    ID for a user when you don’t know who they are yet. (optional but you must provide either an ‘anonymous_id` or `user_id`)

  • :context (Hash) — default: {}
  • :integrations (Hash)

    What integrations this event goes to (optional)

  • :message_id (String)

    ID that uniquely identifies a message across the API. (optional)

  • :timestamp (Time)

    When the event occurred (optional)

  • :user_id (String)

    The ID for this user in your database (optional but you must provide either an ‘anonymous_id` or `user_id`)

  • :options (Hash)

    Options such as user traits (optional)

See Also:



102
103
104
105
# File 'lib/rox/core/analytics/client.rb', line 102

def group(attrs)
  symbolize_keys! attrs
  enqueue(FieldParser.parse_for_group(attrs))
end

#identify(attrs) ⇒ Object

Identifies a user

Parameters:

  • attrs (Hash)

Options Hash (attrs):

  • :traits (Hash)

    User traits (optional)

  • :anonymous_id (String)

    ID for a user when you don’t know who they are yet. (optional but you must provide either an ‘anonymous_id` or `user_id`)

  • :context (Hash) — default: {}
  • :integrations (Hash)

    What integrations this event goes to (optional)

  • :message_id (String)

    ID that uniquely identifies a message across the API. (optional)

  • :timestamp (Time)

    When the event occurred (optional)

  • :user_id (String)

    The ID for this user in your database (optional but you must provide either an ‘anonymous_id` or `user_id`)

  • :options (Hash)

    Options such as user traits (optional)

See Also:



75
76
77
78
# File 'lib/rox/core/analytics/client.rb', line 75

def identify(attrs)
  symbolize_keys! attrs
  enqueue(FieldParser.parse_for_identify(attrs))
end

#page(attrs) ⇒ Object

Records a page view

Parameters:

  • attrs (Hash)

Options Hash (attrs):

  • :name (String)

    Name of the page

  • :properties (Hash)

    Page properties (optional)

  • :anonymous_id (String)

    ID for a user when you don’t know who they are yet. (optional but you must provide either an ‘anonymous_id` or `user_id`)

  • :context (Hash) — default: {}
  • :integrations (Hash)

    What integrations this event goes to (optional)

  • :message_id (String)

    ID that uniquely identifies a message across the API. (optional)

  • :timestamp (Time)

    When the event occurred (optional)

  • :user_id (String)

    The ID for this user in your database (optional but you must provide either an ‘anonymous_id` or `user_id`)

  • :options (Hash)

    Options such as user traits (optional)

See Also:



116
117
118
119
# File 'lib/rox/core/analytics/client.rb', line 116

def page(attrs)
  symbolize_keys! attrs
  enqueue(FieldParser.parse_for_page(attrs))
end

#queued_messagesFixnum

Returns number of messages in the queue.

Returns:

  • (Fixnum)

    number of messages in the queue



135
136
137
# File 'lib/rox/core/analytics/client.rb', line 135

def queued_messages
  @queue.length
end

#screen(attrs) ⇒ Object

Records a screen view (for a mobile app)

Parameters:

  • attrs (Hash)

Options Hash (attrs):

  • :name (String)

    Name of the screen

  • :properties (Hash)

    Screen properties (optional)

  • :category (String)

    The screen category (optional)

  • :anonymous_id (String)

    ID for a user when you don’t know who they are yet. (optional but you must provide either an ‘anonymous_id` or `user_id`)

  • :context (Hash) — default: {}
  • :integrations (Hash)

    What integrations this event goes to (optional)

  • :message_id (String)

    ID that uniquely identifies a message across the API. (optional)

  • :timestamp (Time)

    When the event occurred (optional)

  • :user_id (String)

    The ID for this user in your database (optional but you must provide either an ‘anonymous_id` or `user_id`)

  • :options (Hash)

    Options such as user traits (optional)



129
130
131
132
# File 'lib/rox/core/analytics/client.rb', line 129

def screen(attrs)
  symbolize_keys! attrs
  enqueue(FieldParser.parse_for_screen(attrs))
end

#test_queueObject



139
140
141
142
143
144
145
# File 'lib/rox/core/analytics/client.rb', line 139

def test_queue
  unless @test
    raise 'Test queue only available when setting :test to true.'
  end

  @test_queue ||= TestQueue.new
end

#track(attrs) ⇒ Object

Tracks an event

Parameters:

  • attrs (Hash)

Options Hash (attrs):

  • :event (String)

    Event name

  • :properties (Hash)

    Event properties (optional)

  • :anonymous_id (String)

    ID for a user when you don’t know who they are yet. (optional but you must provide either an ‘anonymous_id` or `user_id`)

  • :context (Hash) — default: {}
  • :integrations (Hash)

    What integrations this event goes to (optional)

  • :message_id (String)

    ID that uniquely identifies a message across the API. (optional)

  • :timestamp (Time)

    When the event occurred (optional)

  • :user_id (String)

    The ID for this user in your database (optional but you must provide either an ‘anonymous_id` or `user_id`)

  • :options (Hash)

    Options such as user traits (optional)

See Also:



62
63
64
65
# File 'lib/rox/core/analytics/client.rb', line 62

def track(attrs)
  symbolize_keys! attrs
  enqueue(attrs)
end