statsmix 0.3.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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