openpanel-sdk 0.2.6 → 0.2.8
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/README.md +82 -6
- data/lib/openpanel/sdk/tracker.rb +31 -0
- data/lib/openpanel/sdk/version.rb +1 -1
- 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: 16d0c70749e9b13369c48b6fce17861da507dfb98213a9c5caa9a408d7398ef9
|
|
4
|
+
data.tar.gz: a853ae76dae3f2b801c6841d8a949e558feeb2c5d0df391a92c80a0802f2b760
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5e86fcb48012bbefe587e9f5170bdd7d3509f6d84bf90dc2214a1a54b5975c7e0e9be7dc2527091ab8d29386b8f83acb75a23291b53ff40cbd1652527ccce2b6
|
|
7
|
+
data.tar.gz: 6418589ef60bf5716f5054db667a0af6fcc29dff087c9a86ae99da3a5ca997aa182bea4e5e428b1e34e39709eb7745d54aadbbfca2d3ac5199f1bd4d76614983
|
data/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Openpanel::SDK
|
|
2
2
|
|
|
3
|
-
OpenPanel SDK for Ruby
|
|
3
|
+
[OpenPanel](https://openpanel.dev/) SDK for Ruby
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
@@ -18,7 +18,7 @@ gem install openpanel-sdk
|
|
|
18
18
|
|
|
19
19
|
## Usage example
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
### Simple example
|
|
22
22
|
|
|
23
23
|
```ruby
|
|
24
24
|
tracker = OpenPanel::SDK::Tracker.new
|
|
@@ -32,15 +32,91 @@ tracker.increment_property identify_user, 'test_property', 1
|
|
|
32
32
|
tracker.decrement_property identify_user, 'test_property', 1
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
See [spec](spec) for more.
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
### Rails example
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
Now imagine you have a Rails app, you can add the following to your `application_controller.rb`:
|
|
40
|
+
|
|
41
|
+
```ruby
|
|
42
|
+
before_action :set_openpanel_tracker
|
|
43
|
+
|
|
44
|
+
protected
|
|
45
|
+
|
|
46
|
+
def set_openpanel_tracker
|
|
47
|
+
@openpanel_tracker = OpenPanel::SDK::Tracker.new({ env: Rails.env.to_s }, disabled: Rails.env.development?)
|
|
48
|
+
@openpanel_tracker.set_header "x-client-ip", request.ip
|
|
49
|
+
@openpanel_tracker.set_header "user-agent", request.user_agent
|
|
50
|
+
end
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
then you can use `@openpanel_tracker` in your controllers to track events:
|
|
54
|
+
|
|
55
|
+
```ruby
|
|
56
|
+
@openpanel_tracker.track 'test_event', payload: { name: 'test' }
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
or to identify users:
|
|
60
|
+
|
|
61
|
+
```ruby
|
|
62
|
+
def identify_user_from_app_user(user, properties: {})
|
|
63
|
+
iu = OpenPanel::SDK::IdentifyUser.new
|
|
64
|
+
iu.profile_id = user.id.to_s
|
|
65
|
+
iu.email = user.email
|
|
66
|
+
iu.first_name = user.first_name
|
|
67
|
+
iu.last_name = user.last_name
|
|
68
|
+
iu.properties = properties
|
|
69
|
+
|
|
70
|
+
iu
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
iu = identify_user_from_app_user current_user
|
|
74
|
+
response = @openpanel_tracker.identify iu
|
|
75
|
+
# Faraday::Response
|
|
76
|
+
``````
|
|
77
|
+
|
|
78
|
+
Don't forget to set your env vars in `.env` file:
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
OPENPANEL_TRACK_URL=https://api.openpanel.dev/track
|
|
82
|
+
OPENPANEL_CLIENT_ID=<YOUR_CLIENT_ID>
|
|
83
|
+
OPENPANEL_CLIENT_SECRET=<YOUR_CLIENT_SECRET>
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
as shown in [.env_sample](.env_sample)
|
|
87
|
+
|
|
88
|
+
### Filtering events
|
|
89
|
+
|
|
90
|
+
Filters are used to prevent sending events to OpenPanel in certain cases.
|
|
91
|
+
You can filter events by passing a `filter` lambda expression to the `track` method:
|
|
92
|
+
|
|
93
|
+
```ruby
|
|
94
|
+
filter = lambda { |payload|
|
|
95
|
+
true if payload[:name] == 'test'
|
|
96
|
+
}
|
|
97
|
+
response = tracker.track('test_event', payload: { name: 'test' }, filter: filter)
|
|
98
|
+
# response is nil
|
|
99
|
+
``````
|
|
100
|
+
|
|
101
|
+
### Revenue tracking
|
|
102
|
+
|
|
103
|
+
Revenue tracking is done easily:
|
|
104
|
+
|
|
105
|
+
```ruby
|
|
106
|
+
response = tracker.revenue user, 100, { currency: 'EUR' }
|
|
107
|
+
# Faraday::Response
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
If you need to add the device ID, you can fetch it from the SDK:
|
|
111
|
+
|
|
112
|
+
```ruby
|
|
113
|
+
device_id = tracker.device_id
|
|
114
|
+
# <Some-fancy-id>
|
|
115
|
+
``````
|
|
40
116
|
|
|
41
117
|
## Contributing
|
|
42
118
|
|
|
43
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
|
119
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/tstaetter/openpanel-sdk.
|
|
44
120
|
|
|
45
121
|
## License
|
|
46
122
|
|
|
@@ -89,6 +89,37 @@ module OpenPanel
|
|
|
89
89
|
send_request payload: payload
|
|
90
90
|
end
|
|
91
91
|
|
|
92
|
+
# Track revenue in OpenPanel
|
|
93
|
+
# @param user [OpenPanel::SDK::IdentifyUser] user to identify
|
|
94
|
+
# @param amount [Integer] amount of revenue
|
|
95
|
+
# @param properties [Hash] additional properties to track
|
|
96
|
+
def revenue(user, amount, properties = {})
|
|
97
|
+
payload = { name: "revenue", properties: { profileId: user.profile_id, revenue: amount }.merge(properties) }
|
|
98
|
+
payload = { type: TRACKING_TYPE_TRACK, payload: payload }
|
|
99
|
+
|
|
100
|
+
send_request payload: payload
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def fetch_device_id
|
|
104
|
+
return if @disabled
|
|
105
|
+
|
|
106
|
+
url = "#{ENV['OPENPANEL_TRACK_URL']}/device-id"
|
|
107
|
+
response = Faraday.get url, {}, @headers
|
|
108
|
+
|
|
109
|
+
case response.status
|
|
110
|
+
when 401
|
|
111
|
+
raise OpenPanel::SDK::OpenPanelError, 'Unauthorized'
|
|
112
|
+
when 429
|
|
113
|
+
raise OpenPanel::SDK::OpenPanelError, 'Too many requests'
|
|
114
|
+
when 500
|
|
115
|
+
raise OpenPanel::SDK::OpenPanelError, 'Internal server error'
|
|
116
|
+
else
|
|
117
|
+
JSON.parse(response.body, symbolize_names: true)[:deviceId]
|
|
118
|
+
end
|
|
119
|
+
rescue StandardError => e
|
|
120
|
+
raise OpenPanel::SDK::OpenPanelError, e.message
|
|
121
|
+
end
|
|
122
|
+
|
|
92
123
|
private
|
|
93
124
|
|
|
94
125
|
# Send request to OpenPanel API
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: openpanel-sdk
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.8
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Thomas Stätter
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2025-12-
|
|
11
|
+
date: 2025-12-04 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: faraday
|