analytics-ruby 2.0.13 → 2.1.0
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.
- checksums.yaml +4 -4
- data/Gemfile.lock +15 -15
- data/History.md +15 -0
- data/Makefile +1 -1
- data/analytics-ruby-2.0.13.gem +0 -0
- data/analytics-ruby-2.1.0.gem +0 -0
- data/lib/segment/analytics.rb +1 -1
- data/lib/segment/analytics/client.rb +19 -2
- data/lib/segment/analytics/version.rb +1 -1
- data/lib/segment/analytics/worker.rb +2 -2
- data/spec/segment/analytics/client_spec.rb +160 -140
- data/spec/segment/analytics/request_spec.rb +191 -0
- data/spec/segment/analytics/response_spec.rb +30 -0
- data/spec/segment/analytics/worker_spec.rb +33 -27
- data/spec/segment/analytics_spec.rb +40 -29
- metadata +25 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f272d5ddcbdd3fbded71fa72482a8d5b27679d9d
|
4
|
+
data.tar.gz: 70a98af711f968d00e0e7a68144afddb98fe00e5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e61136a5eb4d08866638bb0084e4fe9977d08f15a2498ce642335b2eed4f33adcefe0c53100924bee3b4774ede158a0a8fc8a149dd20e5b8e740198add41cf7
|
7
|
+
data.tar.gz: 8e93c453d66121654cb841da5937ac62409ba089b9c1d9cda708d7db1065b077a406d72198e2ba8b53f5dfacd8340271729c36bcd5d785692ab85f00f82ad645
|
data/Gemfile.lock
CHANGED
@@ -1,34 +1,34 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
analytics-ruby (2.0.
|
4
|
+
analytics-ruby (2.0.13)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: http://rubygems.org/
|
8
8
|
specs:
|
9
|
-
activesupport (3.2.
|
9
|
+
activesupport (3.2.22)
|
10
10
|
i18n (~> 0.6, >= 0.6.4)
|
11
11
|
multi_json (~> 1.0)
|
12
12
|
diff-lcs (1.2.5)
|
13
13
|
i18n (0.7.0)
|
14
|
-
multi_json (1.11.
|
14
|
+
multi_json (1.11.2)
|
15
15
|
predicated (0.2.6)
|
16
16
|
rake (10.4.2)
|
17
|
-
rspec (2.
|
18
|
-
rspec-core (~> 2.
|
19
|
-
rspec-expectations (~> 2.
|
20
|
-
rspec-mocks (~> 2.
|
21
|
-
rspec-core (2.
|
22
|
-
rspec-expectations (2.
|
17
|
+
rspec (2.99.0)
|
18
|
+
rspec-core (~> 2.99.0)
|
19
|
+
rspec-expectations (~> 2.99.0)
|
20
|
+
rspec-mocks (~> 2.99.0)
|
21
|
+
rspec-core (2.99.2)
|
22
|
+
rspec-expectations (2.99.2)
|
23
23
|
diff-lcs (>= 1.1.3, < 2.0)
|
24
|
-
rspec-mocks (2.
|
25
|
-
ruby2ruby (2.
|
24
|
+
rspec-mocks (2.99.4)
|
25
|
+
ruby2ruby (2.2.0)
|
26
26
|
ruby_parser (~> 3.1)
|
27
27
|
sexp_processor (~> 4.0)
|
28
|
-
ruby_parser (3.
|
28
|
+
ruby_parser (3.7.2)
|
29
29
|
sexp_processor (~> 4.1)
|
30
|
-
sexp_processor (4.
|
31
|
-
thread_safe (0.3.
|
30
|
+
sexp_processor (4.6.0)
|
31
|
+
thread_safe (0.3.5)
|
32
32
|
tzinfo (1.2.1)
|
33
33
|
thread_safe (~> 0.1)
|
34
34
|
wrong (0.7.1)
|
@@ -50,4 +50,4 @@ DEPENDENCIES
|
|
50
50
|
wrong (~> 0.0)
|
51
51
|
|
52
52
|
BUNDLED WITH
|
53
|
-
1.
|
53
|
+
1.11.2
|
data/History.md
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
|
2
|
+
2.1.0 / 2016-06-17
|
3
|
+
==================
|
4
|
+
|
5
|
+
* Fix: Ensure error handler is called before Client#flush finishes.
|
6
|
+
* Feature: Support setting a custom message ID.
|
7
|
+
|
8
|
+
2.0.13 / 2015-09-15
|
9
|
+
==================
|
10
|
+
|
11
|
+
* readme: updated install docs
|
12
|
+
* fix: page/screen to allow no name
|
13
|
+
* git: ignore ruby version
|
14
|
+
* travis-ci: remove old rubys
|
15
|
+
|
1
16
|
2.0.12 / 2015-01-10
|
2
17
|
==================
|
3
18
|
|
data/Makefile
CHANGED
Binary file
|
Binary file
|
data/lib/segment/analytics.rb
CHANGED
@@ -52,6 +52,7 @@ module Segment
|
|
52
52
|
# :properties - Hash of event properties. (optional)
|
53
53
|
# :timestamp - Time of when the event occurred. (optional)
|
54
54
|
# :user_id - String of the user id.
|
55
|
+
# :message_id - String of the message id that uniquely identified a message across the API. (optional)
|
55
56
|
def track attrs
|
56
57
|
symbolize_keys! attrs
|
57
58
|
check_user_id! attrs
|
@@ -60,6 +61,7 @@ module Segment
|
|
60
61
|
properties = attrs[:properties] || {}
|
61
62
|
timestamp = attrs[:timestamp] || Time.new
|
62
63
|
context = attrs[:context] || {}
|
64
|
+
message_id = attrs[:message_id].to_s if attrs[:message_id]
|
63
65
|
|
64
66
|
check_timestamp! timestamp
|
65
67
|
|
@@ -76,10 +78,11 @@ module Segment
|
|
76
78
|
:event => event,
|
77
79
|
:userId => attrs[:user_id],
|
78
80
|
:anonymousId => attrs[:anonymous_id],
|
79
|
-
:context =>
|
81
|
+
:context => context,
|
80
82
|
:options => attrs[:options],
|
81
83
|
:integrations => attrs[:integrations],
|
82
84
|
:properties => properties,
|
85
|
+
:messageId => message_id,
|
83
86
|
:timestamp => datetime_in_iso8601(timestamp),
|
84
87
|
:type => 'track'
|
85
88
|
})
|
@@ -95,6 +98,7 @@ module Segment
|
|
95
98
|
# :timestamp - Time of when the event occurred. (optional)
|
96
99
|
# :traits - Hash of user traits. (optional)
|
97
100
|
# :user_id - String of the user id
|
101
|
+
# :message_id - String of the message id that uniquely identified a message across the API. (optional)
|
98
102
|
def identify attrs
|
99
103
|
symbolize_keys! attrs
|
100
104
|
check_user_id! attrs
|
@@ -102,6 +106,7 @@ module Segment
|
|
102
106
|
traits = attrs[:traits] || {}
|
103
107
|
timestamp = attrs[:timestamp] || Time.new
|
104
108
|
context = attrs[:context] || {}
|
109
|
+
message_id = attrs[:message_id].to_s if attrs[:message_id]
|
105
110
|
|
106
111
|
check_timestamp! timestamp
|
107
112
|
|
@@ -117,6 +122,7 @@ module Segment
|
|
117
122
|
:context => context,
|
118
123
|
:traits => traits,
|
119
124
|
:options => attrs[:options],
|
125
|
+
:messageId => message_id,
|
120
126
|
:timestamp => datetime_in_iso8601(timestamp),
|
121
127
|
:type => 'identify'
|
122
128
|
})
|
@@ -131,6 +137,7 @@ module Segment
|
|
131
137
|
# :previous_id - String of the id to alias from
|
132
138
|
# :timestamp - Time of when the alias occured (optional)
|
133
139
|
# :user_id - String of the id to alias to
|
140
|
+
# :message_id - String of the message id that uniquely identified a message across the API. (optional)
|
134
141
|
def alias(attrs)
|
135
142
|
symbolize_keys! attrs
|
136
143
|
|
@@ -138,6 +145,7 @@ module Segment
|
|
138
145
|
to = attrs[:user_id]
|
139
146
|
timestamp = attrs[:timestamp] || Time.new
|
140
147
|
context = attrs[:context] || {}
|
148
|
+
message_id = attrs[:message_id].to_s if attrs[:message_id]
|
141
149
|
|
142
150
|
check_presence! from, 'previous_id'
|
143
151
|
check_presence! to, 'user_id'
|
@@ -150,6 +158,7 @@ module Segment
|
|
150
158
|
:integrations => attrs[:integrations],
|
151
159
|
:context => context,
|
152
160
|
:options => attrs[:options],
|
161
|
+
:messageId => message_id,
|
153
162
|
:timestamp => datetime_in_iso8601(timestamp),
|
154
163
|
:type => 'alias'
|
155
164
|
})
|
@@ -164,6 +173,7 @@ module Segment
|
|
164
173
|
# :previous_id - String of the id to alias from
|
165
174
|
# :timestamp - Time of when the alias occured (optional)
|
166
175
|
# :user_id - String of the id to alias to
|
176
|
+
# :message_id - String of the message id that uniquely identified a message across the API. (optional)
|
167
177
|
def group(attrs)
|
168
178
|
symbolize_keys! attrs
|
169
179
|
check_user_id! attrs
|
@@ -173,6 +183,7 @@ module Segment
|
|
173
183
|
traits = attrs[:traits] || {}
|
174
184
|
timestamp = attrs[:timestamp] || Time.new
|
175
185
|
context = attrs[:context] || {}
|
186
|
+
message_id = attrs[:message_id].to_s if attrs[:message_id]
|
176
187
|
|
177
188
|
fail ArgumentError, '.traits must be a hash' unless traits.is_a? Hash
|
178
189
|
isoify_dates! traits
|
@@ -188,6 +199,7 @@ module Segment
|
|
188
199
|
:integrations => attrs[:integrations],
|
189
200
|
:options => attrs[:options],
|
190
201
|
:context => context,
|
202
|
+
:messageId => message_id,
|
191
203
|
:timestamp => datetime_in_iso8601(timestamp),
|
192
204
|
:type => 'group'
|
193
205
|
})
|
@@ -205,6 +217,7 @@ module Segment
|
|
205
217
|
# :properties - Hash of page properties (optional)
|
206
218
|
# :timestamp - Time of when the pageview occured (optional)
|
207
219
|
# :user_id - String of the id to alias from
|
220
|
+
# :message_id - String of the message id that uniquely identified a message across the API. (optional)
|
208
221
|
def page(attrs)
|
209
222
|
symbolize_keys! attrs
|
210
223
|
check_user_id! attrs
|
@@ -213,6 +226,7 @@ module Segment
|
|
213
226
|
properties = attrs[:properties] || {}
|
214
227
|
timestamp = attrs[:timestamp] || Time.new
|
215
228
|
context = attrs[:context] || {}
|
229
|
+
message_id = attrs[:message_id].to_s if attrs[:message_id]
|
216
230
|
|
217
231
|
fail ArgumentError, '.properties must be a hash' unless properties.is_a? Hash
|
218
232
|
isoify_dates! properties
|
@@ -229,6 +243,7 @@ module Segment
|
|
229
243
|
:integrations => attrs[:integrations],
|
230
244
|
:options => attrs[:options],
|
231
245
|
:context => context,
|
246
|
+
:messageId => message_id,
|
232
247
|
:timestamp => datetime_in_iso8601(timestamp),
|
233
248
|
:type => 'page'
|
234
249
|
})
|
@@ -253,6 +268,7 @@ module Segment
|
|
253
268
|
properties = attrs[:properties] || {}
|
254
269
|
timestamp = attrs[:timestamp] || Time.new
|
255
270
|
context = attrs[:context] || {}
|
271
|
+
message_id = attrs[:message_id].to_s if attrs[:message_id]
|
256
272
|
|
257
273
|
fail ArgumentError, '.properties must be a hash' unless properties.is_a? Hash
|
258
274
|
isoify_dates! properties
|
@@ -269,6 +285,7 @@ module Segment
|
|
269
285
|
:options => attrs[:options],
|
270
286
|
:integrations => attrs[:integrations],
|
271
287
|
:context => context,
|
288
|
+
:messageId => message_id,
|
272
289
|
:timestamp => timestamp.iso8601,
|
273
290
|
:type => 'screen'
|
274
291
|
})
|
@@ -288,7 +305,7 @@ module Segment
|
|
288
305
|
# returns Boolean of whether the item was added to the queue.
|
289
306
|
def enqueue(action)
|
290
307
|
# add our request id for tracing purposes
|
291
|
-
action[:messageId]
|
308
|
+
action[:messageId] ||= uid
|
292
309
|
unless queue_full = @queue.length >= @max_queue_size
|
293
310
|
ensure_worker_running
|
294
311
|
@queue << action
|
@@ -3,37 +3,39 @@ require 'spec_helper'
|
|
3
3
|
module Segment
|
4
4
|
class Analytics
|
5
5
|
describe Client do
|
6
|
+
let(:client) { Client.new :write_key => WRITE_KEY }
|
7
|
+
let(:queue) { client.instance_variable_get :@queue }
|
8
|
+
|
6
9
|
describe '#initialize' do
|
7
|
-
it '
|
10
|
+
it 'errors if no write_key is supplied' do
|
8
11
|
expect { Client.new }.to raise_error(ArgumentError)
|
9
12
|
end
|
10
13
|
|
11
|
-
it '
|
12
|
-
|
14
|
+
it 'does not error if a write_key is supplied' do
|
15
|
+
expect do
|
16
|
+
Client.new :write_key => WRITE_KEY
|
17
|
+
end.to_not raise_error
|
13
18
|
end
|
14
19
|
|
15
|
-
it '
|
16
|
-
|
20
|
+
it 'does not error if a write_key is supplied as a string' do
|
21
|
+
expect do
|
22
|
+
Client.new 'write_key' => WRITE_KEY
|
23
|
+
end.to_not raise_error
|
17
24
|
end
|
18
25
|
end
|
19
26
|
|
20
27
|
describe '#track' do
|
21
|
-
|
22
|
-
|
23
|
-
@queue = @client.instance_variable_get :@queue
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'should error without an event' do
|
27
|
-
expect { @client.track(:user_id => 'user') }.to raise_error(ArgumentError)
|
28
|
+
it 'errors without an event' do
|
29
|
+
expect { client.track(:user_id => 'user') }.to raise_error(ArgumentError)
|
28
30
|
end
|
29
31
|
|
30
|
-
it '
|
31
|
-
expect {
|
32
|
+
it 'errors without a user_id' do
|
33
|
+
expect { client.track(:event => 'Event') }.to raise_error(ArgumentError)
|
32
34
|
end
|
33
35
|
|
34
|
-
it '
|
36
|
+
it 'errors if properties is not a hash' do
|
35
37
|
expect {
|
36
|
-
|
38
|
+
client.track({
|
37
39
|
:user_id => 'user',
|
38
40
|
:event => 'Event',
|
39
41
|
:properties => [1,2,3]
|
@@ -41,32 +43,36 @@ module Segment
|
|
41
43
|
}.to raise_error(ArgumentError)
|
42
44
|
end
|
43
45
|
|
44
|
-
it '
|
46
|
+
it 'uses the timestamp given' do
|
45
47
|
time = Time.parse("1990-07-16 13:30:00.123 UTC")
|
46
48
|
|
47
|
-
|
49
|
+
client.track({
|
48
50
|
:event => 'testing the timestamp',
|
49
51
|
:user_id => 'joe',
|
50
52
|
:timestamp => time
|
51
53
|
})
|
52
54
|
|
53
|
-
msg =
|
55
|
+
msg = queue.pop
|
54
56
|
|
55
|
-
Time.parse(msg[:timestamp]).
|
57
|
+
expect(Time.parse(msg[:timestamp])).to eq(time)
|
56
58
|
end
|
57
59
|
|
58
|
-
it '
|
59
|
-
|
60
|
-
|
60
|
+
it 'does not error with the required options' do
|
61
|
+
expect do
|
62
|
+
client.track Queued::TRACK
|
63
|
+
queue.pop
|
64
|
+
end.to_not raise_error
|
61
65
|
end
|
62
66
|
|
63
|
-
it '
|
64
|
-
|
65
|
-
|
67
|
+
it 'does not error when given string keys' do
|
68
|
+
expect do
|
69
|
+
client.track Utils.stringify_keys(Queued::TRACK)
|
70
|
+
queue.pop
|
71
|
+
end.to_not raise_error
|
66
72
|
end
|
67
73
|
|
68
|
-
it '
|
69
|
-
|
74
|
+
it 'converts time and date traits into iso8601 format' do
|
75
|
+
client.track({
|
70
76
|
:user_id => 'user',
|
71
77
|
:event => 'Event',
|
72
78
|
:properties => {
|
@@ -77,38 +83,38 @@ module Segment
|
|
77
83
|
:nottime => 'x'
|
78
84
|
}
|
79
85
|
})
|
80
|
-
message =
|
81
|
-
|
82
|
-
message[:properties][:
|
83
|
-
message[:properties][:
|
84
|
-
message[:properties][:
|
85
|
-
message[:properties][:
|
86
|
+
message = queue.pop
|
87
|
+
|
88
|
+
expect(message[:properties][:time]).to eq('2013-01-01T00:00:00.000Z')
|
89
|
+
expect(message[:properties][:time_with_zone]).to eq('2013-01-01T00:00:00.000Z')
|
90
|
+
expect(message[:properties][:date_time]).to eq('2013-01-01T00:00:00.000Z')
|
91
|
+
expect(message[:properties][:date]).to eq('2013-01-01')
|
92
|
+
expect(message[:properties][:nottime]).to eq('x')
|
86
93
|
end
|
87
94
|
end
|
88
95
|
|
89
96
|
|
90
97
|
describe '#identify' do
|
91
|
-
|
92
|
-
|
93
|
-
@queue = @client.instance_variable_get :@queue
|
98
|
+
it 'errors without any user id' do
|
99
|
+
expect { client.identify({}) }.to raise_error(ArgumentError)
|
94
100
|
end
|
95
101
|
|
96
|
-
it '
|
97
|
-
expect
|
102
|
+
it 'does not error with the required options' do
|
103
|
+
expect do
|
104
|
+
client.identify Queued::IDENTIFY
|
105
|
+
queue.pop
|
106
|
+
end.to_not raise_error
|
98
107
|
end
|
99
108
|
|
100
|
-
it '
|
101
|
-
|
102
|
-
|
109
|
+
it 'does not error with the required options as strings' do
|
110
|
+
expect do
|
111
|
+
client.identify Utils.stringify_keys(Queued::IDENTIFY)
|
112
|
+
queue.pop
|
113
|
+
end.to_not raise_error
|
103
114
|
end
|
104
115
|
|
105
|
-
it '
|
106
|
-
|
107
|
-
@queue.pop
|
108
|
-
end
|
109
|
-
|
110
|
-
it 'should convert time and date traits into iso8601 format' do
|
111
|
-
@client.identify({
|
116
|
+
it 'converts time and date traits into iso8601 format' do
|
117
|
+
client.identify({
|
112
118
|
:user_id => 'user',
|
113
119
|
:traits => {
|
114
120
|
:time => Time.utc(2013),
|
@@ -118,65 +124,60 @@ module Segment
|
|
118
124
|
:nottime => 'x'
|
119
125
|
}
|
120
126
|
})
|
121
|
-
|
122
|
-
message
|
123
|
-
|
124
|
-
message[:traits][:
|
125
|
-
message[:traits][:
|
126
|
-
message[:traits][:
|
127
|
+
|
128
|
+
message = queue.pop
|
129
|
+
|
130
|
+
expect(message[:traits][:time]).to eq('2013-01-01T00:00:00.000Z')
|
131
|
+
expect(message[:traits][:time_with_zone]).to eq('2013-01-01T00:00:00.000Z')
|
132
|
+
expect(message[:traits][:date_time]).to eq('2013-01-01T00:00:00.000Z')
|
133
|
+
expect(message[:traits][:date]).to eq('2013-01-01')
|
134
|
+
expect(message[:traits][:nottime]).to eq('x')
|
127
135
|
end
|
128
136
|
end
|
129
137
|
|
130
138
|
describe '#alias' do
|
131
|
-
|
132
|
-
|
139
|
+
it 'errors without from' do
|
140
|
+
expect { client.alias :user_id => 1234 }.to raise_error(ArgumentError)
|
133
141
|
end
|
134
142
|
|
135
|
-
it '
|
136
|
-
expect {
|
143
|
+
it 'errors without to' do
|
144
|
+
expect { client.alias :previous_id => 1234 }.to raise_error(ArgumentError)
|
137
145
|
end
|
138
146
|
|
139
|
-
it '
|
140
|
-
expect {
|
147
|
+
it 'does not error with the required options' do
|
148
|
+
expect { client.alias ALIAS }.to_not raise_error
|
141
149
|
end
|
142
150
|
|
143
|
-
it '
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
it 'should not error with the required options as strings' do
|
148
|
-
@client.alias Utils.stringify_keys(ALIAS)
|
151
|
+
it 'does not error with the required options as strings' do
|
152
|
+
expect do
|
153
|
+
client.alias Utils.stringify_keys(ALIAS)
|
154
|
+
end.to_not raise_error
|
149
155
|
end
|
150
156
|
end
|
151
157
|
|
152
158
|
describe '#group' do
|
153
|
-
|
154
|
-
|
155
|
-
@queue = @client.instance_variable_get :@queue
|
156
|
-
end
|
157
|
-
|
158
|
-
after :each do
|
159
|
-
@client.flush
|
159
|
+
after do
|
160
|
+
client.flush
|
160
161
|
end
|
161
162
|
|
162
|
-
it '
|
163
|
-
expect {
|
163
|
+
it 'errors without group_id' do
|
164
|
+
expect { client.group :user_id => 'foo' }.to raise_error(ArgumentError)
|
164
165
|
end
|
165
166
|
|
166
|
-
it '
|
167
|
-
expect {
|
167
|
+
it 'errors without user_id' do
|
168
|
+
expect { client.group :group_id => 'foo' }.to raise_error(ArgumentError)
|
168
169
|
end
|
169
170
|
|
170
|
-
it '
|
171
|
-
|
171
|
+
it 'does not error with the required options' do
|
172
|
+
client.group Queued::GROUP
|
172
173
|
end
|
173
174
|
|
174
|
-
it '
|
175
|
-
|
175
|
+
it 'does not error with the required options as strings' do
|
176
|
+
client.group Utils.stringify_keys(Queued::GROUP)
|
176
177
|
end
|
177
178
|
|
178
|
-
it '
|
179
|
-
|
179
|
+
it 'converts time and date traits into iso8601 format' do
|
180
|
+
client.identify({
|
180
181
|
:user_id => 'user',
|
181
182
|
:group_id => 'group',
|
182
183
|
:traits => {
|
@@ -187,70 +188,65 @@ module Segment
|
|
187
188
|
:nottime => 'x'
|
188
189
|
}
|
189
190
|
})
|
190
|
-
|
191
|
-
message
|
192
|
-
|
193
|
-
message[:traits][:
|
194
|
-
message[:traits][:
|
195
|
-
message[:traits][:
|
191
|
+
|
192
|
+
message = queue.pop
|
193
|
+
|
194
|
+
expect(message[:traits][:time]).to eq('2013-01-01T00:00:00.000Z')
|
195
|
+
expect(message[:traits][:time_with_zone]).to eq('2013-01-01T00:00:00.000Z')
|
196
|
+
expect(message[:traits][:date_time]).to eq('2013-01-01T00:00:00.000Z')
|
197
|
+
expect(message[:traits][:date]).to eq('2013-01-01')
|
198
|
+
expect(message[:traits][:nottime]).to eq('x')
|
196
199
|
end
|
197
200
|
end
|
198
201
|
|
199
202
|
describe '#page' do
|
200
|
-
|
201
|
-
|
202
|
-
end
|
203
|
-
|
204
|
-
it 'should error without user_id' do
|
205
|
-
expect { @client.page :name => 'foo' }.to raise_error(ArgumentError)
|
203
|
+
it 'errors without user_id' do
|
204
|
+
expect { client.page :name => 'foo' }.to raise_error(ArgumentError)
|
206
205
|
end
|
207
206
|
|
208
|
-
it '
|
209
|
-
|
207
|
+
it 'does not error with the required options' do
|
208
|
+
expect { client.page Queued::PAGE }.to_not raise_error
|
210
209
|
end
|
211
210
|
|
212
|
-
it '
|
213
|
-
|
211
|
+
it 'does not error with the required options as strings' do
|
212
|
+
expect do
|
213
|
+
client.page Utils.stringify_keys(Queued::PAGE)
|
214
|
+
end.to_not raise_error
|
214
215
|
end
|
215
216
|
end
|
216
217
|
|
217
218
|
describe '#screen' do
|
218
|
-
|
219
|
-
|
219
|
+
it 'errors without user_id' do
|
220
|
+
expect { client.screen :name => 'foo' }.to raise_error(ArgumentError)
|
220
221
|
end
|
221
222
|
|
222
|
-
it '
|
223
|
-
expect {
|
223
|
+
it 'does not error with the required options' do
|
224
|
+
expect { client.screen Queued::SCREEN }.to_not raise_error
|
224
225
|
end
|
225
226
|
|
226
|
-
it '
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
it 'should not error with the required options as strings' do
|
231
|
-
@client.screen Utils.stringify_keys(Queued::SCREEN)
|
227
|
+
it 'does not error with the required options as strings' do
|
228
|
+
expect do
|
229
|
+
client.screen Utils.stringify_keys(Queued::SCREEN)
|
230
|
+
end.to_not raise_error
|
232
231
|
end
|
233
232
|
end
|
234
233
|
|
235
234
|
describe '#flush' do
|
236
|
-
|
237
|
-
|
238
|
-
|
235
|
+
it 'waits for the queue to finish on a flush' do
|
236
|
+
client.identify Queued::IDENTIFY
|
237
|
+
client.track Queued::TRACK
|
238
|
+
client.flush
|
239
239
|
|
240
|
-
|
241
|
-
@client.identify Queued::IDENTIFY
|
242
|
-
@client.track Queued::TRACK
|
243
|
-
@client.flush
|
244
|
-
@client.queued_messages.should == 0
|
240
|
+
expect(client.queued_messages).to eq(0)
|
245
241
|
end
|
246
242
|
|
247
|
-
it '
|
248
|
-
|
243
|
+
it 'completes when the process forks' do
|
244
|
+
client.identify Queued::IDENTIFY
|
249
245
|
|
250
246
|
Process.fork do
|
251
|
-
|
252
|
-
|
253
|
-
|
247
|
+
client.track Queued::TRACK
|
248
|
+
client.flush
|
249
|
+
expect(client.queued_messages).to eq(0)
|
254
250
|
end
|
255
251
|
|
256
252
|
Process.wait
|
@@ -258,31 +254,55 @@ module Segment
|
|
258
254
|
end
|
259
255
|
|
260
256
|
context 'common' do
|
261
|
-
check_property = proc { |msg, k, v| msg[k] && msg[k]
|
257
|
+
check_property = proc { |msg, k, v| msg[k] && msg[k] == v }
|
262
258
|
|
263
|
-
|
264
|
-
@client = Client.new :write_key => WRITE_KEY
|
265
|
-
@queue = @client.instance_variable_get :@queue
|
266
|
-
end
|
259
|
+
let(:data) { { :user_id => 1, :group_id => 2, :previous_id => 3, :anonymous_id => 4, :message_id => 5, :event => "coco barked", :name => "coco" } }
|
267
260
|
|
261
|
+
it 'does not convert ids given as fixnums to strings' do
|
262
|
+
[:track, :screen, :page, :identify].each do |s|
|
263
|
+
client.send(s, data)
|
264
|
+
message = queue.pop(true)
|
268
265
|
|
269
|
-
|
266
|
+
expect(check_property.call(message, :userId, 1)).to eq(true)
|
267
|
+
expect(check_property.call(message, :anonymousId, 4)).to eq(true)
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
it 'converts message id to string' do
|
270
272
|
[:track, :screen, :page, :group, :identify, :alias].each do |s|
|
271
|
-
|
272
|
-
message =
|
273
|
-
|
274
|
-
check_property.call(message, :
|
275
|
-
|
276
|
-
|
273
|
+
client.send(s, data)
|
274
|
+
message = queue.pop(true)
|
275
|
+
|
276
|
+
expect(check_property.call(message, :messageId, '5')).to eq(true)
|
277
|
+
end
|
278
|
+
end
|
279
|
+
|
280
|
+
context 'group' do
|
281
|
+
it 'does not convert ids given as fixnums to strings' do
|
282
|
+
client.group(data)
|
283
|
+
message = queue.pop(true)
|
284
|
+
|
285
|
+
expect(check_property.call(message, :userId, 1)).to eq(true)
|
286
|
+
expect(check_property.call(message, :groupId, 2)).to eq(true)
|
287
|
+
end
|
288
|
+
end
|
289
|
+
|
290
|
+
context 'alias' do
|
291
|
+
it 'does not convert ids given as fixnums to strings' do
|
292
|
+
client.alias(data)
|
293
|
+
message = queue.pop(true)
|
294
|
+
|
295
|
+
expect(check_property.call(message, :userId, 1)).to eq(true)
|
296
|
+
expect(check_property.call(message, :previousId, 3)).to eq(true)
|
277
297
|
end
|
278
298
|
end
|
279
299
|
|
280
|
-
it '
|
300
|
+
it 'sends integrations' do
|
281
301
|
[:track, :screen, :page, :group, :identify, :alias].each do |s|
|
282
|
-
|
283
|
-
message =
|
284
|
-
message[:integrations][:All].
|
285
|
-
message[:integrations][:Salesforce].
|
302
|
+
client.send s, :integrations => { :All => true, :Salesforce => false }, :user_id => 1, :group_id => 2, :previous_id => 3, :anonymous_id => 4, :event => "coco barked", :name => "coco"
|
303
|
+
message = queue.pop(true)
|
304
|
+
expect(message[:integrations][:All]).to eq(true)
|
305
|
+
expect(message[:integrations][:Salesforce]).to eq(false)
|
286
306
|
end
|
287
307
|
end
|
288
308
|
end
|