|
1 | 1 | (ns circleci.analytics-clj.core
|
2 | 2 | (:refer-clojure :exclude [alias flush])
|
3 |
| - (:require [circleci.analytics-clj.external :refer :all] |
| 3 | + (:require [circleci.analytics-clj.common :as common] |
| 4 | + [circleci.analytics-clj.external :refer :all] |
4 | 5 | [circleci.analytics-clj.utils :refer [string-keys]])
|
5 | 6 | (:import (com.segment.analytics Analytics)
|
6 | 7 | (com.segment.analytics.messages AliasMessage
|
|
10 | 11 | ScreenMessage
|
11 | 12 | TrackMessage)))
|
12 | 13 |
|
13 |
| -(def ^:private ctx {"library" {"name" "analytics-clj" |
14 |
| - "version" "0.7.1"}}) |
15 |
| - |
16 | 14 | (defn initialize
|
17 | 15 | "Start building an Analytics instance."
|
18 | 16 |
|
|
59 | 57 | [^Analytics analytics]
|
60 | 58 | (.shutdown analytics))
|
61 | 59 |
|
62 |
| -(defn common-fields |
63 |
| - "The `MessageBuilder` interface has a set of fields common to all messages. |
64 |
| -
|
65 |
| - https://segment.com/docs/spec/common/" |
66 |
| - |
67 |
| - {:added "0.4.0"} |
68 |
| - |
69 |
| - [message-builder {:keys [anonymous-id context integration-options integrations timestamp message-id user-id]}] |
70 |
| - (letfn [(enable-integrations [message-builder integrations] |
71 |
| - (doseq [[integration enable?] integrations] |
72 |
| - (enable-integration* message-builder integration enable?))) |
73 |
| - |
74 |
| - (enable-integration-options [message-builder integration-options] |
75 |
| - (doseq [[integration options] integration-options] |
76 |
| - (integration-options* message-builder integration (string-keys options))))] |
77 |
| - |
78 |
| - (doto message-builder |
79 |
| - (context* (merge ctx (string-keys context))) |
80 |
| - |
81 |
| - (cond-> (not (nil? anonymous-id)) |
82 |
| - (anonymous-id* anonymous-id)) |
83 |
| - |
84 |
| - (cond-> (not (nil? integration-options)) |
85 |
| - (enable-integration-options integration-options)) |
86 |
| - |
87 |
| - (cond-> (not (nil? integrations)) |
88 |
| - (enable-integrations integrations)) |
89 |
| - |
90 |
| - (cond-> (not (nil? timestamp)) |
91 |
| - (timestamp* timestamp)) |
92 |
| - |
93 |
| - (cond-> (not (nil? message-id)) |
94 |
| - (message-id* message-id)) |
95 |
| - |
96 |
| - (cond-> (not (nil? user-id)) |
97 |
| - (user-id* user-id))))) |
98 |
| - |
99 | 60 | (defn identify
|
100 | 61 | "`identify` lets you tie a user to their actions and
|
101 | 62 | record traits about them. It includes a unique User ID
|
|
111 | 72 |
|
112 | 73 | ([^Analytics analytics user-id traits options]
|
113 | 74 | (enqueue analytics (doto (IdentifyMessage/builder)
|
114 |
| - (common-fields (merge {:user-id user-id} options)) |
| 75 | + (common/common-fields (merge {:user-id user-id} options)) |
115 | 76 | (cond-> (not (nil? traits)) (traits* (string-keys traits)))))))
|
116 | 77 |
|
117 | 78 | (defn track
|
|
129 | 90 |
|
130 | 91 | ([^Analytics analytics user-id event properties options]
|
131 | 92 | (enqueue analytics (doto (TrackMessage/builder event)
|
132 |
| - (common-fields (merge {:user-id user-id} options)) |
| 93 | + (common/common-fields (merge {:user-id user-id} options)) |
133 | 94 | (cond-> (not (nil? properties)) (properties* (string-keys properties)))))))
|
134 | 95 |
|
135 | 96 | (defn screen
|
|
147 | 108 |
|
148 | 109 | ([^Analytics analytics user-id name properties options]
|
149 | 110 | (enqueue analytics (doto (ScreenMessage/builder name)
|
150 |
| - (common-fields (merge {:user-id user-id} options)) |
| 111 | + (common/common-fields (merge {:user-id user-id} options)) |
151 | 112 | (cond-> (not (nil? properties)) (properties* (string-keys properties)))))))
|
152 | 113 |
|
153 | 114 | (defn page
|
|
165 | 126 |
|
166 | 127 | ([^Analytics analytics user-id name properties options]
|
167 | 128 | (enqueue analytics (doto (PageMessage/builder name)
|
168 |
| - (common-fields (merge {:user-id user-id} options)) |
| 129 | + (common/common-fields (merge {:user-id user-id} options)) |
169 | 130 | (cond-> (not (nil? properties)) (properties* (string-keys properties)))))))
|
170 | 131 |
|
171 | 132 | (defn group
|
|
184 | 145 |
|
185 | 146 | ([^Analytics analytics user-id group-id traits options]
|
186 | 147 | (enqueue analytics (doto (GroupMessage/builder group-id)
|
187 |
| - (common-fields (merge {:user-id user-id} options)) |
| 148 | + (common/common-fields (merge {:user-id user-id} options)) |
188 | 149 | (cond-> (not (nil? traits)) (traits* (string-keys traits)))))))
|
189 | 150 |
|
190 | 151 | (defn alias
|
|
199 | 160 |
|
200 | 161 | ([^Analytics analytics previous-id user-id options]
|
201 | 162 | (enqueue analytics (doto (AliasMessage/builder previous-id)
|
202 |
| - (common-fields (merge {:user-id user-id} options)))))) |
| 163 | + (common/common-fields (merge {:user-id user-id} options)))))) |
0 commit comments