amplitude-api 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/amplitude_api.rb +9 -3
- data/lib/amplitude_api/event.rb +30 -15
- data/lib/amplitude_api/identification.rb +7 -2
- data/lib/amplitude_api/version.rb +1 -1
- data/readme.md +0 -1
- data/spec/lib/amplitude_api/event_spec.rb +49 -1
- data/spec/lib/amplitude_api/identification_spec.rb +5 -0
- data/spec/lib/amplitude_api_spec.rb +227 -82
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2613d299e9d407475b3a03eecb1633f0a5359b40
|
4
|
+
data.tar.gz: 7a48cebc3d4c592cb894c5d2bf9b814f0ff55a70
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 14739845274080c65ef0afb13b9547a91191ded8a935fae3a99bd04ffac16eb6f632fe4f83d4e209d3ef55f0dd3cd4eedfe645f030836423f42c530ac401363c
|
7
|
+
data.tar.gz: 1e6933e33ec4ae42076b57e8f9c6cc72797fb6cb25ce708f76182224f5fb02f4b4657fc00811e81211dcb23de1989879dda88ec4c5ec21ce98b96de9f1300fe3
|
data/lib/amplitude_api.rb
CHANGED
@@ -22,15 +22,17 @@ class AmplitudeAPI
|
|
22
22
|
#
|
23
23
|
# @param [ String ] event_name a string that describes the event, e.g. "clicked on Home"
|
24
24
|
# @param [ String ] user a string or integer that uniquely identifies a user.
|
25
|
+
# @param [ String ] device a string that uniquely identifies the device.
|
25
26
|
# @param [ Hash ] event_properties a hash that is serialized to JSON,
|
26
27
|
# and can contain any other property to be stored on the Event
|
27
28
|
# @param [ Hash ] user_properties a hash that is serialized to JSON,
|
28
29
|
# and contains user properties to be associated with the user
|
29
30
|
#
|
30
31
|
# @return [ Typhoeus::Response ]
|
31
|
-
def send_event(event_name, user, options = {})
|
32
|
+
def send_event(event_name, user, device, options = {})
|
32
33
|
event = AmplitudeAPI::Event.new(
|
33
34
|
user_id: user,
|
35
|
+
device_id: device,
|
34
36
|
event_type: event_name,
|
35
37
|
event_properties: options.fetch(:event_properties, {}),
|
36
38
|
user_properties: options.fetch(:user_properties, {})
|
@@ -72,8 +74,12 @@ class AmplitudeAPI
|
|
72
74
|
|
73
75
|
# ==== Identification related methods
|
74
76
|
|
75
|
-
def send_identify(user_id, user_properties = {})
|
76
|
-
identification = AmplitudeAPI::Identification.new(
|
77
|
+
def send_identify(user_id, device_id, user_properties = {})
|
78
|
+
identification = AmplitudeAPI::Identification.new(
|
79
|
+
user_id: user_id,
|
80
|
+
device_id: device_id,
|
81
|
+
user_properties: user_properties
|
82
|
+
)
|
77
83
|
identify(identification)
|
78
84
|
end
|
79
85
|
|
data/lib/amplitude_api/event.rb
CHANGED
@@ -4,6 +4,9 @@ class AmplitudeAPI
|
|
4
4
|
# @!attribute [ rw ] user_id
|
5
5
|
# @return [ String ] the user_id to be sent to Amplitude
|
6
6
|
attr_accessor :user_id
|
7
|
+
# @!attribute [ rw ] device_id
|
8
|
+
# @return [ String ] the device_id to be sent to Amplitude
|
9
|
+
attr_accessor :device_id
|
7
10
|
# @!attribute [ rw ] event_type
|
8
11
|
# @return [ String ] the event_type to be sent to Amplitude
|
9
12
|
attr_accessor :event_type
|
@@ -43,6 +46,7 @@ class AmplitudeAPI
|
|
43
46
|
# Create a new Event
|
44
47
|
#
|
45
48
|
# @param [ String ] user_id a user_id to associate with the event
|
49
|
+
# @param [ String ] device_id a device_id to associate with the event
|
46
50
|
# @param [ String ] event_type a name for the event
|
47
51
|
# @param [ Hash ] event_properties various properties to attach to the event
|
48
52
|
# @param [ Time ] Time that the event occurred (defaults to now)
|
@@ -52,15 +56,16 @@ class AmplitudeAPI
|
|
52
56
|
# @param [ String ] revenue_type (optional) type of revenue
|
53
57
|
# @param [ String ] IP address of the user
|
54
58
|
# @param [ String ] insert_id a unique identifier for the event
|
55
|
-
def initialize(
|
56
|
-
self.user_id =
|
57
|
-
self.
|
58
|
-
self.
|
59
|
-
self.
|
60
|
-
self.
|
61
|
-
self.
|
62
|
-
self.
|
63
|
-
|
59
|
+
def initialize(attributes = {})
|
60
|
+
self.user_id = getopt(attributes, :user_id, '')
|
61
|
+
self.device_id = getopt(attributes, :device_id, nil)
|
62
|
+
self.event_type = getopt(attributes, :event_type, '')
|
63
|
+
self.event_properties = getopt(attributes, :event_properties, {})
|
64
|
+
self.user_properties = getopt(attributes, :user_properties, {})
|
65
|
+
self.time = getopt(attributes, :time)
|
66
|
+
self.ip = getopt(attributes, :ip, '')
|
67
|
+
self.insert_id = getopt(attributes, :insert_id)
|
68
|
+
validate_revenue_arguments(attributes)
|
64
69
|
end
|
65
70
|
|
66
71
|
def user_id=(value)
|
@@ -81,11 +86,17 @@ class AmplitudeAPI
|
|
81
86
|
serialized_event[:user_id] = user_id
|
82
87
|
serialized_event[:event_properties] = event_properties
|
83
88
|
serialized_event[:user_properties] = user_properties
|
89
|
+
serialized_event = add_optional_properties(serialized_event)
|
90
|
+
serialized_event.merge(revenue_hash)
|
91
|
+
end
|
92
|
+
|
93
|
+
# @return [ Hash ] A serialized Event with optional properties
|
94
|
+
def add_optional_properties(serialized_event)
|
95
|
+
serialized_event[:device_id] = device_id if device_id
|
84
96
|
serialized_event[:time] = formatted_time if time
|
85
97
|
serialized_event[:ip] = ip if ip
|
86
98
|
serialized_event[:insert_id] = insert_id if insert_id
|
87
|
-
|
88
|
-
serialized_event.merge(revenue_hash)
|
99
|
+
serialized_event
|
89
100
|
end
|
90
101
|
|
91
102
|
# @return [ true, false ]
|
@@ -106,10 +117,10 @@ class AmplitudeAPI
|
|
106
117
|
end
|
107
118
|
|
108
119
|
def validate_revenue_arguments(options)
|
109
|
-
self.price = options
|
110
|
-
self.quantity = options
|
111
|
-
self.product_id = options
|
112
|
-
self.revenue_type = options
|
120
|
+
self.price = getopt(options, :price)
|
121
|
+
self.quantity = getopt(options, :quantity, 1) if price
|
122
|
+
self.product_id = getopt(options, :product_id)
|
123
|
+
self.revenue_type = getopt(options, :revenue_type)
|
113
124
|
return if price
|
114
125
|
raise ArgumentError, 'You must provide a price in order to use the product_id' if product_id
|
115
126
|
raise ArgumentError, 'You must provide a price in order to use the revenue_type' if revenue_type
|
@@ -123,5 +134,9 @@ class AmplitudeAPI
|
|
123
134
|
revenue_hash[:price] = price if price
|
124
135
|
revenue_hash
|
125
136
|
end
|
137
|
+
|
138
|
+
def getopt(options, key, default = nil)
|
139
|
+
options.fetch(key.to_sym, options.fetch(key.to_s, default))
|
140
|
+
end
|
126
141
|
end
|
127
142
|
end
|
@@ -4,6 +4,9 @@ class AmplitudeAPI
|
|
4
4
|
# @!attribute [ rw ] user_id
|
5
5
|
# @return [ String ] the user_id to be sent to Amplitude
|
6
6
|
attr_accessor :user_id
|
7
|
+
# @!attribute [ rw ] device_id
|
8
|
+
# @return [ String ] the device_id to be sent to Amplitude
|
9
|
+
attr_accessor :device_id
|
7
10
|
# @!attribute [ rw ] user_properties
|
8
11
|
# @return [ String ] the user_properties to be attached to the Amplitude Identify
|
9
12
|
attr_accessor :user_properties
|
@@ -11,9 +14,11 @@ class AmplitudeAPI
|
|
11
14
|
# Create a new Identification
|
12
15
|
#
|
13
16
|
# @param [ String ] user_id a user_id to associate with the identification
|
17
|
+
# @param [ String ] device_id a device_id to associate with the identification
|
14
18
|
# @param [ Hash ] user_properties various properties to attach to the user identification
|
15
|
-
def initialize(user_id: '', user_properties: {})
|
19
|
+
def initialize(user_id: '', device_id: nil, user_properties: {})
|
16
20
|
self.user_id = user_id
|
21
|
+
self.device_id = device_id if device_id
|
17
22
|
self.user_properties = user_properties
|
18
23
|
end
|
19
24
|
|
@@ -33,7 +38,7 @@ class AmplitudeAPI
|
|
33
38
|
{
|
34
39
|
user_id: user_id,
|
35
40
|
user_properties: user_properties
|
36
|
-
}
|
41
|
+
}.tap { |hsh| hsh[:device_id] = device_id if device_id }
|
37
42
|
end
|
38
43
|
|
39
44
|
# @return [ true, false ]
|
data/readme.md
CHANGED
@@ -35,7 +35,6 @@ Currently, we are using this in Rails and using ActiveJob to dispatch events asy
|
|
35
35
|
## What's Next
|
36
36
|
|
37
37
|
* Thread support for background dispatching in bulk
|
38
|
-
* `device_id` support as an alternative to `user_id`
|
39
38
|
* Configurable default account to use when no `user_id` present
|
40
39
|
|
41
40
|
## Other useful resources
|
@@ -40,6 +40,54 @@ describe AmplitudeAPI::Event do
|
|
40
40
|
end
|
41
41
|
|
42
42
|
describe 'init' do
|
43
|
+
context 'attributes' do
|
44
|
+
it 'accepts string attributes' do
|
45
|
+
time = Time.parse('2016-01-01 00:00:00 -0000')
|
46
|
+
event = described_class.new(
|
47
|
+
'user_id' => 123,
|
48
|
+
'device_id' => 'abcd',
|
49
|
+
'event_type' => 'sausage',
|
50
|
+
'event_properties' => { 'a' => 'b' },
|
51
|
+
'user_properties' => { 'c' => 'd' },
|
52
|
+
'time' => time,
|
53
|
+
'ip' => '127.0.0.1',
|
54
|
+
'insert_id' => 'bestId'
|
55
|
+
)
|
56
|
+
|
57
|
+
expect(event.to_hash).to eq(event_type: 'sausage',
|
58
|
+
user_id: 123,
|
59
|
+
device_id: 'abcd',
|
60
|
+
event_properties: { 'a' => 'b' },
|
61
|
+
user_properties: { 'c' => 'd' },
|
62
|
+
time: 1_451_606_400_000,
|
63
|
+
ip: '127.0.0.1',
|
64
|
+
insert_id: 'bestId')
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'accepts symbol attributes' do
|
68
|
+
time = Time.parse('2016-01-01 00:00:00 -0000')
|
69
|
+
event = described_class.new(
|
70
|
+
user_id: 123,
|
71
|
+
device_id: 'abcd',
|
72
|
+
event_type: 'sausage',
|
73
|
+
event_properties: { 'a' => 'b' },
|
74
|
+
user_properties: { 'c' => 'd' },
|
75
|
+
time: time,
|
76
|
+
ip: '127.0.0.1',
|
77
|
+
insert_id: 'bestId'
|
78
|
+
)
|
79
|
+
|
80
|
+
expect(event.to_hash).to eq(event_type: 'sausage',
|
81
|
+
user_id: 123,
|
82
|
+
device_id: 'abcd',
|
83
|
+
event_properties: { 'a' => 'b' },
|
84
|
+
user_properties: { 'c' => 'd' },
|
85
|
+
time: 1_451_606_400_000,
|
86
|
+
ip: '127.0.0.1',
|
87
|
+
insert_id: 'bestId')
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
43
91
|
context 'the user does not send in a price' do
|
44
92
|
it 'raises an error if the user sends in a product_id' do
|
45
93
|
expect do
|
@@ -63,7 +111,7 @@ describe AmplitudeAPI::Event do
|
|
63
111
|
end
|
64
112
|
end
|
65
113
|
|
66
|
-
describe '#
|
114
|
+
describe '#to_hash' do
|
67
115
|
it 'includes the event type' do
|
68
116
|
event = described_class.new(
|
69
117
|
user_id: 123,
|
@@ -36,6 +36,11 @@ describe AmplitudeAPI::Identification do
|
|
36
36
|
expect(identification.to_hash[:user_id]).to eq(123)
|
37
37
|
end
|
38
38
|
|
39
|
+
it 'includes the device id' do
|
40
|
+
identification = described_class.new(user_id: 123, device_id: 'abc')
|
41
|
+
expect(identification.to_hash[:device_id]).to eq('abc')
|
42
|
+
end
|
43
|
+
|
39
44
|
it 'includes arbitrary user properties' do
|
40
45
|
identification = described_class.new(
|
41
46
|
user_id: 123,
|
@@ -2,22 +2,58 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe AmplitudeAPI do
|
4
4
|
let(:user) { Struct.new(:id).new(123) }
|
5
|
+
let(:device_id) { 'abcdef' }
|
5
6
|
|
6
7
|
describe '.track' do
|
7
8
|
context 'with a single event' do
|
8
|
-
|
9
|
-
event
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
9
|
+
context 'with only user_id' do
|
10
|
+
it 'sends the event to Amplitude' do
|
11
|
+
event = AmplitudeAPI::Event.new(
|
12
|
+
user_id: 123,
|
13
|
+
event_type: 'clicked on sign up'
|
14
|
+
)
|
15
|
+
body = {
|
16
|
+
api_key: described_class.api_key,
|
17
|
+
event: JSON.generate([event.to_hash])
|
18
|
+
}
|
17
19
|
|
18
|
-
|
20
|
+
expect(Typhoeus).to receive(:post).with(AmplitudeAPI::TRACK_URI_STRING, body: body)
|
21
|
+
|
22
|
+
described_class.track(event)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
context 'with only device_id' do
|
26
|
+
it 'sends the event to Amplitude' do
|
27
|
+
event = AmplitudeAPI::Event.new(
|
28
|
+
device_id: device_id,
|
29
|
+
event_type: 'clicked on sign up'
|
30
|
+
)
|
31
|
+
body = {
|
32
|
+
api_key: described_class.api_key,
|
33
|
+
event: JSON.generate([event.to_hash])
|
34
|
+
}
|
35
|
+
|
36
|
+
expect(Typhoeus).to receive(:post).with(AmplitudeAPI::TRACK_URI_STRING, body: body)
|
19
37
|
|
20
|
-
|
38
|
+
described_class.track(event)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
context 'with both user_id and device_id' do
|
42
|
+
it 'sends the event to Amplitude' do
|
43
|
+
event = AmplitudeAPI::Event.new(
|
44
|
+
user_id: 123,
|
45
|
+
device_id: device_id,
|
46
|
+
event_type: 'clicked on sign up'
|
47
|
+
)
|
48
|
+
body = {
|
49
|
+
api_key: described_class.api_key,
|
50
|
+
event: JSON.generate([event.to_hash])
|
51
|
+
}
|
52
|
+
|
53
|
+
expect(Typhoeus).to receive(:post).with(AmplitudeAPI::TRACK_URI_STRING, body: body)
|
54
|
+
|
55
|
+
described_class.track(event)
|
56
|
+
end
|
21
57
|
end
|
22
58
|
end
|
23
59
|
|
@@ -45,22 +81,63 @@ describe AmplitudeAPI do
|
|
45
81
|
|
46
82
|
describe '.identify' do
|
47
83
|
context 'with a single identification' do
|
48
|
-
|
49
|
-
identification
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
84
|
+
context 'with only user_id' do
|
85
|
+
it 'sends the identification to Amplitude' do
|
86
|
+
identification = AmplitudeAPI::Identification.new(
|
87
|
+
user_id: 123,
|
88
|
+
user_properties: {
|
89
|
+
first_name: 'John',
|
90
|
+
last_name: 'Doe'
|
91
|
+
}
|
92
|
+
)
|
93
|
+
body = {
|
94
|
+
api_key: described_class.api_key,
|
95
|
+
identification: JSON.generate([identification.to_hash])
|
54
96
|
}
|
55
|
-
)
|
56
|
-
body = {
|
57
|
-
api_key: described_class.api_key,
|
58
|
-
identification: JSON.generate([identification.to_hash])
|
59
|
-
}
|
60
97
|
|
61
|
-
|
98
|
+
expect(Typhoeus).to receive(:post).with(AmplitudeAPI::IDENTIFY_URI_STRING, body: body)
|
99
|
+
|
100
|
+
described_class.identify(identification)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
context 'with only device_id' do
|
104
|
+
it 'sends the identification to Amplitude' do
|
105
|
+
identification = AmplitudeAPI::Identification.new(
|
106
|
+
device_id: device_id,
|
107
|
+
user_properties: {
|
108
|
+
first_name: 'John',
|
109
|
+
last_name: 'Doe'
|
110
|
+
}
|
111
|
+
)
|
112
|
+
body = {
|
113
|
+
api_key: described_class.api_key,
|
114
|
+
identification: JSON.generate([identification.to_hash])
|
115
|
+
}
|
116
|
+
|
117
|
+
expect(Typhoeus).to receive(:post).with(AmplitudeAPI::IDENTIFY_URI_STRING, body: body)
|
118
|
+
|
119
|
+
described_class.identify(identification)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
context 'with both user_id and device_id' do
|
123
|
+
it 'sends the identification to Amplitude' do
|
124
|
+
identification = AmplitudeAPI::Identification.new(
|
125
|
+
user_id: 123,
|
126
|
+
device_id: device_id,
|
127
|
+
user_properties: {
|
128
|
+
first_name: 'John',
|
129
|
+
last_name: 'Doe'
|
130
|
+
}
|
131
|
+
)
|
132
|
+
body = {
|
133
|
+
api_key: described_class.api_key,
|
134
|
+
identification: JSON.generate([identification.to_hash])
|
135
|
+
}
|
136
|
+
|
137
|
+
expect(Typhoeus).to receive(:post).with(AmplitudeAPI::IDENTIFY_URI_STRING, body: body)
|
62
138
|
|
63
|
-
|
139
|
+
described_class.identify(identification)
|
140
|
+
end
|
64
141
|
end
|
65
142
|
end
|
66
143
|
|
@@ -74,7 +151,7 @@ describe AmplitudeAPI do
|
|
74
151
|
}
|
75
152
|
)
|
76
153
|
identification2 = AmplitudeAPI::Identification.new(
|
77
|
-
|
154
|
+
device_id: 456,
|
78
155
|
user_properties: {
|
79
156
|
first_name: 'John',
|
80
157
|
last_name: 'Doe'
|
@@ -121,82 +198,120 @@ describe AmplitudeAPI do
|
|
121
198
|
ip: '8.8.8.8'
|
122
199
|
)
|
123
200
|
end
|
124
|
-
|
125
|
-
|
126
|
-
describe '.send_event' do
|
127
|
-
it 'sends an event to AmplitudeAPI' do
|
201
|
+
it 'initializes event with parameter including device_id' do
|
128
202
|
event = AmplitudeAPI::Event.new(
|
129
|
-
user_id:
|
203
|
+
user_id: 123,
|
204
|
+
device_id: 'abc',
|
130
205
|
event_type: 'test_event',
|
131
|
-
event_properties: {
|
206
|
+
event_properties: {
|
207
|
+
test_property: 1
|
208
|
+
},
|
209
|
+
ip: '8.8.8.8'
|
210
|
+
)
|
211
|
+
expect(event.to_hash).to eq(
|
212
|
+
event_type: 'test_event',
|
213
|
+
user_id: 123,
|
214
|
+
device_id: 'abc',
|
215
|
+
event_properties: { test_property: 1 },
|
216
|
+
user_properties: {},
|
217
|
+
ip: '8.8.8.8'
|
132
218
|
)
|
133
|
-
expect(described_class).to receive(:track).with(event)
|
134
|
-
|
135
|
-
described_class.send_event('test_event', user, event_properties: { test_property: 1 })
|
136
219
|
end
|
220
|
+
end
|
137
221
|
|
138
|
-
|
139
|
-
|
222
|
+
describe '.send_event' do
|
223
|
+
context 'with only user_id' do
|
224
|
+
it 'sends an event to AmplitudeAPI' do
|
140
225
|
event = AmplitudeAPI::Event.new(
|
141
|
-
user_id:
|
226
|
+
user_id: user,
|
142
227
|
event_type: 'test_event',
|
143
228
|
event_properties: { test_property: 1 }
|
144
229
|
)
|
145
230
|
expect(described_class).to receive(:track).with(event)
|
146
231
|
|
147
|
-
described_class.send_event('test_event', nil, event_properties: { test_property: 1 })
|
232
|
+
described_class.send_event('test_event', user, nil, event_properties: { test_property: 1 })
|
148
233
|
end
|
149
|
-
end
|
150
234
|
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
235
|
+
context 'the user is nil' do
|
236
|
+
it 'sends an event with the no account user' do
|
237
|
+
event = AmplitudeAPI::Event.new(
|
238
|
+
user_id: nil,
|
239
|
+
event_type: 'test_event',
|
240
|
+
event_properties: { test_property: 1 }
|
241
|
+
)
|
242
|
+
expect(described_class).to receive(:track).with(event)
|
159
243
|
|
160
|
-
|
244
|
+
described_class.send_event('test_event', nil, nil, event_properties: { test_property: 1 })
|
245
|
+
end
|
161
246
|
end
|
162
247
|
|
163
|
-
|
164
|
-
event
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
248
|
+
context 'the user is a user_id' do
|
249
|
+
it 'sends an event to AmplitudeAPI' do
|
250
|
+
event = AmplitudeAPI::Event.new(
|
251
|
+
user_id: 123,
|
252
|
+
event_type: 'test_event',
|
253
|
+
event_properties: { test_property: 1 }
|
254
|
+
)
|
255
|
+
expect(described_class).to receive(:track).with(event)
|
171
256
|
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
257
|
+
described_class.send_event('test_event', user.id, nil, event_properties: { test_property: 1 })
|
258
|
+
end
|
259
|
+
|
260
|
+
it 'sends arbitrary user_properties to AmplitudeAPI' do
|
261
|
+
event = AmplitudeAPI::Event.new(
|
262
|
+
user_id: 123,
|
263
|
+
event_type: 'test_event',
|
264
|
+
event_properties: { test_property: 1 },
|
265
|
+
user_properties: { test_user_property: 'abc' }
|
266
|
+
)
|
267
|
+
expect(described_class).to receive(:track).with(event)
|
268
|
+
|
269
|
+
described_class.send_event(
|
270
|
+
'test_event',
|
271
|
+
user.id,
|
272
|
+
nil,
|
273
|
+
event_properties: { test_property: 1 },
|
274
|
+
user_properties: { test_user_property: 'abc' }
|
275
|
+
)
|
276
|
+
end
|
178
277
|
end
|
179
278
|
end
|
180
|
-
|
279
|
+
context 'with device_id' do
|
280
|
+
context 'the user is not nil' do
|
281
|
+
it 'sends an event to AmplitudeAPI' do
|
282
|
+
event = AmplitudeAPI::Event.new(
|
283
|
+
user_id: user,
|
284
|
+
device_id: device_id,
|
285
|
+
event_type: 'test_event',
|
286
|
+
event_properties: { test_property: 1 }
|
287
|
+
)
|
288
|
+
expect(described_class).to receive(:track).with(event)
|
181
289
|
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
290
|
+
described_class.send_event('test_event', user, device_id, event_properties: { test_property: 1 })
|
291
|
+
end
|
292
|
+
end
|
293
|
+
|
294
|
+
context 'the user is nil' do
|
295
|
+
it 'sends an event with the no account user' do
|
296
|
+
event = AmplitudeAPI::Event.new(
|
297
|
+
user_id: nil,
|
298
|
+
device_id: device_id,
|
299
|
+
event_type: 'test_event',
|
300
|
+
event_properties: { test_property: 1 }
|
301
|
+
)
|
302
|
+
expect(described_class).to receive(:track).with(event)
|
192
303
|
|
193
|
-
|
304
|
+
described_class.send_event('test_event', nil, device_id, event_properties: { test_property: 1 })
|
305
|
+
end
|
306
|
+
end
|
194
307
|
end
|
308
|
+
end
|
195
309
|
|
196
|
-
|
197
|
-
|
310
|
+
describe '.send_identify' do
|
311
|
+
context 'with no device_id' do
|
312
|
+
it 'sends an identify to AmplitudeAPI' do
|
198
313
|
identification = AmplitudeAPI::Identification.new(
|
199
|
-
user_id:
|
314
|
+
user_id: user,
|
200
315
|
user_properties: {
|
201
316
|
first_name: 'John',
|
202
317
|
last_name: 'Doe'
|
@@ -204,14 +319,44 @@ describe AmplitudeAPI do
|
|
204
319
|
)
|
205
320
|
expect(described_class).to receive(:identify).with(identification)
|
206
321
|
|
207
|
-
described_class.send_identify(nil, first_name: 'John', last_name: 'Doe')
|
322
|
+
described_class.send_identify(user, nil, first_name: 'John', last_name: 'Doe')
|
323
|
+
end
|
324
|
+
|
325
|
+
context 'the user is nil' do
|
326
|
+
it 'sends an identify with the no account user' do
|
327
|
+
identification = AmplitudeAPI::Identification.new(
|
328
|
+
user_id: nil,
|
329
|
+
user_properties: {
|
330
|
+
first_name: 'John',
|
331
|
+
last_name: 'Doe'
|
332
|
+
}
|
333
|
+
)
|
334
|
+
expect(described_class).to receive(:identify).with(identification)
|
335
|
+
|
336
|
+
described_class.send_identify(nil, nil, first_name: 'John', last_name: 'Doe')
|
337
|
+
end
|
208
338
|
end
|
209
|
-
end
|
210
339
|
|
211
|
-
|
340
|
+
context 'the user is a user_id' do
|
341
|
+
it 'sends an identify to AmplitudeAPI' do
|
342
|
+
identification = AmplitudeAPI::Identification.new(
|
343
|
+
user_id: 123,
|
344
|
+
user_properties: {
|
345
|
+
first_name: 'John',
|
346
|
+
last_name: 'Doe'
|
347
|
+
}
|
348
|
+
)
|
349
|
+
expect(described_class).to receive(:identify).with(identification)
|
350
|
+
|
351
|
+
described_class.send_identify(user.id, nil, first_name: 'John', last_name: 'Doe')
|
352
|
+
end
|
353
|
+
end
|
354
|
+
end
|
355
|
+
context 'with a device_id' do
|
212
356
|
it 'sends an identify to AmplitudeAPI' do
|
213
357
|
identification = AmplitudeAPI::Identification.new(
|
214
|
-
user_id:
|
358
|
+
user_id: user,
|
359
|
+
device_id: 'abc',
|
215
360
|
user_properties: {
|
216
361
|
first_name: 'John',
|
217
362
|
last_name: 'Doe'
|
@@ -219,7 +364,7 @@ describe AmplitudeAPI do
|
|
219
364
|
)
|
220
365
|
expect(described_class).to receive(:identify).with(identification)
|
221
366
|
|
222
|
-
described_class.send_identify(user
|
367
|
+
described_class.send_identify(user, 'abc', first_name: 'John', last_name: 'Doe')
|
223
368
|
end
|
224
369
|
end
|
225
370
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: amplitude-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Rakoczy
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-09-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -125,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
125
125
|
version: '0'
|
126
126
|
requirements: []
|
127
127
|
rubyforge_project:
|
128
|
-
rubygems_version: 2.
|
128
|
+
rubygems_version: 2.6.6
|
129
129
|
signing_key:
|
130
130
|
specification_version: 4
|
131
131
|
summary: Send events to the Amplitude API
|