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 CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 1.0.0
@@ -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
- GEM_VERSION = File.exist?('../VERSION') ? File.read('../VERSION') : ""
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
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{statsmix}
8
- s.version = "0.3.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-04-05}
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 = [
@@ -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 metadataand view the result in xml" do
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
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: 19
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
+ - 1
7
8
  - 0
8
- - 3
9
9
  - 0
10
- version: 0.3.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-04-05 00:00:00 -06:00
19
+ date: 2012-10-19 00:00:00 -06:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency