metric 0.0.9 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -11,8 +11,8 @@ module Metric
11
11
  #
12
12
  # @param [String] metric Metric identifier
13
13
  # @return [String]
14
- def self.generate_token(metric)
15
- Digest::MD5.hexdigest(Metric.configuration.secret_key + metric)
14
+ def self.generate_token(metric, range)
15
+ Digest::MD5.hexdigest(Metric.configuration.secret_key + metric + range)
16
16
  end
17
17
 
18
18
  # Generate the url with query strings
@@ -21,12 +21,12 @@ module Metric
21
21
  # @param [String] range Range identifier, either total, today, week or month
22
22
  # @return [String]
23
23
  def self.compose(metric, range)
24
- key = "?api_key=" + Metric.configuration.api_key
25
- url = Metric.configuration.protocol + "://" + Metric.configuration.host + '/receive'
26
- url << key
27
- url << "&token=" + generate_token(metric)
24
+ api_key = Metric.configuration.api_key
25
+ url = Metric.configuration.protocol + "://" + Metric.configuration.host
26
+ url << "/v1/sites/#{api_key}/statistics"
28
27
  url << parse_metric(metric)
29
28
  url << "&range=" + range
29
+ url << "&token=" + generate_token(metric, range)
30
30
  end
31
31
 
32
32
  # Returns and memoizes a Faraday connection
@@ -46,7 +46,7 @@ module Metric
46
46
  def self.receive(metric, range)
47
47
  url = compose(metric, range)
48
48
  response = connection.get(url)
49
- MultiJson.decode(response.body)
49
+ MultiJson.decode(response.body)[range]
50
50
  end
51
51
 
52
52
  # CGI escape the metric name so spaces and characters are allowed
@@ -54,7 +54,7 @@ module Metric
54
54
  # @param [String] metric Metric identifier
55
55
  # @return [String]
56
56
  def self.parse_metric(metric)
57
- "&metric=#{CGI.escape(metric)}"
57
+ "?metric=#{CGI.escape(metric)}"
58
58
  end
59
59
  end
60
60
  end
data/lib/metric/track.rb CHANGED
@@ -18,10 +18,10 @@ module Metric
18
18
  date = options[:date]
19
19
  meta = options[:meta]
20
20
 
21
- key = "?api_key=" + Metric.configuration.api_key
22
- url = Metric.configuration.protocol + "://" + Metric.configuration.host + '/track'
23
- url << key
24
- url << "&metric=#{CGI.escape(metric)}"
21
+ api_key = Metric.configuration.api_key
22
+ url = Metric.configuration.protocol + "://" + Metric.configuration.host
23
+ url << "/v1/sites/#{api_key}/track"
24
+ url << "?metric=#{CGI.escape(metric)}"
25
25
  url << "&amount=#{amount}" if amount
26
26
  url << "&date=#{date}" if date
27
27
  url << "&meta=#{CGI.escape(meta)}" if meta
@@ -1,3 +1,3 @@
1
1
  module Metric
2
- VERSION = "0.0.9"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -2,35 +2,35 @@ require 'spec_helper'
2
2
 
3
3
  describe Metric::Receive do
4
4
  it "generates correct hash via secret_token" do
5
- Metric::Receive.generate_token("hits").should == "c6daa87bcf8bf7cb4d1c74d872793e5e"
5
+ Metric::Receive.generate_token("hits", "week").should == "47639a31c68c36a3406870dfff900679"
6
6
  end
7
7
 
8
8
  context "generating correct url" do
9
9
  it "total" do
10
- request = "https://api.metric.io/receive?api_key=spec&token=c6daa87bcf8bf7cb4d1c74d872793e5e&metric=hits&range=total"
11
- Metric::Receive.compose("hits", "total").should == request
10
+ result = "https://api.metric.io/v1/sites/spec/statistics?metric=hits&range=total&token=e66652e1c3e7fdda10d6fb97cb279622"
11
+ Metric::Receive.compose("hits", "total").should == result
12
12
  end
13
13
 
14
14
  it "today" do
15
- request = "https://api.metric.io/receive?api_key=spec&token=c6daa87bcf8bf7cb4d1c74d872793e5e&metric=hits&range=today"
16
- Metric::Receive.compose("hits", "today").should == request
15
+ result = "https://api.metric.io/v1/sites/spec/statistics?metric=hits&range=today&token=1650709162cd5e699e079e14f8e1decc"
16
+ Metric::Receive.compose("hits", "today").should == result
17
17
  end
18
18
 
19
19
  it "week" do
20
- request = "https://api.metric.io/receive?api_key=spec&token=c6daa87bcf8bf7cb4d1c74d872793e5e&metric=hits&range=week"
21
- Metric::Receive.compose("hits", "week").should == request
20
+ result = "https://api.metric.io/v1/sites/spec/statistics?metric=hits&range=week&token=47639a31c68c36a3406870dfff900679"
21
+ Metric::Receive.compose("hits", "week").should == result
22
22
  end
23
23
 
24
24
  it "month" do
25
- request = "https://api.metric.io/receive?api_key=spec&token=c6daa87bcf8bf7cb4d1c74d872793e5e&metric=hits&range=month"
26
- Metric::Receive.compose("hits", "month").should == request
25
+ result = "https://api.metric.io/v1/sites/spec/statistics?metric=hits&range=month&token=f66049db427350067ed60fb6c986d687"
26
+ Metric::Receive.compose("hits", "month").should == result
27
27
  end
28
28
  end
29
29
 
30
30
  it "grabs actual data" do
31
- stub_request(:get, "https://api.metric.io/receive?api_key=spec&metric=hits&range=total&token=c6daa87bcf8bf7cb4d1c74d872793e5e").
32
- to_return(:status => 200, :body => "{\"total\":\"1\"}", :headers => {})
33
- Metric::Receive.receive("hits", "total").should == {"total" => "1"}
31
+ stub_request(:get, "https://api.metric.io/v1/sites/spec/statistics?metric=hits&range=total&token=e66652e1c3e7fdda10d6fb97cb279622").
32
+ to_return(:status => 200, :body => "{\"total\":1}", :headers => {})
33
+ Metric::Receive.receive("hits", "total").should == 1
34
34
  end
35
35
  end
36
36
 
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe Metric::Track do
4
4
  it "composes the request url" do
5
- Metric::Track.compose("hits").should == "https://api.metric.io/track?api_key=spec&metric=hits"
5
+ Metric::Track.compose("hits").should == "https://api.metric.io/v1/sites/spec/track?metric=hits"
6
6
  end
7
7
 
8
8
  it "gets correct url when tracking" do
@@ -15,17 +15,17 @@ describe Metric::Track do
15
15
  Metric.configure do |config|
16
16
  config.ssl = false
17
17
  end
18
- Metric::Track.compose("hits").should == "http://api.metric.io/track?api_key=spec&metric=hits"
18
+ Metric::Track.compose("hits").should == "http://api.metric.io/v1/sites/spec/track?metric=hits"
19
19
  end
20
20
 
21
21
  it "encodes the input" do
22
- url = "https://api.metric.io/track?api_key=spec&metric=hits+and+spaces"
23
- Metric::Track.compose("hits and spaces").should == url
22
+ result = "https://api.metric.io/v1/sites/spec/track?metric=hits+and+spaces"
23
+ Metric::Track.compose("hits and spaces").should == result
24
24
  end
25
25
 
26
26
  it "sends custom amount" do
27
- url = "https://api.metric.io/track?api_key=spec&metric=hits&amount=42"
28
- Metric::Track.compose("hits", :amount => 42).should == url
27
+ result = "https://api.metric.io/v1/sites/spec/track?metric=hits&amount=42"
28
+ Metric::Track.compose("hits", :amount => 42).should == result
29
29
  end
30
30
 
31
31
  it "does nothing if amount is 0" do
@@ -34,18 +34,18 @@ describe Metric::Track do
34
34
  end
35
35
 
36
36
  it "passes in custom date" do
37
- url = "https://api.metric.io/track?api_key=spec&metric=hits&date=20120101"
38
- Metric::Track.compose("hits", :date => "20120101").should == url
37
+ result = "https://api.metric.io/v1/sites/spec/track?metric=hits&date=20120101"
38
+ Metric::Track.compose("hits", :date => "20120101").should == result
39
39
  end
40
40
 
41
41
  it "passes in meta information" do
42
- url = "https://api.metric.io/track?api_key=spec&metric=payment&meta=userid%3A+1"
43
- Metric::Track.compose("payment", :meta => "userid: 1").should == url
42
+ result = "https://api.metric.io/v1/sites/spec/track?metric=payment&meta=userid%3A+1"
43
+ Metric::Track.compose("payment", :meta => "userid: 1").should == result
44
44
  end
45
45
 
46
46
  it "sends trigger param" do
47
- url = "https://api.metric.io/track?api_key=spec&metric=hits&trigger=1"
48
- Metric::Track.compose("hits", :trigger => true).should == url
47
+ result = "https://api.metric.io/v1/sites/spec/track?metric=hits&trigger=1"
48
+ Metric::Track.compose("hits", :trigger => true).should == result
49
49
  end
50
50
  end
51
51
 
metadata CHANGED
@@ -1,89 +1,87 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: metric
3
- version: !ruby/object:Gem::Version
4
- hash: 13
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 0
9
- - 9
10
- version: 0.0.9
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Mark Mulder
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-02-22 00:00:00 +01:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
12
+ date: 2012-11-03 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
22
15
  name: faraday
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
25
17
  none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 3
30
- segments:
31
- - 0
32
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
33
22
  type: :runtime
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
36
- name: multi_json
37
23
  prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: multi_json
32
+ requirement: !ruby/object:Gem::Requirement
39
33
  none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- hash: 3
44
- segments:
45
- - 0
46
- version: "0"
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
47
38
  type: :runtime
48
- version_requirements: *id002
49
- - !ruby/object:Gem::Dependency
50
- name: rspec
51
39
  prerelease: false
52
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec
48
+ requirement: !ruby/object:Gem::Requirement
53
49
  none: false
54
- requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- hash: 3
58
- segments:
59
- - 0
60
- version: "0"
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
61
54
  type: :development
62
- version_requirements: *id003
63
- - !ruby/object:Gem::Dependency
64
- name: webmock
65
55
  prerelease: false
66
- requirement: &id004 !ruby/object:Gem::Requirement
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: webmock
64
+ requirement: !ruby/object:Gem::Requirement
67
65
  none: false
68
- requirements:
69
- - - ">="
70
- - !ruby/object:Gem::Version
71
- hash: 3
72
- segments:
73
- - 0
74
- version: "0"
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
75
70
  type: :development
76
- 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'
77
78
  description: Track metrics via metric.io
78
- email:
79
+ email:
79
80
  - markmulder@gmail.com
80
81
  executables: []
81
-
82
82
  extensions: []
83
-
84
83
  extra_rdoc_files: []
85
-
86
- files:
84
+ files:
87
85
  - .gitignore
88
86
  - .rspec
89
87
  - .travis.yml
@@ -101,41 +99,31 @@ files:
101
99
  - spec/metric/track_spec.rb
102
100
  - spec/metric_spec.rb
103
101
  - spec/spec_helper.rb
104
- has_rdoc: true
105
102
  homepage: http://github.com/bittersweet/metric
106
103
  licenses: []
107
-
108
104
  post_install_message:
109
105
  rdoc_options: []
110
-
111
- require_paths:
106
+ require_paths:
112
107
  - lib
113
- required_ruby_version: !ruby/object:Gem::Requirement
108
+ required_ruby_version: !ruby/object:Gem::Requirement
114
109
  none: false
115
- requirements:
116
- - - ">="
117
- - !ruby/object:Gem::Version
118
- hash: 3
119
- segments:
120
- - 0
121
- version: "0"
122
- required_rubygems_version: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ! '>='
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ required_rubygems_version: !ruby/object:Gem::Requirement
123
115
  none: false
124
- requirements:
125
- - - ">="
126
- - !ruby/object:Gem::Version
127
- hash: 3
128
- segments:
129
- - 0
130
- version: "0"
116
+ requirements:
117
+ - - ! '>='
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
131
120
  requirements: []
132
-
133
121
  rubyforge_project:
134
- rubygems_version: 1.4.2
122
+ rubygems_version: 1.8.23
135
123
  signing_key:
136
124
  specification_version: 3
137
125
  summary: Companion gem to the metric.io site to track metrics
138
- test_files:
126
+ test_files:
139
127
  - spec/metric/configuration_spec.rb
140
128
  - spec/metric/receive_spec.rb
141
129
  - spec/metric/track_spec.rb