statsmix 0.3.0 → 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/VERSION +1 -1
- data/lib/statsmix.rb +67 -21
- data/statsmix.gemspec +2 -2
- data/test/test_statsmix.rb +17 -3
- data/test_all_rubies.sh +0 -0
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
1.0.0
|
data/lib/statsmix.rb
CHANGED
@@ -1,12 +1,15 @@
|
|
1
1
|
require 'net/http'
|
2
2
|
require 'net/https'
|
3
|
+
require 'socket'
|
3
4
|
require 'rubygems'
|
4
5
|
require 'json'
|
5
6
|
class StatsMix
|
6
7
|
|
7
|
-
BASE_URI = 'https://api.statsmix.com/api/v2/'
|
8
8
|
|
9
|
-
|
9
|
+
HOST = 'api.statsmix.com'
|
10
|
+
BASE_URI = "http://#{HOST}/api/v2/"
|
11
|
+
UDP_PORT = 8125
|
12
|
+
GEM_VERSION = File.exist?('VERSION') ? File.read('VERSION') : ""
|
10
13
|
|
11
14
|
# Track an event
|
12
15
|
#
|
@@ -17,9 +20,10 @@ class StatsMix
|
|
17
20
|
if options.respond_to?('with_indifferent_access')
|
18
21
|
options = options.with_indifferent_access
|
19
22
|
end
|
23
|
+
|
20
24
|
self.connect('track')
|
21
25
|
@request_uri = @url.path + '.' + @format
|
22
|
-
@request = Net::HTTP::Get.new(@request_uri)
|
26
|
+
@request = Net::HTTP::Get.new(@request_uri, {"User-Agent" => @user_agent})
|
23
27
|
@params[:name] = name
|
24
28
|
if @test_metric_name
|
25
29
|
@params[:name] = @test_metric_name
|
@@ -43,7 +47,7 @@ class StatsMix
|
|
43
47
|
end
|
44
48
|
self.connect('stats')
|
45
49
|
@request_uri = @url.path + '.' + @format
|
46
|
-
@request = Net::HTTP::Get.new(@request_uri)
|
50
|
+
@request = Net::HTTP::Get.new(@request_uri, {"User-Agent" => @user_agent})
|
47
51
|
|
48
52
|
@params[:metric_id] = metric_id
|
49
53
|
@params.merge!(options)
|
@@ -64,7 +68,7 @@ class StatsMix
|
|
64
68
|
def self.get_stat(stat_id)
|
65
69
|
connect('stats')
|
66
70
|
@request_uri = @url.path + '/' + stat_id.to_s + '.' + @format
|
67
|
-
@request = Net::HTTP::Get.new(@request_uri)
|
71
|
+
@request = Net::HTTP::Get.new(@request_uri, {"User-Agent" => @user_agent})
|
68
72
|
return do_request
|
69
73
|
end
|
70
74
|
|
@@ -79,7 +83,7 @@ class StatsMix
|
|
79
83
|
end
|
80
84
|
connect('stats')
|
81
85
|
@request_uri = @url.path + '.' + @format
|
82
|
-
@request = Net::HTTP::Post.new(@request_uri)
|
86
|
+
@request = Net::HTTP::Post.new(@request_uri, {"User-Agent" => @user_agent})
|
83
87
|
@params[:metric_id] = metric_id
|
84
88
|
@params[:value] = value if value
|
85
89
|
@params.merge!(params)
|
@@ -98,7 +102,7 @@ class StatsMix
|
|
98
102
|
end
|
99
103
|
connect('stats')
|
100
104
|
@request_uri = @url.path + '/' + stat_id.to_s + '.' + @format
|
101
|
-
@request = Net::HTTP::Put.new(@request_uri)
|
105
|
+
@request = Net::HTTP::Put.new(@request_uri, {"User-Agent" => @user_agent})
|
102
106
|
@params[:value] = value if value
|
103
107
|
@params.merge!(params)
|
104
108
|
self.check_meta
|
@@ -113,7 +117,7 @@ class StatsMix
|
|
113
117
|
def self.delete_stat(stat_id)
|
114
118
|
connect('stats')
|
115
119
|
@request_uri = @url.path + '/' + stat_id.to_s + '.' + @format
|
116
|
-
@request = Net::HTTP::Delete.new(@request_uri)
|
120
|
+
@request = Net::HTTP::Delete.new(@request_uri, {"User-Agent" => @user_agent})
|
117
121
|
return do_request
|
118
122
|
end
|
119
123
|
|
@@ -127,7 +131,7 @@ class StatsMix
|
|
127
131
|
def self.list_metrics(profile_id = nil, limit = nil)
|
128
132
|
connect('metrics')
|
129
133
|
@request_uri = @url.path + '.' + @format
|
130
|
-
@request = Net::HTTP::Get.new(@request_uri)
|
134
|
+
@request = Net::HTTP::Get.new(@request_uri, {"User-Agent" => @user_agent})
|
131
135
|
|
132
136
|
@params[:profile_id] = profile_id if profile_id != nil
|
133
137
|
@params[:limit] = limit if limit != nil
|
@@ -143,7 +147,7 @@ class StatsMix
|
|
143
147
|
def self.get_metric(metric_id)
|
144
148
|
connect('metrics')
|
145
149
|
@request_uri = @url.path + '/' + metric_id.to_s + '.' + @format
|
146
|
-
@request = Net::HTTP::Get.new(@request_uri)
|
150
|
+
@request = Net::HTTP::Get.new(@request_uri, {"User-Agent" => @user_agent})
|
147
151
|
return do_request
|
148
152
|
end
|
149
153
|
|
@@ -160,7 +164,7 @@ class StatsMix
|
|
160
164
|
@params.merge!(params)
|
161
165
|
@params[:name] = name
|
162
166
|
@request_uri = @url.path + '.' + @format
|
163
|
-
@request = Net::HTTP::Post.new(@request_uri)
|
167
|
+
@request = Net::HTTP::Post.new(@request_uri, {"User-Agent" => @user_agent})
|
164
168
|
return do_request
|
165
169
|
end
|
166
170
|
|
@@ -177,7 +181,7 @@ class StatsMix
|
|
177
181
|
@params = [] if @params.nil?
|
178
182
|
@params.merge!(params)
|
179
183
|
@request_uri = @url.path + '/' + metric_id.to_s + '.' + @format
|
180
|
-
@request = Net::HTTP::Put.new(@request_uri)
|
184
|
+
@request = Net::HTTP::Put.new(@request_uri, {"User-Agent" => @user_agent})
|
181
185
|
|
182
186
|
return do_request
|
183
187
|
end
|
@@ -190,7 +194,7 @@ class StatsMix
|
|
190
194
|
def self.delete_metric(metric_id)
|
191
195
|
connect('metrics')
|
192
196
|
@request_uri = @url.path + '/' + metric_id.to_s + '.' + @format
|
193
|
-
@request = Net::HTTP::Delete.new(@request_uri)
|
197
|
+
@request = Net::HTTP::Delete.new(@request_uri, {"User-Agent" => @user_agent})
|
194
198
|
return do_request
|
195
199
|
end
|
196
200
|
|
@@ -204,7 +208,7 @@ class StatsMix
|
|
204
208
|
def self.list_users
|
205
209
|
connect('partners/users')
|
206
210
|
@request_uri = @url.path
|
207
|
-
@request = Net::HTTP::Get.new(@request_uri)
|
211
|
+
@request = Net::HTTP::Get.new(@request_uri, {"User-Agent" => @user_agent})
|
208
212
|
return do_request
|
209
213
|
end
|
210
214
|
|
@@ -216,7 +220,7 @@ class StatsMix
|
|
216
220
|
def self.get_user(id_or_api_key)
|
217
221
|
connect('partners/users')
|
218
222
|
@request_uri = @url.path + '/' + id_or_api_key.to_s + '.' + @format
|
219
|
-
@request = Net::HTTP::Get.new(@request_uri)
|
223
|
+
@request = Net::HTTP::Get.new(@request_uri, {"User-Agent" => @user_agent})
|
220
224
|
return do_request
|
221
225
|
end
|
222
226
|
|
@@ -228,7 +232,7 @@ class StatsMix
|
|
228
232
|
def self.create_user(params = {})
|
229
233
|
connect('partners/users')
|
230
234
|
@request_uri = @url.path + '.' + @format
|
231
|
-
@request = Net::HTTP::Post.new(@request_uri)
|
235
|
+
@request = Net::HTTP::Post.new(@request_uri, {"User-Agent" => @user_agent})
|
232
236
|
@params.merge!(params)
|
233
237
|
result = do_request
|
234
238
|
unless self.error
|
@@ -245,7 +249,7 @@ class StatsMix
|
|
245
249
|
def self.update_user(id_or_api_key, params = {})
|
246
250
|
connect('partners/users')
|
247
251
|
@request_uri = @url.path + '/' + id_or_api_key.to_s + '.' + @format
|
248
|
-
@request = Net::HTTP::Put.new(@request_uri)
|
252
|
+
@request = Net::HTTP::Put.new(@request_uri, {"User-Agent" => @user_agent})
|
249
253
|
@params.merge!(params)
|
250
254
|
result = do_request
|
251
255
|
unless self.error
|
@@ -262,7 +266,7 @@ class StatsMix
|
|
262
266
|
def self.delete_user(id_or_api_key)
|
263
267
|
connect('partners/users')
|
264
268
|
@request_uri = @url.path + '/' + id_or_api_key.to_s + '.' + @format
|
265
|
-
@request = Net::HTTP::Delete.new(@request_uri)
|
269
|
+
@request = Net::HTTP::Delete.new(@request_uri, {"User-Agent" => @user_agent})
|
266
270
|
result = do_request
|
267
271
|
unless self.error
|
268
272
|
@user_api_key = result.scan(/<api_key>[0-9a-zA-Z]*<\/api_key>/)[0].gsub(/<\/?api_key>/,'')
|
@@ -321,6 +325,27 @@ class StatsMix
|
|
321
325
|
def self.api_key
|
322
326
|
@api_key
|
323
327
|
end
|
328
|
+
|
329
|
+
|
330
|
+
#Expects: boolean
|
331
|
+
def self.debugging=(value)
|
332
|
+
@debugging = value
|
333
|
+
end
|
334
|
+
|
335
|
+
# Returns: boolean
|
336
|
+
def self.debugging
|
337
|
+
@debugging
|
338
|
+
end
|
339
|
+
|
340
|
+
#Expects: boolean
|
341
|
+
def self.use_udp=(value)
|
342
|
+
@use_udp = value
|
343
|
+
end
|
344
|
+
|
345
|
+
# Returns: boolean
|
346
|
+
def self.use_udp
|
347
|
+
@use_udp
|
348
|
+
end
|
324
349
|
|
325
350
|
def self.api_from_env
|
326
351
|
return nil if ENV['STATSMIX_URL'].nil?
|
@@ -362,7 +387,6 @@ class StatsMix
|
|
362
387
|
|
363
388
|
def self.connect(resource)
|
364
389
|
self.setup
|
365
|
-
|
366
390
|
if @api_key.nil?
|
367
391
|
raise "API key not set. You must set it first with StatsMix.api_key = [your api key]"
|
368
392
|
end
|
@@ -371,9 +395,12 @@ class StatsMix
|
|
371
395
|
@url = URI.parse(BASE_URI + resource)
|
372
396
|
@connection = Net::HTTP.new(@url.host, @url.port)
|
373
397
|
@connection.use_ssl = (@url.scheme == 'https')
|
374
|
-
|
398
|
+
|
375
399
|
@connection.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
376
|
-
|
400
|
+
|
401
|
+
@connection.use_ssl = (@url.scheme == 'https')
|
402
|
+
@connection.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
403
|
+
|
377
404
|
@request = Hash.new
|
378
405
|
@request["User-Agent"] = @user_agent
|
379
406
|
@params = Hash.new
|
@@ -383,10 +410,16 @@ class StatsMix
|
|
383
410
|
@params[:api_key] = @api_key
|
384
411
|
end
|
385
412
|
|
413
|
+
def self.user_agent
|
414
|
+
return @user_agent
|
415
|
+
end
|
416
|
+
|
386
417
|
def self.do_request
|
387
418
|
@error = false
|
388
419
|
return if @ignore
|
420
|
+
return self.do_udp_request if @use_udp
|
389
421
|
#had to add code to support properly encoding array values. See http://blog.assimov.net/post/653645115/post-put-arrays-with-ruby-net-http-set-form-data
|
422
|
+
p @params
|
390
423
|
self.set_form_data(@params)
|
391
424
|
@response = @connection.request(@request)
|
392
425
|
if @response.is_a?(Net::HTTPClientError)
|
@@ -402,6 +435,17 @@ class StatsMix
|
|
402
435
|
end
|
403
436
|
@response.body
|
404
437
|
end
|
438
|
+
|
439
|
+
def self.do_udp_request
|
440
|
+
data = @params.to_json.inspect
|
441
|
+
@socket ||= UDPSocket.new
|
442
|
+
@socket.send(data, 0, HOST, UDP_PORT)
|
443
|
+
if @debugging
|
444
|
+
text, sender = @socket.recvfrom(2048)
|
445
|
+
p "SENT #{data}"
|
446
|
+
p text
|
447
|
+
end
|
448
|
+
end
|
405
449
|
#based on http://blog.assimov.net/post/653645115/post-put-arrays-with-ruby-net-http-set-form-data
|
406
450
|
def self.set_form_data(params, sep = '&')
|
407
451
|
@request.body = params.map {|k,v|
|
@@ -426,12 +470,14 @@ class StatsMix
|
|
426
470
|
@params[:meta] = @params['meta']
|
427
471
|
@params.delete('meta')
|
428
472
|
end
|
473
|
+
return if @use_udp
|
429
474
|
if @params[:meta] && !@params[:meta].is_a?(String)
|
430
475
|
if @params[:meta].respond_to?('to_json')
|
431
476
|
@params[:meta] = @params[:meta].to_json
|
432
477
|
end
|
433
478
|
end
|
434
479
|
end
|
480
|
+
|
435
481
|
end
|
436
482
|
|
437
483
|
StatsMix.api_from_env
|
data/statsmix.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{statsmix}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "1.0.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Tom Markiewicz", "Derek Scruggs"]
|
12
|
-
s.date = %q{2012-
|
12
|
+
s.date = %q{2012-10-19}
|
13
13
|
s.description = %q{A Ruby gem for the StatsMix API - http://www.statsmix.com/developers}
|
14
14
|
s.email = ["tmarkiewicz@gmail.com", "me@derekscruggs.com"]
|
15
15
|
s.extra_rdoc_files = [
|
data/test/test_statsmix.rb
CHANGED
@@ -2,6 +2,8 @@ require 'helper'
|
|
2
2
|
require 'statsmix'
|
3
3
|
|
4
4
|
class TestStatsmix < Test::Unit::TestCase
|
5
|
+
|
6
|
+
GEM_VERSION = File.exist?('VERSION') ? File.read('VERSION') : ""
|
5
7
|
|
6
8
|
# TODO use fakwweb gem for testing
|
7
9
|
# http://technicalpickles.com/posts/stop-net-http-dead-in-its-tracks-with-fakeweb/
|
@@ -11,7 +13,20 @@ class TestStatsmix < Test::Unit::TestCase
|
|
11
13
|
# TODO use VCR for tests
|
12
14
|
# http://www.rubyinside.com/vcr-a-recorder-for-all-your-tests-http-interactions-4169.html
|
13
15
|
# https://github.com/myronmarston/vcr
|
14
|
-
|
16
|
+
|
17
|
+
should "Provide the correct user_agent" do
|
18
|
+
StatsMix.api_key = '59f08613db2691f28afe'
|
19
|
+
StatsMix.format = 'xml'
|
20
|
+
result = StatsMix.track('Ruby Gem Testing')
|
21
|
+
|
22
|
+
if StatsMix.error
|
23
|
+
raise "error in gem: #{StatsMix.error}"
|
24
|
+
end
|
25
|
+
assert !StatsMix.error
|
26
|
+
assert StatsMix.user_agent == "StatsMix Ruby Gem " + GEM_VERSION
|
27
|
+
puts StatsMix.user_agent
|
28
|
+
end
|
29
|
+
|
15
30
|
should "Track a stat and view the result in xml" do
|
16
31
|
StatsMix.api_key = '59f08613db2691f28afe'
|
17
32
|
StatsMix.format = 'xml'
|
@@ -34,7 +49,7 @@ class TestStatsmix < Test::Unit::TestCase
|
|
34
49
|
puts result
|
35
50
|
end
|
36
51
|
|
37
|
-
should "Track a stat with
|
52
|
+
should "Track a stat with metadata and view the result in xml" do
|
38
53
|
StatsMix.api_key = '59f08613db2691f28afe'
|
39
54
|
StatsMix.format = 'xml'
|
40
55
|
result = StatsMix.track('Ruby Gem Testing', 1, {"meta"=>{"client"=>"Android", "client_version"=>"1.0.7.2"}})
|
@@ -66,5 +81,4 @@ class TestStatsmix < Test::Unit::TestCase
|
|
66
81
|
assert !StatsMix.error
|
67
82
|
puts result
|
68
83
|
end
|
69
|
-
|
70
84
|
end
|
data/test_all_rubies.sh
CHANGED
File without changes
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: statsmix
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
|
+
- 1
|
7
8
|
- 0
|
8
|
-
- 3
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 1.0.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Tom Markiewicz
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2012-
|
19
|
+
date: 2012-10-19 00:00:00 -06:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|