amplitude-api 0.3.0 → 0.3.1
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/Changelog.md +5 -1
- data/lib/amplitude_api.rb +5 -2
- data/lib/amplitude_api/config.rb +2 -1
- data/lib/amplitude_api/event.rb +1 -0
- data/lib/amplitude_api/version.rb +1 -1
- data/readme.md +31 -0
- data/spec/lib/amplitude_api/event_spec.rb +6 -0
- data/spec/lib/amplitude_api_spec.rb +50 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ccae25c2fa30d5c9f6172ed99c802f47022495d32e444a101ccfc230352111f4
|
4
|
+
data.tar.gz: '08392b43958061be04edb9b5df142f930d096be402c8a2f0e31697690df6c584'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 701706508efb89ff8adb3ea18e063500c1e3bf83fa89c07f1fe571177d16c7856a3d5dfdc7b4f4927b22fc811a94d7b8a02c318cfac3f7b040a62eb61a5effdf
|
7
|
+
data.tar.gz: 1b24d8ab6ffda5757549867550ade78e9f5c1cfcdf2aaf149041e2a4e1822a6e84aa06afd2b22ee006f668d54c09d8b8f600c72f5adccf627d1c4a1111e7eb44
|
data/Changelog.md
CHANGED
@@ -3,9 +3,13 @@
|
|
3
3
|
We would like to think our many [contributors](https://github.com/toothrot/amplitude-api/graphs/contributors) for
|
4
4
|
suggestions, ideas and improvements to Amplitude API.
|
5
5
|
|
6
|
+
## 0.3.1 (2021-02-23)
|
7
|
+
* Allows sending options to Amplitude
|
8
|
+
* Solves an error when accessing event properties not been created yet
|
9
|
+
|
6
10
|
## 0.3.0 (2021-02-22)
|
7
11
|
|
8
|
-
* Changes Typhoeus to Faraday to launch requests
|
12
|
+
* Changes Typhoeus to Faraday to launch requests (**breaking change**)
|
9
13
|
* Adds new API fields to Event
|
10
14
|
* Event can now include arbitrary properties, so it could be used if the API adds new ones.
|
11
15
|
|
data/lib/amplitude_api.rb
CHANGED
@@ -70,10 +70,13 @@ class AmplitudeAPI
|
|
70
70
|
def track_body(*events)
|
71
71
|
event_body = events.flatten.map(&:to_hash)
|
72
72
|
|
73
|
-
|
73
|
+
body = {
|
74
74
|
api_key: api_key,
|
75
75
|
events: event_body
|
76
|
-
|
76
|
+
}
|
77
|
+
body[:options] = config.options if config.options
|
78
|
+
|
79
|
+
JSON.generate(body)
|
77
80
|
end
|
78
81
|
|
79
82
|
# @overload track(event)
|
data/lib/amplitude_api/config.rb
CHANGED
@@ -8,7 +8,8 @@ class AmplitudeAPI
|
|
8
8
|
include Singleton
|
9
9
|
|
10
10
|
attr_accessor :api_key, :secret_key, :whitelist, :time_formatter,
|
11
|
-
:event_properties_formatter, :user_properties_formatter
|
11
|
+
:event_properties_formatter, :user_properties_formatter,
|
12
|
+
:options
|
12
13
|
|
13
14
|
def initialize
|
14
15
|
self.class.defaults.each { |k, v| send("#{k}=", v) }
|
data/lib/amplitude_api/event.rb
CHANGED
data/readme.md
CHANGED
@@ -31,6 +31,37 @@ event = AmplitudeAPI::Event.new({
|
|
31
31
|
AmplitudeAPI.track(event)
|
32
32
|
```
|
33
33
|
|
34
|
+
You can track multiple events with a single call, with the only limit of the payload
|
35
|
+
size imposed by Amplitude:
|
36
|
+
|
37
|
+
```ruby
|
38
|
+
event_1 = AmplitudeAPI::Event.new(...)
|
39
|
+
event_2 = AmplitudeAPI::Event.new(...)
|
40
|
+
|
41
|
+
AmplitudeAPI.track(event_1, event_2)
|
42
|
+
```
|
43
|
+
|
44
|
+
```ruby
|
45
|
+
events = [event_1, event_2]
|
46
|
+
AmplitudeAPI.track(*events)
|
47
|
+
```
|
48
|
+
|
49
|
+
In case you use an integer as the time, it is expected to be in seconds. Values in
|
50
|
+
the time field will be converted to milliseconds using `->(time) { time ? time.to_i * 1_000 : nil }`
|
51
|
+
You can change this behaviour and use your custom formatter. For example, in case
|
52
|
+
you wanted to use milliseconds instead of seconds you could do this:
|
53
|
+
```ruby
|
54
|
+
AmplitudeAPI.config.time_formatter = ->(time) { time ? time.to_i : nil },
|
55
|
+
```
|
56
|
+
|
57
|
+
You can speficy track options in the config. The options will be applied to all subsequent requests:
|
58
|
+
|
59
|
+
```ruby
|
60
|
+
AmplitudeAPI.config.options = { min_id_length: 10 }
|
61
|
+
AmplitudeAPI.track(event)
|
62
|
+
```
|
63
|
+
|
64
|
+
|
34
65
|
## User Privacy APIs
|
35
66
|
|
36
67
|
The following code snippet will delete a user from amplitude
|
@@ -347,6 +347,12 @@ describe AmplitudeAPI::Event do
|
|
347
347
|
expect(event.respond_to?(:arbitrary_property=)).to be true
|
348
348
|
end
|
349
349
|
|
350
|
+
it "does not define property until assigned" do
|
351
|
+
expect {
|
352
|
+
event.undefined_property
|
353
|
+
}.to raise_error NoMethodError, /undefined_property/
|
354
|
+
end
|
355
|
+
|
350
356
|
it "do not accepts blocks when assigning values to create properties" do
|
351
357
|
expect do
|
352
358
|
event.arbitrary_property { puts "whatever" }
|
@@ -7,7 +7,32 @@ describe AmplitudeAPI do
|
|
7
7
|
let(:device_id) { "abcdef" }
|
8
8
|
|
9
9
|
describe ".track" do
|
10
|
+
before do
|
11
|
+
described_class.config.options = nil
|
12
|
+
end
|
13
|
+
|
10
14
|
context "with a single event" do
|
15
|
+
it "can send options" do
|
16
|
+
event = AmplitudeAPI::Event.new(
|
17
|
+
user_id: 123,
|
18
|
+
event_type: "clicked on sign up"
|
19
|
+
)
|
20
|
+
options = { min_id_length: 456 }
|
21
|
+
described_class.config.options = options
|
22
|
+
|
23
|
+
allow(Faraday).to receive(:post)
|
24
|
+
|
25
|
+
described_class.track(event)
|
26
|
+
|
27
|
+
headers = { "Content-Type" => "application/json" }
|
28
|
+
body = JSON.generate(
|
29
|
+
api_key: described_class.api_key,
|
30
|
+
events: [event.to_hash],
|
31
|
+
options: options
|
32
|
+
)
|
33
|
+
expect(Faraday).to have_received(:post).with(AmplitudeAPI::TRACK_URI_STRING, body, headers)
|
34
|
+
end
|
35
|
+
|
11
36
|
context "with only user_id" do
|
12
37
|
it "sends the event to Amplitude" do
|
13
38
|
event = AmplitudeAPI::Event.new(
|
@@ -65,6 +90,31 @@ describe AmplitudeAPI do
|
|
65
90
|
end
|
66
91
|
|
67
92
|
context "with multiple events" do
|
93
|
+
it "can send options" do
|
94
|
+
event = AmplitudeAPI::Event.new(
|
95
|
+
user_id: 123,
|
96
|
+
event_type: "clicked on sign up"
|
97
|
+
)
|
98
|
+
event2 = AmplitudeAPI::Event.new(
|
99
|
+
user_id: 456,
|
100
|
+
event_type: "liked a widget"
|
101
|
+
)
|
102
|
+
options = { min_id_length: 456 }
|
103
|
+
described_class.config.options = options
|
104
|
+
|
105
|
+
allow(Faraday).to receive(:post)
|
106
|
+
|
107
|
+
described_class.track([event, event2])
|
108
|
+
|
109
|
+
headers = { "Content-Type" => "application/json" }
|
110
|
+
body = JSON.generate(
|
111
|
+
api_key: described_class.api_key,
|
112
|
+
events: [event.to_hash, event2.to_hash],
|
113
|
+
options: options
|
114
|
+
)
|
115
|
+
expect(Faraday).to have_received(:post).with(AmplitudeAPI::TRACK_URI_STRING, body, headers)
|
116
|
+
end
|
117
|
+
|
68
118
|
it "sends all events in a single request" do
|
69
119
|
event = AmplitudeAPI::Event.new(
|
70
120
|
user_id: 123,
|
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.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Rakoczy
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-02-
|
11
|
+
date: 2021-02-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pry
|