mixpanel_client 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -1
- data/lib/mixpanel_client.rb +16 -10
- data/mixpanel_client.gemspec +2 -2
- data/spec/mixpanel_client_spec.rb +38 -3
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/lib/mixpanel_client.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# Mixpanel API Ruby Client Library
|
4
4
|
#
|
5
5
|
# Copyright (c) 2009+ Keolo Keagy
|
6
|
-
#
|
6
|
+
# See LICENSE for details.
|
7
7
|
# Open sourced by the good folks at SharesPost.com
|
8
8
|
#
|
9
9
|
# Inspired by the official mixpanel php and python libraries.
|
@@ -12,6 +12,7 @@
|
|
12
12
|
require 'cgi'
|
13
13
|
require 'digest/md5'
|
14
14
|
require 'open-uri'
|
15
|
+
require 'rubygems'
|
15
16
|
require 'json'
|
16
17
|
|
17
18
|
module Mixpanel
|
@@ -22,11 +23,11 @@ module Mixpanel
|
|
22
23
|
VERSION = '1.0'
|
23
24
|
|
24
25
|
def initialize(config)
|
25
|
-
@api_key
|
26
|
+
@api_key = config[:api_key]
|
26
27
|
@api_secret = config[:api_secret]
|
27
28
|
end
|
28
29
|
|
29
|
-
def request(endpoint,
|
30
|
+
def request(endpoint, meth, params)
|
30
31
|
params[:api_key] = api_key
|
31
32
|
params[:expire] = Time.now.to_i + 600 # Grant this request 10 minutes
|
32
33
|
params[:format] ||= :json
|
@@ -34,7 +35,7 @@ module Mixpanel
|
|
34
35
|
|
35
36
|
@format = params[:format]
|
36
37
|
|
37
|
-
response = URI.parse(
|
38
|
+
response = URI.parse(mixpanel_uri(endpoint, meth, params)).read
|
38
39
|
to_hash(response)
|
39
40
|
end
|
40
41
|
|
@@ -42,15 +43,20 @@ module Mixpanel
|
|
42
43
|
Digest::MD5.hexdigest(args.map{|k,v| "#{k}=#{v}"}.sort.to_s + api_secret)
|
43
44
|
end
|
44
45
|
|
46
|
+
def mixpanel_uri(endpoint, meth, params)
|
47
|
+
%Q(#{BASE_URI}/#{endpoint}/#{VERSION}/#{meth}?#{urlencode(params)})
|
48
|
+
end
|
49
|
+
|
45
50
|
def urlencode(params)
|
46
|
-
params.map{|k,v| "#{k}=#{CGI.escape(v.to_s)}"}.join('&')
|
51
|
+
params.map{|k,v| "#{k}=#{CGI.escape(v.to_s)}"}.sort.join('&')
|
47
52
|
end
|
48
53
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
54
|
+
protected
|
55
|
+
def to_hash(data)
|
56
|
+
case @format
|
57
|
+
when :json
|
58
|
+
JSON.parse(data)
|
59
|
+
end
|
53
60
|
end
|
54
|
-
end
|
55
61
|
end
|
56
62
|
end
|
data/mixpanel_client.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{mixpanel_client}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Keolo Keagy"]
|
12
|
-
s.date = %q{2009-
|
12
|
+
s.date = %q{2009-12-02}
|
13
13
|
s.description = %q{Simple ruby client interface to the Mixpanel API.}
|
14
14
|
s.email = %q{keolo@dreampointmedia.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -1,7 +1,42 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
2
|
|
3
|
-
describe
|
4
|
-
|
5
|
-
|
3
|
+
describe 'Mixpanel::Client' do
|
4
|
+
before :all do
|
5
|
+
config = {:api_key => 'test', :api_secret => 'test'}
|
6
|
+
@api = Mixpanel::Client.new(config)
|
7
|
+
end
|
8
|
+
|
9
|
+
describe '#request' do
|
10
|
+
it 'should return a valid JSON result set.' do
|
11
|
+
pending 'Need to setup valid Mixpanel test account.'
|
12
|
+
data = @api.request(:events, :general, {
|
13
|
+
:event => '["test-event"]',
|
14
|
+
:unit => 'hour',
|
15
|
+
:interval => 24
|
16
|
+
})
|
17
|
+
data.should == {:some => 'thing'}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '#hash_args' do
|
22
|
+
it 'should return a hashed string alpha sorted by key names.' do
|
23
|
+
args = {:c => 'see', :a => 'aye', :d => 'dee', :b => 'bee'}
|
24
|
+
args_alpha_sorted = {:a => 'aye', :b => 'bee', :c => 'see', :d => 'dee'}
|
25
|
+
@api.hash_args(args).should == @api.hash_args(args_alpha_sorted)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '#mixpanel_uri' do
|
30
|
+
it 'should return a properly formatted mixpanel uri as a string' do
|
31
|
+
endpoint, meth, params = [:events, :general, {:c => 'see', :a => 'aye'}]
|
32
|
+
@api.mixpanel_uri(endpoint, meth, params).should == 'http://mixpanel.com/api/events/1.0/general?a=aye&c=see'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '#urlencode' do
|
37
|
+
it 'should return a string with url encoded values.' do
|
38
|
+
params = {:hey => '!@#$%^&*()\/"Ü', :soo => "hëllö?"}
|
39
|
+
@api.urlencode(params).should == 'hey=%21%40%23%24%25%5E%26%2A%28%29%5C%2F%22%C3%9C&soo=h%C3%ABll%C3%B6%3F'
|
40
|
+
end
|
6
41
|
end
|
7
42
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mixpanel_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Keolo Keagy
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-12-02 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|