mixpanel_client 0.5.1 → 1.0.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/.gitignore +30 -0
- data/.rvmrc +14 -0
- data/Gemfile +4 -0
- data/README.md +12 -1
- data/Rakefile +4 -19
- data/lib/mixpanel_client/mixpanel_client.rb +79 -0
- data/lib/mixpanel_client/mixpanel_client_uri.rb +29 -0
- data/lib/mixpanel_client/version.rb +3 -0
- data/lib/mixpanel_client.rb +2 -101
- data/mixpanel_client.gemspec +18 -53
- data/spec/events_externalspec.rb +2 -2
- data/spec/mixpanel_client_spec.rb +11 -10
- metadata +43 -21
- data/VERSION +0 -1
- data/test/manual.rb +0 -58
- data/test/test.rb +0 -36
data/.gitignore
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
## MAC OS
|
2
|
+
.DS_Store
|
3
|
+
|
4
|
+
## TEXTMATE
|
5
|
+
*.tmproj
|
6
|
+
tmtags
|
7
|
+
|
8
|
+
## EMACS
|
9
|
+
*~
|
10
|
+
\#*
|
11
|
+
.\#*
|
12
|
+
|
13
|
+
## VIM
|
14
|
+
*.swp
|
15
|
+
|
16
|
+
## PROJECT::GENERAL
|
17
|
+
config/mixpanel.yml
|
18
|
+
coverage
|
19
|
+
rdoc
|
20
|
+
pkg
|
21
|
+
|
22
|
+
## PROJECT::SPECIFIC
|
23
|
+
test/
|
24
|
+
tmp/
|
25
|
+
|
26
|
+
## Bundler/Gems
|
27
|
+
*.gem
|
28
|
+
.bundle
|
29
|
+
Gemfile.lock
|
30
|
+
pkg/*
|
data/.rvmrc
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# Create the gemset if it does not exist
|
2
|
+
rvm_gemset_create_on_use_flag=1
|
3
|
+
|
4
|
+
# Switch to default ruby version when exiting directory
|
5
|
+
rvm_project_rvmrc_default=1
|
6
|
+
|
7
|
+
# Use rvm with a specific version of ruby and gemset
|
8
|
+
if [[ `ruby -v` =~ '1.8.7' ]]; then
|
9
|
+
rvm use ruby-1.8.7
|
10
|
+
rvm gemset use mixpanel_client_1.8.7
|
11
|
+
else
|
12
|
+
rvm use ruby-1.9.2
|
13
|
+
rvm gemset use mixpanel_client_1.9.2
|
14
|
+
fi
|
data/Gemfile
ADDED
data/README.md
CHANGED
@@ -13,7 +13,7 @@ Ruby access to the [Mixpanel](http://mixpanel.com/) web analytics tool.
|
|
13
13
|
require 'rubygems'
|
14
14
|
require 'mixpanel_client'
|
15
15
|
|
16
|
-
client =
|
16
|
+
client = MixpanelClient.new('api_key' => 'changeme', 'api_secret' => 'changeme')
|
17
17
|
|
18
18
|
data = client.request do
|
19
19
|
resource 'events/retention'
|
@@ -26,6 +26,17 @@ Ruby access to the [Mixpanel](http://mixpanel.com/) web analytics tool.
|
|
26
26
|
|
27
27
|
puts data.inspect
|
28
28
|
|
29
|
+
## Changelog
|
30
|
+
|
31
|
+
### 1.0.0
|
32
|
+
* Changed "Mixpanel" class name to "MixpanelClient" to prevent naming collision in other libraries. [a710a84e8ba4b6f018b7](https://github.com/keolo/mixpanel_client/commit/a710a84e8ba4b6f018b7404ab9fabc8f08b4a4f3)
|
33
|
+
|
34
|
+
## Collaborators and Maintainers
|
35
|
+
[Keolo Keagy](http://github.com/keolo) (Author)
|
36
|
+
[Nathan Chong](http://github.com/paramaw)
|
37
|
+
[Paul McMahon](http://github.com/pwim)
|
38
|
+
[Chad Etzel](http://github.com/jazzychad)
|
39
|
+
|
29
40
|
## Copyright
|
30
41
|
|
31
42
|
Copyright (c) 2009+ Keolo Keagy. See LICENSE for details.
|
data/Rakefile
CHANGED
@@ -2,23 +2,8 @@ require 'rubygems'
|
|
2
2
|
require 'rake'
|
3
3
|
require 'metric_fu'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
Jeweler::Tasks.new do |gem|
|
8
|
-
gem.name = 'mixpanel_client'
|
9
|
-
gem.summary = 'Ruby Mixpanel API Client Library'
|
10
|
-
gem.description = 'Simple ruby client interface to the Mixpanel API.'
|
11
|
-
gem.email = 'keolo@dreampointmedia.com'
|
12
|
-
gem.homepage = 'http://github.com/keolo/mixpanel_client'
|
13
|
-
gem.authors = ['Keolo Keagy']
|
14
|
-
gem.add_development_dependency 'rspec', '>= 2.4.0'
|
15
|
-
gem.add_development_dependency 'webmock', '>= 1.6.2'
|
16
|
-
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
17
|
-
end
|
18
|
-
Jeweler::GemcutterTasks.new
|
19
|
-
rescue LoadError
|
20
|
-
puts 'Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler'
|
21
|
-
end
|
5
|
+
require 'bundler'
|
6
|
+
Bundler::GemHelper.install_tasks
|
22
7
|
|
23
8
|
require 'rspec/core/rake_task'
|
24
9
|
RSpec::Core::RakeTask.new(:spec) do |spec|
|
@@ -39,13 +24,13 @@ RSpec::Core::RakeTask.new(:rcov) do |spec|
|
|
39
24
|
spec.rcov = true
|
40
25
|
end
|
41
26
|
|
42
|
-
task :spec
|
27
|
+
task :spec #=> :check_dependencies
|
43
28
|
|
44
29
|
begin
|
45
30
|
require 'cucumber/rake/task'
|
46
31
|
Cucumber::Rake::Task.new(:features)
|
47
32
|
|
48
|
-
task :features
|
33
|
+
task :features #=> :check_dependencies
|
49
34
|
rescue LoadError
|
50
35
|
task :features do
|
51
36
|
abort 'Cucumber is not available. In order to run features, you must: sudo gem install cucumber'
|
@@ -0,0 +1,79 @@
|
|
1
|
+
#!/usr/bin/env ruby -Ku
|
2
|
+
|
3
|
+
# Mixpanel API Ruby Client Library
|
4
|
+
#
|
5
|
+
# Copyright (c) 2009+ Keolo Keagy
|
6
|
+
# See LICENSE for details.
|
7
|
+
#
|
8
|
+
# Inspired by the official mixpanel php and python libraries.
|
9
|
+
# http://mixpanel.com/api/docs/guides/api/
|
10
|
+
|
11
|
+
require 'cgi'
|
12
|
+
require 'digest/md5'
|
13
|
+
require 'open-uri'
|
14
|
+
require 'json' unless defined?(JSON)
|
15
|
+
|
16
|
+
# Ruby library for the mixpanel.com web service
|
17
|
+
class MixpanelClient
|
18
|
+
BASE_URI = 'http://mixpanel.com/api'
|
19
|
+
API_VERSION = '2.0'
|
20
|
+
|
21
|
+
# The mixpanel client can be used to easily consume data through the mixpanel API
|
22
|
+
OPTIONS = [:resource, :event, :funnel, :name, :type, :unit, :interval, :limit, :format, :bucket]
|
23
|
+
attr_reader :uri
|
24
|
+
attr_accessor :api_key, :api_secret
|
25
|
+
|
26
|
+
OPTIONS.each do |option|
|
27
|
+
class_eval "
|
28
|
+
def #{option}(arg=nil)
|
29
|
+
arg ? @#{option} = arg : @#{option}
|
30
|
+
end
|
31
|
+
"
|
32
|
+
end
|
33
|
+
|
34
|
+
def initialize(config)
|
35
|
+
@api_key = config['api_key']
|
36
|
+
@api_secret = config['api_secret']
|
37
|
+
end
|
38
|
+
|
39
|
+
def params
|
40
|
+
OPTIONS.inject({}) do |params, param|
|
41
|
+
option = send(param)
|
42
|
+
params.merge!(param => option) if param != :resource && !option.nil?
|
43
|
+
params
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def request(&options)
|
48
|
+
reset_options
|
49
|
+
instance_eval(&options)
|
50
|
+
@uri = URI.mixpanel(resource, normalize_params(params))
|
51
|
+
response = URI.get(@uri)
|
52
|
+
to_hash(response)
|
53
|
+
end
|
54
|
+
|
55
|
+
def normalize_params(params)
|
56
|
+
params.merge!(
|
57
|
+
:api_key => @api_key,
|
58
|
+
:expire => Time.now.to_i + 600 # Grant this request 10 minutes
|
59
|
+
).merge!(:sig => generate_signature(params))
|
60
|
+
end
|
61
|
+
|
62
|
+
def generate_signature(args)
|
63
|
+
Digest::MD5.hexdigest(args.map{|key,val| "#{key}=#{val}"}.sort.join + api_secret)
|
64
|
+
end
|
65
|
+
|
66
|
+
def to_hash(data)
|
67
|
+
if @format == 'csv'
|
68
|
+
data
|
69
|
+
else
|
70
|
+
JSON.parse(data)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def reset_options
|
75
|
+
(OPTIONS - [:resource]).each do |option|
|
76
|
+
eval "remove_instance_variable(:@#{option}) if defined?(@#{option})"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby -Ku
|
2
|
+
|
3
|
+
# Mixpanel API Ruby Client Library
|
4
|
+
#
|
5
|
+
# Copyright (c) 2009+ Keolo Keagy
|
6
|
+
# See LICENSE for details.
|
7
|
+
#
|
8
|
+
# Inspired by the official mixpanel php and python libraries.
|
9
|
+
# http://mixpanel.com/api/docs/guides/api/
|
10
|
+
|
11
|
+
# URI related helpers
|
12
|
+
class MixpanelClient::URI
|
13
|
+
# Create an http error class for us to use
|
14
|
+
class HTTPError < StandardError; end
|
15
|
+
|
16
|
+
def self.mixpanel(resource, params)
|
17
|
+
File.join([MixpanelClient::BASE_URI, MixpanelClient::API_VERSION, resource.to_s]) + "?#{self.encode(params)}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.encode(params)
|
21
|
+
params.map{|key,val| "#{key}=#{CGI.escape(val.to_s)}"}.sort.join('&')
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.get(uri)
|
25
|
+
::URI.parse(uri).read
|
26
|
+
rescue OpenURI::HTTPError => error
|
27
|
+
raise HTTPError, JSON.parse(error.io.read)['error']
|
28
|
+
end
|
29
|
+
end
|
data/lib/mixpanel_client.rb
CHANGED
@@ -1,101 +1,2 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
# Mixpanel API Ruby Client Library
|
4
|
-
#
|
5
|
-
# Copyright (c) 2009+ Keolo Keagy
|
6
|
-
# See LICENSE for details.
|
7
|
-
#
|
8
|
-
# Inspired by the official mixpanel php and python libraries.
|
9
|
-
# http://mixpanel.com/api/docs/guides/api/
|
10
|
-
|
11
|
-
require 'cgi'
|
12
|
-
require 'digest/md5'
|
13
|
-
require 'open-uri'
|
14
|
-
require 'json' unless defined?(JSON)
|
15
|
-
|
16
|
-
# Ruby library for the mixpanel.com web service
|
17
|
-
module Mixpanel
|
18
|
-
BASE_URI = 'http://mixpanel.com/api'
|
19
|
-
VERSION = '2.0'
|
20
|
-
|
21
|
-
# The mixpanel client can be used to easily consume data through the mixpanel API
|
22
|
-
class Client
|
23
|
-
OPTIONS = [:resource, :event, :funnel, :name, :type, :unit, :interval, :limit, :format, :bucket]
|
24
|
-
attr_reader :uri
|
25
|
-
attr_accessor :api_key, :api_secret
|
26
|
-
|
27
|
-
OPTIONS.each do |option|
|
28
|
-
class_eval "
|
29
|
-
def #{option}(arg=nil)
|
30
|
-
arg ? @#{option} = arg : @#{option}
|
31
|
-
end
|
32
|
-
"
|
33
|
-
end
|
34
|
-
|
35
|
-
def initialize(config)
|
36
|
-
@api_key = config['api_key']
|
37
|
-
@api_secret = config['api_secret']
|
38
|
-
end
|
39
|
-
|
40
|
-
def params
|
41
|
-
OPTIONS.inject({}) do |params, param|
|
42
|
-
option = send(param)
|
43
|
-
params.merge!(param => option) if param != :resource && !option.nil?
|
44
|
-
params
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def request(&options)
|
49
|
-
reset_options
|
50
|
-
instance_eval(&options)
|
51
|
-
@uri = URI.mixpanel(resource, normalize_params(params))
|
52
|
-
response = URI.get(@uri)
|
53
|
-
to_hash(response)
|
54
|
-
end
|
55
|
-
|
56
|
-
def normalize_params(params)
|
57
|
-
params.merge!(
|
58
|
-
:api_key => @api_key,
|
59
|
-
:expire => Time.now.to_i + 600 # Grant this request 10 minutes
|
60
|
-
).merge!(:sig => generate_signature(params))
|
61
|
-
end
|
62
|
-
|
63
|
-
def generate_signature(args)
|
64
|
-
Digest::MD5.hexdigest(args.map{|key,val| "#{key}=#{val}"}.sort.join + api_secret)
|
65
|
-
end
|
66
|
-
|
67
|
-
def to_hash(data)
|
68
|
-
if @format == 'csv'
|
69
|
-
data
|
70
|
-
else
|
71
|
-
JSON.parse(data)
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
def reset_options
|
76
|
-
(OPTIONS - [:resource]).each do |option|
|
77
|
-
eval "remove_instance_variable(:@#{option}) if defined?(@#{option})"
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
# URI related helpers
|
83
|
-
class URI
|
84
|
-
# Create an http error class for us to use
|
85
|
-
class HTTPError < StandardError; end
|
86
|
-
|
87
|
-
def self.mixpanel(resource, params)
|
88
|
-
File.join([BASE_URI, VERSION, resource.to_s]) + "?#{self.encode(params)}"
|
89
|
-
end
|
90
|
-
|
91
|
-
def self.encode(params)
|
92
|
-
params.map{|key,val| "#{key}=#{CGI.escape(val.to_s)}"}.sort.join('&')
|
93
|
-
end
|
94
|
-
|
95
|
-
def self.get(uri)
|
96
|
-
::URI.parse(uri).read
|
97
|
-
rescue OpenURI::HTTPError => error
|
98
|
-
raise HTTPError, JSON.parse(error.io.read)['error']
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
1
|
+
require "#{File.dirname(__FILE__)}/mixpanel_client/mixpanel_client"
|
2
|
+
require "#{File.dirname(__FILE__)}/mixpanel_client/mixpanel_client_uri"
|
data/mixpanel_client.gemspec
CHANGED
@@ -1,60 +1,25 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path('../lib', __FILE__)
|
3
|
+
require 'mixpanel_client/version'
|
5
4
|
|
6
5
|
Gem::Specification.new do |s|
|
7
|
-
s.name
|
8
|
-
s.version
|
9
|
-
|
10
|
-
s.
|
11
|
-
s.
|
12
|
-
s.
|
6
|
+
s.name = 'mixpanel_client'
|
7
|
+
s.version = MixpanelClient::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ['Keolo Keagy']
|
10
|
+
s.email = ['keolo@dreampointmedia.com']
|
11
|
+
s.homepage = 'http://github.com/keolo/mixpanel_client'
|
12
|
+
s.summary = %q{Ruby Mixpanel API Client Library}
|
13
13
|
s.description = %q{Simple ruby client interface to the Mixpanel API.}
|
14
|
-
s.email = %q{keolo@dreampointmedia.com}
|
15
|
-
s.extra_rdoc_files = [
|
16
|
-
"LICENSE",
|
17
|
-
"README.md"
|
18
|
-
]
|
19
|
-
s.files = [
|
20
|
-
".document",
|
21
|
-
"LICENSE",
|
22
|
-
"README.md",
|
23
|
-
"Rakefile",
|
24
|
-
"VERSION",
|
25
|
-
"config/mixpanel.template.yml",
|
26
|
-
"lib/mixpanel_client.rb",
|
27
|
-
"mixpanel_client.gemspec",
|
28
|
-
"spec/events_externalspec.rb",
|
29
|
-
"spec/mixpanel_client_spec.rb",
|
30
|
-
"spec/spec_helper.rb"
|
31
|
-
]
|
32
|
-
s.homepage = %q{http://github.com/keolo/mixpanel_client}
|
33
|
-
s.require_paths = ["lib"]
|
34
|
-
s.rubygems_version = %q{1.3.6}
|
35
|
-
s.summary = %q{Ruby Mixpanel API Client Library}
|
36
|
-
s.test_files = [
|
37
|
-
"spec/events_externalspec.rb",
|
38
|
-
"spec/mixpanel_client_spec.rb",
|
39
|
-
"spec/spec_helper.rb",
|
40
|
-
"test/manual.rb",
|
41
|
-
"test/test.rb"
|
42
|
-
]
|
43
14
|
|
44
|
-
|
45
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
46
|
-
s.specification_version = 3
|
15
|
+
s.rubyforge_project = 'mixpanel_client'
|
47
16
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
s.add_dependency(%q<rspec>, [">= 2.4.0"])
|
53
|
-
s.add_dependency(%q<webmock>, [">= 1.6.2"])
|
54
|
-
end
|
55
|
-
else
|
56
|
-
s.add_dependency(%q<rspec>, [">= 2.4.0"])
|
57
|
-
s.add_dependency(%q<webmock>, [">= 1.6.2"])
|
58
|
-
end
|
59
|
-
end
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ['lib']
|
60
21
|
|
22
|
+
s.add_development_dependency('rspec')
|
23
|
+
s.add_development_dependency('webmock')
|
24
|
+
s.add_development_dependency('metric_fu')
|
25
|
+
end
|
data/spec/events_externalspec.rb
CHANGED
@@ -7,7 +7,7 @@ describe 'External calls to mixpanel' do
|
|
7
7
|
before :all do
|
8
8
|
config = YAML.load_file(File.dirname(__FILE__) + '/../config/mixpanel.yml')
|
9
9
|
config.should_not be_nil
|
10
|
-
@client =
|
10
|
+
@client = MixpanelClient.new(config)
|
11
11
|
end
|
12
12
|
|
13
13
|
describe 'Events' do
|
@@ -17,7 +17,7 @@ describe 'External calls to mixpanel' do
|
|
17
17
|
resource 'events'
|
18
18
|
end
|
19
19
|
}
|
20
|
-
data.should raise_error(
|
20
|
+
data.should raise_error(MixpanelClient::URI::HTTPError)
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'should return events' do
|
@@ -1,11 +1,12 @@
|
|
1
|
+
# coding: utf-8
|
1
2
|
require 'rubygems'
|
2
3
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
3
4
|
|
4
|
-
describe
|
5
|
+
describe MixpanelClient do
|
5
6
|
before :all do
|
6
7
|
config = {'api_key' => 'test', 'api_secret' => 'test'}
|
7
|
-
@client =
|
8
|
-
@uri = Regexp.escape(
|
8
|
+
@client = MixpanelClient.new(config)
|
9
|
+
@uri = Regexp.escape(MixpanelClient::BASE_URI)
|
9
10
|
end
|
10
11
|
|
11
12
|
describe '#request' do
|
@@ -96,7 +97,7 @@ describe Mixpanel::Client do
|
|
96
97
|
bucket 'list'
|
97
98
|
end
|
98
99
|
|
99
|
-
|
100
|
+
MixpanelClient::OPTIONS.each do |option|
|
100
101
|
@client.send(option).should_not be_nil
|
101
102
|
end
|
102
103
|
|
@@ -104,36 +105,36 @@ describe Mixpanel::Client do
|
|
104
105
|
resource 'events/properties/top'
|
105
106
|
end
|
106
107
|
|
107
|
-
(
|
108
|
+
(MixpanelClient::OPTIONS - [:resource]).each do |option|
|
108
109
|
@client.send(option).should be_nil
|
109
110
|
end
|
110
111
|
end
|
111
112
|
end
|
112
113
|
end
|
113
114
|
|
114
|
-
describe
|
115
|
+
describe MixpanelClient::URI do
|
115
116
|
describe '.mixpanel' do
|
116
117
|
it 'should return a properly formatted mixpanel uri as a string (without an endpoint)' do
|
117
118
|
resource, params = ['events', {:c => 'see', :a => 'aye'}]
|
118
|
-
|
119
|
+
MixpanelClient::URI.mixpanel(resource, params).should == 'http://mixpanel.com/api/2.0/events?a=aye&c=see'
|
119
120
|
end
|
120
121
|
it 'should return a properly formatted mixpanel uri as a string (with an endpoint)' do
|
121
122
|
resource, params = ['events/top', {:c => 'see', :a => 'aye'}]
|
122
|
-
|
123
|
+
MixpanelClient::URI.mixpanel(resource, params).should == 'http://mixpanel.com/api/2.0/events/top?a=aye&c=see'
|
123
124
|
end
|
124
125
|
end
|
125
126
|
|
126
127
|
describe '.encode' do
|
127
128
|
it 'should return a string with url encoded values.' do
|
128
129
|
params = {:hey => '!@#$%^&*()\/"Ü', :soo => "hëllö?"}
|
129
|
-
|
130
|
+
MixpanelClient::URI.encode(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'
|
130
131
|
end
|
131
132
|
end
|
132
133
|
|
133
134
|
describe '.get' do
|
134
135
|
it 'should return a string response' do
|
135
136
|
stub_request(:get, 'http://example.com').to_return(:body => 'something')
|
136
|
-
|
137
|
+
MixpanelClient::URI.get('http://example.com').should == 'something'
|
137
138
|
end
|
138
139
|
end
|
139
140
|
end
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mixpanel_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 23
|
5
|
+
prerelease:
|
5
6
|
segments:
|
6
|
-
- 0
|
7
|
-
- 5
|
8
7
|
- 1
|
9
|
-
|
8
|
+
- 0
|
9
|
+
- 0
|
10
|
+
version: 1.0.0
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Keolo Keagy
|
@@ -14,54 +15,73 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2011-
|
18
|
+
date: 2011-03-12 00:00:00 -08:00
|
18
19
|
default_executable:
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
22
|
name: rspec
|
22
23
|
prerelease: false
|
23
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
24
26
|
requirements:
|
25
27
|
- - ">="
|
26
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
27
30
|
segments:
|
28
|
-
- 2
|
29
|
-
- 4
|
30
31
|
- 0
|
31
|
-
version:
|
32
|
+
version: "0"
|
32
33
|
type: :development
|
33
34
|
version_requirements: *id001
|
34
35
|
- !ruby/object:Gem::Dependency
|
35
36
|
name: webmock
|
36
37
|
prerelease: false
|
37
38
|
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
38
40
|
requirements:
|
39
41
|
- - ">="
|
40
42
|
- !ruby/object:Gem::Version
|
43
|
+
hash: 3
|
41
44
|
segments:
|
42
|
-
-
|
43
|
-
|
44
|
-
- 2
|
45
|
-
version: 1.6.2
|
45
|
+
- 0
|
46
|
+
version: "0"
|
46
47
|
type: :development
|
47
48
|
version_requirements: *id002
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: metric_fu
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
hash: 3
|
58
|
+
segments:
|
59
|
+
- 0
|
60
|
+
version: "0"
|
61
|
+
type: :development
|
62
|
+
version_requirements: *id003
|
48
63
|
description: Simple ruby client interface to the Mixpanel API.
|
49
|
-
email:
|
64
|
+
email:
|
65
|
+
- keolo@dreampointmedia.com
|
50
66
|
executables: []
|
51
67
|
|
52
68
|
extensions: []
|
53
69
|
|
54
|
-
extra_rdoc_files:
|
55
|
-
|
56
|
-
- README.md
|
70
|
+
extra_rdoc_files: []
|
71
|
+
|
57
72
|
files:
|
58
73
|
- .document
|
74
|
+
- .gitignore
|
75
|
+
- .rvmrc
|
76
|
+
- Gemfile
|
59
77
|
- LICENSE
|
60
78
|
- README.md
|
61
79
|
- Rakefile
|
62
|
-
- VERSION
|
63
80
|
- config/mixpanel.template.yml
|
64
81
|
- lib/mixpanel_client.rb
|
82
|
+
- lib/mixpanel_client/mixpanel_client.rb
|
83
|
+
- lib/mixpanel_client/mixpanel_client_uri.rb
|
84
|
+
- lib/mixpanel_client/version.rb
|
65
85
|
- mixpanel_client.gemspec
|
66
86
|
- spec/events_externalspec.rb
|
67
87
|
- spec/mixpanel_client_spec.rb
|
@@ -76,23 +96,27 @@ rdoc_options: []
|
|
76
96
|
require_paths:
|
77
97
|
- lib
|
78
98
|
required_ruby_version: !ruby/object:Gem::Requirement
|
99
|
+
none: false
|
79
100
|
requirements:
|
80
101
|
- - ">="
|
81
102
|
- !ruby/object:Gem::Version
|
103
|
+
hash: 3
|
82
104
|
segments:
|
83
105
|
- 0
|
84
106
|
version: "0"
|
85
107
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
108
|
+
none: false
|
86
109
|
requirements:
|
87
110
|
- - ">="
|
88
111
|
- !ruby/object:Gem::Version
|
112
|
+
hash: 3
|
89
113
|
segments:
|
90
114
|
- 0
|
91
115
|
version: "0"
|
92
116
|
requirements: []
|
93
117
|
|
94
|
-
rubyforge_project:
|
95
|
-
rubygems_version: 1.
|
118
|
+
rubyforge_project: mixpanel_client
|
119
|
+
rubygems_version: 1.6.2
|
96
120
|
signing_key:
|
97
121
|
specification_version: 3
|
98
122
|
summary: Ruby Mixpanel API Client Library
|
@@ -100,5 +124,3 @@ test_files:
|
|
100
124
|
- spec/events_externalspec.rb
|
101
125
|
- spec/mixpanel_client_spec.rb
|
102
126
|
- spec/spec_helper.rb
|
103
|
-
- test/manual.rb
|
104
|
-
- test/test.rb
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
0.5.1
|
data/test/manual.rb
DELETED
@@ -1,58 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
# Notes:
|
4
|
-
# Test URI.mixpanel in browser to see response and error codes.
|
5
|
-
#
|
6
|
-
# Pushing to rubygems.org
|
7
|
-
# rake version:bump:patch
|
8
|
-
# git commit ...
|
9
|
-
# git push
|
10
|
-
# rake release
|
11
|
-
|
12
|
-
require 'rubygems'
|
13
|
-
require "#{File.dirname(__FILE__)}/../lib/mixpanel_client"
|
14
|
-
|
15
|
-
config = {'api_key' => 'e81de686c96261747fdc443d4809c297', 'api_secret' => '201ff82db5f1e8766b0004f0acf8d82e'}
|
16
|
-
|
17
|
-
client = Mixpanel::Client.new(config)
|
18
|
-
|
19
|
-
# Block form
|
20
|
-
data = client.request do
|
21
|
-
resource 'events'
|
22
|
-
event '["test-event"]'
|
23
|
-
unit 'hour'
|
24
|
-
interval 24
|
25
|
-
format 'csv'
|
26
|
-
end
|
27
|
-
|
28
|
-
puts
|
29
|
-
puts client.inspect
|
30
|
-
puts data.inspect
|
31
|
-
puts
|
32
|
-
|
33
|
-
# Block form
|
34
|
-
data = client.request do
|
35
|
-
resource 'events/properties/top'
|
36
|
-
type 'general'
|
37
|
-
event '["test-event"]'
|
38
|
-
end
|
39
|
-
|
40
|
-
puts
|
41
|
-
puts client.inspect
|
42
|
-
puts data.inspect
|
43
|
-
puts
|
44
|
-
|
45
|
-
# Bucket
|
46
|
-
data = client.request do
|
47
|
-
resource 'events'
|
48
|
-
event '["test-event"]'
|
49
|
-
type 'general'
|
50
|
-
unit 'hour'
|
51
|
-
interval 24
|
52
|
-
bucket 'test'
|
53
|
-
end
|
54
|
-
|
55
|
-
puts
|
56
|
-
puts client.inspect
|
57
|
-
puts data.inspect
|
58
|
-
puts
|
data/test/test.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
# Notes:
|
4
|
-
# Test URI.mixpanel in browser to see response and error codes.
|
5
|
-
#
|
6
|
-
# Pushing to rubygems.org
|
7
|
-
# rake version:bump:patch
|
8
|
-
# git commit ...
|
9
|
-
# git push
|
10
|
-
# rake release
|
11
|
-
|
12
|
-
require 'rubygems'
|
13
|
-
require "#{File.dirname(__FILE__)}/../lib/mixpanel_client"
|
14
|
-
|
15
|
-
config = YAML.load_file "#{File.dirname(__FILE__)}/../config/mixpanel.yml"
|
16
|
-
client = Mixpanel::Client.new(config)
|
17
|
-
|
18
|
-
data = client.request do
|
19
|
-
resource 'events'
|
20
|
-
event '["test-event"]'
|
21
|
-
unit 'hour'
|
22
|
-
interval 24
|
23
|
-
format 'csv'
|
24
|
-
end
|
25
|
-
|
26
|
-
puts client.inspect
|
27
|
-
puts data.inspect
|
28
|
-
|
29
|
-
|
30
|
-
data = client.request do
|
31
|
-
resource 'events/top'
|
32
|
-
type 'general'
|
33
|
-
end
|
34
|
-
|
35
|
-
puts client.inspect
|
36
|
-
puts data.inspect
|