kmts 2.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 +5 -0
- data/CHANGELOG +4 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +29 -0
- data/LICENSE +202 -0
- data/README.md +64 -0
- data/README.rdoc +14 -0
- data/Rakefile +5 -0
- data/bin/km_send +35 -0
- data/doc/Accept.html +546 -0
- data/doc/Gemfile.html +110 -0
- data/doc/Hash.html +283 -0
- data/doc/Helper.html +318 -0
- data/doc/KMError.html +159 -0
- data/doc/KMTS.html +493 -0
- data/doc/KMTS/IdentError.html +159 -0
- data/doc/KMTS/InitError.html +159 -0
- data/doc/KMTS/SaaS.html +451 -0
- data/doc/Object.html +211 -0
- data/doc/README_rdoc.html +122 -0
- data/doc/Rakefile.html +111 -0
- data/doc/String.html +244 -0
- data/doc/bin/km_send.html +54 -0
- data/doc/created.rid +15 -0
- data/doc/images/brick.png +0 -0
- data/doc/images/brick_link.png +0 -0
- data/doc/images/bug.png +0 -0
- data/doc/images/bullet_black.png +0 -0
- data/doc/images/bullet_toggle_minus.png +0 -0
- data/doc/images/bullet_toggle_plus.png +0 -0
- data/doc/images/date.png +0 -0
- data/doc/images/find.png +0 -0
- data/doc/images/loadingAnimation.gif +0 -0
- data/doc/images/macFFBgHack.png +0 -0
- data/doc/images/package.png +0 -0
- data/doc/images/page_green.png +0 -0
- data/doc/images/page_white_text.png +0 -0
- data/doc/images/page_white_width.png +0 -0
- data/doc/images/plugin.png +0 -0
- data/doc/images/ruby.png +0 -0
- data/doc/images/tag_green.png +0 -0
- data/doc/images/wrench.png +0 -0
- data/doc/images/wrench_orange.png +0 -0
- data/doc/images/zoom.png +0 -0
- data/doc/index.html +142 -0
- data/doc/js/darkfish.js +116 -0
- data/doc/js/jquery.js +32 -0
- data/doc/js/quicksearch.js +114 -0
- data/doc/js/thickbox-compressed.js +10 -0
- data/doc/lib/km/saas_rb.html +54 -0
- data/doc/lib/km/version_rb.html +52 -0
- data/doc/lib/km_rb.html +60 -0
- data/doc/rdoc.css +730 -0
- data/doc/spec/accept_rb.html +62 -0
- data/doc/spec/km_old_rb.html +54 -0
- data/doc/spec/km_saas_spec_rb.html +56 -0
- data/doc/spec/km_send_spec_rb.html +54 -0
- data/doc/spec/km_spec_rb.html +54 -0
- data/doc/spec/setup_rb.html +60 -0
- data/doc/spec/watchr_rb.html +52 -0
- data/kmts.gemspec +26 -0
- data/lib/kmts.rb +245 -0
- data/lib/kmts/saas.rb +39 -0
- data/lib/kmts/version.rb +3 -0
- data/spec/accept.rb +91 -0
- data/spec/km_old.rb +105 -0
- data/spec/km_saas_spec.rb +107 -0
- data/spec/km_send_spec.rb +98 -0
- data/spec/km_spec.rb +175 -0
- data/spec/setup.rb +77 -0
- data/spec/watchr.rb +3 -0
- metadata +190 -0
data/lib/kmts/saas.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'kmts'
|
2
|
+
class KMTS
|
3
|
+
module SaaS
|
4
|
+
def signed_up(id, plan=nil, props = {})
|
5
|
+
props['Plan Name'] = plan unless plan.to_s.empty?
|
6
|
+
record id, 'Signed Up', props
|
7
|
+
end
|
8
|
+
alias signedup signed_up
|
9
|
+
|
10
|
+
def upgraded(id, plan=nil, props = {})
|
11
|
+
props['Plan Name'] = plan unless plan.to_s.empty?
|
12
|
+
record id, 'Upgraded', props
|
13
|
+
end
|
14
|
+
|
15
|
+
def downgraded(id, plan=nil, props = {})
|
16
|
+
props['Plan Name'] = plan unless plan.to_s.empty?
|
17
|
+
record id, 'Downgraded', props
|
18
|
+
end
|
19
|
+
|
20
|
+
def billed(id, amount=nil, description=nil, props={})
|
21
|
+
props['Billing Amount'] = amount unless amount.to_s.empty?
|
22
|
+
props['Billing Description'] = description unless description.to_s.empty?
|
23
|
+
record id, 'Billed', props
|
24
|
+
end
|
25
|
+
|
26
|
+
def canceled(id, props={})
|
27
|
+
record id, 'Canceled', props
|
28
|
+
end
|
29
|
+
alias cancelled canceled
|
30
|
+
|
31
|
+
def visited_site(id, url=nil, referrer=nil, props={})
|
32
|
+
props['URL'] = url unless url.to_s.empty?
|
33
|
+
props['Referrer'] = referrer unless referrer.to_s.empty?
|
34
|
+
record id, 'Visited Site', props
|
35
|
+
end
|
36
|
+
# ------------------------------------------------------------------------
|
37
|
+
end
|
38
|
+
end
|
39
|
+
KMTS.send :extend, KMTS::SaaS
|
data/lib/kmts/version.rb
ADDED
data/spec/accept.rb
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'socket'
|
3
|
+
require 'rubygems'
|
4
|
+
require 'json'
|
5
|
+
require 'uri'
|
6
|
+
require 'cgi'
|
7
|
+
|
8
|
+
# a library to accept connections as a server, and send back what it received on request.
|
9
|
+
|
10
|
+
class Accept
|
11
|
+
attr_accessor :server, :session
|
12
|
+
attr_reader :opts
|
13
|
+
URI_REXEGP = /^\s*(\w+)\s+([^ ]*)\s+(.*)$/
|
14
|
+
def initialize(args = {})
|
15
|
+
opts = { :port => 9292, :debug => false }
|
16
|
+
opts.update(args)
|
17
|
+
|
18
|
+
puts "Starting up server on port #{opts[:port]} ..."
|
19
|
+
@opts = opts
|
20
|
+
@server = TCPServer.new(opts[:port])
|
21
|
+
@@input_history = []
|
22
|
+
@handle = Thread.start do
|
23
|
+
loop do
|
24
|
+
Thread.start(@server.accept) do |client|
|
25
|
+
# puts "log: Connection from #{session.peeraddr[2]} at #{session.peeraddr[3]}"
|
26
|
+
# session.puts "Server: Connection from #{session.peeraddr[2]}\n"
|
27
|
+
handle_input(client)
|
28
|
+
client.close
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
def input_history
|
34
|
+
@@input_history
|
35
|
+
end
|
36
|
+
def wait
|
37
|
+
@handle.join
|
38
|
+
end
|
39
|
+
|
40
|
+
def handle_input(client)
|
41
|
+
input = client.gets
|
42
|
+
if input
|
43
|
+
puts "received: #{input.inspect}" if opts[:debug]
|
44
|
+
case input
|
45
|
+
when /clear/
|
46
|
+
clear
|
47
|
+
when /history/
|
48
|
+
client.puts input_history.to_json
|
49
|
+
when /exit/
|
50
|
+
begin
|
51
|
+
close
|
52
|
+
rescue Exception
|
53
|
+
end
|
54
|
+
return
|
55
|
+
when /^\s*(GET|POST|PUT|DELETE)\s+([^ ]*)\s+(.*)$/
|
56
|
+
@@input_history << parse_input(input)
|
57
|
+
client.puts "HTTP/1.1 200 OK"
|
58
|
+
else
|
59
|
+
@@input_history << input.chomp
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
def parse_input(input)
|
64
|
+
data = {}
|
65
|
+
data[:raw] = input.chomp
|
66
|
+
(method,uri,http) = input.scan(/^\s*(\w+)\s+([^ ]*)\s+(.*)$/).flatten
|
67
|
+
|
68
|
+
data[:method] = method
|
69
|
+
data[:http] = http.chomp
|
70
|
+
data[:uri] = uri
|
71
|
+
u = URI(uri)
|
72
|
+
data[:path] = u.path
|
73
|
+
data[:query] = CGI.parse(u.query)
|
74
|
+
return data
|
75
|
+
end
|
76
|
+
def close
|
77
|
+
session = nil
|
78
|
+
server.close
|
79
|
+
end
|
80
|
+
# clear history
|
81
|
+
def clear
|
82
|
+
@@input_history.clear
|
83
|
+
end
|
84
|
+
end
|
85
|
+
__END__
|
86
|
+
% ruby -r './lib/ruby/accept.rb' -e 'Accept.new(:debug => true, :port => 9292).wait'
|
87
|
+
Starting up server on port 9292 ...
|
88
|
+
|
89
|
+
echo rain | nc localhost 9292
|
90
|
+
% echo history | nc localhost 9292
|
91
|
+
["rain"]
|
data/spec/km_old.rb
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
require 'setup'
|
2
|
+
|
3
|
+
describe KMTS do
|
4
|
+
attr_accessor :send_query, :log
|
5
|
+
before do
|
6
|
+
@send_query = []
|
7
|
+
@log = []
|
8
|
+
KMTS.stub(:send_query).and_return { |*args| send_query << args }
|
9
|
+
KMTS.stub(:log).and_return { |*args| log << Hash[*args] }
|
10
|
+
time = Time.at 1234567890
|
11
|
+
Time.stub!(:now).and_return(time)
|
12
|
+
KMTS.reset
|
13
|
+
end
|
14
|
+
context "initialization" do
|
15
|
+
it "should not record without initialization" do
|
16
|
+
KMTS::record 'My Action'
|
17
|
+
log.first[:error].should =~ /Need to initialize first \(KMTS::init <your_key>\)/
|
18
|
+
end
|
19
|
+
it "should not set initialization" do
|
20
|
+
KMTS::set :day => 'friday'
|
21
|
+
log.first[:error].should =~ /Need to initialize first \(KMTS::init <your_key>\)/
|
22
|
+
end
|
23
|
+
end
|
24
|
+
context "identification" do
|
25
|
+
before do
|
26
|
+
KMTS::init 'KM_KEY'
|
27
|
+
end
|
28
|
+
it "should not record without identification" do
|
29
|
+
KMTS::record 'My Action'
|
30
|
+
log.first[:error].should include("Need to identify first (KMTS::identify <user>)")
|
31
|
+
end
|
32
|
+
it "should set without identification" do
|
33
|
+
KMTS::record 'My Action'
|
34
|
+
log.first[:error].should include("Need to identify first (KMTS::identify <user>)")
|
35
|
+
end
|
36
|
+
|
37
|
+
context "aliasing" do
|
38
|
+
it "shouldn't fail on alias without identifying" do
|
39
|
+
KMTS::alias 'peter','joe' # Alias "bob" to "robert"
|
40
|
+
send_query.first.first.should have_query_string("/a?_n=joe&_p=peter&_k=KM_KEY&_t=1234567890")
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context "events" do
|
46
|
+
before do
|
47
|
+
KMTS::init 'KM_KEY'
|
48
|
+
KMTS::identify 'bob'
|
49
|
+
end
|
50
|
+
it "should record an action with no specific props" do
|
51
|
+
KMTS::record 'My Action'
|
52
|
+
send_query.first.first.should have_query_string("/e?_n=My+Action&_p=bob&_k=KM_KEY&_t=1234567890")
|
53
|
+
end
|
54
|
+
it "should record an action with properties" do
|
55
|
+
KMTS::record 'Signup', 'age' => 26
|
56
|
+
send_query.first.first.should have_query_string("/e?age=26&_n=Signup&_p=bob&_k=KM_KEY&_t=1234567890")
|
57
|
+
end
|
58
|
+
it "should reocrd properties with spaces in key and value" do
|
59
|
+
KMTS::record 'Signup', 'age' => 26, 'city of residence' => 'eug ene'
|
60
|
+
send_query.first.first.should have_query_string("/e?age=26&city+of+residence=eug+ene&_n=Signup&_p=bob&_k=KM_KEY&_t=1234567890")
|
61
|
+
end
|
62
|
+
it "should not over-write special keys" do
|
63
|
+
KMTS::record 'Signup', 'age' => 26, '_p' => 'billybob', '_k' => 'foo', '_n' => 'something else'
|
64
|
+
send_query.first.first.should have_query_string("/e?age=26&_p=bob&_k=KM_KEY&_n=Signup&_t=1234567890")
|
65
|
+
end
|
66
|
+
it "should not over-write special keys with symbols" do
|
67
|
+
KMTS::record 'Signup', 'age' => 26, '_p' => 'billybob', :'_k' => 'foo', :'_n' => 'something else'
|
68
|
+
send_query.first.first.should have_query_string("/e?age=26&_p=bob&_k=KM_KEY&_n=Signup&_t=1234567890")
|
69
|
+
end
|
70
|
+
it "should work with properties with @" do
|
71
|
+
KMTS::record 'Signup', 'email' => 'test@blah.com', '_p' => 'billybob', '_k' => 'foo', '_n' => 'something else'
|
72
|
+
send_query.first.first.should have_query_string("/e?email=test%40blah.com&_p=bob&_k=KM_KEY&_n=Signup&_t=1234567890")
|
73
|
+
end
|
74
|
+
it "should work with just set" do
|
75
|
+
KMTS::record 'age' => 26
|
76
|
+
send_query.first.first.should have_query_string("/s?age=26&_p=bob&_k=KM_KEY&_t=1234567890")
|
77
|
+
end
|
78
|
+
it "should record ok with multiple calls" do
|
79
|
+
KMTS::record 'Signup', 'age' => 26
|
80
|
+
KMTS::record 'Signup', 'age' => 36
|
81
|
+
send_query.first.first.should have_query_string("/e?age=26&_n=Signup&_p=bob&_k=KM_KEY&_t=1234567890")
|
82
|
+
send_query.last.first.should have_query_string("/e?age=36&_n=Signup&_p=bob&_k=KM_KEY&_t=1234567890")
|
83
|
+
end
|
84
|
+
it "shouldn't store the key anywhere" do
|
85
|
+
KMTS::init 'KM_OTHER'
|
86
|
+
KMTS::alias 'truman','harry' # Alias "bob" to "robert"
|
87
|
+
send_query.first.first.should have_query_string("/a?_n=harry&_p=truman&_k=KM_OTHER&_t=1234567890")
|
88
|
+
end
|
89
|
+
it "should override the time if defined" do
|
90
|
+
KMTS::record 'Signup', 'age' => 36, '_t' => 1234567891
|
91
|
+
send_query.last.first.should have_query_string("/e?age=36&_n=Signup&_p=bob&_k=KM_KEY&_t=1234567891&_d=1")
|
92
|
+
end
|
93
|
+
it "should work with either symbols or strings" do
|
94
|
+
KMTS::record :Signup, :age => 36, :_t => 1234567891
|
95
|
+
send_query.last.first.should have_query_string("/e?age=36&_n=Signup&_p=bob&_k=KM_KEY&_t=1234567891&_d=1")
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should test cron" do
|
100
|
+
pending
|
101
|
+
end
|
102
|
+
it "should send logged queries" do
|
103
|
+
pending
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
require 'setup'
|
2
|
+
require 'kmts/saas'
|
3
|
+
describe KMTS do
|
4
|
+
before do
|
5
|
+
KMTS::reset
|
6
|
+
now = Time.now
|
7
|
+
Time.stub!(:now).and_return(now)
|
8
|
+
FileUtils.rm_f KMTS::log_name(:error)
|
9
|
+
FileUtils.rm_f KMTS::log_name(:query)
|
10
|
+
Helper.clear
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "should record events" do
|
14
|
+
before do
|
15
|
+
KMTS::init 'KM_KEY', :log_dir => __('log'), :host => '127.0.0.1:9292'
|
16
|
+
end
|
17
|
+
context "plain usage" do
|
18
|
+
it "records a signup event" do
|
19
|
+
KMTS.signed_up 'bob', 'Premium'
|
20
|
+
sleep 0.1
|
21
|
+
res = Helper.accept(:history).first.indifferent
|
22
|
+
res[:path].should == '/e'
|
23
|
+
res[:query]['_n'].first.should == 'Signed Up'
|
24
|
+
res[:query]['Plan Name'].first.should == 'Premium'
|
25
|
+
end
|
26
|
+
it "records an upgraded event" do
|
27
|
+
KMTS.upgraded 'bob', 'Unlimited'
|
28
|
+
sleep 0.1
|
29
|
+
res = Helper.accept(:history).first.indifferent
|
30
|
+
res[:path].should == '/e'
|
31
|
+
res[:query]['_n'].first.should == 'Upgraded'
|
32
|
+
res[:query]['Plan Name'].first.should == 'Unlimited'
|
33
|
+
end
|
34
|
+
it "records a downgraded event" do
|
35
|
+
KMTS.downgraded 'bob', 'Free'
|
36
|
+
sleep 0.1
|
37
|
+
res = Helper.accept(:history).first.indifferent
|
38
|
+
res[:path].should == '/e'
|
39
|
+
res[:query]['_n'].first.should == 'Downgraded'
|
40
|
+
res[:query]['Plan Name'].first.should == 'Free'
|
41
|
+
end
|
42
|
+
it "records a billed event" do
|
43
|
+
KMTS.billed 'bob', 32, 'Upgraded'
|
44
|
+
sleep 0.1
|
45
|
+
res = Helper.accept(:history).first.indifferent
|
46
|
+
res[:path].should == '/e'
|
47
|
+
res[:query]['_n'].first.should == 'Billed'
|
48
|
+
res[:query]['Billing Amount'].first.should == '32'
|
49
|
+
res[:query]['Billing Description'].first.should == 'Upgraded'
|
50
|
+
end
|
51
|
+
it "records a canceled event" do
|
52
|
+
KMTS.canceled 'bob'
|
53
|
+
sleep 0.1
|
54
|
+
res = Helper.accept(:history).first.indifferent
|
55
|
+
res[:path].should == '/e'
|
56
|
+
res[:query]['_n'].first.should == 'Canceled'
|
57
|
+
end
|
58
|
+
it "records a visited site event" do
|
59
|
+
KMTS.visited_site 'bob', 'http://duckduckgo.com', 'http://kissmetrics.com'
|
60
|
+
sleep 0.1
|
61
|
+
res = Helper.accept(:history).first.indifferent
|
62
|
+
res[:path].should == '/e'
|
63
|
+
res[:query]['_n'].first.should == 'Visited Site'
|
64
|
+
res[:query]['URL'].first.should == 'http://duckduckgo.com'
|
65
|
+
res[:query]['Referrer'].first.should == 'http://kissmetrics.com'
|
66
|
+
end
|
67
|
+
end
|
68
|
+
context "usage with props" do
|
69
|
+
it "records a signup event" do
|
70
|
+
KMTS.signed_up 'bob', 'Premium', :foo => 'bar'
|
71
|
+
sleep 0.1
|
72
|
+
res = Helper.accept(:history).first.indifferent
|
73
|
+
res[:query]['foo'].first.should == 'bar'
|
74
|
+
end
|
75
|
+
it "records an upgraded event" do
|
76
|
+
KMTS.upgraded 'bob', 'Unlimited', :foo => 'bar'
|
77
|
+
sleep 0.1
|
78
|
+
res = Helper.accept(:history).first.indifferent
|
79
|
+
res[:query]['foo'].first.should == 'bar'
|
80
|
+
end
|
81
|
+
it "records a downgraded event" do
|
82
|
+
KMTS.downgraded 'bob', 'Free', :foo => 'bar'
|
83
|
+
sleep 0.1
|
84
|
+
res = Helper.accept(:history).first.indifferent
|
85
|
+
res[:query]['foo'].first.should == 'bar'
|
86
|
+
end
|
87
|
+
it "records a billed event" do
|
88
|
+
KMTS.billed 'bob', 32, 'Upgraded', :foo => 'bar'
|
89
|
+
sleep 0.1
|
90
|
+
res = Helper.accept(:history).first.indifferent
|
91
|
+
res[:query]['foo'].first.should == 'bar'
|
92
|
+
end
|
93
|
+
it "records a canceled event" do
|
94
|
+
KMTS.canceled 'bob', :foo => 'bar'
|
95
|
+
sleep 0.1
|
96
|
+
res = Helper.accept(:history).first.indifferent
|
97
|
+
res[:query]['foo'].first.should == 'bar'
|
98
|
+
end
|
99
|
+
it "records a visited site event" do
|
100
|
+
KMTS.visited_site 'bob', 'http://duckduckgo.com', 'http://kissmetrics.com', :foo => 'bar'
|
101
|
+
sleep 0.1
|
102
|
+
res = Helper.accept(:history).first.indifferent
|
103
|
+
res[:query]['foo'].first.should == 'bar'
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require 'setup'
|
2
|
+
|
3
|
+
describe 'km_send' do
|
4
|
+
context "using cron for sending logs" do
|
5
|
+
before do
|
6
|
+
now = Time.now
|
7
|
+
Time.stub!(:now).and_return(now)
|
8
|
+
Dir.glob(__('log','*')).each do |file|
|
9
|
+
FileUtils.rm file
|
10
|
+
end
|
11
|
+
KMTS.reset
|
12
|
+
Helper.clear
|
13
|
+
end
|
14
|
+
context "with default environment" do
|
15
|
+
before do
|
16
|
+
KMTS::init 'KM_KEY', :log_dir => __('log'), :host => '127.0.0.1:9292', :use_cron => true
|
17
|
+
end
|
18
|
+
it "should test commandline version" do
|
19
|
+
KMTS::record 'bob', 'Signup', 'age' => 26
|
20
|
+
`bundle exec km_send #{__('log/')} 127.0.0.1:9292`
|
21
|
+
sleep 0.1
|
22
|
+
res = Helper.accept(:history).first.indifferent
|
23
|
+
res[:path].should == '/e'
|
24
|
+
res[:query]['_k'].first.should == 'KM_KEY'
|
25
|
+
res[:query]['_p'].first.should == 'bob'
|
26
|
+
res[:query]['_n'].first.should == 'Signup'
|
27
|
+
res[:query]['_t'].first.should == Time.now.to_i.to_s
|
28
|
+
res[:query]['age'].first.should == '26'
|
29
|
+
end
|
30
|
+
it "should send from query_log" do
|
31
|
+
write_log :query, "/e?_t=1297105499&_n=Signup&_p=bob&_k=KM_KEY&age=26"
|
32
|
+
`bundle exec km_send #{__('log/')} 127.0.0.1:9292`
|
33
|
+
sleep 0.1
|
34
|
+
res = Helper.accept(:history).first.indifferent
|
35
|
+
res[:path].should == '/e'
|
36
|
+
res[:query]['_k'].first.should == 'KM_KEY'
|
37
|
+
res[:query]['_p'].first.should == 'bob'
|
38
|
+
res[:query]['_n'].first.should == 'Signup'
|
39
|
+
res[:query]['_t'].first.should == '1297105499'
|
40
|
+
res[:query]['age'].first.should == '26'
|
41
|
+
end
|
42
|
+
it "should send from query_log_old" do
|
43
|
+
write_log :query_old, "/e?_t=1297105499&_n=Signup&_p=bob&_k=KM_KEY&age=26"
|
44
|
+
`bundle exec km_send #{__('log/')} 127.0.0.1:9292`
|
45
|
+
sleep 0.1
|
46
|
+
res = Helper.accept(:history).first.indifferent
|
47
|
+
res[:path].should == '/e'
|
48
|
+
res[:query]['_k'].first.should == 'KM_KEY'
|
49
|
+
res[:query]['_p'].first.should == 'bob'
|
50
|
+
res[:query]['_n'].first.should == 'Signup'
|
51
|
+
res[:query]['_t'].first.should == '1297105499'
|
52
|
+
res[:query]['age'].first.should == '26'
|
53
|
+
end
|
54
|
+
it "should send from both query_log and query_log_old" do
|
55
|
+
File.open(__('log/kissmetrics_query.log'), 'w+') { |h| h.puts "/e?_t=1297105499&_n=Signup&_p=bob&_k=KM_KEY&age=27" }
|
56
|
+
File.open(__('log/kissmetrics_production_query.log'), 'w+') { |h| h.puts "/e?_t=1297105499&_n=Signup&_p=bob&_k=KM_KEY&age=26" }
|
57
|
+
`bundle exec km_send #{__('log/')} 127.0.0.1:9292`
|
58
|
+
sleep 0.1
|
59
|
+
res = Helper.accept(:history).first.indifferent
|
60
|
+
res[:path].should == '/e'
|
61
|
+
res[:query]['_k'].first.should == 'KM_KEY'
|
62
|
+
res[:query]['_p'].first.should == 'bob'
|
63
|
+
res[:query]['_n'].first.should == 'Signup'
|
64
|
+
res[:query]['_t'].first.should == '1297105499'
|
65
|
+
res[:query]['age'].first.should == '27'
|
66
|
+
Helper.clear
|
67
|
+
`bundle exec km_send #{__('log/')} 127.0.0.1:9292`
|
68
|
+
sleep 0.1
|
69
|
+
res = Helper.accept(:history).first.indifferent
|
70
|
+
res[:path].should == '/e'
|
71
|
+
res[:query]['_k'].first.should == 'KM_KEY'
|
72
|
+
res[:query]['_p'].first.should == 'bob'
|
73
|
+
res[:query]['_n'].first.should == 'Signup'
|
74
|
+
res[:query]['_t'].first.should == '1297105499'
|
75
|
+
res[:query]['age'].first.should == '26'
|
76
|
+
end
|
77
|
+
it "sends unless dryrun is specified" do
|
78
|
+
File.open(__('log/kissmetrics_alpha_query.log'), 'w+') { |h| h.puts "/e?_t=1297105499&_n=Signup&_p=bob&_k=KM_KEY&age=26" }
|
79
|
+
`bundle exec km_send -e alpha #{__('log/')} 127.0.0.1:9292`
|
80
|
+
sleep 0.1
|
81
|
+
res = Helper.accept(:history).first.should_not be_nil
|
82
|
+
end
|
83
|
+
end
|
84
|
+
it "should send from diff environment when force flag is used" do
|
85
|
+
KMTS::init 'KM_KEY', :log_dir => __('log'), :host => '127.0.0.1:9292', :use_cron => true, :env => 'development', :force => true
|
86
|
+
KMTS::record 'bob', 'Signup', 'age' => 26
|
87
|
+
`bundle exec km_send -f -e development #{__('log/')} 127.0.0.1:9292`
|
88
|
+
sleep 0.1
|
89
|
+
res = Helper.accept(:history).first.indifferent
|
90
|
+
res[:path].should == '/e'
|
91
|
+
res[:query]['_k'].first.should == 'KM_KEY'
|
92
|
+
res[:query]['_p'].first.should == 'bob'
|
93
|
+
res[:query]['_n'].first.should == 'Signup'
|
94
|
+
res[:query]['_t'].first.should == Time.now.to_i.to_s
|
95
|
+
res[:query]['age'].first.should == '26'
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|