class Outbound::Client

Public Class Methods

new(api_key, logger) click to toggle source
# File lib/outbound.rb, line 158
def initialize(api_key, logger)
  @api_key = api_key
  @logger = logger
end

Public Instance Methods

alias(user_id, previous_id) click to toggle source
# File lib/outbound.rb, line 163
def alias(user_id, previous_id)
  unless user_id.is_a? String or user_id.is_a? Numeric
    res = Result.new Outbound::ERROR_USER_ID, false
    @logger.error res.error
    return res
  end

  unless previous_id.is_a? String or previous_id.is_a? Numeric
    res = Result.new Outbound::ERROR_PREVIOUS_ID, false
    @logger.error res.error
    return res
  end

  user_data = {:user_id => user_id, :previous_id => previous_id}
  return post(@api_key, '/identify', user_data)
end
disable(platform, user_id, token) click to toggle source
# File lib/outbound.rb, line 227
def disable(platform, user_id, token)
  unless user_id.is_a? String or user_id.is_a? Numeric
    res = Result.new Outbound::ERROR_USER_ID, false
    @logger.error res.error
    return res
  end

  unless token.is_a? String
    res = Result.new Outbound::ERROR_TOKEN, false
    @logger.error res.error
    return res
  end

  unless [Outbound::APNS, Outbound::GCM].include? platform
    res = Result.new Outbound::ERROR_PLATFORM, false
    @logger.error res.error
    return res
  end

  return post(@api_key, "/#{platform}/disable", {:token => token, :user_id => user_id})
end
disable_all(platform, user_id) click to toggle source
# File lib/outbound.rb, line 249
def disable_all(platform, user_id)
  unless user_id.is_a? String or user_id.is_a? Numeric
    res = Result.new Outbound::ERROR_USER_ID, false
    @logger.error res.error
    return res
  end

  unless [Outbound::APNS, Outbound::GCM].include? platform
    res = Result.new Outbound::ERROR_PLATFORM, false
    @logger.error res.error
    return res
  end

  return post(@api_key, "/#{platform}/disable", {:all => true, :user_id => user_id})
end
identify(user_id, info={}) click to toggle source
# File lib/outbound.rb, line 180
def identify(user_id, info={})
  unless user_id.is_a? String or user_id.is_a? Numeric
    res = Result.new Outbound::ERROR_USER_ID, false
    @logger.error res.error
    return res
  end

  user_data = {:user_id => user_id}
  begin
    user = user(info)
    user_data = user_data.merge user
  rescue
    @logger.error "Could not use user info (#{info}) and/or user attributes #{attributes} given to identify call."
  end

  return post(@api_key, '/identify', user_data)
end
register(platform, user_id, token) click to toggle source
# File lib/outbound.rb, line 265
def register(platform, user_id, token)
  unless user_id.is_a? String or user_id.is_a? Numeric
    res = Result.new Outbound::ERROR_USER_ID, false
    @logger.error res.error
    return res
  end

  unless token.is_a? String
    res = Result.new Outbound::ERROR_TOKEN, false
    @logger.error res.error
    return res
  end

  unless [Outbound::APNS, Outbound::GCM].include? platform
    res = Result.new Outbound::ERROR_PLATFORM, false
    @logger.error res.error
    return res
  end

  return post(@api_key, "/#{platform}/register", {:token => token, :user_id => user_id})
end
subscription(user_id, unsubscribe=false, all=false, campaign_ids=nil) click to toggle source
# File lib/outbound.rb, line 287
def subscription user_id, unsubscribe=false, all=false, campaign_ids=nil
  unless user_id.is_a? String or user_id.is_a? Numeric
    res = Result.new Outbound::ERROR_USER_ID, false
    @logger.error res.error
    return res
  end

  if !all
    unless !campaign_ids.nil? && campaign_ids.is_a?(Array) && campaign_ids.length > 0
      res = Result.new Outbound::ERROR_CAMPAIGN_IDS, false
      @logger.error res.error
      return res
    end
  end

  url = '/' + (unsubscribe ? 'unsubscribe' : 'subscribe') + '/' + (all ? 'all' : 'campaigns')
  data = {:user_id => user_id}
  if !all
    data[:campaign_ids] = campaign_ids
  end
  return post(@api_key, url, data)
end
track(user_id, event, properties={}, user_info={}, timestamp=Time.now.to_i) click to toggle source
# File lib/outbound.rb, line 198
def track(user_id, event, properties={}, user_info={}, timestamp=Time.now.to_i)
  unless user_id.is_a? String or user_id.is_a? Numeric
    res = Result.new Outbound::ERROR_USER_ID, false
    @logger.error res.error
    return res
  end

  unless event.is_a? String
    res = Result.new Outbound::ERROR_EVENT_NAME, false
    @logger.error res.error
    return res
  end

  data = {:user_id => user_id, :event => event}

  if properties.is_a? Hash
    if properties.length > 0
      data[:properties] = properties
    end
  else
    @logger.error "Could not use event properties (#{properties}) given to track call."
  end

  data[:timestamp] = timestamp
  puts timestamp

  return post(@api_key, '/track', data)
end

Private Instance Methods

post(api_key, path, data) click to toggle source
# File lib/outbound.rb, line 312
def post(api_key, path, data)
  begin
    headers = HEADERS
    headers['X-Outbound-Key'] = api_key
    payload = JSON.generate data
    uri = URI("#{BASE_URL}#{path}")

    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = uri.scheme == 'https'
    res = http.post(uri.path, payload, headers)

    status = res.code.to_i
  rescue Exception => e
    res = Result.new Outbound::ERROR_CONNECTION, false
    @logger.error res.error
    return res
  end

  err = nil
  if status < 200 or status >= 400
    err = "#{status}"
    err << " - #{res.body}" unless res.body.empty?
  end
  return err, true
end
user(info={}) click to toggle source
# File lib/outbound.rb, line 338
def user(info={})
  unless info.is_a? Hash
    raise
  end

  user = {
    :first_name => info[:first_name],
    :last_name => info[:last_name],
    :email => info[:email],
    :phone_number => info[:phone_number],
    :apns => info[:apns_tokens],
    :gcm => info[:gcm_tokens],
    :group_id => info[:group_id],
    :group_attributes => info[:group_attributes],
    :previous_id => info[:previous_id],
    :attributes => info[:attributes],
  }
  return user.delete_if { |k, v| v.nil? || v.empty? }
end