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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 71d4951f83fc43ae93e330b35c97062bd9c8df64
4
- data.tar.gz: 11e299db5daf757cba620a539fd827dd25a8436d
3
+ metadata.gz: f272d5ddcbdd3fbded71fa72482a8d5b27679d9d
4
+ data.tar.gz: 70a98af711f968d00e0e7a68144afddb98fe00e5
5
5
  SHA512:
6
- metadata.gz: 8439045c35184236fe21998035a6aa56b799b0d51246f7a52afc676511991eedb71001059ed81fc5f72f05debb1471ea4acc49cc9c4395f7844d010c35c9a95c
7
- data.tar.gz: 3e5e394d1a0c569d37b8eccb85edc086ff6d7a94fb0eb8894764bafb57eaa01700ab7b2b64834052a17421e23b86396f8d9beca3fbcc67b824d6f2b4d615ea05
6
+ metadata.gz: 3e61136a5eb4d08866638bb0084e4fe9977d08f15a2498ce642335b2eed4f33adcefe0c53100924bee3b4774ede158a0a8fc8a149dd20e5b8e740198add41cf7
7
+ data.tar.gz: 8e93c453d66121654cb841da5937ac62409ba089b9c1d9cda708d7db1065b077a406d72198e2ba8b53f5dfacd8340271729c36bcd5d785692ab85f00f82ad645
@@ -1,34 +1,34 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- analytics-ruby (2.0.12)
4
+ analytics-ruby (2.0.13)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
8
8
  specs:
9
- activesupport (3.2.21)
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.1)
14
+ multi_json (1.11.2)
15
15
  predicated (0.2.6)
16
16
  rake (10.4.2)
17
- rspec (2.14.1)
18
- rspec-core (~> 2.14.0)
19
- rspec-expectations (~> 2.14.0)
20
- rspec-mocks (~> 2.14.0)
21
- rspec-core (2.14.8)
22
- rspec-expectations (2.14.5)
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.14.6)
25
- ruby2ruby (2.1.0)
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.6.1)
28
+ ruby_parser (3.7.2)
29
29
  sexp_processor (~> 4.1)
30
- sexp_processor (4.4.3)
31
- thread_safe (0.3.4)
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.10.6
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
@@ -5,4 +5,4 @@ test:
5
5
  build:
6
6
  gem build ./analytics-ruby.gemspec
7
7
 
8
- .PHONY: test
8
+ .PHONY: test build
Binary file
Binary file
@@ -10,7 +10,7 @@ require 'segment/analytics/logging'
10
10
  module Segment
11
11
  class Analytics
12
12
  def initialize options = {}
13
- Request.stub = options[:stub]
13
+ Request.stub = options[:stub] if options.has_key?(:stub)
14
14
  @client = Segment::Analytics::Client.new options
15
15
  end
16
16
 
@@ -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 => 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] = uid
308
+ action[:messageId] ||= uid
292
309
  unless queue_full = @queue.length >= @max_queue_size
293
310
  ensure_worker_running
294
311
  @queue << action
@@ -1,5 +1,5 @@
1
1
  module Segment
2
2
  class Analytics
3
- VERSION = '2.0.13'
3
+ VERSION = '2.1.0'
4
4
  end
5
5
  end
@@ -44,9 +44,9 @@ module Segment
44
44
 
45
45
  res = Request.new.post @write_key, @batch
46
46
 
47
- @lock.synchronize { @batch.clear }
48
-
49
47
  @on_error.call res.status, res.error unless res.status == 200
48
+
49
+ @lock.synchronize { @batch.clear }
50
50
  end
51
51
  end
52
52
 
@@ -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 'should error if no write_key is supplied' do
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 'should not error if a write_key is supplied' do
12
- Client.new :write_key => WRITE_KEY
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 'should not error if a write_key is supplied as a string' do
16
- Client.new 'write_key' => WRITE_KEY
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
- before(:all) do
22
- @client = Client.new :write_key => WRITE_KEY
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 'should error without a user_id' do
31
- expect { @client.track(:event => 'Event') }.to raise_error(ArgumentError)
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 'should error if properties is not a hash' do
36
+ it 'errors if properties is not a hash' do
35
37
  expect {
36
- @client.track({
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 'should use the timestamp given' do
46
+ it 'uses the timestamp given' do
45
47
  time = Time.parse("1990-07-16 13:30:00.123 UTC")
46
48
 
47
- @client.track({
49
+ client.track({
48
50
  :event => 'testing the timestamp',
49
51
  :user_id => 'joe',
50
52
  :timestamp => time
51
53
  })
52
54
 
53
- msg = @queue.pop
55
+ msg = queue.pop
54
56
 
55
- Time.parse(msg[:timestamp]).should == time
57
+ expect(Time.parse(msg[:timestamp])).to eq(time)
56
58
  end
57
59
 
58
- it 'should not error with the required options' do
59
- @client.track Queued::TRACK
60
- @queue.pop
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 'should not error when given string keys' do
64
- @client.track Utils.stringify_keys(Queued::TRACK)
65
- @queue.pop
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 'should convert time and date traits into iso8601 format' do
69
- @client.track({
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 = @queue.pop
81
- message[:properties][:time].should == '2013-01-01T00:00:00.000Z'
82
- message[:properties][:time_with_zone].should == '2013-01-01T00:00:00.000Z'
83
- message[:properties][:date_time].should == '2013-01-01T00:00:00.000Z'
84
- message[:properties][:date].should == '2013-01-01'
85
- message[:properties][:nottime].should == 'x'
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
- before(:all) do
92
- @client = Client.new :write_key => WRITE_KEY
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 'should error without any user id' do
97
- expect { @client.identify({}) }.to raise_error(ArgumentError)
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 'should not error with the required options' do
101
- @client.identify Queued::IDENTIFY
102
- @queue.pop
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 'should not error with the required options as strings' do
106
- @client.identify Utils.stringify_keys(Queued::IDENTIFY)
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
- message = @queue.pop
122
- message[:traits][:time].should == '2013-01-01T00:00:00.000Z'
123
- message[:traits][:time_with_zone].should == '2013-01-01T00:00:00.000Z'
124
- message[:traits][:date_time].should == '2013-01-01T00:00:00.000Z'
125
- message[:traits][:date].should == '2013-01-01'
126
- message[:traits][:nottime].should == 'x'
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
- before :all do
132
- @client = Client.new :write_key => WRITE_KEY
139
+ it 'errors without from' do
140
+ expect { client.alias :user_id => 1234 }.to raise_error(ArgumentError)
133
141
  end
134
142
 
135
- it 'should error without from' do
136
- expect { @client.alias :user_id => 1234 }.to raise_error(ArgumentError)
143
+ it 'errors without to' do
144
+ expect { client.alias :previous_id => 1234 }.to raise_error(ArgumentError)
137
145
  end
138
146
 
139
- it 'should error without to' do
140
- expect { @client.alias :previous_id => 1234 }.to raise_error(ArgumentError)
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 'should not error with the required options' do
144
- @client.alias ALIAS
145
- end
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
- before :all do
154
- @client = Client.new :write_key => WRITE_KEY
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 'should error without group_id' do
163
- expect { @client.group :user_id => 'foo' }.to raise_error(ArgumentError)
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 'should error without user_id' do
167
- expect { @client.group :group_id => 'foo' }.to raise_error(ArgumentError)
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 'should not error with the required options' do
171
- @client.group Queued::GROUP
171
+ it 'does not error with the required options' do
172
+ client.group Queued::GROUP
172
173
  end
173
174
 
174
- it 'should not error with the required options as strings' do
175
- @client.group Utils.stringify_keys(Queued::GROUP)
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 'should convert time and date traits into iso8601 format' do
179
- @client.identify({
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
- message = @queue.pop
191
- message[:traits][:time].should == '2013-01-01T00:00:00.000Z'
192
- message[:traits][:time_with_zone].should == '2013-01-01T00:00:00.000Z'
193
- message[:traits][:date_time].should == '2013-01-01T00:00:00.000Z'
194
- message[:traits][:date].should == '2013-01-01'
195
- message[:traits][:nottime].should == 'x'
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
- before :all do
201
- @client = Client.new :write_key => WRITE_KEY
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 'should not error with the required options' do
209
- @client.page Queued::PAGE
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 'should not error with the required options as strings' do
213
- @client.page Utils.stringify_keys(Queued::PAGE)
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
- before :all do
219
- @client = Client.new :write_key => WRITE_KEY
219
+ it 'errors without user_id' do
220
+ expect { client.screen :name => 'foo' }.to raise_error(ArgumentError)
220
221
  end
221
222
 
222
- it 'should error without user_id' do
223
- expect { @client.screen :name => 'foo' }.to raise_error(ArgumentError)
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 'should not error with the required options' do
227
- @client.screen Queued::SCREEN
228
- end
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
- before(:all) do
237
- @client = Client.new :write_key => WRITE_KEY
238
- end
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
- it 'should wait for the queue to finish on a flush' do
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 'should complete when the process forks' do
248
- @client.identify Queued::IDENTIFY
243
+ it 'completes when the process forks' do
244
+ client.identify Queued::IDENTIFY
249
245
 
250
246
  Process.fork do
251
- @client.track Queued::TRACK
252
- @client.flush
253
- @client.queued_messages.should == 0
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].should == v }
257
+ check_property = proc { |msg, k, v| msg[k] && msg[k] == v }
262
258
 
263
- before(:all) do
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
- it 'should not convert ids given as fixnums to strings' do
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
- @client.send s, :user_id => 1, :group_id => 2, :previous_id => 3, :anonymous_id => 4, :event => "coco barked", :name => "coco"
272
- message = @queue.pop(true)
273
- check_property.call(message, :userId, 1)
274
- check_property.call(message, :groupId, 2)
275
- check_property.call(message, :previousId, 3)
276
- check_property.call(message, :anonymousId, 4)
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 'should send integrations' do
300
+ it 'sends integrations' do
281
301
  [:track, :screen, :page, :group, :identify, :alias].each do |s|
282
- @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"
283
- message = @queue.pop(true)
284
- message[:integrations][:All].should be_true
285
- message[:integrations][:Salesforce].should be_false
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