clearbit 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +31 -1
- data/lib/clearbit/analytics.rb +8 -0
- data/lib/clearbit/analytics/README.md +114 -0
- data/lib/clearbit/analytics/field_parser.rb +1 -1
- data/lib/clearbit/analytics/logging.rb +1 -1
- data/lib/clearbit/version.rb +1 -1
- data/spec/lib/clearbit/analytics_spec.rb +34 -13
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1ef2fb93ad9465fc8f69a87a2b94ead8843082586e763bbe3d32d2ca8a20cc57
|
4
|
+
data.tar.gz: 1ae24030ff38ee37a7079c5b47cfe859233c1e613c515e5f84fcca3b0b1aed4f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 668f7320b3f7774a2712ace35d08e264dfe6095039db4dfe169bdad19e5613f739add95ffe4a1b95af2583abd9c403a27e9a822abdda867ce85842f40667ac05
|
7
|
+
data.tar.gz: a6955e0c932d7990c9f1ba0a02735f4fdfb7fa75c1e6d50cd3b2ac15bd113bbbd8af21303a3b2ec306af76c91ff28b1ea9ecaf204bf01a4d026e2fd37995f640
|
data/README.md
CHANGED
@@ -80,16 +80,46 @@ See the [documentation](https://clearbit.com/docs#company-api) for more informat
|
|
80
80
|
|
81
81
|
## Analytics
|
82
82
|
|
83
|
+
*NOTE:* We **strongly** recommend using `clearbit.js` for Analytics and integrating with Clearbit X. It handles a lot of complexity, like generating `anonymous_id`s and associating them with `user_id`s when a user is identified. It also automatically tracks `page` views with the full data set.
|
84
|
+
|
85
|
+
### Identifying Users
|
86
|
+
|
83
87
|
Identify users by sending their `user_id`, and adding details like their `email` and `company_domain` to create People and Companies inside of Clearbit X.
|
84
88
|
|
85
89
|
```ruby
|
86
90
|
Clearbit::Analytics.identify(
|
87
|
-
user_id: '1234', # Required
|
91
|
+
user_id: '1234', # Required if no anonymous_id is sent. The user's ID in your database.
|
92
|
+
anonymous_id: session[:anonymous_id], # Required if no user_id is sent. A UUID to track anonymous users.
|
88
93
|
traits: {
|
89
94
|
email: 'david@clearbitexample.com', # Optional, but strongly recommended
|
90
95
|
company_domain: 'clearbit.com', # Optional, but strongly recommended
|
91
96
|
first_name: 'David', # Optional
|
92
97
|
last_name: 'Lumley', # Optional
|
98
|
+
# … other analytical traits can also be sent, like the plan a user is on etc
|
99
|
+
},
|
100
|
+
context: {
|
101
|
+
ip: '89.102.33.1' # Optional, but strongly recommended when identifying users
|
102
|
+
} # as they sign up, or log in
|
103
|
+
)
|
104
|
+
```
|
105
|
+
|
106
|
+
### Page Views
|
107
|
+
|
108
|
+
Use the `page` method, and send the users `anonymous_id` along with the `url` they're viewing, and the `ip` the request comes from in order to create Companies inside of Clearbit X and track their page views.
|
109
|
+
|
110
|
+
```ruby
|
111
|
+
Clearbit::Analytics.page(
|
112
|
+
user_id: '1234', # Required if no anonymous_id is sent. The user's ID in your database.
|
113
|
+
anonymous_id: session[:anonymous_id], # Required if no user_id is sent. A UUID to track anonymous users.
|
114
|
+
name: 'Clearbit Ruby Library', # Optional, but strongly recommended
|
115
|
+
properties: {
|
116
|
+
url: 'https://github.com/clearbit/clearbit-ruby?utm_source=google', # Required. Likely to be request.referer
|
117
|
+
path: '/clearbit/clearbit-ruby', # Optional, but strongly recommended
|
118
|
+
search: '?utm_source=google', # Optional, but strongly recommended
|
119
|
+
referrer: nil, # Optional. Unlikely to be request.referrer.
|
120
|
+
},
|
121
|
+
context: {
|
122
|
+
ip: '89.102.33.1', # Optional, but strongly recommended.
|
93
123
|
},
|
94
124
|
)
|
95
125
|
```
|
data/lib/clearbit/analytics.rb
CHANGED
@@ -17,6 +17,14 @@ module Clearbit
|
|
17
17
|
analytics.flush
|
18
18
|
end
|
19
19
|
|
20
|
+
# Proxy page through to a client instance, in order to keep the client
|
21
|
+
# consistent with how the other Clearbit APIs are accessed
|
22
|
+
def self.page(args)
|
23
|
+
analytics = new(write_key: Clearbit.key)
|
24
|
+
analytics.page(args)
|
25
|
+
analytics.flush
|
26
|
+
end
|
27
|
+
|
20
28
|
# Initializes a new instance of {Clearbit::Analytics::Client}, to which all
|
21
29
|
# method calls are proxied.
|
22
30
|
#
|
@@ -0,0 +1,114 @@
|
|
1
|
+
# Getting Started with Clearbit::Analytics
|
2
|
+
|
3
|
+
## Initialization
|
4
|
+
|
5
|
+
Make sure you set your `Clearbit.key` as part of your apps initialization, or before you make use of `Clearbit::Analytics`. You can find your secret key at [https://dashboard.clearbit.com/api](https://dashboard.clearbit.com/api)
|
6
|
+
|
7
|
+
`Clearbit.key = 'sk_…'`.
|
8
|
+
|
9
|
+
We also recommend ensuring that every person has a randomly generated `anonymous_id` to aid tracking page events and assist in matching up anonymous traffic to signed in users.
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
class ApplicationController
|
13
|
+
before_action :set_anonymous_id
|
14
|
+
…
|
15
|
+
|
16
|
+
def set_anonymous_id
|
17
|
+
session[:anonymous_id] ||= SecureRandom.uuid
|
18
|
+
end
|
19
|
+
|
20
|
+
…
|
21
|
+
end
|
22
|
+
```
|
23
|
+
|
24
|
+
## Importing Users into X
|
25
|
+
|
26
|
+
You'll want to loop through your users, and call `.identify` for each one, passing the users `id`, and their `email` along with any other traits you value.
|
27
|
+
|
28
|
+
```ruby
|
29
|
+
User.find_in_batches do |users|
|
30
|
+
users.each do |user|
|
31
|
+
Clearbit::Analytics.identify(
|
32
|
+
user_id: user.id, # Required.
|
33
|
+
traits: {
|
34
|
+
email: user.email, # Required.
|
35
|
+
company_domain: user.domain || user.email.split('@').last, # Optional, strongly recommended.
|
36
|
+
first_name: user.first_name, # Optional.
|
37
|
+
last_name: user.last_name, # Optional.
|
38
|
+
# … other analytical traits can also be sent, like the plan a user is on etc.
|
39
|
+
},
|
40
|
+
)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
```
|
44
|
+
|
45
|
+
## Identifying Users on sign up / log in
|
46
|
+
|
47
|
+
Identifying users on sign up, or on log in will help Clearbit X associate the user with anonymous page views.
|
48
|
+
|
49
|
+
```ruby
|
50
|
+
class SessionsController
|
51
|
+
…
|
52
|
+
|
53
|
+
def create
|
54
|
+
…
|
55
|
+
|
56
|
+
identify(current_user)
|
57
|
+
|
58
|
+
…
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def identify(user)
|
64
|
+
Clearbit::Analytics.identify(
|
65
|
+
user_id: user.id, # Required
|
66
|
+
anonymous_id: session[:anonymous_id], # Optional, strongly recommended. Helps Clearbit X associate with anonymous visits.
|
67
|
+
traits: {
|
68
|
+
email: user.email, # Required.
|
69
|
+
company_domain: user.domain || user.email.split('@').last, # Optional, strongly recommended.
|
70
|
+
first_name: user.first_name, # Optional.
|
71
|
+
last_name: user.last_name, # Optional.
|
72
|
+
# … other analytical traits can also be sent, like the plan a user is on etc.
|
73
|
+
},
|
74
|
+
context: {
|
75
|
+
ip: request.ip, # Optional, but strongly recommended. Helps Clearbit X associate with anonymous visits.
|
76
|
+
},
|
77
|
+
)
|
78
|
+
end
|
79
|
+
|
80
|
+
…
|
81
|
+
end
|
82
|
+
```
|
83
|
+
|
84
|
+
## Sending Page views
|
85
|
+
|
86
|
+
Tracking page views is best done using a `anonymous_id` you generate for each user. You'll need to sent the `url` as part of the `properties` hash, and the `ip` as part of the `context` hash. Any other data you can provide will greatly help with segmentation inside of Clearbit X.
|
87
|
+
|
88
|
+
|
89
|
+
```ruby
|
90
|
+
uri = URI(request.referer) # You'll likely want to do some error handling here.
|
91
|
+
|
92
|
+
Clearbit::Analytics.page(
|
93
|
+
user_id: current_user&.id, # Optional
|
94
|
+
anonymous_id: session[:anonymous_id], # Required
|
95
|
+
properties: {
|
96
|
+
url: request.referrer, # Required. Because this is a backend integration, the referrer is the URL that was visited.
|
97
|
+
path: format_path(uri.path), # Optional, but strongly recommended.
|
98
|
+
search: format_search(uri.params), # Optional, but strongly recommended.
|
99
|
+
referrer: nil, # Optional. Not the `request.referer`, but the referrer of the original page view.
|
100
|
+
},
|
101
|
+
context: {
|
102
|
+
ip: request.ip, # Required. Helps Clearbit X associate anonymous visits with Companies.
|
103
|
+
},
|
104
|
+
)
|
105
|
+
|
106
|
+
def format_path(path)
|
107
|
+
path.presence || '/'
|
108
|
+
end
|
109
|
+
|
110
|
+
def format_search(search)
|
111
|
+
return unless search
|
112
|
+
'?' + search
|
113
|
+
end
|
114
|
+
```
|
@@ -170,7 +170,7 @@ module Clearbit
|
|
170
170
|
end
|
171
171
|
|
172
172
|
def add_context!(context)
|
173
|
-
context[:library] = { :name => '
|
173
|
+
context[:library] = { :name => 'clearbit-ruby', :version => Clearbit::VERSION.to_s }
|
174
174
|
end
|
175
175
|
|
176
176
|
# private: Ensures that a string is non-empty
|
data/lib/clearbit/version.rb
CHANGED
@@ -6,20 +6,41 @@ describe Clearbit::Analytics do
|
|
6
6
|
Clearbit.key = 'clearbit_key'
|
7
7
|
end
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
9
|
+
describe '#identify' do
|
10
|
+
it 'sends an identify request to Clearbit X' do
|
11
|
+
basic_auth = Base64.encode64('clearbit_key:').strip
|
12
|
+
x_stub = stub_request(:post, 'https://x.clearbit.com/v1/import').
|
13
|
+
with(
|
14
|
+
headers: { 'Authorization' => "Basic #{basic_auth}" }
|
15
|
+
).to_return(status: 200, body: {success: true}.to_json)
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
17
|
+
Clearbit::Analytics.identify(
|
18
|
+
user_id: '123',
|
19
|
+
traits: {
|
20
|
+
email: 'david@clearbit.com',
|
21
|
+
},
|
22
|
+
)
|
22
23
|
|
23
|
-
|
24
|
+
expect(x_stub).to have_been_requested
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '#page' do
|
29
|
+
it 'sends an identify request to Clearbit X' do
|
30
|
+
basic_auth = Base64.encode64('clearbit_key:').strip
|
31
|
+
x_stub = stub_request(:post, 'https://x.clearbit.com/v1/import').
|
32
|
+
with(
|
33
|
+
headers: { 'Authorization' => "Basic #{basic_auth}" }
|
34
|
+
).to_return(status: 200, body: {success: true}.to_json)
|
35
|
+
|
36
|
+
Clearbit::Analytics.page(
|
37
|
+
user_id: '123',
|
38
|
+
traits: {
|
39
|
+
email: 'david@clearbit.com',
|
40
|
+
},
|
41
|
+
)
|
42
|
+
|
43
|
+
expect(x_stub).to have_been_requested
|
44
|
+
end
|
24
45
|
end
|
25
46
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: clearbit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex MacCaw
|
@@ -151,6 +151,7 @@ files:
|
|
151
151
|
- lib/clearbit.rb
|
152
152
|
- lib/clearbit/analytics.rb
|
153
153
|
- lib/clearbit/analytics/LICENSE
|
154
|
+
- lib/clearbit/analytics/README.md
|
154
155
|
- lib/clearbit/analytics/backoff_policy.rb
|
155
156
|
- lib/clearbit/analytics/client.rb
|
156
157
|
- lib/clearbit/analytics/defaults.rb
|