trakio-ruby 0.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 +15 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE +202 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/lib/trakio.rb +163 -0
- data/lib/trakio/version.rb +3 -0
- data/spec/spec_helper.rb +19 -0
- data/spec/trakio/alias_spec.rb +100 -0
- data/spec/trakio/annotate_spec.rb +134 -0
- data/spec/trakio/class_methods_spec.rb +168 -0
- data/spec/trakio/indentify_spec.rb +85 -0
- data/spec/trakio/initialize_spec.rb +87 -0
- data/spec/trakio/instance_methods_spec.rb +110 -0
- data/spec/trakio/track_spec.rb +180 -0
- data/trakio-ruby.gemspec +29 -0
- metadata +168 -0
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Trakio do
|
4
|
+
|
5
|
+
subject { Trakio }
|
6
|
+
|
7
|
+
after {
|
8
|
+
Trakio.default_instance = nil
|
9
|
+
}
|
10
|
+
|
11
|
+
describe '.alias' do
|
12
|
+
|
13
|
+
context "when an array alias is provided" do
|
14
|
+
it "sends an array" do
|
15
|
+
stub = stub_request(:post, "https://api.trak.io/v1/alias").
|
16
|
+
with(:body => {
|
17
|
+
token: 'my_api_token',
|
18
|
+
data: {
|
19
|
+
distinct_id: 'user@example.com',
|
20
|
+
alias: [
|
21
|
+
'alias1@example.com',
|
22
|
+
],
|
23
|
+
}
|
24
|
+
}).to_return(:body => {
|
25
|
+
status: 'success',
|
26
|
+
trak_id: '1234567890',
|
27
|
+
distinct_ids: ['user@example.com', 'alias1@example.com'],
|
28
|
+
}.to_json)
|
29
|
+
|
30
|
+
trakio = Trakio.new 'my_api_token'
|
31
|
+
trakio.alias distinct_id: 'user@example.com', alias: ['alias1@example.com']
|
32
|
+
|
33
|
+
stub.should have_been_requested
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context "when a string alias is provided" do
|
38
|
+
it "sends a string" do
|
39
|
+
stub = stub_request(:post, "https://api.trak.io/v1/alias").
|
40
|
+
with(:body => {
|
41
|
+
token: 'my_api_token',
|
42
|
+
data: {
|
43
|
+
distinct_id: 'user@example.com',
|
44
|
+
alias: 'alias1@example.com',
|
45
|
+
}
|
46
|
+
}).to_return(:body => {
|
47
|
+
status: 'success',
|
48
|
+
trak_id: '1234567890',
|
49
|
+
distinct_ids: ['user@example.com', 'alias1@example.com'],
|
50
|
+
}.to_json)
|
51
|
+
|
52
|
+
trakio = Trakio.new 'my_api_token'
|
53
|
+
trakio.alias distinct_id: 'user@example.com', alias: 'alias1@example.com'
|
54
|
+
|
55
|
+
stub.should have_been_requested
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context "when no alias is provided" do
|
60
|
+
it "raises an error" do
|
61
|
+
trakio = Trakio.new 'my_api_token'
|
62
|
+
expect { trakio.alias distinct_id: 'user@example.com' }.to raise_error RuntimeError
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context "when no distinct_id is provided" do
|
67
|
+
|
68
|
+
context "when there is one set on the instance" do
|
69
|
+
it "sends a request" do
|
70
|
+
stub = stub_request(:post, "https://api.trak.io/v1/alias").
|
71
|
+
with(:body => {
|
72
|
+
token: 'my_api_token',
|
73
|
+
data: {
|
74
|
+
distinct_id: 'user@example.com',
|
75
|
+
alias: 'alias1@example.com',
|
76
|
+
}
|
77
|
+
}).to_return(:body => {
|
78
|
+
status: 'success',
|
79
|
+
trak_id: '1234567890',
|
80
|
+
distinct_ids: ['user@example.com', 'alias1@example.com'],
|
81
|
+
}.to_json)
|
82
|
+
|
83
|
+
trakio = Trakio.new 'my_api_token', distinct_id: 'user@example.com'
|
84
|
+
trakio.alias alias: 'alias1@example.com'
|
85
|
+
|
86
|
+
stub.should have_been_requested
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
context "when there is not one set on the instance" do
|
91
|
+
it "raises an error" do
|
92
|
+
trakio = Trakio.new 'my_api_token'
|
93
|
+
expect { trakio.alias alias: 'alias1@example.com' }.to raise_error RuntimeError
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Trakio do
|
4
|
+
|
5
|
+
subject { Trakio }
|
6
|
+
|
7
|
+
after {
|
8
|
+
Trakio.default_instance = nil
|
9
|
+
}
|
10
|
+
|
11
|
+
describe '.annotate' do
|
12
|
+
|
13
|
+
context "when an event is provided" do
|
14
|
+
|
15
|
+
context "when a channel is provided" do
|
16
|
+
it "should send a request with the channel" do
|
17
|
+
stub = stub_request(:post, "https://api.trak.io/v1/annotate").
|
18
|
+
with(:body => {
|
19
|
+
token: 'my_api_token',
|
20
|
+
data: {
|
21
|
+
event: 'event',
|
22
|
+
channel: 'channel',
|
23
|
+
properties: {},
|
24
|
+
}
|
25
|
+
}).to_return(:body => {
|
26
|
+
status: 'success',
|
27
|
+
trak_id: '1234567890',
|
28
|
+
}.to_json)
|
29
|
+
|
30
|
+
trakio = Trakio.new 'my_api_token'
|
31
|
+
trakio.annotate event: 'event', channel: 'channel'
|
32
|
+
|
33
|
+
stub.should have_been_requested
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context "when a channel isnt provided" do
|
38
|
+
context "when there is a channel set on the instance" do
|
39
|
+
it "should send a request with the channel" do
|
40
|
+
stub = stub_request(:post, "https://api.trak.io/v1/annotate").
|
41
|
+
with(:body => {
|
42
|
+
token: 'my_api_token',
|
43
|
+
data: {
|
44
|
+
event: 'event',
|
45
|
+
channel: 'channel',
|
46
|
+
properties: {},
|
47
|
+
}
|
48
|
+
}).to_return(:body => {
|
49
|
+
status: 'success',
|
50
|
+
trak_id: '1234567890',
|
51
|
+
}.to_json)
|
52
|
+
|
53
|
+
trakio = Trakio.new 'my_api_token', channel: 'channel'
|
54
|
+
trakio.annotate event: 'event'
|
55
|
+
|
56
|
+
stub.should have_been_requested
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context "when properties are provided" do
|
62
|
+
it "should send a request with the properties" do
|
63
|
+
stub = stub_request(:post, "https://api.trak.io/v1/annotate").
|
64
|
+
with(:body => {
|
65
|
+
token: 'my_api_token',
|
66
|
+
data: {
|
67
|
+
event: 'event',
|
68
|
+
properties: {
|
69
|
+
details: 'details',
|
70
|
+
},
|
71
|
+
}
|
72
|
+
}).to_return(:body => {
|
73
|
+
status: 'success',
|
74
|
+
trak_id: '1234567890',
|
75
|
+
}.to_json)
|
76
|
+
|
77
|
+
trakio = Trakio.new 'my_api_token'
|
78
|
+
trakio.annotate event: 'event', properties: { details: 'details' }
|
79
|
+
|
80
|
+
stub.should have_been_requested
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
context "when properties are not provided" do
|
85
|
+
it "should send a request with empty properties" do
|
86
|
+
stub = stub_request(:post, "https://api.trak.io/v1/annotate").
|
87
|
+
with(:body => {
|
88
|
+
token: 'my_api_token',
|
89
|
+
data: {
|
90
|
+
event: 'event',
|
91
|
+
properties: {},
|
92
|
+
}
|
93
|
+
}).to_return(:body => {
|
94
|
+
status: 'success',
|
95
|
+
trak_id: '1234567890',
|
96
|
+
}.to_json)
|
97
|
+
|
98
|
+
trakio = Trakio.new 'my_api_token'
|
99
|
+
trakio.annotate event: 'event'
|
100
|
+
|
101
|
+
stub.should have_been_requested
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
106
|
+
|
107
|
+
context "when an event is not provided" do
|
108
|
+
|
109
|
+
context "when a channel is provided" do
|
110
|
+
it "should raise an error" do
|
111
|
+
trakio = Trakio.new 'my_api_token'
|
112
|
+
expect { trakio.annotate channel: 'channel' }.to raise_error RuntimeError
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
context "when properties are provided" do
|
117
|
+
it "should raise an error" do
|
118
|
+
trakio = Trakio.new 'my_api_token'
|
119
|
+
expect { trakio.annotate properties: { name: 'tobie' } }.to raise_error RuntimeError
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
context "when no arguments are provided" do
|
124
|
+
it "should raise an error" do
|
125
|
+
trakio = Trakio.new 'my_api_token'
|
126
|
+
expect { trakio.annotate }.to raise_error ArgumentError
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
131
|
+
|
132
|
+
end
|
133
|
+
|
134
|
+
end
|
@@ -0,0 +1,168 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Trakio do
|
4
|
+
|
5
|
+
subject { Trakio }
|
6
|
+
|
7
|
+
after {
|
8
|
+
Trakio.default_instance = nil
|
9
|
+
}
|
10
|
+
|
11
|
+
describe '#default_instance' do
|
12
|
+
|
13
|
+
context "when a default instance hasn't been created" do
|
14
|
+
it "raises an exception" do
|
15
|
+
expect{ Trakio.default_instance }.to raise_error Trakio::Exceptions::Uninitiated
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context "when a default instance has already been created" do
|
20
|
+
it "returns that" do
|
21
|
+
Trakio.init 'my_api_token'
|
22
|
+
expect(Trakio.default_instance).to be_a Trakio
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '#init' do
|
29
|
+
|
30
|
+
context "when an API token is provided" do
|
31
|
+
|
32
|
+
it "creates a default Trakio::Interface" do
|
33
|
+
Trakio.init 'my_api_token'
|
34
|
+
end
|
35
|
+
|
36
|
+
context "when a distinct_id is provided" do
|
37
|
+
it "raises an exception" do
|
38
|
+
expect{
|
39
|
+
Trakio.init 'my_api_token', distinct_id: 'user@example.com'
|
40
|
+
}.to raise_error Trakio::Exceptions::NoDistinctIdForDefaultInstance
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context "when a channel is provided" do
|
45
|
+
it "sets the channel option" do
|
46
|
+
Trakio.init 'my_api_token', channel: 'my-channel'
|
47
|
+
expect(Trakio.channel).to eql 'my-channel'
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context "when a https is provided" do
|
52
|
+
it "sets https option" do
|
53
|
+
Trakio.init 'my_api_token', https: false
|
54
|
+
expect(Trakio.https).to be_false
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
context "when a https isn't provided" do
|
59
|
+
it "defaults to true" do
|
60
|
+
Trakio.init 'my_api_token'
|
61
|
+
expect(Trakio.https).to be_true
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context "when a host is provided" do
|
66
|
+
it "sets host option" do
|
67
|
+
Trakio.init 'my_api_token', host: 'lvh.me:3007'
|
68
|
+
expect(Trakio.host).to eql 'lvh.me:3007'
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
context "when a host isn't provided" do
|
73
|
+
it "defaults to api.trak.io/v1" do
|
74
|
+
Trakio.init 'my_api_token'
|
75
|
+
expect(Trakio.host).to eql 'api.trak.io/v1'
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
context "when an API token isn't provided" do
|
82
|
+
it "raises an exception" do
|
83
|
+
expect{ Trakio.init }.to raise_error Trakio::Exceptions::InvalidToken
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
describe '#track' do
|
90
|
+
it "calls track on the default Trakio instance" do
|
91
|
+
default_instance = double(Trakio)
|
92
|
+
|
93
|
+
Trakio.default_instance = default_instance
|
94
|
+
expect(Trakio.default_instance).to receive(:track)
|
95
|
+
|
96
|
+
Trakio.track distinct_id: 'tobie.warburton@gmail.com', event: 'test-event'
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe '#identify' do
|
101
|
+
it "calls identify on the default Trakio instance" do
|
102
|
+
default_instance = double(Trakio)
|
103
|
+
|
104
|
+
Trakio.default_instance = default_instance
|
105
|
+
expect(Trakio.default_instance).to receive(:identify)
|
106
|
+
|
107
|
+
Trakio.identify
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
describe '#alias' do
|
112
|
+
it "calls alias on the default Trakio instance" do
|
113
|
+
default_instance = double(Trakio)
|
114
|
+
|
115
|
+
Trakio.default_instance = default_instance
|
116
|
+
expect(Trakio.default_instance).to receive(:alias)
|
117
|
+
|
118
|
+
Trakio.alias
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe '#annotate' do
|
123
|
+
|
124
|
+
it "calls annotate on the default Trakio instance" do
|
125
|
+
default_instance = double(Trakio)
|
126
|
+
|
127
|
+
Trakio.default_instance = default_instance
|
128
|
+
expect(Trakio.default_instance).to receive(:annotate)
|
129
|
+
|
130
|
+
Trakio.annotate
|
131
|
+
end
|
132
|
+
|
133
|
+
end
|
134
|
+
|
135
|
+
describe '#page_view' do
|
136
|
+
|
137
|
+
it "calls page_view on the default Trakio instance" do
|
138
|
+
default_instance = double(Trakio)
|
139
|
+
|
140
|
+
Trakio.default_instance = default_instance
|
141
|
+
expect(Trakio.default_instance).to receive(:page_view)
|
142
|
+
|
143
|
+
Trakio.page_view
|
144
|
+
end
|
145
|
+
|
146
|
+
end
|
147
|
+
|
148
|
+
|
149
|
+
describe '#distinct_id' do
|
150
|
+
it "raise an error" do
|
151
|
+
expect{ Trakio.distinct_id }.to raise_error Trakio::Exceptions::NoDistinctIdForDefaultInstance
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
describe '#channel' do
|
156
|
+
|
157
|
+
it "calls channel on the default Trakio instance" do
|
158
|
+
default_instance = double(Trakio)
|
159
|
+
|
160
|
+
Trakio.default_instance = default_instance
|
161
|
+
expect(Trakio.default_instance).to receive(:channel)
|
162
|
+
|
163
|
+
Trakio.channel
|
164
|
+
end
|
165
|
+
|
166
|
+
end
|
167
|
+
|
168
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Trakio do
|
4
|
+
|
5
|
+
subject { Trakio }
|
6
|
+
|
7
|
+
after {
|
8
|
+
Trakio.default_instance = nil
|
9
|
+
}
|
10
|
+
|
11
|
+
describe '.identify' do
|
12
|
+
|
13
|
+
context "when a distinct_id is provided" do
|
14
|
+
context "when properties are provided" do
|
15
|
+
it "sends an identify request" do
|
16
|
+
stub = stub_request(:post, "https://api.trak.io/v1/identify").
|
17
|
+
with(:body => {
|
18
|
+
token: 'my_api_token',
|
19
|
+
data: {
|
20
|
+
distinct_id: 'user@example.com',
|
21
|
+
properties: {
|
22
|
+
name: 'Tobie',
|
23
|
+
},
|
24
|
+
}
|
25
|
+
}).to_return(:body => {
|
26
|
+
status: 'success',
|
27
|
+
trak_id: '1234567890',
|
28
|
+
distinct_ids: ['user@example.com'],
|
29
|
+
}.to_json)
|
30
|
+
|
31
|
+
trakio = Trakio.new 'my_api_token'
|
32
|
+
trakio.identify distinct_id: 'user@example.com', properties: { name: 'Tobie' }
|
33
|
+
|
34
|
+
stub.should have_been_requested
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context "when a distinct_id isn't provided but is set on instance" do
|
40
|
+
context "when properties are provided" do
|
41
|
+
it "sends an identify request" do
|
42
|
+
stub = stub_request(:post, "https://api.trak.io/v1/identify").
|
43
|
+
with(:body => {
|
44
|
+
token: 'my_api_token',
|
45
|
+
data: {
|
46
|
+
distinct_id: 'user@example.com',
|
47
|
+
properties: {
|
48
|
+
name: 'Tobie',
|
49
|
+
},
|
50
|
+
}
|
51
|
+
}).to_return(:body => {
|
52
|
+
status: 'success',
|
53
|
+
trak_id: '1234567890',
|
54
|
+
distinct_ids: ['user@example.com'],
|
55
|
+
}.to_json)
|
56
|
+
|
57
|
+
trakio = Trakio.new 'my_api_token', distinct_id: 'user@example.com'
|
58
|
+
trakio.identify properties: { name: 'Tobie' }
|
59
|
+
|
60
|
+
stub.should have_been_requested
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context "when a distinct_id isn't provided" do
|
66
|
+
|
67
|
+
context "when properties are provided" do
|
68
|
+
it "raises an error" do
|
69
|
+
trakio = Trakio.new 'my_api_token'
|
70
|
+
expect { trakio.identify properties: { name: 'Tobie' } }.to raise_error RuntimeError
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
context "when properties aren't provided" do
|
75
|
+
it "raises an error" do
|
76
|
+
trakio = Trakio.new 'my_api_token', distinct_id: 'user@example.com'
|
77
|
+
expect { trakio.identify }.to raise_error ArgumentError
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|