analytico 0.2.0 → 0.2.2
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/analytico/client.rb +21 -0
- data/lib/delayed/backend/mock.rb +23 -0
- data/spec/analytico_client_spec.rb +87 -0
- data/spec/spec_helper.rb +2 -1
- metadata +51 -14
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.2
|
data/lib/analytico/client.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'active_support/core_ext'
|
2
|
+
require 'delayed_job'
|
3
|
+
|
1
4
|
module Analytico
|
2
5
|
|
3
6
|
class Client
|
@@ -51,7 +54,19 @@ module Analytico
|
|
51
54
|
HashUtils.recursively_symbolize_keys(response)
|
52
55
|
end
|
53
56
|
|
57
|
+
def async_impression(*args)
|
58
|
+
self.send_later(:add_impression, *args)
|
59
|
+
end
|
60
|
+
|
61
|
+
def async_metric(*args)
|
62
|
+
self.send_later(:add_metric, *args)
|
63
|
+
end
|
64
|
+
|
54
65
|
def post(endpoint, data=nil)
|
66
|
+
unless production_env?
|
67
|
+
warn "Analytico: Skipping communication to endpoint #{endpoint} while not in production. Would have sent: #{data.inspect}"
|
68
|
+
return nil
|
69
|
+
end
|
55
70
|
@@connection.post endpoint, data
|
56
71
|
end
|
57
72
|
|
@@ -65,6 +80,12 @@ module Analytico
|
|
65
80
|
end
|
66
81
|
end
|
67
82
|
|
83
|
+
def production_env?
|
84
|
+
return true if defined?(RAILS_ENV) && RAILS_ENV == "production"
|
85
|
+
return true if defined?(Rails) && Rails.respond_to?(:env) && Rails.env == "production"
|
86
|
+
return false
|
87
|
+
end
|
88
|
+
|
68
89
|
end
|
69
90
|
|
70
91
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Delayed
|
2
|
+
module Backend
|
3
|
+
module Mock
|
4
|
+
class Job
|
5
|
+
include Delayed::Backend::Base
|
6
|
+
|
7
|
+
@@job_count = 0
|
8
|
+
|
9
|
+
def self.create(params)
|
10
|
+
@@job_count += 1
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.count
|
14
|
+
@@job_count
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.reset
|
18
|
+
@@job_count = 0
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
#
|
4
|
+
# Use a mock backend for testing
|
5
|
+
#
|
6
|
+
Delayed::Worker.backend = :mock
|
7
|
+
|
8
|
+
#
|
9
|
+
# Fake the rails environment for testing
|
10
|
+
#
|
11
|
+
class Rails; cattr_accessor :env; end
|
12
|
+
def rails_env(env, &block)
|
13
|
+
old_env = Rails.env
|
14
|
+
Rails.env = env
|
15
|
+
yield
|
16
|
+
Rails.env = old_env
|
17
|
+
end
|
18
|
+
|
19
|
+
describe Analytico::Client do
|
20
|
+
before(:each) do
|
21
|
+
@connection = Analytico::Connection
|
22
|
+
@connection.any_instance.stubs(:post).returns(true)
|
23
|
+
@client = Analytico::Client
|
24
|
+
@client.set_credentials('xyz123')
|
25
|
+
Delayed::Job.reset
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "add_impression" do
|
29
|
+
it "should not record an impression without :fqdn" do
|
30
|
+
@connection.any_instance.expects(:post).never
|
31
|
+
@client.add_impression({}).should be_true
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should not record an impression without :ip" do
|
35
|
+
@connection.any_instance.expects(:post).never
|
36
|
+
@client.add_impression({}).should be_true
|
37
|
+
end
|
38
|
+
|
39
|
+
it "requires :fqdn and :ip to record an impression" do
|
40
|
+
rails_env "production" do
|
41
|
+
@connection.any_instance.stubs(:post).returns({"code" => "bar"})
|
42
|
+
o = @client.add_impression :fqdn => "foo.bar.org", :ip => "1.2.3.4"
|
43
|
+
o.should be_kind_of Hash
|
44
|
+
o.should include(:code)
|
45
|
+
o[:code].should == "bar"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "async_impression" do
|
51
|
+
it "should create a delayed job to send an impression" do
|
52
|
+
@client.async_impression :fqdn => "foo.bar.org", :ip => "1.2.3.4", :bam => "fu"
|
53
|
+
Delayed::Job.count.should == 1
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "add_metric" do
|
58
|
+
it "should sends a metric to analytico" do
|
59
|
+
rails_env "production" do
|
60
|
+
@connection.any_instance.expects(:post).at_least_once.returns({})
|
61
|
+
@client.add_metric("foo.bar.org", "ding", "dong")
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "async_metric" do
|
67
|
+
it "should create a delayed job" do
|
68
|
+
@client.async_metric("pop.rocks.com", "snap", "crackle")
|
69
|
+
Delayed::Job.count.should == 1
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "post" do
|
74
|
+
it "should return nil if NOT in production" do
|
75
|
+
rails_env "development" do
|
76
|
+
@client.add_metric("foo.bar.org", "bam", "boozle").should be_nil
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should send the request if in production" do
|
81
|
+
rails_env "production" do
|
82
|
+
@connection.any_instance.stubs(:post).returns(100)
|
83
|
+
@client.add_metric("foo.bar.org", "bam", "boozle").should == 100
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: analytico
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 23
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
7
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
8
|
+
- 2
|
9
|
+
version: 0.2.2
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Mauricio Gomes
|
@@ -15,7 +14,7 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2010-
|
17
|
+
date: 2010-11-12 00:00:00 -08:00
|
19
18
|
default_executable:
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
@@ -26,7 +25,6 @@ dependencies:
|
|
26
25
|
requirements:
|
27
26
|
- - ~>
|
28
27
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 13
|
30
28
|
segments:
|
31
29
|
- 0
|
32
30
|
- 7
|
@@ -42,7 +40,6 @@ dependencies:
|
|
42
40
|
requirements:
|
43
41
|
- - ~>
|
44
42
|
- !ruby/object:Gem::Version
|
45
|
-
hash: 15
|
46
43
|
segments:
|
47
44
|
- 1
|
48
45
|
- 6
|
@@ -58,7 +55,6 @@ dependencies:
|
|
58
55
|
requirements:
|
59
56
|
- - ">"
|
60
57
|
- !ruby/object:Gem::Version
|
61
|
-
hash: 23
|
62
58
|
segments:
|
63
59
|
- 1
|
64
60
|
- 0
|
@@ -67,21 +63,61 @@ dependencies:
|
|
67
63
|
type: :runtime
|
68
64
|
version_requirements: *id003
|
69
65
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
66
|
+
name: i18n
|
71
67
|
prerelease: false
|
72
68
|
requirement: &id004 !ruby/object:Gem::Requirement
|
73
69
|
none: false
|
74
70
|
requirements:
|
75
71
|
- - ">="
|
76
72
|
- !ruby/object:Gem::Version
|
77
|
-
hash: 13
|
78
73
|
segments:
|
74
|
+
- 0
|
75
|
+
version: "0"
|
76
|
+
type: :runtime
|
77
|
+
version_requirements: *id004
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: activesupport
|
80
|
+
prerelease: false
|
81
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
segments:
|
87
|
+
- 0
|
88
|
+
version: "0"
|
89
|
+
type: :runtime
|
90
|
+
version_requirements: *id005
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: delayed_job
|
93
|
+
prerelease: false
|
94
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
95
|
+
none: false
|
96
|
+
requirements:
|
97
|
+
- - <
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
segments:
|
100
|
+
- 2
|
79
101
|
- 1
|
102
|
+
- 0
|
103
|
+
version: 2.1.0
|
104
|
+
type: :runtime
|
105
|
+
version_requirements: *id006
|
106
|
+
- !ruby/object:Gem::Dependency
|
107
|
+
name: rspec
|
108
|
+
prerelease: false
|
109
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
110
|
+
none: false
|
111
|
+
requirements:
|
112
|
+
- - <
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
segments:
|
80
115
|
- 2
|
81
|
-
-
|
82
|
-
|
116
|
+
- 0
|
117
|
+
- 0
|
118
|
+
version: 2.0.0
|
83
119
|
type: :development
|
84
|
-
version_requirements: *
|
120
|
+
version_requirements: *id007
|
85
121
|
description: Ruby client for the Analytico impression and app metric tracking service.
|
86
122
|
email: mgomes@geminisbs.com
|
87
123
|
executables: []
|
@@ -101,6 +137,8 @@ files:
|
|
101
137
|
- lib/analytico/endpoint.rb
|
102
138
|
- lib/analytico/hash_utils.rb
|
103
139
|
- lib/analytico/railtie/rack_impression.rb
|
140
|
+
- lib/delayed/backend/mock.rb
|
141
|
+
- spec/analytico_client_spec.rb
|
104
142
|
- spec/analytico_spec.rb
|
105
143
|
- spec/spec_helper.rb
|
106
144
|
has_rdoc: true
|
@@ -117,7 +155,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
117
155
|
requirements:
|
118
156
|
- - ">="
|
119
157
|
- !ruby/object:Gem::Version
|
120
|
-
hash: 3
|
121
158
|
segments:
|
122
159
|
- 0
|
123
160
|
version: "0"
|
@@ -126,7 +163,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
126
163
|
requirements:
|
127
164
|
- - ">="
|
128
165
|
- !ruby/object:Gem::Version
|
129
|
-
hash: 3
|
130
166
|
segments:
|
131
167
|
- 0
|
132
168
|
version: "0"
|
@@ -138,5 +174,6 @@ signing_key:
|
|
138
174
|
specification_version: 3
|
139
175
|
summary: Ruby client for Analytico
|
140
176
|
test_files:
|
177
|
+
- spec/analytico_client_spec.rb
|
141
178
|
- spec/analytico_spec.rb
|
142
179
|
- spec/spec_helper.rb
|