class Kilometer::EventsAPIClient

Constants

CLIENT_TYPE
CONTENT_TYPE
HEADER_CLIENT_TYPE
HEADER_CONTENT_TYPE
HEADER_CUSTOMER_APP_ID

Use Kilometer::EventsAPIClient to track events and manage users properties.

HEADER_TIMESTAMP

Public Class Methods

new(token, endpoint_url=nil) click to toggle source
# File lib/kilometer-ruby.rb, line 19
def initialize(token, endpoint_url=nil)
  @token = token
  @endpoint_url = endpoint_url || 'http://events.kilometer.io'
end

Public Instance Methods

add_event(user_id, event_name, event_properties=nil, headers=nil, endpoint_url=nil) click to toggle source

Send an identified event. If a user doesn't exist it will create one.

user_id: identified user's ID
event_name: event name (e.g. "visit_website")
event_properties: properties that describe the event's details
headers: custom request headers (if isn't set default values are used)
endpoint_url: where to send the request (if isn't set default value is used)
# File lib/kilometer-ruby.rb, line 62
def add_event(user_id, event_name, event_properties=nil, headers=nil, endpoint_url=nil)

  uri = URI("#{endpoint_url || @endpoint_url}/events")

  Net::HTTP.start(uri.host, uri.port) do |http|

    request = Net::HTTP::Post.new(uri.request_uri)

    # Set headers
    if headers
      headers.each { |header, value| request.add_field(header, value) }
    else
      self.set_default_headers(request)
      request.add_field(HEADER_CONTENT_TYPE, CONTENT_TYPE)
    end

    # Set payload
    request.body = {
        user_id: user_id,
        event_name: event_name,
        event_type: 'identified',
        event_properties: event_properties || {}
    }.to_json

    # Execute the request
    http.request(request)
  end
end
add_user(user_id, headers=nil, endpoint_url=nil) click to toggle source

Creates a new identified user if he doesn't exist.

user_id: identified user's ID
headers: custom request headers (if isn't set default values are used)
endpoint_url: where to send the request (if isn't set default value is used)
# File lib/kilometer-ruby.rb, line 31
def add_user(user_id, headers=nil, endpoint_url=nil)

  uri = URI("#{endpoint_url || @endpoint_url}/users")

  Net::HTTP.start(uri.host, uri.port) do |http|

    request = Net::HTTP::Post.new(uri.request_uri)

    # Set headers
    if headers
      headers.each { |header, value| request.add_field(header, value) }
    else
      self.set_default_headers(request)
      request.add_field(HEADER_CONTENT_TYPE, CONTENT_TYPE)
    end

    # Set payload
    request.body = {user_id: user_id}.to_json

    # Execute the request
    http.request(request)
  end
end
decrease_user_property(user_id, property_name, value=0, headers=nil, endpoint_url=nil) click to toggle source

Decrease a user's property by a value.

user_id: identified user's ID
property_name: user property name to decrease
value: amount by which to decrease the property
headers: custom request headers (if isn't set default values are used)
endpoint_url: where to send the request (if isn't set default value is used)
# File lib/kilometer-ruby.rb, line 109
def decrease_user_property(user_id, property_name, value=0, headers=nil, endpoint_url=nil)
  inc_or_dec_user_property('decrease', user_id, property_name, value, headers, endpoint_url)
end
increase_user_property(user_id, property_name, value=0, headers=nil, endpoint_url=nil) click to toggle source

Increase a user's property by a value.

user_id: identified user's ID
property_name: user property name to increase
value: amount by which to increase the property
headers: custom request headers (if isn't set default values are used)
endpoint_url: where to send the request (if isn't set default value is used)
# File lib/kilometer-ruby.rb, line 98
def increase_user_property(user_id, property_name, value=0, headers=nil, endpoint_url=nil)
  inc_or_dec_user_property('increase', user_id, property_name, value, headers, endpoint_url)
end
set_default_headers(request) click to toggle source

Gets Net::HTTP request instance and modifies it by adding default HTTP headers.

WARNING: The method modifies the request object!

# File lib/kilometer-ruby.rb, line 148
def set_default_headers(request)
  request.add_field(HEADER_CUSTOMER_APP_ID, @token)
  request.add_field(HEADER_CLIENT_TYPE, CLIENT_TYPE)
  request.add_field(HEADER_TIMESTAMP, Kilometer::now)
end
update_user_properties(user_id, user_properties, headers=nil, endpoint_url=nil) click to toggle source

Update a user's properties with values provided in “user_properties” dictionary

user_id: identified user's ID
user_properties: user properties to update with a new values
headers: custom request headers (if isn't set default values are used)
endpoint_url: where to send the request (if isn't set default value is used)
# File lib/kilometer-ruby.rb, line 119
def update_user_properties(user_id, user_properties, headers=nil, endpoint_url=nil)

  uri = URI("#{endpoint_url || @endpoint_url}/users/#{user_id}/properties")

  Net::HTTP.start(uri.host, uri.port) do |http|

    request = Net::HTTP::Put.new(uri.request_uri)

    # Set headers
    if headers
      headers.each { |header, value| request.add_field(header, value) }
    else
      self.set_default_headers(request)
      request.add_field(HEADER_CONTENT_TYPE, CONTENT_TYPE)
    end

    # Set payload
    request.body = user_properties.to_json

    # Execute the request
    http.request(request)
  end


end

Private Instance Methods

inc_or_dec_user_property(action, user_id, property_name, value=0, headers=nil, endpoint_url=nil) click to toggle source
# File lib/kilometer-ruby.rb, line 156
def inc_or_dec_user_property(action, user_id, property_name, value=0, headers=nil, endpoint_url=nil)

  uri = URI("#{endpoint_url || @endpoint_url}/users/#{user_id}/properties/#{property_name}/#{action}/#{value}")

  Net::HTTP.start(uri.host, uri.port) do |http|

    request = Net::HTTP::Post.new(uri.request_uri)

    # Set headers
    if headers
      headers.each { |header, value_| request.add_field(header, value_) }
    else
      self.set_default_headers(request)
    end

    # Execute the request
    http.request(request)
  end
end