amplitude-api 0.0.8 → 0.0.9
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/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
|