km 1.1.2 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -2,3 +2,4 @@ pkg/*
2
2
  *.gem
3
3
  .bundle
4
4
  spec/log/*
5
+ .rvmrc
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- km (1.1.2)
4
+ km (1.1.3)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
@@ -4,11 +4,17 @@ require 'optparse'
4
4
  require 'km'
5
5
 
6
6
  env = 'production'
7
+ force = false
7
8
  begin
8
9
  parser = OptionParser.new()
9
10
  parser.banner = "#{File.basename($0)} [<log_dir>]\n\n"
11
+
12
+ parser.on("-f", "--force", "Force sending the data to KM, ignoring the environment.") do |e|
13
+ force = true
14
+ end
15
+
10
16
  parser.on("-e", "--env ENVIRONMENT", "The environment to run in. Default: production") do |e|
11
- puts "Note, only production will actually send queries to the kissmetrics servers."
17
+ puts "Note, only production will actually send queries to the kissmetrics servers unless the --force flag is used." unless force
12
18
  env = e
13
19
  end
14
20
 
@@ -24,5 +30,6 @@ rescue => e
24
30
  exit(-1)
25
31
  end
26
32
 
27
- KM.init('', :log_dir => opts[0] || KM.log_dir, :host => opts[1] || KM.host, :env => env)
33
+
34
+ KM.init('', :log_dir => opts[0] || KM.log_dir, :host => opts[1] || KM.host, :force => force, :env => env)
28
35
  KM.send_logged_queries
data/lib/km.rb CHANGED
@@ -14,6 +14,7 @@ class KM
14
14
  @log_dir = '/tmp'
15
15
  @to_stderr = true
16
16
  @use_cron = false
17
+ @dryrun = false
17
18
 
18
19
  class << self
19
20
  class IdentError < StandardError; end
@@ -25,6 +26,7 @@ class KM
25
26
  :log_dir => @log_dir,
26
27
  :to_stderr => @to_stderr,
27
28
  :use_cron => @use_cron,
29
+ :dryrun => @dryrun,
28
30
  :env => set_env,
29
31
  }
30
32
  options = default.merge(options)
@@ -35,6 +37,7 @@ class KM
35
37
  @log_dir = options[:log_dir]
36
38
  @use_cron = options[:use_cron]
37
39
  @to_stderr = options[:to_stderr]
40
+ @dryrun = options[:dryrun]
38
41
  @env = options[:env]
39
42
  log_dir_writable?
40
43
  rescue Exception => e
@@ -120,13 +123,15 @@ class KM
120
123
  Hash[*hash.map { |k,v| k.class == Symbol ? [k.to_s,v] : [k,v] }.flatten] # convert all keys to strings
121
124
  end
122
125
  def reset
123
- @id = nil
124
- @key = nil
125
- @logs = {}
126
- @host = 'trk.kissmetrics.com:80'
127
- @log_dir = '/tmp'
128
- @to_stderr = true
129
- @use_cron = false
126
+ @id = nil
127
+ @key = nil
128
+ @logs = {}
129
+ @host = 'trk.kissmetrics.com:80'
130
+ @log_dir = '/tmp'
131
+ @to_stderr = true
132
+ @use_cron = false
133
+ @env = nil
134
+ @force = false
130
135
  end
131
136
 
132
137
  def log_name(type)
@@ -210,20 +215,20 @@ class KM
210
215
  end
211
216
 
212
217
  def send_query(line)
213
- if @env != 'production'
218
+ if @dryrun
214
219
  log_sent(line)
215
- return
216
- end
217
- begin
218
- host,port = @host.split(':')
219
- proxy = URI.parse(ENV['http_proxy'] || ENV['HTTP_PROXY'] || '')
220
- res = Net::HTTP::Proxy(proxy.host, proxy.port, proxy.user, proxy.password).start(host, port) do |http|
221
- http.get(line)
220
+ else
221
+ begin
222
+ host,port = @host.split(':')
223
+ proxy = URI.parse(ENV['http_proxy'] || ENV['HTTP_PROXY'] || '')
224
+ res = Net::HTTP::Proxy(proxy.host, proxy.port, proxy.user, proxy.password).start(host, port) do |http|
225
+ http.get(line)
226
+ end
227
+ rescue Exception => e
228
+ raise KMError.new("#{e} for host #{@host}")
222
229
  end
223
- rescue Exception => e
224
- raise KMError.new("#{e} for host #{@host}")
230
+ log_sent(line)
225
231
  end
226
- log_sent(line)
227
232
  end
228
233
 
229
234
  def log_dir_writable?
@@ -1,3 +1,3 @@
1
1
  class KM
2
- VERSION = "1.1.2"
2
+ VERSION = "1.1.3"
3
3
  end
@@ -11,11 +11,82 @@ describe 'km_send' do
11
11
  KM.reset
12
12
  Helper.clear
13
13
  end
14
- it "should test commandline version" do
15
- KM::init 'KM_KEY', :log_dir => __('log'), :host => '127.0.0.1:9292', :use_cron => true
14
+ context "with default environment" do
15
+ before do
16
+ KM::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
+ KM::identify 'bob'
20
+ KM::record 'Signup', 'age' => 26
21
+ `bundle exec km_send #{__('log/')} 127.0.0.1:9292`
22
+ sleep 0.1
23
+ res = Helper.accept(:history).first.indifferent
24
+ res[:path].should == '/e'
25
+ res[:query]['_k'].first.should == 'KM_KEY'
26
+ res[:query]['_p'].first.should == 'bob'
27
+ res[:query]['_n'].first.should == 'Signup'
28
+ res[:query]['_t'].first.should == Time.now.to_i.to_s
29
+ res[:query]['age'].first.should == '26'
30
+ end
31
+ it "should send from query_log" do
32
+ write_log :query, "/e?_t=1297105499&_n=Signup&_p=bob&_k=KM_KEY&age=26"
33
+ `bundle exec km_send #{__('log/')} 127.0.0.1:9292`
34
+ sleep 0.1
35
+ res = Helper.accept(:history).first.indifferent
36
+ res[:path].should == '/e'
37
+ res[:query]['_k'].first.should == 'KM_KEY'
38
+ res[:query]['_p'].first.should == 'bob'
39
+ res[:query]['_n'].first.should == 'Signup'
40
+ res[:query]['_t'].first.should == '1297105499'
41
+ res[:query]['age'].first.should == '26'
42
+ end
43
+ it "should send from query_log_old" do
44
+ write_log :query_old, "/e?_t=1297105499&_n=Signup&_p=bob&_k=KM_KEY&age=26"
45
+ `bundle exec km_send #{__('log/')} 127.0.0.1:9292`
46
+ sleep 0.1
47
+ res = Helper.accept(:history).first.indifferent
48
+ res[:path].should == '/e'
49
+ res[:query]['_k'].first.should == 'KM_KEY'
50
+ res[:query]['_p'].first.should == 'bob'
51
+ res[:query]['_n'].first.should == 'Signup'
52
+ res[:query]['_t'].first.should == '1297105499'
53
+ res[:query]['age'].first.should == '26'
54
+ end
55
+ it "should send from both query_log and query_log_old" do
56
+ File.open(__('log/kissmetrics_query.log'), 'w+') { |h| h.puts "/e?_t=1297105499&_n=Signup&_p=bob&_k=KM_KEY&age=27" }
57
+ File.open(__('log/kissmetrics_production_query.log'), 'w+') { |h| h.puts "/e?_t=1297105499&_n=Signup&_p=bob&_k=KM_KEY&age=26" }
58
+ `bundle exec km_send #{__('log/')} 127.0.0.1:9292`
59
+ sleep 0.1
60
+ res = Helper.accept(:history).first.indifferent
61
+ res[:path].should == '/e'
62
+ res[:query]['_k'].first.should == 'KM_KEY'
63
+ res[:query]['_p'].first.should == 'bob'
64
+ res[:query]['_n'].first.should == 'Signup'
65
+ res[:query]['_t'].first.should == '1297105499'
66
+ res[:query]['age'].first.should == '27'
67
+ Helper.clear
68
+ `bundle exec km_send #{__('log/')} 127.0.0.1:9292`
69
+ sleep 0.1
70
+ res = Helper.accept(:history).first.indifferent
71
+ res[:path].should == '/e'
72
+ res[:query]['_k'].first.should == 'KM_KEY'
73
+ res[:query]['_p'].first.should == 'bob'
74
+ res[:query]['_n'].first.should == 'Signup'
75
+ res[:query]['_t'].first.should == '1297105499'
76
+ res[:query]['age'].first.should == '26'
77
+ end
78
+ it "sends unless dryrun is specified" do
79
+ File.open(__('log/kissmetrics_alpha_query.log'), 'w+') { |h| h.puts "/e?_t=1297105499&_n=Signup&_p=bob&_k=KM_KEY&age=26" }
80
+ `bundle exec km_send -e alpha #{__('log/')} 127.0.0.1:9292`
81
+ sleep 0.1
82
+ res = Helper.accept(:history).first.should_not be_nil
83
+ end
84
+ end
85
+ it "should send from diff environment when force flag is used" do
86
+ KM::init 'KM_KEY', :log_dir => __('log'), :host => '127.0.0.1:9292', :use_cron => true, :env => 'development', :force => true
16
87
  KM::identify 'bob'
17
88
  KM::record 'Signup', 'age' => 26
18
- `bundle exec km_send #{__('log/')} 127.0.0.1:9292`
89
+ `bundle exec km_send -f -e development #{__('log/')} 127.0.0.1:9292`
19
90
  sleep 0.1
20
91
  res = Helper.accept(:history).first.indifferent
21
92
  res[:path].should == '/e'
@@ -25,58 +96,5 @@ describe 'km_send' do
25
96
  res[:query]['_t'].first.should == Time.now.to_i.to_s
26
97
  res[:query]['age'].first.should == '26'
27
98
  end
28
- it "should send from query_log" do
29
- write_log :query, "/e?_t=1297105499&_n=Signup&_p=bob&_k=KM_KEY&age=26"
30
- `bundle exec km_send #{__('log/')} 127.0.0.1:9292`
31
- sleep 0.1
32
- res = Helper.accept(:history).first.indifferent
33
- res[:path].should == '/e'
34
- res[:query]['_k'].first.should == 'KM_KEY'
35
- res[:query]['_p'].first.should == 'bob'
36
- res[:query]['_n'].first.should == 'Signup'
37
- res[:query]['_t'].first.should == '1297105499'
38
- res[:query]['age'].first.should == '26'
39
- end
40
- it "should send from query_log_old" do
41
- write_log :query_old, "/e?_t=1297105499&_n=Signup&_p=bob&_k=KM_KEY&age=26"
42
- `bundle exec km_send #{__('log/')} 127.0.0.1:9292`
43
- sleep 0.1
44
- res = Helper.accept(:history).first.indifferent
45
- res[:path].should == '/e'
46
- res[:query]['_k'].first.should == 'KM_KEY'
47
- res[:query]['_p'].first.should == 'bob'
48
- res[:query]['_n'].first.should == 'Signup'
49
- res[:query]['_t'].first.should == '1297105499'
50
- res[:query]['age'].first.should == '26'
51
- end
52
- it "should send from both query_log and query_log_old" do
53
- File.open(__('log/kissmetrics_query.log'), 'w+') { |h| h.puts "/e?_t=1297105499&_n=Signup&_p=bob&_k=KM_KEY&age=27" }
54
- File.open(__('log/kissmetrics_production_query.log'), 'w+') { |h| h.puts "/e?_t=1297105499&_n=Signup&_p=bob&_k=KM_KEY&age=26" }
55
- `bundle exec km_send #{__('log/')} 127.0.0.1:9292`
56
- sleep 0.1
57
- res = Helper.accept(:history).first.indifferent
58
- res[:path].should == '/e'
59
- res[:query]['_k'].first.should == 'KM_KEY'
60
- res[:query]['_p'].first.should == 'bob'
61
- res[:query]['_n'].first.should == 'Signup'
62
- res[:query]['_t'].first.should == '1297105499'
63
- res[:query]['age'].first.should == '27'
64
- Helper.clear
65
- `bundle exec km_send #{__('log/')} 127.0.0.1:9292`
66
- sleep 0.1
67
- res = Helper.accept(:history).first.indifferent
68
- res[:path].should == '/e'
69
- res[:query]['_k'].first.should == 'KM_KEY'
70
- res[:query]['_p'].first.should == 'bob'
71
- res[:query]['_n'].first.should == 'Signup'
72
- res[:query]['_t'].first.should == '1297105499'
73
- res[:query]['age'].first.should == '26'
74
- end
75
- it "should not send from diff environment as we only send when env is production" do
76
- File.open(__('log/kissmetrics_alpha_query.log'), 'w+') { |h| h.puts "/e?_t=1297105499&_n=Signup&_p=bob&_k=KM_KEY&age=26" }
77
- `bundle exec km_send -e alpha #{__('log/')} 127.0.0.1:9292`
78
- sleep 0.1
79
- res = Helper.accept(:history).first.should == nil
80
- end
81
99
  end
82
100
  end
@@ -175,7 +175,6 @@ describe KM do
175
175
  File.exists?(__('log/kissmetrics_production_query.log')).should == true
176
176
  File.exists?(__('log/kissmetrics_production_error.log')).should == true
177
177
  end
178
-
179
178
  it "should escape @ properly" do
180
179
  KM::init 'KM_OTHER', :log_dir => __('log'), :host => '127.0.0.1:9292', :to_stderr => false, :use_cron => true
181
180
  KM::identify 'bob'
metadata CHANGED
@@ -1,84 +1,88 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: km
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 1
7
- - 1
8
- - 2
9
- version: 1.1.2
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.3
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - KISSmetrics
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2012-04-30 00:00:00 -05:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2013-01-02 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: bundler
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- segments:
28
- - 1
29
- - 0
30
- - 0
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
31
21
  version: 1.0.0
32
22
  type: :development
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: rspec
36
23
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
38
- requirements:
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 1.0.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
39
35
  - - ~>
40
- - !ruby/object:Gem::Version
41
- segments:
42
- - 2
43
- - 4
44
- - 0
36
+ - !ruby/object:Gem::Version
45
37
  version: 2.4.0
46
38
  type: :development
47
- version_requirements: *id002
48
- - !ruby/object:Gem::Dependency
49
- name: rake
50
39
  prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
52
- requirements:
53
- - - ">="
54
- - !ruby/object:Gem::Version
55
- segments:
56
- - 0
57
- version: "0"
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 2.4.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
58
54
  type: :development
59
- version_requirements: *id003
60
- - !ruby/object:Gem::Dependency
61
- name: json
62
55
  prerelease: false
63
- requirement: &id004 !ruby/object:Gem::Requirement
64
- requirements:
65
- - - ">="
66
- - !ruby/object:Gem::Version
67
- segments:
68
- - 0
69
- version: "0"
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: json
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
70
  type: :development
71
- version_requirements: *id004
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
72
78
  description: KISSmetrics ruby API gem
73
- email:
79
+ email:
74
80
  - support@kissmetrics.com
75
- executables:
81
+ executables:
76
82
  - km_send
77
83
  extensions: []
78
-
79
84
  extra_rdoc_files: []
80
-
81
- files:
85
+ files:
82
86
  - .gitignore
83
87
  - CHANGELOG
84
88
  - Gemfile
@@ -149,39 +153,34 @@ files:
149
153
  - spec/log/.hold
150
154
  - spec/setup.rb
151
155
  - spec/watchr.rb
152
- has_rdoc: true
153
156
  homepage: https://github.com/kissmetrics/km
154
157
  licenses: []
155
-
156
158
  post_install_message:
157
159
  rdoc_options: []
158
-
159
- require_paths:
160
+ require_paths:
160
161
  - lib
161
- required_ruby_version: !ruby/object:Gem::Requirement
162
- requirements:
163
- - - ">="
164
- - !ruby/object:Gem::Version
165
- segments:
162
+ required_ruby_version: !ruby/object:Gem::Requirement
163
+ none: false
164
+ requirements:
165
+ - - ! '>='
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ segments:
166
169
  - 0
167
- version: "0"
168
- required_rubygems_version: !ruby/object:Gem::Requirement
169
- requirements:
170
- - - ">="
171
- - !ruby/object:Gem::Version
172
- segments:
173
- - 1
174
- - 3
175
- - 6
170
+ hash: -3712010892193717644
171
+ required_rubygems_version: !ruby/object:Gem::Requirement
172
+ none: false
173
+ requirements:
174
+ - - ! '>='
175
+ - !ruby/object:Gem::Version
176
176
  version: 1.3.6
177
177
  requirements: []
178
-
179
178
  rubyforge_project: kissmetrics
180
- rubygems_version: 1.3.6
179
+ rubygems_version: 1.8.24
181
180
  signing_key:
182
181
  specification_version: 3
183
182
  summary: KISSmetrics ruby API gem
184
- test_files:
183
+ test_files:
185
184
  - spec/accept.rb
186
185
  - spec/km_old.rb
187
186
  - spec/km_saas_spec.rb