Skip to content

Commit

Permalink
* allow objects to be used standalone
Browse files Browse the repository at this point in the history
  • Loading branch information
lpetre committed Apr 5, 2010
1 parent 5e6bd62 commit 6a3acb0
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 24 deletions.
29 changes: 19 additions & 10 deletions lib/sinmetrics/kontagent.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,26 @@ module Sinatra
class KontagentObject
@@version = 1
def initialize app
@app = app
if app.respond_to?(:options)
@app = app
[:api_key, :secret, :env].each do |var|
instance_variable_set("@#{var}", app.options.send("mixpanel_#{var}"))
end
else
[:api_key, :secret, :env, :request].each do |var|
instance_variable_set("@#{var}", app[var]) if app.has_key?(var)
end
end
end

attr_reader :app
[ :api_key, :secret, :env, :request ].each do |var|
class_eval %[
def #{var}=(val)
@app.set :kontagent_#{var}, val
end
def #{var} *args
@app.options.kontagent_#{var} *args
end
]
attr_accessor :api_key, :secret, :env
def request *args
if @app
@app.options.kontagent_request *args
else
@request.call *args
end
end

class APIProxy
Expand Down Expand Up @@ -115,3 +122,5 @@ def self.registered app

Application.register Kontagent
end

Kontagent = Sinatra::KontagentObject
40 changes: 26 additions & 14 deletions lib/sinmetrics/mixpanel.rb
Original file line number Diff line number Diff line change
@@ -1,28 +1,37 @@
module Sinatra
require 'digest/md5'
require 'base64'
require 'net/http'

class MixpanelObject
@@version = 1
def initialize app
@app = app
if app.respond_to?(:options)
@app = app
[:api_key, :secret, :token].each do |var|
instance_variable_set("@#{var}", app.options.send("mixpanel_#{var}"))
end
else
[:api_key, :secret, :token, :request ].each do |var|
instance_variable_set("@#{var}", app[var]) if app.has_key?(var)
end
end
end

attr_reader :app
[ :api_key, :secret, :token, :request ].each do |var|
class_eval %[
def #{var}=(val)
@app.set :mixpanel_#{var}, val
end
def #{var} *args
@app.options.mixpanel_#{var} *args
end
]
attr_accessor :api_key, :secret, :token

def request *args
if @app
@app.options.mixpanel_request *args
else
@request.call *args
end
end

def log_event(event, user_id, opts = {})
options = {}
options['ip'] = @app.request.ip
options['ip'] = @app.request.ip if @app
options['time'] = Time.now.to_i
options['token'] = token
options['distinct_id'] = user_id if user_id
Expand All @@ -34,8 +43,9 @@ def log_event(event, user_id, opts = {})
end
end

data = Base64.encode64( { 'event' => event, 'properties' => options }.to_json ).gsub(/\n/, '') + "&ip=1"
request( data )
data = ::Base64.encode64( { 'event' => event, 'properties' => options }.to_json ).gsub(/\n/, '')
data = "#{data}&ip=1" if options.has_key? 'ip'
request "http://api.mixpanel.com/track/?data=#{data}"
end

def log_funnel(funnel_name, step_number, step_name, user_id, opts = {})
Expand All @@ -56,7 +66,7 @@ def mixpanel
class MixpanelSettings
def initialize app, &blk
@app = app
@app.set :mixpanel_request, Proc.new { |data| Net::HTTP.get(URI.parse("http://api.mixpanel.com/track/?data=#{data}")) }
@app.set :mixpanel_request, Proc.new { |url| Net::HTTP.get(URI.parse(url)) }
instance_eval &blk
end
%w[ api_key secret token request ].each do |param|
Expand All @@ -80,3 +90,5 @@ def self.registered app

Application.register Mixpanel
end

Mixpanel = Sinatra::MixpanelObject

0 comments on commit 6a3acb0

Please sign in to comment.