metric 0.1.0 → 0.1.1
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/lib/metric.rb +2 -0
- data/lib/metric/rails.rb +13 -0
- data/lib/metric/rails/controller_methods.rb +18 -0
- data/lib/metric/receive.rb +5 -12
- data/lib/metric/track.rb +7 -9
- data/lib/metric/util.rb +21 -0
- data/lib/metric/version.rb +1 -1
- data/spec/metric/track_spec.rb +2 -7
- data/spec/metric/util_spec.rb +13 -0
- metadata +7 -2
data/lib/metric.rb
CHANGED
data/lib/metric/rails.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'metric/rails/controller_methods'
|
2
|
+
|
3
|
+
module Metric
|
4
|
+
module Rails
|
5
|
+
def self.initialize
|
6
|
+
if defined?(ActionController::Base)
|
7
|
+
ActionController::Base.send(:include, Metric::Rails::ControllerMethods)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
Metric::Rails.initialize
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Metric
|
2
|
+
module Rails
|
3
|
+
module ControllerMethods
|
4
|
+
def metric_current_user
|
5
|
+
user = current_user
|
6
|
+
return {} if current_user.nil?
|
7
|
+
|
8
|
+
parameters = {}
|
9
|
+
[:id, :name, :username, :email].each do |attribute|
|
10
|
+
parameters[attribute.to_s] = user.send(attribute) if user.respond_to?(attribute)
|
11
|
+
end
|
12
|
+
parameters
|
13
|
+
rescue NoMethodError, NameError
|
14
|
+
{}
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/metric/receive.rb
CHANGED
@@ -21,12 +21,13 @@ 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
|
+
token = generate_token(metric, range)
|
25
|
+
parameters = {"metric" => metric, "range" => range, "token" => token}
|
24
26
|
api_key = Metric.configuration.api_key
|
25
27
|
url = Metric.configuration.protocol + "://" + Metric.configuration.host
|
26
|
-
url << "/v1/sites/#{api_key}/statistics"
|
27
|
-
url <<
|
28
|
-
url
|
29
|
-
url << "&token=" + generate_token(metric, range)
|
28
|
+
url << "/v1/sites/#{api_key}/statistics?"
|
29
|
+
url << Metric::Util.build_query_string(parameters)
|
30
|
+
url
|
30
31
|
end
|
31
32
|
|
32
33
|
# Returns and memoizes a Faraday connection
|
@@ -48,14 +49,6 @@ module Metric
|
|
48
49
|
response = connection.get(url)
|
49
50
|
MultiJson.decode(response.body)[range]
|
50
51
|
end
|
51
|
-
|
52
|
-
# CGI escape the metric name so spaces and characters are allowed
|
53
|
-
#
|
54
|
-
# @param [String] metric Metric identifier
|
55
|
-
# @return [String]
|
56
|
-
def self.parse_metric(metric)
|
57
|
-
"?metric=#{CGI.escape(metric)}"
|
58
|
-
end
|
59
52
|
end
|
60
53
|
end
|
61
54
|
|
data/lib/metric/track.rb
CHANGED
@@ -10,22 +10,20 @@ module Metric
|
|
10
10
|
# @option options [Symbol] :amount Amount to track
|
11
11
|
# @option options [Symbol] :date Override the default date (today)
|
12
12
|
# @option options [Symbol] :meta Pass in custom meta data about the metric
|
13
|
-
# @option options [Symbol] :trigger Flag for email notification
|
14
13
|
# @return [String]
|
15
14
|
def self.compose(metric, options = {})
|
16
15
|
amount = options[:amount]
|
17
|
-
trigger = options[:trigger]
|
18
16
|
date = options[:date]
|
19
17
|
meta = options[:meta]
|
18
|
+
customer = options[:customer]
|
19
|
+
|
20
|
+
parameters = {"metric" => metric, "amount" => amount, "date" => date,
|
21
|
+
"meta" => meta, "customer" => customer}
|
20
22
|
|
21
23
|
api_key = Metric.configuration.api_key
|
22
24
|
url = Metric.configuration.protocol + "://" + Metric.configuration.host
|
23
|
-
url << "/v1/sites/#{api_key}/track"
|
24
|
-
url <<
|
25
|
-
url << "&amount=#{amount}" if amount
|
26
|
-
url << "&date=#{date}" if date
|
27
|
-
url << "&meta=#{CGI.escape(meta)}" if meta
|
28
|
-
url << "&trigger=1" if trigger
|
25
|
+
url << "/v1/sites/#{api_key}/track?"
|
26
|
+
url << Metric::Util.build_query_string(parameters)
|
29
27
|
url
|
30
28
|
end
|
31
29
|
|
@@ -46,7 +44,7 @@ module Metric
|
|
46
44
|
|
47
45
|
# Check if Rails or Rack env is production, or amount is 0
|
48
46
|
def self.quit_early?(options)
|
49
|
-
return true if defined?(Rails) &&
|
47
|
+
return true if defined?(::Rails) && !::Rails.env.production?
|
50
48
|
return true if ENV['RACK_ENV'] && ENV['RACK_ENV'] != "production"
|
51
49
|
return true if options[:amount] && options[:amount] == 0
|
52
50
|
false
|
data/lib/metric/util.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
module Metric
|
2
|
+
class Util
|
3
|
+
def self.escape(string)
|
4
|
+
URI.escape(string, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.build_query_string(object, prefix = nil)
|
8
|
+
string = []
|
9
|
+
object.each_pair do |key, value|
|
10
|
+
k = prefix ? "#{prefix}[#{key}]" : key
|
11
|
+
next if value.nil?
|
12
|
+
if value.is_a?(Hash)
|
13
|
+
string << build_query_string(value, k)
|
14
|
+
else
|
15
|
+
string << "#{escape(k)}=#{escape(value.to_s)}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
string.join("&")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/metric/version.rb
CHANGED
data/spec/metric/track_spec.rb
CHANGED
@@ -19,7 +19,7 @@ describe Metric::Track do
|
|
19
19
|
end
|
20
20
|
|
21
21
|
it "encodes the input" do
|
22
|
-
result = "https://api.metric.io/v1/sites/spec/track?metric=hits
|
22
|
+
result = "https://api.metric.io/v1/sites/spec/track?metric=hits%20and%20spaces"
|
23
23
|
Metric::Track.compose("hits and spaces").should == result
|
24
24
|
end
|
25
25
|
|
@@ -39,13 +39,8 @@ describe Metric::Track do
|
|
39
39
|
end
|
40
40
|
|
41
41
|
it "passes in meta information" do
|
42
|
-
result = "https://api.metric.io/v1/sites/spec/track?metric=payment&meta=userid%3A
|
42
|
+
result = "https://api.metric.io/v1/sites/spec/track?metric=payment&meta=userid%3A%201"
|
43
43
|
Metric::Track.compose("payment", :meta => "userid: 1").should == result
|
44
44
|
end
|
45
|
-
|
46
|
-
it "sends trigger param" do
|
47
|
-
result = "https://api.metric.io/v1/sites/spec/track?metric=hits&trigger=1"
|
48
|
-
Metric::Track.compose("hits", :trigger => true).should == result
|
49
|
-
end
|
50
45
|
end
|
51
46
|
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Metric::Util do
|
4
|
+
it 'builds a nested query string' do
|
5
|
+
object = {"amount" => 1, "customer" => {"id" => "1"}}
|
6
|
+
Metric::Util.build_query_string(object).should == "amount=1&customer%5Bid%5D=1"
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'skips nil values' do
|
10
|
+
object = {"amount" => 1, "date" => nil}
|
11
|
+
Metric::Util.build_query_string(object).should == "amount=1"
|
12
|
+
end
|
13
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metric
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-12-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: faraday
|
@@ -90,13 +90,17 @@ files:
|
|
90
90
|
- Rakefile
|
91
91
|
- lib/metric.rb
|
92
92
|
- lib/metric/configuration.rb
|
93
|
+
- lib/metric/rails.rb
|
94
|
+
- lib/metric/rails/controller_methods.rb
|
93
95
|
- lib/metric/receive.rb
|
94
96
|
- lib/metric/track.rb
|
97
|
+
- lib/metric/util.rb
|
95
98
|
- lib/metric/version.rb
|
96
99
|
- metric.gemspec
|
97
100
|
- spec/metric/configuration_spec.rb
|
98
101
|
- spec/metric/receive_spec.rb
|
99
102
|
- spec/metric/track_spec.rb
|
103
|
+
- spec/metric/util_spec.rb
|
100
104
|
- spec/metric_spec.rb
|
101
105
|
- spec/spec_helper.rb
|
102
106
|
homepage: http://github.com/bittersweet/metric
|
@@ -127,5 +131,6 @@ test_files:
|
|
127
131
|
- spec/metric/configuration_spec.rb
|
128
132
|
- spec/metric/receive_spec.rb
|
129
133
|
- spec/metric/track_spec.rb
|
134
|
+
- spec/metric/util_spec.rb
|
130
135
|
- spec/metric_spec.rb
|
131
136
|
- spec/spec_helper.rb
|